谈谈地图中的道路绘制

GIS属于可视化领域。一所谓可视化技术是利用计算机图形学和图形处理技术,将数据转化成图形或者图像在屏幕上显示出来,并进行交互处理的理论、方法和技术。个人理解地图中也有几个关键点:

  • 原始数据可以是图像也可以是矢量数据,如我们底图是点、线、面等矢量数据,卫片、街景是图像数据。
  • 渲染即显示到屏幕上,现在各家手机端都是基于opengl,不论图形还是图像最终显示到屏幕都必须像素化(光栅化)。
  • 交互性 地图APP中分量最重的就是交互,背后隐藏的巨大的需求。

目前地图中各种Feature数据,楼块是真正三维的,不过只是一些多边形垂直拉出一定高度形成一个挤出体,但是没有贴图。GIS中绝大多数数据还是以二维为主,面数据绘制最简单,标注点数据在预处理时做重叠避让处理绘制时不会相互遮挡,只有线之间有遮挡和层次关系。那么苍白的2D道路数据如何描述现实世界中复杂的道路交错关系呢?尤其北京的桥最为出名,XX桥上的立交关系非常之重要。涉及下面两个基本技术:

1. 道路立交、平交关系表达

地图中路线用一个有宽度的多边形带表示,有背景描边和前景填充组成。

图中椭圆框为立交关系,蓝色框位置为平交关系。假设A级路重要度大于B级路。

立交关系比较简单:

B级路_border,B级路_fill;

A级路_border,A级路_fill

最终可实现A级路在B级路之上。

平交关系

丁字形路口两处平角关系绘制过程如下:

从左到右绘制顺序为:

A道路_border(灰色),

B道路_border(橙色);

A道路_fill(白色),

B_道路_fill(黄色)

最终A、B道路平交效果如第四个子图。

2. ZLevel立交数据

现实世界是3D的,地图是2D的,那么地图可以理解成现实世界的顶视图。顶视图的信息一定没有自由透视模式的信息多。不管道路立交关系有多少层,顶视图中获取的图像只能看到相交处处于最高层的道路。

ZLevel数据正是这么一份补丁数据,它关联了道路相交处于最高层的道路路段。如下图是定慧桥的卫星图:

它的ZLevel数据和路网如下图,黑色路线为道路数据,蓝色粗线为ZLevel数据。

最终道路绘制时候,先画路网。然后再绘制ZLevel数据。最终实现道路的立交层次的表示。

3. 各家地图道路绘制效果对比

左图是谷歌地图道路:立交关系与现实一致道路有点宽且没有箭头,“定慧桥”文字一直没出现,这么重要的标注。

右图是腾讯地图:立交关系与现实一致,箭头稍密,有定慧桥标注。

左图是百度地图道路:立交关系蓝色椭圆标注的地方不对,有箭头,有定慧桥标注。

右图是高德地图道路:没有立交关系都是平交,应该是没有使用ZLevel数据,有箭头,有定慧桥标注。

地图这东西,你越欣赏越懂得欣赏!

时间: 2024-11-09 02:56:41

谈谈地图中的道路绘制的相关文章

高德地图获取道路接口、并将道路绘制

目标 :需要通过路的名字,将道路在地图中绘制出. 查找路的信息 通过路名搜索路 http://restapi.amap.com/v3/road/roadname?key=yourkey&keywords=靖江路&city=022 参数名称 参数含义 key 高德API 申请的key keywords 路名称 city 城市citycode 下载地址见参考文献 通过路id搜索路 http://restapi.amap.com/v3/road/roadid?city=020&key=y

(UWP)通过编写算法实现在地图中的渐变路径

目前的一个App中需要实现这个需求,但是在UWP自带的Bing Map中,绘制的MapPolyline的StrokeColor的类型是Windows.UI.Color,也就是说一条MapPolyline只支持一种颜色,想要实现渐变是根本不可能的--但是我又不想说去拒绝视觉的需求,因为我觉得就算是系统提供的渐变画刷底层肯定也是通过相关的算法实现颜色渐变的,所以只要我们认真研究一下,最终一样可以达到我们想要的需求. 说个题外话,在这次的思路之前我还产生了其他的思路.当时是想在后台代码中实例化一个新的

在地图中调用显示FeatureLayer并进行render、popupTemplate、添加图例等相关内容的设置

ArcGIS Server发布完FeatureLayer后,就可以在自己的代码中调用并在地图上显示出来了. 一.代码框架 调用FeatureLayer,要在require开头引入"esri/layers/FeatureLayer"模块.例子使用底图采用智图公司提供的切片图层,更多内容请查看:ArcGIS JavaScript API4.8 底图选择的几种方案. 1 <html> 2 <head> 3 <meta charset="utf-8&qu

地球与地图思维导图绘制

地理这门科目可以让我们更好更快的认识祖国的大好河山,以及各个国家的形状以及排列位置,那对于地理我们想要深入了解一下要怎样操作办呢?下面是分享的地球与地图总结的思维导图模板,以及绘制该思维导图的操作方法介绍,希望对大家有所帮助. **绘制工具:迅捷画图 绘制方法:** 1.选择在线网站进行编辑使用,搜索迅捷画图进入到该网站,在绘制之前可以对该网站进行熟悉,之后点击首页面中的立即体验就可以开始编辑使用. 2.这里讲述的是思维导图所以在跳转到新建文件页面之后选择思维导图进行新建使用就可以. 3.新建的

Android中View的绘制过程 onMeasure方法简述

Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android framework将会处理绘制过程,Activity只需提供它的布局的根节点. 绘制过程从布局的根节点开始,从根节点开始测量和绘制整个layout tree. 每一个ViewGroup 负责要求它的每一个孩子被绘制,每一个View负责绘制自己. 因为整个树是按顺序遍历的,所以父节点会先被绘制,而兄弟节点会按照它们在树中出现的顺序被绘制. 绘制是一个两遍(two pass)的过程:一个mea

Android 中View的绘制机制源码分析 一

尊重原创: http://blog.csdn.net/yuanzeyao/article/details/46765113 差不多半年没有写博客了,一是因为工作比较忙,二是觉得没有什么内容值得写,三是因为自己越来越懒了吧,不过最近我对Android中View的绘制机制有了一些新的认识,所以想记录下来并分享给大家.在之后的几篇博客中,我会给大家分享如下的内容: 1.View中measure(),layout(),draw()函数执行过程分析,带领大家详细分析View的尺寸测量过程,位置计算,并最终

ZOJ 1406 POJ 1251 Jungle Roads 丛林中的道路,最小生成树,Kruskal算法

题目链接:ZOJ 1406 POJ 1251 Jungle Roads 丛林中的道路 Jungle Roads Time Limit: 2 Seconds      Memory Limit: 65536 KB The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was spent on extra roads between villages some ye

谈谈python 中__name__ = &#39;__main__&#39; 的作用

position:static(静态定位) 当position属性定义为static时,可以将元素定义为静态位置,所谓静态位置就是各个元素在HTML文档流中应有的位置 podisition定位问题.所以当没有定义position属性时,并不说明该元素没有自己的位置,它会遵循默认显示为静态位置,在静态定位状态下无法通过坐标值(top,left,right,bottom)来改变它的位置. position:absolute(绝对定位) 当position属性定义为absolute时,元素会脱离文档流

Android中使用ListView绘制自定义表格(2)

上回再写了<Android中使用ListView绘制自定义表格>后,很多人留言代码不全和没有数据样例.但因为项目原因,没法把源码全部贴上来.近两天,抽空简化了一下,做了一个例子. 效果图如 一.功能: 1.支持列合并 2.考虑了界面刷新优化 3.预留部分接口 4.支持左右滚动 1.枚举类:CellTypeEnum package csdn.danielinbiti.custometableview.item; public enum CellTypeEnum { STRING //字符 ,DI