ArcGIS 软件中路网数据的制作

内容导读

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

本文我们以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.数据准备阶段最好把数据都处理好,然后再创建网络数据集。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【0346】Postgres内核 Startup Process 通过 signal 与 postmaster 交互实现 (5)

1. Startup Process 进程 postmaster 初始化过程中, 在进入 ServerLoop() 函数之前,会先通过调用 StartChildProcess() 函数来开启辅助进程,这些进程的目的主要用来完成数据库的 XLOG 相关处理。 如: 核实 pg_wal 和 pg_wal/archive_status 文件是否存在Postgres先前是否发…

PYNQ 框架 - OV5640驱动 + Linux 驱动分析

目录 1. 简介 1.1 博文要点 1.2 V4L2 2. 极简 Char 驱动 2.1 源码 2.2 Makefile 2.3 加载驱动 2.4 设备文件 2.5 测试驱动程序 2.6 卸载驱动程序 2.7 自动创建设备文件 2.8 日志等级 3. 极简 V4L2 驱动 3.1 源码 3.2 Makefile 3.3 设备节点类型 3.4 测试 V4L2…

RNN详解及其实现

目录 概述为什么需要 RNN?RNN 理解及其简单实现RNN 完成文本分类任务RNN 存在的问题 概述 提及 RNN,绝大部分人都知道他是一个用于序列任务的神经网络,会提及他保存了时序信息,但是,为什么需要考虑时序的信息&#xf…

Redis开发03:常见的Redis命令

1.输入以下命令,启动redis。 sudo service redis-server start 如果你是直接安装在WSL的,搜索栏搜索Ubuntu或者点击左下角Windows图表找到U那一栏,直接打开Ubentu,输入账密后,输入“sudo service redis-server start”…

【webrtc】 mediasoup中m77的IntervalBudget及其在AlrDetector的应用

IntervalBudget 用于带宽控制和流量整形 mediasoup中m77 代码的IntervalBudget ,版本比较老IntervalBudget 在特定时间间隔内的比特预算管理,从而实现带宽控制和流量整形。 一。 pacedsender 执行周期: 下一次执行的时间的动态可变的 int64_t PacedSender::TimeUntilNextPr…

Docker for Everyone Plus——No Enough Privilege

直接告诉我们flag在/flag中,访问第一小题: sudo -l查看允许提权执行的命令: 发现有image load命令 题目指明了有rz命令,可以用ZMODEM接收文件,看到一些write up说可以用XShell、MobaXterm、Tabby Terminal等软件连接上…

SpringMVC工作原理【流程图+文字详解SpringMVC工作原理】

SpringMVC工作原理 前端控制器:DispactherServlet处理器映射器:HandlerMapping处理器适配器:HandlerAdapter处理器:Handler,视图解析器:ViewResolver视图:View 首先用户通过浏览器发起HTTP请求…

网络安全 社会工程学 敏感信息搜集 密码心理学攻击 密码字典生成

网络安全 社会工程学 敏感信息搜集 密码心理学攻击 理解社会工程学的概念掌握获取敏感信息的方法提高自我信息保护的意识和方法理解密码心理学的概念理解密码特征分析掌握黑客猜解密码的切入方法掌握如何提高密码强壮性 敏感信息搜集 「注」由于对实验环境的限制,…

【机器学习】机器学习的基本分类-监督学习-逻辑回归-对数似然损失函数(Log-Likelihood Loss Function)

对数似然损失函数(Log-Likelihood Loss Function) 对数似然损失函数是机器学习和统计学中广泛使用的一种损失函数,特别是在分类问题(例如逻辑回归、神经网络)中应用最为广泛。它基于最大似然估计原理,通过…

SQL基础入门 —— SQL概述

目录 1. 什么是SQL及其应用场景 SQL的应用场景 2. SQL数据库与NoSQL数据库的区别 2.1 数据模型 2.2 查询语言 2.3 扩展性 2.4 一致性与事务 2.5 使用场景 2.6 性能与扩展性 总结 3. 常见的SQL数据库管理系统(MySQL, PostgreSQL, SQLite等) 3.…

力扣--LCR 149.彩灯装饰记录I

题目 代码 /** Definition for a binary tree node. public class TreeNode { int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val val;this.left left;this.right ri…

Admin.NET框架使用宝塔面板部署步骤

文章目录 Admin.NET框架使用宝塔面板部署步骤🎁框架介绍部署步骤1.Centos7 部署宝塔面板2.部署Admin.NET后端3.部署前端Web4.访问前端页面 Admin.NET框架使用宝塔面板部署步骤 🎁框架介绍 Admin.NET 是基于 .NET6 (Furion/SqlSugar) 实现的通用权限开发…

软通动力携子公司鸿湖万联、软通教育助阵首届鸿蒙生态大会成功举办

11月23日中国深圳,首届鸿蒙生态大会上,软通动力及软通动力子公司鸿湖万联作为全球智慧物联网联盟(GIIC)理事单位、鸿蒙生态服务(深圳)有限公司战略合作伙伴,联合软通教育深度参与了大会多项重磅…

利用若依代码生成器实现课程管理模块开发

目录 前言1. 环境准备1.1 数据库表设计与导入 2. 使用若依代码生成器生成模块代码2.1 导入数据库表2.2 配置生成规则2.2.1 基本信息配置2.2.2 字段信息配置2.2.3 生成信息配置 3. 下载与集成生成代码3.1 解压与集成3.2 启动项目并验证 4. 优化与扩展4.1 前端优化4.2 后端扩展 结…

MySQL Linux 离线安装

下载 进入官网,下载对应的需要MySQL版本,这里是历史版本。 官网 选择第一个MySQL Community Sever社区版,因为这个是免费的。 选择需要的对应版本: 安装 1.将下载好的安装包上传到服务器端 使用FinalShell 客户端连接服务器 …

Milvus 2.5:全文检索上线,标量过滤提速,易用性再突破!

01. 概览 我们很高兴为大家带来 Milvus 2.5 最新版本的介绍。 在 Milvus 2.5 里,最重要的一个更新是我们带来了“全新”的全文检索能力,之所以说“全新”主要是基于以下两点: 第一,对于全文检索基于的 BM25 算法,我们采…

think php处理 异步 url 请求 记录

1、需求 某网站 需要 AI生成音乐,生成mp3文件的时候需要等待,需要程序中实时监听mp3文件是否生成 2、用的开发框架 为php 3、文件结构 配置路由设置 Route::group(/music, function () {Route::post(/musicLyrics, AiMusic/musicLyrics);//Ai生成歌词流式…

27 基于51单片机的方向盘模拟系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机,采用两个MPX4115压力传感器作为两路压力到位开关电路, 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路; 一个按键控制LED灯的点亮与…

【亚马逊云科技】使用Amazon Lightsail搭建nginx服务

文章目录 前言一、为什么选择Amazon Lightsail二、创建账号与登录注册亚马逊账号登录控制台 三、创建Amazon Lightsail进入控制台创建实例登录服务器部署nginx服务关闭防火墙 总结 前言 不论是个人名片还是官方网站都离不开网站建设工作。计算机技术经历漫长的发展&#xff0c…

YOLOv8实战无人机视角目标检测

本文采用YOLOv8作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。YOLOv8以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对无人机目标数据集进行训练和优化,该数据集包含丰富的无人机目标图像…