GeoJSON ,一个用于存储地理信息的数据格式。GoeJSON对象可以表示几何、特征或特征集合,支持:点、线、面、多点、多线、多面和几何集合。在基于平面地图,三维地图中都需要用到的一种数据类型。
由于这种格式在三维地图中的优秀属性,使用它我们不仅可以轻松实现地图类功能,更重要的是在3D效果展示上也具有不凡的表现。

GeoJSON数据结构图

念介绍:

  • GeoJSON是一种对各种地理数据结构进行编码的格式。
  • GeoJSON对象可以表示几何(Geometry)、特征(Feature)或者特征集合(FeatureCollection)。
  • GeoJSON支持下面几何类型:点(Point)、线(LineString)、面(Polygon)多点(MultiPoint)、多线(MultiLineString)、多面(MultiPolygon)和几何集合(GeometryCollection)。
  • GeoJSON里的特征包含一个几何对象和其他属性,特征集合表示一系列特征。

一个完整的GeoJSON数据结构可以称为一个对象。在GeoJSON里,对象由名/值对–也称作成员的集合组成。
了解了概念之后,我们对GeoJSON的神秘面纱更神秘了,它究竟可以做什么?上面我们提到,GeoJSON就是一个地理信息的数据结构,那么这个数据如何记录的?
接下来给大家详细介绍一下,GeoJSON的整个数据结构。

一个标准的GeoJSON结构:

{"type": "Feature","geometry": {"type": "Point","coordinates": [125.6, 10.1]},"properties": {"name": "Dinagat Islands"}
}

最外层:

  • type:"Feature"表示一个特征要素,"FeatureCollection"表示为特征要素的集合
  • geometry:存储该特征要素的实际形状描述
  • properties:存储该要素的属性

geometry:

  • type:存储要素类型(Point(点),LineString,Polygon,MultiPoint(多点),MultiLineString(多线)和MultiPolygon(多面))
  • coordinates:坐标(存储图形坐标)

GeoJSON的基础结构了解清楚,接下来就是如何在实际案例中用的。先看看其中的几个实现效果:
动画镜头

贴地点图

飞线

热力图

点图

立体面图

海量点图标

通过以上效果,可以看到基于地图实现非常多并且非常酷炫的显示效果。对于GeoJSON的应用领域有了新的了解。而这些特性是基于地图基础之上的。接下来就介绍一下从基础领域到显示领域的技术应用。
GeoJSON的基础应用:地图
GeoJSON的高级应用:webGL

技术应用解决方案

基于我们已经了解的基础知识,GeoJSON是由点线面组成,因此目前高德地图,百度地图等地图类软件也都推出了对应的api,用来解析GeoJSON。做的相对成熟。
这里就以高德地图为例,介绍一下技术人员基于高德地图应用GeoJSON的技术方案。
以上功能基于高德地图的Loca 数据可视化,是一个基于高德地图JS API 2.0的高性能地图数据可视化库。

高级可视化实现

Loca.GeoJSONSource:绑定geojson 格式的数据源,一个数据源可以给多个图层同时提供数据。一个geojson数据源可以同时拥有点、线、面的数据类型,每个图层绘制的时候会自动获取 合适的数据类型进行渲染。
显示效果:

示例代码:

<script>var map =  new AMap.Map('map', {zooms: [4, 8],zoom: 4.5,showLabel: false,viewMode: '3D',center: [105.425968, 35.882505],mapStyle: 'amap://styles/45311ae996a8bea0da10ad5151f72979',});var loca = new Loca.Container({map,opacity:0,});var geo = new Loca.GeoJSONSource({url: 'https://a.amap.com/Loca/static/loca-v2/demos/mock_data/cuisine.json',});var pl = window.pl = new Loca.PointLayer({zIndex: 10,blend: 'lighter',});var style = {radius: 3.5,unit: 'px',color: '#3C1FA8',borderWidth: 0,blurWidth: 3.5,}pl.setSource(geo);pl.setStyle(style);loca.add(pl);var dat = new Loca.Dat();dat.addLayer(pl);</script> 

通过示例代码可以看到:解析GeoJson,只需要调用 Loca. GeoJSONSource即可,是需要简单几句代码,就可以实现酷炫效果。已经大大降低了对于底层技术的了解。
接下来再看另一个示例:区域覆盖。

示例代码:

<script type="text/javascript">var map = new AMap.Map('container', {center: [107.943579, 30.131735],zoom: 7});ajax('../chongqing.json', function(err, geoJSON) {if (!err) {var geojson = new AMap.GeoJSON({geoJSON: geoJSON,getPolygon: function(geojson, lnglats) {return new AMap.Polygon({path: lnglats,fillOpacity: 1,    strokeColor: 'white',fillColor: 'red'});}});map.add(geojson);log.success('GeoJSON 数据加载完成')} else {log.error('GeoJSON 服务请求失败')}})
</script>
其中加载GeoJson关键代码部分为:
var geojson = new AMap.GeoJSON({geoJSON: geoJSON,getPolygon: function(geojson, lnglats) { return new AMap.Polygon({path: lnglats,fillOpacity: 1,   // 透明度strokeColor: 'white',fillColor: 'red'});}});map.add(geojson);

示例中,已经将代码量降到了最低,只需要了解基础的前端代码,就可以实现。
此案例中所引用的GeoJson代码摘取:

{"type": "FeatureCollection","features": [{"type": "Feature","properties": {"id": "500242","name": "酉阳土家族苗族自治县","cp": [108.8196,28.8666],"childNum": 1},"geometry": {"type": "Polygon","coordinates": [[[108.3142,28.9984],[108.3252,29.0039],[108.3142,28.9984]………………………]]}}]
}

这段代码的自述:我是一段区域代码,其中包括了好几个子项集合,作为顶头上司的我,type为 FeatureCollection ,我的小兄弟都在features 节点中,这里定义着每个人的个性,他们的头标签包括一下几个type为 Feature ,properties 节点中,有他们的身份证,名称,以及位置信息,当然也包括他们有几个手下。基础地图中的GeoJson基本内容就是这么简单。

每个小兄弟的geometry节点,为他们的活动区域, type 为 Polygon ,coordinates 这里就代表着活动区域。
所以按照方法,绑定GeoJson,就可以显示在地图中。
地图,是GeoJson的战场,目前市面上所有的地图都是基于GeoJson的格式来完成的。
通过解析,发现其实GeoJson也不是那么神秘。

前面介绍的,都是基于二维层面的地图,接下来介绍一下GeoJson的高级用法,带有高度的格式如何实现和应用。
3D效果示例

代码示例:

var geo = new Loca.GeoJSONSource({url: 'geo.json',});
var pl = new Loca.PolygonLayer({zIndex: 120,shininess: 10,hasSide: true,cullface: 'back',depth: true,});
pl.setSource(geo);对应GeoJson格式:
{"type": "FeatureCollection","name": "sh_building_center","crs": {"type": "name","properties": {"name": "urn"}},"features": [{"type": "Feature","properties": {"mainKey": 50001,"h": 18},"geometry": {"type": "Polygon","coordinates": [[[121.480519,31.250787],[121.480127,31.250616],[121.480132,31.25061],[121.480374,31.25061],[121.480578,31.250707],[121.480519,31.250787]]]}}]
}

在features 节点中的properties
看了代码后,发现3D跟平面地图处理过程几乎一致,这也从侧面反应了,其实在目前阶段的GeoJson使用中,都是基于地图所开放的api来实现的。技术的革新,让我们基础开发者,也可以实现高级的地图应用功能。总是一句话,GeoJson的诞生,就是为了让地图应用开发更加简单易用。

应用场景

我们基于GetJSON 开发地图插件往往不是独立的去显示一个地图动效就结束了,而是需要实现“地图可视化”, 将地理数据转换成可视化形态,通过将具有地域特征的数据或者数据分析结果形象地表现在地图上,使得用户可以更加容易理解数据规律和趋势。地图可视化可以将业务数据显示在相关地理数据中,更直白地展现出业务数据。

很多BI 工具解决数据可视化大屏展示的功能,但在地图可视化展示时提供的原生样式会有很多样式,功能的限制,因此也BI工具开放了可视化的插件开发,供开发人员基于插件开发机制,来实现满足项目需求的可视化插件开发。

此外大家如果感兴趣可以尝试体验在线demo:
https://www.grapecity.com.cn/solutions/wyn/demo

【三维地图】开发攻略 —— 详解“GeoJSON”技术和应用场景相关推荐

  1. 倩女手游经验计算机,倩女幽魂手游怎么快速升级 新手升级攻略详解

    倩女幽魂手游的公测已经开启啦!相信大家上了游戏第一件事就是快速的冲级,那么在倩女幽魂手游中要怎样升级呢?就让4399熊猫来为你带来倩女幽魂手游新手升级攻略详解~ 在倩女幽魂手游中获得经验的方法大致可以 ...

  2. 乖离性暗机器人_乖离性百万亚瑟王超级妖 暗机器人攻略详解

    乖离性百万亚瑟王超级妖 暗机器人攻略详解97973-手游网小编为大家分享乖离性百万亚瑟王超级妖 暗机器人攻略详解,详细讲解乖离性百万亚瑟王攻略,希望这篇攻略能帮到大家 本攻略是97973-原创,转载请 ...

  3. 龙威ol服务器维护是什么意思,《龙威OL》战灵技能攻略详解!助您横扫天下不成问题...

    <龙威OL>战灵技能攻略详解!助您横扫天下不成问题 战灵系统是<龙威online>最吸引人和最具特色的系统之一,除了可以帮助主人战斗外,还可以升级,领悟天赋,学习技能,甚至可以 ...

  4. C1能力认证任务训练攻略详解

    C1能力认证任务 一.任务一(植物大战僵尸存档修改) (一).修改植物大战僵尸存档文件,跳到指定关卡5-1. (二).修改植物大战僵尸存档文件,将游戏账户中的金币数量改为52013140 (三).修改 ...

  5. 怎样用计算机算游戏时间,计算器:游戏通关攻略详解 计算器:游戏用法

    <计算器:游戏>是一款非常新颖的数字解谜游戏,独特的游戏思路将数字计算变成了游戏玩法,游戏到后面还是非常有难度的,需要大家逆向思考,那么这款游戏该怎么能玩呢?某一关又怎么过?那么小编今天为 ...

  6. 时空猎人精灵芯片攻略详解

    在时空猎人游戏中中小精灵能杀怪.能防御.能加属性和战斗力,小精灵可以通过插入不同芯片来激活不同效果,下面卓易市场就为大家介绍一下时空猎人精灵芯片攻略,我们一起来看下吧!! 精灵拥有3个芯片槽,每个芯片 ...

  7. 群星机器人劳力要不要_群星攻略教程 群星1.30版本攻略详解

    最近通关了群星,玩的是1.30版本,所以今天就给大家分享一下群星攻略教程,大家可以看看做参考,相信能帮助到大部分玩家. 第 7 页 群星发展攻略正文(下) 群星舰队构成思路: 一句话概括,前期爆护卫, ...

  8. Elasticsearch---spring-boot-starter-data-elasticsearch整合攻略详解

    前言 首先要确保自己引入的spring-boot-starter-data-elasticsearch版本与elasticsearch一直,通常情况下会遇到使用了如,spring-boot-depen ...

  9. 离线地图开发瓦片数据详解

    离线地图分为两种:一种叫"金字塔瓦片"数据,一种叫"矢量地图数据".我们看的在线地图比如,百度,谷歌,高德等等网页上的地图,都是金字塔瓦片:另外一种是手机上用来 ...

  10. 华容道6×6图解_全民主公华容道6怎么打 华容道6布阵图攻略详解

    展开全部 华容道第6关图5261解: 华容道41026图,目测只能8法,这关1653变数太大,有时回候我不能过答,但有时候也能2星,紫月英的位置也可以换成火法,操作比较讲究,一个失误可能就过不了,武将 ...

最新文章

  1. java oracle数据库高效分页查询_oracle高效分页查询总结
  2. pyhton 画出音频文件的波形图和频谱图
  3. 多项式拟合缺点_机器学习——机器学习算法优缺点综述
  4. Cannot load 64-bit SWT libraries on 32-bit JVM
  5. 第19节 项目整体绩效评估.
  6. 删除系统Win7系统盘越来越小,系统盘清理技巧
  7. pureMVC介绍及学习
  8. View.onMeasured的默认实现 (onMeasure必须调setMeasuredDimension)
  9. ImportError: No module named 'pip._vendor.retrying'
  10. 关于mysql单表支持的最大大小
  11. mysql5.7 datetime 默认值为‘0000-00-00 00:00:00‘值无法创建问题解决
  12. matlabR2017b 载入libsvm
  13. oracle怎么删除.dat,oracle 手工删库
  14. 自动阅读专业版第九次更新---原薅羊毛专业版
  15. linux解压缩包命令
  16. 【Tableau 图表大全27】之区域图(面积图)
  17. vm虚拟机安装lede旁路由_利用VMM虚拟机 安装LEDE旁路由 实现软路由超强功能
  18. 新技能Get! 手把手教你接入CG Kit
  19. 科技交流英语(2022秋)Unit1-Unit8题干速查
  20. CSMA/CD与CSMA/CA区别

热门文章

  1. 433MHz,2.4GHz,GPRS,NB-IOT各有哪些特点?
  2. 十三水牌型 图片_十三水三分天下是什么 十三水三分天下牌型详解
  3. SitePoint播客#23:Jeff Veen的网络字体
  4. 宏晶微MS2130 USB3.0高清视频采集芯片应用于直播导播一体机
  5. 解决方案-联想电脑插耳机后仍然外放
  6. 麒麟KY-RTI分布仿真技术:第三章 KY-OMT对象模型模板工具
  7. pandas按照多列排序-ascending
  8. 关于LANP的相关常识题
  9. 2022秋软工实践 团队展示与选题报告
  10. IDEA查看历史记录