PostGIS 结合Openlayers以及Geoserver实现最短路径分析(一)
环境:
Win10
ArcMap10.4(用于数据处理)
postgresql9.4
postgis2.2.3
pgRouting2.3(postgresql插件)
##附上本文配套素材下载地址:https://download.csdn.net/download/guzicheng1990/11830419
说明:
在做网络分析中,最麻烦的莫过于数据的配合了。接口写对了,但是数据没做好还是查不出数据,让网络分析功能大打折扣。
网络分析也是gis众多分析功能中对数据要求最高的了,其中要建立好拓扑关系,点在线上、点在线节点上、点在线外等等都会出不同的结果。
这里先把功能写完,后续继续研究,继续填坑。
步骤:
1、在ArcMap中新建线图层,画如图网格
2、新增id字段,给id字段进行赋值:id = FID+1
#这里有个坑,后面shp文件用postgis自带的shapefile导入工具导入postgis时,主键FID会变成gid,并且gid会比FID大1
#这样在查看网络分析得到的结果时,可以利用id在arcmap中搜索了
3、用ArcMap中,打开Advanced Editing工具,用其Line Intersection功能,将线两两打断
4、线最终打断结果(为了逻辑清晰,我在线上显示了id的标注)
5、继续新增一个点图层,在每个断点处设置个点,并新增Id字段(暂时不赋值,留着后面用)
## Id字段在后面Postgis里建立完拓扑以后赋值(红色标识,与source和target有对应关系,表示线段的两个端点编号),最终成品如下
6、打开Postgis Shapefile导入工具,设置完数据库连接,选择Add File找到处理完的线图层,设置坐标系,将Options最后一项选中,最后执行Import!
7、如果导入时报错“Shapefile type: Arc PostGIS type: LINESTRING[2] We have a Multilinestring with 2 parts, can’t use -S switch!错误”,可以在ArcGIS中,把线打断。
数据管理工具→要素→要素转线(Data Management Tools-->Features-->Feature To Line)
8、导进Postgis后,这批第一步骤可以算告一段落,接下来的操作多数在Postgis中。
后续:
在后续项目中,遇到了一个情况:我有批ArcGIS数据已经完成,这批数据是ArcSDE导入的,但是SDE导入的数据,没有第六步检验是否有MULTI类型,导致后面pgRouting建拓扑时报错。
而且ArcSDE里主键是objectid,图形字段是shape;postgis导入工具导入主键是gid,图形字段是geom。