前段时间建筑系的同学找我帮忙完成一个解决类似选址问题的程序,包括前期数据准备及算法实现,总结记录如下:

一、程序需求:

  解决一个简单的问题:在校园的道路内设置站点,要求尽使用可能少的站点覆盖所有区域。

二、解决思路:

  因为站点需要设置在校园内的道路上,因此第一步需要获取校园的路网数据;其次,考虑从道路中分割出足够密集的点,作为站点设置的可行点(简称为可行点);

  为了量化覆盖范围同时方便解决问题,生成均匀的网格点于园区内,覆盖所有的网格点即认为覆盖了所有区域。

  确定每个可行点覆盖的网格点,这样问题就转化为找到最少数量的可行点,来覆盖所有的网格点;因此选址问题即转化为集合覆盖问题。

三、技术路线:

  1.数据准备:

    1)通过OpenStreeMap获取校园路网数据

    2)使用Arcgis筛选处理数据,包括:路网数据筛选、校园边界路网提取(用于后期圈定范围)

    3)将校园内的路网分割成点,作为站点设置可行点;生成均匀的网格点于园区内;(数据库实现)

  2.算法实现:

    1)确定每个可行点覆盖的网格点,以对象-集合形式存储。

    2)利用贪婪算法求解。(python实现)

 

四、具体步骤:

  数据准备:

  1.获取路网数据:访问https://www.openstreetmap.org/

I已知的选址成本的代码python_算法实现

 

 

     在导出界面 手动选择导出区域 或者 按默认导出视野范围内的数据 ,选定好区域后 点击导出按钮 导出文件,便可以获取格式为 osm 的数据。

  2.转换数据格式;

     osm格式格式数据在使用前需要转换为ArcGIS可用的格式,需要访问https://geoconverter.hsr.ch/

I已知的选址成本的代码python_数据_02

 

 

 

I已知的选址成本的代码python_数据_03

    导航栏选择 Vector File to... ,导入数据后选择图示数据格式,导出即可。

 

  3.通过ArcGIS处理数据: