ArcGIS 软件中路网数据的制作

news2025/1/16 2:48:03

内容导读

路网数据是进行网络分析的基础,它是建立网络数据集的数据来源。

本文我们以OSM路网数据为例,详细介绍OSM路网数据从下载,到数据处理,添加属性,完成符合网络分析的网络数据集的全部过程。

01

数据获取

比较全面的路网数据一般有两个渠道,一个是交通运输部门(会包含隧道、桥梁等等非公开数据,一般不会对外提供),一个是图商(有偿,脱密的路网或者导航数据)。

除此之外免费,并且能够在互联网上找到的公开的路网数据可以参考以下连接

https://zhuanlan.zhihu.com/p/493135621

但是国内数据都不太多,就连Esri自己提供的数据(https://www.arcgis.com/home/item.html?id=83535020ce154bd5a498957c159e3a99)其中的国内数据也很少,一般都只有高速和国道级别,时效性也都不太能保证,而且不少数据都没有名称等等基本属性。

使用上述链接中获取的数据,可以做世界范围、或者洲际、国家级别的相关分析。

另外我们还可以在自然资源部提供的全国地理信息资源目录服务系统:

https://www.webmap.cn/main.do?method=index

在该服务系统下载1:25万矢量地图数据,从中提取路网数据,这个系统中的数据包含名称、国标码、等级等等属性,信息准确,同时数据基本都是当年或者是前一年的,时效性上可以得到保证。在分析时,极大地节省了数据处理和准备的时间。

图1  全国地理信息资源目录服务系统数据格式

但是受到比例尺限制,提供的道路的等级一般都比较高。

所以这类数据更适合做城际之间,省际之间的成本矩阵、导航类分析等等,对成本的精度要求不是特别高的网络分析。

PS:ArcGIS Pro中还提供了对GTFS数据(谷歌通用公共交通信息数据标准)转换的工具。但是这个格式的数据公开少,国内几乎都是爱好者自己做的,不好获取到。

如果想要获取开源的城市内部的道路信息,更加推荐使用OpenStreetMap网站(以下简称OSM)的数据。OpenStreetMap网站提供免费开源、可编辑的地图服务,它允许用户自己上传采集到的数据,并提供数据下载。这些数据不仅包括兴趣点、水系、管线、铁路、境界,还包含了一些低等级的乡道、公园道路、步行道,与上述其他资源相比,道路信息和类型更加全面(不同城市的道路详尽程度不同)。

特别注意:OSM中国界线有问题,如果下载了OSM数据要用到国界线时,一定要甄别。

OSM又有很多的下载方式,可以参考:

https://blog.csdn.net/weixin_38233769/article/details/109755046

OSM中提供了直接下载shapefile格式的数据功能,shapefile是ArcGIS 系列软件原始支持的矢量数据格式。

经过比较,个人觉得下载pbf的速度会更快,包含的属性信息更多,可以借助QGIS软件将pbf格式转换到shapefile。

但是上述连接中提供的工具可能会遇到shapefile文件中文属性有乱码(可以通过修改ArcMap注册表修改),或者没有类似的符号化效果等等问题。

因为我们最终目的是要在ArcGIS 桌面软件中处理并分析路网数据。所以考虑使用插件ArcGIS Editor for OSM  10.X Desktop工具,以下简称OSM编辑器,这是个ArcMap的免费开源附加组件,专门用来下载、处理OSM数据的。

下载地址如下:

https://www.esri.com/en-us/arcgis/products/arcgis-editor-for-openstreetmap

这个工具有以下两个优势:

  • 自动转换OSM数据并将其存储在文件地理数据库GDB中。能执行各种各样的地理处理分析。

  • 支持ArcGIS for Desktop 10.3, 10.4, 10.5, 10.6, 10.7 or 10.8

    图2 OSM编辑器工具

    安装后,启动ArcMap,会在目录浏览窗口中的系统工具箱下看到一个“OpenStreetMap工具箱”。工具箱中会有多个工具,可以加载、编辑.osm文件和下载OSM数据,应用符号系统,可以将编辑更改回发到OSM,并根据OSM数据创建网络数据集。有关如何使用这些工具的信息,请参阅文档。

    图3 OpenStreetMap工具箱

    可以选择使用Download OSM Data或者Download,Extract and Symbolize OSM Data工具来下载数据并保存在GDB中。Download OSM Data工具下载的全类线要素都在一个要素类中,包含公路、铁路、水系、境界等等。

    Download,Extract and Symbolize OSM Data工具则可以按照要素类别直接分层显示并支持按照OSM Web地图风格进行符号化。同时支持将Tags属性,也就是一些补充说明信息放到单独的属性字段中(例如oneway\public_transport等等)这些字段在我们后续制作网络数据集时,会很有用。

    推荐使用Download,Extract and Symbolize OSM Data工具。

    需要注意

    1)工具运行之前,需要将后台关闭,在前台运行方便查看当前工具运行状态及错误信息。(地理处理工具中的地理处理选项)

    图4 关闭后台处理

    2)工具中将会限制下载的范围只能包括50000个数据节点

    所以使用工具的时候,还要看研究的城市的规模,例如一线城市可能50000个节点,就只能下载一个小范围,这样就需要多下载几次然后拼接。但是二三线城市中心城区可能一次下载就搞定了。

    下载过程中还需要符号化和格式转化,所以时间可能比较长。

    图5 Download,Extract and Symbolize OSM Data工具处理时长

     

    图6 下载后的数据在Arcmap中的效果

    02

    数据梳理

    数据下载完成后,在内容列表中会看到OSM GroupLayer图层组。

    图7 OSM GroupLayer图层组

    包括点、线和面图层组(本质上仍然是点、线、面三个要素类,将要素类使用定义查询的方式设置为图层组)。点图层组包括多种类型兴趣点。线包括管线、境界、道路、铁路、水系等等数据,面图层组则代表水域、空域、建筑等等。

    交通路网主要用到线图层组中的道路线和地铁,我们可以新建一个要素数据集(为后续的网络数据集做准备),将用到的几个要素类都导入进去。本示例中我们只用了Highway(Lines)。如果所在城市有地铁数据,还可以将Railway(Lines)中的subway导出。OSM数据默认是WGS 84坐标系。在做网络分析时,我们大部分都将计算其距离长度,一般都会用到公里或者米的单位,所以建议将数据投影变换到必要的投影坐标系。例如CGCS2000  6度或3度带投影,或者web墨卡托。

    然后再打开导入到新建数据集中道路图层并查看其字段。

    字段介绍

    道路图层的字段比较多,我们这里保留字段中有内容的,其他的直接删除。(遇到无法删除的情况,可以先转为shapefile)

    重点保留highway(道路类型)\OSM_name(道路名称)\OSM_oneway(是否单行)\ osm_bridge(立交桥)\OSM_lanes(车道数量)\max_speed(限速)\ osm_maxheight(限高)

    来重点看一下highway字段,字段中会有多个类型。

    图8 highway字段类型

    可以结合这个类型表格,理解当前的道路数据。可以考虑删除非必要的数据。假如这里我们要做的是基于车辆行驶的解决方案。那么步行街道、台阶踏步这类数据就可以直接删除。

    补充名称属性

    OSM中数据的属性都是不同用户提交上来的,如果我们后续在分析时,确实需要用到名称,可以结合手头资料对名称进行补充,或者可以给同类型的数据进行顺序编号重命名。

    给同类型的数据进行顺序编号重命名方法如下:

    1)首先选中osm_name为空且是highway的某一类数据

    图9 提取OSM中无名称数据

    2)使用Python代码,给选中的数据赋值

    代码如下:

    
    step=0
    def autoIncrement():
      global step,code
      pStart = 1 
      pInterval = 1
      if (step == 0): 
        step = pStart 
     else: 
        step = step + pInterval 
        code=str(step)
     return code

图10 顺序编号重命名

03

矢量化方向检查

检查路网数据的矢量化方向。观察地图视图中的数据,首先使用箭头居中符号渲染道路,显示路网数据的矢量化方向。

观察数据,会发现高等级的道路,比如primary、secondary这些数据,同一个段道路使用了两个线要素来表示,这两个线要素的方向正好相反。低等级的道路,则是使用一个线要素来表示。

这里我们需要检查一下高等级的道路矢量化方向与真正的车辆行驶的方向是否一致。

不一致的地方需要使用编辑工具,修改线的方向。

打开编辑器,双击需要翻转的线要素,右键选择翻转即可。

图11 翻转线方向

一般OSM中的数据这个问题不多。

04

连通性

ArcGIS中基于路网数据的分析都是依靠网络数据集来完成的。网络数据集由源要素组成。源要素包括网络边(也叫做边),交汇点和转弯三类数据。具体的介绍可以参考

https://ke.qq.com/course/5182451/13760697264444403关于网络数据集源数据设置的视频。

本例中我们只收集到了可以构建边要素的线数据。

为了构建网络数据集,我们还需要检查道路的连接方式,也就是连通性。

边要素的连通可以分为端点连通和节点连通。

端点是指线数据的起点和终点,任意节点则是指创建要素时所有的特征点。

如果设置了端点连通,则网络边只在线要素的端点处连通。它比较适合于构建交叉式的对象模型。如下图右图所示,东西道路和桥梁是连通的。南北道路和桥梁就是不连通的了。

图12 端点连通

如果设置了任意节点连通,线要素将在重合的节点部分拆分成为多个网络边要素。这种更适合于构建街道的数据,使得街道和其他的街道相交。如下图右图所示。

图13 任意节点连通

所以我们需要借助已有资料(立交桥、涵洞,转弯信息),依次检查道路的连通方式。在路网数据量比较大的情况下,为了减少工作量,我们可以:

1)先将所有的道路数据在相交处打断,形成端点连通的情况,可以使用高级编辑工具栏中的打断相交线工具。

图14 打断相交线

2)针对特殊道路中情况(立交桥等)将数据断开的合并。

3)另外,还需要考虑高程连通的情形。OSM道路数据本身没有带Z值属性,这里我们可以增加一个高程字段,用来表示高度级别。

这个属性来自立交桥、涵洞、隧道、过街天桥等等。我们可以借助已有的bridge等等字段并借助互联网地图中的立交桥效果来设置。

比如简单的立交桥:

图15 多层立交桥

这个立交桥共有三层,分别是东西向一层、南北向二层、东西向三层。可以分别赋予这三类要素的高程属性为0,1,2。

如果是复杂的立交桥,就需要结合立交桥的高度和汇入汇出方向判断其层级。

05

判断单行道

其中网络边要素是指路网数据中的线要素的两个方向,一个是沿着矢量化方向,一个是与矢量化方向相反的边要素,这两个边要素除了方向之外,还有可能其他属性不一致,例如通行的时间。

图16 边要素与线要素对应关系(同一位置)

在实际应用时,需要考虑几种情况。

1)实际获取到路网数据中的线要素等级比较低,使用一个线要素表示道路的双向。但是类似胡同这样的小的道路,可能本身就是单行的。也就是说线要素对应的一个边要素是无效的。

图17 单行道1

2)实际获取到路网数据中的线要素等级比较高,使用两个线要素表示道路的双向。例如高速路,使用两个线要素也就是4个边要素来表示一段路,显然线要素对应的一个边要素也是无效的。

图18 单行道2

等等类似的问题,遇到上述情况,我们首先需要判断获取到的路网数据中线要素是双向还是单向。其次是矢量化方向与实际单行方向一致还是矢量化方向与实际单行方向相反。

可以添加FT(From-To字段)。字段中属性分为三种。一种为NULL,也就是默认为空,表示线要素双向,第二种是YES,表明单行道与矢量化方向一致,第三种是No,表明单行道与矢量化方向相反。

OSM数据中的OSM_oneway字段,表示道路是否为单行道(内容为空或者yes),这里大部分的单行道与矢量化方向都是一致的。

06

添加其他属性字段

道路等级

网络数据集中还可以设置等级信息。等级是指分配给网络元素的次序或者是级别。在跨越大型网络求解分析时,使用等级能够提升分析效率计算。例如城际、省际之间的网络分析。

按照《1:10000(1:5000)基础地理信息地形要素数据规范》要求,道路可以分为国道、高速公路、快速、省道、县道、乡道、轨道交通等等(这里我们只考虑公路情况),可以使用规范中的道路类型来设置等级。网络数据集中的等级是一个整数字段。

所以需要将OSM数据中的类型与规范对应。

OSM数据的类型标准与规范差别较大,不太好对应,这里我们就简单的按照下列表格进行对照。

等级

道路类型

Type

1

高速公路

trunk、motorway

2

快速路/国道

primary

3

省道

secondary

4

县道

residential、service、tertiary

5

乡道

track

6

人行道

bridleway、footway、path、pedestrian

同样需要注意,Type属性信息并不准确,在完成了等级、道路类型以及type字段的对应之后,还需要结合互联网电子地图数据或者其他渠道,对数据进行检查,将道路类型有误的道路进行纠正。

时间成本

OSM数据中提供了maxspeed最大时速字段,我们可以直接使用道路长度shape_length/maxspeed 获得大致的通行时间。

如果没有maxspeed字段,我们也可以根据道路等级,获得常用的限速信息,再使用道路长度/限速信息也可以。

核心Python代码如下:


def traveltime(leixing,length):
    if (leixing=="高速"):
        return length/1000/120
    elif (leixing=="快速路"):
        return length/1000/80
    elif (leixing=="省道"):
        return length/1000/60
    elif (leixing=="县道"):
        return length/1000/40
    elif (leixing=="乡镇道路"):
        return length/1000/30
    elif (leixing=="人行道"):
        return length/1000/10

07

总结

1.数据来源五花八门,可能遇到的问题也不一样,大概的过程中这几步都完成之后,简单的网络分析就可以实现,并且保证一定的准确度。

2.数据准备阶段最好把数据都处理好,然后再创建网络数据集。

在网络数据集中也可以修改几何和属性,但是几何修改部分可能出现问题,所以尽量是保证处理好的数据备份,然后再构建网络数据集,如果出现问题,可以重新创建新的网络数据集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2250713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flink双流Join

在离线 Hive 中,我们经常会使用 Join 进行多表关联。那么在实时中我们应该如何实现两条流的 Join 呢?Flink DataStream API 为我们提供了3个算子来实现双流 join,分别是: join coGroup intervalJoin 下面我们分别详细看一下这…

【Python-Open3D学习笔记】005Mesh相关方法

TriangleMesh相关方法 文章目录 TriangleMesh相关方法1. 查看mesh三角形面信息2. 可视化三角形3. 上采样4. 计算mesh形成的面积和体积 1. 查看mesh三角形面信息 def view_hull_triangles(hull: o3d.geometry.TriangleMesh):"""查看mesh三角形面信息&#xff08…

【LeetCode热题100】优先级队列

这盘博客记录了关于优先级队列的几道题&#xff0c;包括最后一块石头的重量、数据流中的第K大元素、前K个高频单词、数据流的中位数。 class Solution { public:int lastStoneWeight(vector<int>& stones) {priority_queue<int> heap;for(auto s : stones) hea…

node.js基础学习-cheerio模块-简单小爬虫(五)

学习cheerio模块&#xff0c;简单做一个爬取图片网站的图片&#xff0c;并且将这些图片下载到本地指定的文件夹下&#xff0c;很多图片网站都有一些反爬取的机制&#xff0c;找的好几个都会报302错误&#xff0c;所以我找了一个小的图片网站&#xff0c;这个没有反爬取机制&…

技术创新与人才培养并重 软通动力子公司鸿湖万联亮相OpenHarmony人才生态大会

11月27日&#xff0c;由开放原子开源基金会指导&#xff0c;OpenHarmony项目群工作委员会主办的OpenHarmony人才生态大会2024在武汉隆重举办。软通动力子公司鸿湖万联作为OpenHarmony项目群A类捐赠人应邀出席。大会期间&#xff0c;鸿湖万联不仅深度参与了OpenHarmony人才生态年…

FFmpeg 推流给 FreeSWITCH

FFmpeg 推流&#xff0c;貌似不难&#xff0c;网上有很多资料, 接到一个任务&#xff0c;推流给 FreeSWITCH&#xff0c;最开始以为很容易&#xff0c; 实则不然&#xff0c;FreeSWITCH uuid_debug_media <uuid>&#xff0c; 一直没人任何反应 仔细一查&#xff0c;Fr…

彻底理解quadtree四叉树、Octree八叉树 —— 点云的空间划分的标准做法

1.参考文章&#xff1a; &#xff08;1&#xff09;https://www.zhihu.com/question/25111128 这里面的第一个回答&#xff0c;有一幅图&#xff1a; 只要理解的四叉树的构建&#xff0c;对于八叉树的构建原理类比方法完全一样&#xff1a;对于二维平面内的随机分布的这些点&…

【工具变量】上市公司企业数字化转型指数(甄红线版本,战略引领、技术驱动、环境支撑、数字化成果及应用)2011-2022年

一、测算方式&#xff1a;参考《经济研究》甄红线&#xff08;2023&#xff09;老师研究的做法&#xff0c;本文采用 &#xff23;&#xff33;&#xff2d;&#xff21;&#xff32; 数据库中国上市公司数字化转型研究数据库中企业数字化转型指数来衡量企业数字化转型水平。 数…

长短期记忆网络 (LSTM) 简介

文章目录 一、说明二、传统 RNN 的问题三、为什么梯度消失&#xff1f;四、长短期记忆网络简介五、忘记门六、Update Gate (Input Gate)七、Output Gate八、数学上的内存九、从 LSTM 到 Transformer十、总结 一、说明 机器学习取得进步的领域之一是自然语言处理。对于用于机器…

安卓悬浮窗应用外无法穿透事件问题

现象&#xff1a; 应用内悬浮窗如何设置了 WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE在自己应用内事件穿透正常&#xff0c;但到应用外就无法点击。 原因&#xff1a; 解决方法&#xff1a; layoutParams.alpha 0.8f …

linux minio安装

安装minio&#xff08;Centos&#xff09; 1. 查看服务器版本uname -a 2. 到minio官网下载对应的版本 官网地址&#xff1a;minio官网下载 根据上面查看的信息是x86_64系统所以我们下载linu-amd64 3. 上传到服务器 新建minioServer目录 上传至该目录下 赋权 chmod x mi…

JavaScript字符串

这张图片主要介绍了JavaScript中的字符串类型&#xff08;string&#xff09;。 字符串 1. 字符串的定义 在JavaScript中&#xff0c;通过单引号&#xff08;&#xff09;、双引号&#xff08;"&#xff09;或反引号&#xff08;&#xff09;包裹的数据都叫字符串。单引…

Linq中的投影运算 (C#):Select、SelectMany、Zip

投影是指将对象转换为一种新形式的操作&#xff0c;该形式通常只包含那些将随后使用的属性。 通过使用投影&#xff0c;您可以构造从每个对象生成的新类型。 可以投影属性&#xff0c;并对该属性执行数学函数。 还可以在不更改原始对象的情况下投影该对象。 1、Select 下面的…

RabbitMQ在手动消费的模式下设置失败重新投递策略

最近在写RabbitMQ的消费者&#xff0c;因为业务需求&#xff0c;希望失败后重试一定次数&#xff0c;超过之后就不处理了&#xff0c;或者放入死信队列。我这里就达到重试次数后就不处理了。本来以为很简单的&#xff0c;问了kimi&#xff0c;按它的方法配置之后&#xff0c;发…

Maven install java heap space

Maven install java heap space 打包报错 Maven install java heap space 解决&#xff1a; vm option: -Xms1024m -Xmx1024m如果 vm配置了&#xff0c;还是一样报错&#xff0c;就重新选择JRE看看是否正确&#xff0c;idea会默认自己的环境&#xff0c;导致设置vm无效&…

OpenCV_Code_LOG

孔洞填充 void fillHole(const Mat srcBw, Mat &dstBw) {Size m_Size srcBw.size();Mat TempMat::zeros(m_Size.height2,m_Size.width2,srcBw.type());//延展图像srcBw.copyTo(Temp(Range(1, m_Size.height 1), Range(1, m_Size.width 1)));cv::floodFill(Temp, Point(…

C7.5【x86汇编】底层分析范围for的执行过程

目录 1.反汇编代码 2.分析 1.栈区初始化 2.设置数组元素的值 3. 逐条分析范围for 1.arr的地址被放到[ebp-2Ch]处 2.[ebp-2Ch]指向的值被复制一份到[ebp-30h]处 3.eax暂存[ebp-2Ch]指向的值,加28h后存储到[ebp-34h]处 4.跳转指令 5.比较[ebp-30h]和[ebp-34h]指向的值,…

hue 4.11容器化部署,已结合Hive与Hadoop

配合《Hue 部署过程中的报错处理》食用更佳 官方配置说明页面&#xff1a; https://docs.gethue.com/administrator/configuration/connectors/ 官方配置hue.ini页面 https://github.com/cloudera/hue/blob/master/desktop/conf.dist/hue.ini docker部署 注意&#xff1a; …

51单片机快速入门之中断的应用 2024/11/23 串口中断

51单片机快速入门之中断的应用 基本函数: void T0(void) interrupt 1 using 1 { 这里放入中断后需要做的操作 } void T0(void)&#xff1a; 这是一个函数声明&#xff0c;表明函数 T0 不接受任何参数&#xff0c;并且不返回任何值。 interrupt 1&#xff1a; 这是关键字和参…