前段时间学建筑的同学找我帮忙完成一个解决类似选址问题的程序,包括前期数据准备及算法实现,总结记录如下:
一、程序需求:
解决一个简单的问题:在校园的道路内设置站点,要求尽使用可能少的站点覆盖所有区域。
二、解决思路:
因为站点需要设置在校园内的道路上,因此第一步需要获取校园的路网数据;其次,考虑从道路中分割出足够密集的点,作为站点设置的可行点(简称为可行点);
为了量化覆盖范围同时方便解决问题,生成均匀的网格点于园区内,覆盖所有的网格点即认为覆盖了所有区域。
确定每个可行点覆盖的网格点,这样问题就转化为找到最少数量的可行点,来覆盖所有的网格点;因此选址问题即转化为集合覆盖问题。
三、技术路线:
1.数据准备:
1)通过OpenStreeMap获取校园路网数据
2)使用Arcgis筛选处理数据,包括:路网数据筛选、校园边界路网提取(用于后期圈定范围)
扫描二维码关注公众号,回复:
9312116 查看本文章
3)将校园内的路网分割成点,作为站点设置可行点;生成均匀的网格点于园区内;(数据库实现)
2.算法实现:
1)确定每个可行点覆盖的网格点,以对象-集合形式存储。
2)利用贪婪算法求解。(python实现)
(未完待续)