Arcpy与networkx:从shapefile文件创建图
networkx是python的扩展包,用于处理复杂网络结构,其自带有诸如最短路径算法、单源最短路径算法、简单通路算法等等算法,可以直接调用,为分析问题带来许多方便。
具体可以参见networkx的中文官方文档:
https://www.osgeo.cn/networkx/
Arcpy是ArcGIS Desktop自带的python包,可以自定义python脚本,对工作区的数据文件进行处理,以及实现一些toolbox工具箱中的功能;
官方说明文档:
https://desktop.arcgis.com/zh-cn/arcmap/latest/analyze/arcpy/what-is-arcpy-.htm
官方说明文档中有关于Arcpy具体如何使用的代码案例。
下面介绍环境搭配:
软件:ArcGIS Desktop 10.2(具体是ArcMap 10.2)
语言:ArcGIS Desktop 10.2 自带的python 2.7
python扩展包:networkx 2.2(networkx的版本要适配python版本)
使用pip install networkx命令安装networkx包;
需要注意的是,安装networkx包之前需要安装GDAL包,ArcGIS Destop自带的python 2.7版本已经停止维护,且自身不带有pip,可以根据以下参考文档安装python2.7对应的pip以及GDAL包:
ArcGIS 10.2.2自带Python 2.7.5 安装pip,并配置gdal和arcpy教程
(作者:jing_zhong)
在配置好所有环境后,根据线的shapefile文件构建无向图:
# -*- coding: UTF-8 -*-
import arcpy
import networkx as nx
import os
import math
import numpy as np
def getSegmentInfo(segments):
'''
Builds a dictionary for looking up endpoints of network segments (needed only because networkx graph identifies edges by nodes)
'''
if arcpy.Exists(segments):
cursor = arcpy.da.SearchCursor(segments, ["OBJECTID", "SHAPE@"