前言
似乎除了官方介绍的例子,我还没有在网上见过一篇介绍如何“使用自己的数据”创建“网络数据集”的文章。
有介绍几何网络的,有介绍如何用官方SanFrancisco数据的,也有直接用官方SanFrancisco的网络数据集进行应用的,就是没有告诉我怎么用自己的线数据生成网络数据集并应用的。
我靠网上的文章和官方的例子一点点摸了出来,虽然不是很完整的解说,不过确实能用于最基本的网络分析了。
【软件准备】
本人使用ArcGIS for Desktop 10.4下的ArcMap和ArcCatalog进行数据创建、编辑、分析。10.0-10.3版本均可按此法进行操作。
【数据准备】
无需进行下载任何的数据,我们只需要创建一个线要素。
1. 创建线要素
本例中使用mdb(个人地理数据库)进行分析,使用gdb(文件地理数据库)也一样。注意:shp文件不行。因为网络数据集必须基于要素数据集(FeatureDataset)创建。
创建一个空白的线要素如下:
命名随意。
使用WGS84_UTM_49N投影。需要注意的是,线数据必须在要素数据集内,否则无法构建网络数据集。
之后在ArcMap中把比例尺缩放到1:100000(适当调节即可,无所谓),随便画一些交叉的网络形状道路,如下图:
绘制6条折线,不添加任何自定义字段。这一步完成。
2. 线数据的打断
使用ArcGIS的工具“要素转线”,即数据管理工具/要素/要素转线。
输出要素类结果如下,原来6根折线变成了26根。
输出目录在线数据同级别即可:
说说这步的必要性:如果不在折线交点打断,交点处是不通的。
这步就是把折线按交点打断,注意是交点不是折点。
3. 打断线数据——添加时间字段
这一步很关键,是创建网络数据集的最最基本的条件,没有时间字段,网络数据集就无法添加成本属性。照做即可:
添加MyTime字段,其他名字也行,双精度。
对这个字段进行字段计算器如下:
时间 = 路程 / 速度。
这里,我选步行速度是0.7m每秒。再除以60是获取分钟数(因为在步行中,尺度多为分钟)。
结果如上,可能不太准确,但是作为演示的就无所谓了。
至此,数据准备完成,我们就用这个打断线数据进行创建网络数据集,最最基本的网络数据集(不是几何网络)。
【创建网络数据集】
1. 打开网络分析模块权限
有的同学可能网络分析不能用,是因为许可没打开,在ArcGIS Catalog和ArcMap菜单栏中打开自定义-扩展模块,把Network Analyst打勾即可。
2. 为网络数据集写一个名字
我们在Catalog里创建网络数据集,而且只能在Catalog里创建。在ArcMap的Catalog浮动窗口创建也是一样的,反正要在Catalog里创建。
对要素数据集右键点击,新建-网络数据集。
第一步当然是填名字,随便。按下一步。
2. 选择打断的线数据
这里选打断线的要素数据集。
然后下一步。
3. 通用转弯
我们知道道路都有交叉点,交叉点会有转弯的事情发生,但是我们作为最基础的建立我们不需要管那么多,使用官方给的通用转弯即可。
就是说直接点下一步。
4. 连通性
这里也别管,检查连通性是否是端点,是就确定下一步。
5. 高程
这一步,因为我们没有高程信息,选择无即可。在真实世界里道路肯定有高程,但是我们作为最小生成网络数据集,我们就不搞了,点无,然后下一步。
6. 【*重要】成本属性
这步就是关键了,照做即可,这里就要用到上面提到的数据准备中的东西。
如图,名称虽然说可以随意,但是一般都写为XXXTime,就是步行时间或者旅行时间什么的。要选择成本,单位是分钟,使用双精度。然后确定——还没完,选择刚创建好的DriveTime属性,点击赋值器。
(如果没有赋值,这个属性会出现黄色三角形感叹号的)
道路有时候去和回速度不一样,所以耗时不同。我们假定为理想状态,时间就一样好了。确定。
看,感叹号消失了。然后下一步。
7. 行驶方向
这一步我也摸不着头脑,有时候能选是,有时候不能,这里就先选否吧。
这一步就是为了网络分析时能用导航功能而准备的。
如果这一步能选是,第八步就不是完成了,而是选择导航的相关字段(选MyTime字段)。
8. 完成~
完成!
9. 构建网络数据集
上一步只是创建,还需要构建的。
构建这个功能在ArcToolBox也有,为了不增加复杂性就不说了。
一般上一步按下完成后先创建,然后会提示是否构建,选是即可。
还会提示是否加入地图(如果是在ArcMap的Catalog浮动窗创建的)
我们选否。待会儿自己添加。
这样就创建完成了,Junctions是交点,不必理会。
此时要素数据集中网络数据集和交点数据就是独立的了,删除原始线数据和打断线都不会有影响(我猜的,大家可以试试——别打我!)
【测试最佳路径求解(邮递员问题)】
直接把网络数据集拖进ArcMap窗口,提示是否把关联的数据添加进来,可以是也可以否,我选否减少视觉负担(如果电脑慢数据量大还是否,自己把点、线数据添加进来的好)
找到下图这个工具条,名字好像是Network Analyst。
如下图操作,创建网络分析路径图层。这步也可以在ArcToolBox里找到对应工具。
如下图:
好像没什么变化,我们开始创建途径点。用工具条上的创建位置工具,在图上打几个点。
打点如下:
然后点击工具条上的求解按钮
,就出现了途径点的最短路径。
——————
网络数据集最基本的创建就完成了,每一步都有详细的讲解和来龙去脉。这个是我钻了好久才懂的,网上的基本都是按照示例数据进行实验,自己创建数据的简直稀罕的要命。
网络分析是一个很强大的功能,其原理是Dijstra算法。
这例子只不过完成了最基本的最佳路径求解,就算旅行推销员问题,还没有添加障碍点,也没有导航功能,更没有丰富的转弯数据、面数据、点数据(其实网络数据集创建的时候可以选择点数据甚至多个点线数据的)、高程字段,完成的只是网络分析的冰山一角。
当然,在ArcEngine底层实现上更为复杂,我觉得还是自己动手用Dij算法自己写的好。在此不赘述。
ArcGIS这个文档做的不是很好,但是应用方面倒是很不错,有了网络数据集,就可以做很多事情,这里只是一个敲门砖,希望大家用好网络数据集,发现GIS与其他行业的千丝万缕的联系。
国际惯例:转载请声明。