基于ArcGIS的三维路网可视化
1. 引言
ArcGIS作为GIS的集大成者,对于三维可视化方面也有集成,参考自:3D 折线 (polyline) 要素—ArcMap | 文档 (arcgis.com),可以使用ArcGIS来构造与显示三维路网
使用ArcGIS创建3D polyline主要有两种方式:
- 新建 3D 线要素类:定义要素类的几何时选中坐标包括 Z 值复选框。
- 转换现有的 2D 数据:从高程表面获取高度值或使用现有要素属性
详细信息参考:3D 折线 (polyline) 要素—ArcMap | 文档 (arcgis.com)
此次笔者将高程数据写为2D数据的属性,再使用要素属性将2D polyline转化为3D polyline
2. 数据描述
笔者的数据示例如下所示:
38406174.4883,3151120.24725,332.794756
38406149.819,3151113.57996,336.863586
38400526.1848,3146348.79657,90.0
38400537.386,3146371.63206,109.182556
38406169.3211,3149468.75793,107.071533
38406135.9842,3149417.08638,107.745277
每一行为一个点,字段分别为X,Y,Z
每两个点构成一条线,比如1、2是一条线,3、4是一条线,以此类推
3. 构造二维路网
此处笔者使用Python编写脚本将csv数据转换为二维路网,并将高程写为属性数据z1和z2,并设置投影
代码基于Python3.6构建
使用到的库有:
- pyshp
- pyproj(需要2.0以上版本)
from pyproj import CRS
import shapefile
epsg_num = 4526
data_address = '../data/result/final_map_dem.shp'
dem_csv = '../data/tmp/output/final_map_with_dem.csv'
file = shapefile.Writer(data_address)
# 创建字段
file.field('id', 'N')
file.field('z1', 'F')
file.field('z2', 'F')
polyline = []
with open(dem_csv,'r') as points:
points = points.readlines()
i = 0
while (i < len(points)):
point1 = points[i].split(',')
point2 = points[i+1].split(',')
line = [[float(point1[0]),float(point1[1])],[float(point2[0]),float(point2[1])]]
polyline.append([line, float(point1[2][:-1]), float(point2[2][:-1])])
i=i+2
for i, traj in enumerate(polyline):
file.line([traj[0]])
file.record(i,traj[1], traj[2])
# 写入数据
file.close()
# 定义投影
crs = CRS.from_epsg(epsg_num)
wkt = crs.to_wkt('WKT1_ESRI')
# 写入投影
f = open(data_address.replace(".shp", ".prj"), 'w')
f.write(wkt)
f.close()
经过上述脚本,我们就得到了.shp文件
4. 生成三维路网
使用ArcMap,加载刚才生成的.shp文件

点击Feature To 3D By Attribute功能,设置参数即可得到3D路网:

5. 在ArcScene中可视化
在ArcScene中加载刚才生成的三维路网.shp文件,就可以看到生成的三维路网(底图为DEM图片):

另外,我们可以使用DEM数据设置地形:

由于DEM与路网重叠,我们将路网提高40米以展示:

设置一下合理的配色,即可得到一个不错的可视化效果:

基于ArcGIS的三维路网可视化的更多相关文章
- 基于ArcGIS for Server的服务部署分析 分类: ArcGIS for server 云计算 2015-07-26 21:28 11人阅读 评论(0) 收藏
谨以此纪念去年在学海争锋上的演讲. ---------------------------------------------------- 基于ArcGIS for Server的服务部署分析 -- ...
- 基于SceneControl的三维GIS开发
在ArcGIS体系中,三维开发包括两种:基于Scene的三维开发和基于Globe的三维开发. 由上图可以看出,两种开发的接口都很相似,掌握了Scene开发会相对容易的过渡到Globe开发中. 正如上图 ...
- Excel真的是三维地图可视化制作最好的选择吗?
随着数据在当下互联网快速发展下变的维度更广,数量更大.结构越来越复杂,人们想要更加清晰,快速的认知和理解一份数据,传统的二维平面图表已经不能满足需求,三维可视化技术越结合多媒体技术.网络技术以及三维镜 ...
- 基于ArcGIS Viewer for Flex开发的一款跨平台的应用程序
特点: 1.基于ArcGIS Viewer for Flex开发的一款跨平台的应用程序: -(IBAction) showTOC:(id)sender { if (_tocViewController ...
- Vis.js – 基于浏览器的动态 JavaScript 可视化库
Vis.js 是一个动态的,基于浏览器的可视化库.该库被设计为易于使用,能处理大量的动态数据.该库由以下几部分组成:一是数据集和数据视图,基于灵活的键/值数据集,可以添加,更新和删除项目,订阅数据集变 ...
- 基于ArcGIS JS API的在线专题地图实现
0 引言 专题地图是突出而深入的表示一种或几种要素或现象,即按照地图主题的要求,集中表示与主题有关内容的地图.专题地图的专题要素多种多样,分类方法也多种多样,根据专题地图表现数据的特点可分为定 ...
- 基于Eclipse的Go语言可视化开发环境
http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新: ...
- 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署
部署流程概述 在微软的iis服务器上部署基于ArcGIS Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...
- 基于ArcGIS的栅格图像平滑处理(转)
基于ArcGIS的栅格图像平滑处理 栅格数据获取的途径多种多样,造成了栅格数据质量的很大差异,一些质量较差的栅格数据存在大量“噪音”象元,即在表达同类型的地理要素时,出现个别像元值与周边像元不一致的情 ...
- 点聚合功能---基于ARCGIS RUNTIME SDK FOR ANDROID
一直不更新博客的原因,如果一定要找一个,那就是忙,或者说懒癌犯了. 基于ArcGIS RunTime SDK for Android的点聚合功能,本来是我之前做过的一个系统里面的一个小部分,今天抽出一 ...
随机推荐
- Qt多线程开发总览,既然用到了就记录一下
多线程 在LBD_VM_Intercom中使用的一个简单的实例 陶工给的dll需要进行异步操作才可以将视频画面附到窗体上,必须得在画面出现之后才可以附加画面,否则就有可能出现意外bug,所以需要在这个 ...
- MAUI新生4.6-主题设置LightTheme&DarkTheme
通过主题设置,可以在运行时更改应用的主题外观,比如切换亮色主题和暗黑主题.主题设置并没有新的知识点,基本的原理如下: 定义每个应用主题的ResourceDictionary,每个ResourceDic ...
- 分享项目中在用的asp.net下载业务的服务端基类(支持客户端显示下载百分比进度,支持并发数控制,支持限速)
/// <summary> /// 功能简介:asp.net的下载业务的服务端基类(支持客户端显示下载百分比进度,支持并发数控制,支持限速) /// 创建时间:2015-11-20 /// ...
- [编程基础] C++多线程入门4-数据共享和资源竞争
原始C++标准仅支持单线程编程.新的C++标准(称为C++11或C++0x)于2011年发布.在C++11中,引入了新的线程库.因此运行本文程序需要C++至少符合C++ 11标准. 4 数据共享和资源 ...
- MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(2)-Swagger框架集成
Swagger是什么? Swagger是一个规范且完整API文档管理框架,可以用于生成.描述和调用可视化的RESTful风格的 Web 服务.Swagger 的目标是对 REST API 定义一个标准 ...
- 一文教会你mock(Mockito和PowerMock双剑合璧)
作者:京东物流 杨建民 1.什么是Mock Mock有模仿.伪造的含义.Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法.mock工具使用 ...
- 题解P4474 王者之剑
双倍经验 简要题意 给你一个 \(n\times m\) 的网格,数字在格子里,你需要取出一些格子,使得任意两个格子之间没有公共边,输出格子中的数字和的最大值. \(1 \le n,m \le 100 ...
- [Codeforces Round #794 (Div. 2)] D. Linguistics
我是什么东西艹艹艹 <我离正解只差个sort> 首先,观察字符串,可以发现:若存在形似\(AA--BB\)或\(BB--AA\)等有两个相同的字符挨在一起的情况,则我们在它们中间放一块隔板 ...
- Python基本数据类型,用户交互,格式化输出,运算符,多种赋值方式,多种运算符
Python基本数据类型,用户交互,格式化输出,运算符,多种赋值方式,多种运算符 一.Python基本数据类型 1.回顾之前学过的基本数据类型 1.整型(整数) 应用场景:年级,班级人数,年份 代码实 ...
- MRS芯片状态错误排查方向
1. 如手里的 LINK 板子标注是 WCH-LINK,而不是 WCH-LINKE,那么与开发板连接线最好别超过 15CM 2. 芯片供电是否正常, VDDA 和 VDD 要正常供电 2.检查连线是否 ...