GeoJSON 和 TopoJSON 是符合 JSON 语法规则的两种数据格式,用于表示地理信息。

1. GeoJSON

  GeoJSON 是用于描述地理空间信息的数据格式。GeoJSON 不是一种新的格式,其语法规范是符合 JSON 格式的,只不过对其名称进行了规范,专门用于表示地理信息。

  GeoJSON 的最外层是一个单独的对象(object)。这个对象可表示:

  • 几何体(Geometry)。
  • 特征(Feature)。
  • 特征集合(FeatureCollection)。

  最外层的 GeoJSON 里可能包含有很多子对象,每一个 GeoJSON 对象都有一个 type 属性,表示对象的类型,type 的值必须是下面之一:

  • Point:点。
  • MultiPoint:多点。
  • LineString:线。
  • MultiLineString:多线。
  • Polygon:面。
  • MultiPolygon:多面。
  • GeometryCollection:几何体集合。
  • Feature:特征。
  • FeatureCollection:特征集合。

  例子:

 点对象:
{
"type": "Point",
"coordinates": [ -105, 39 ]
} 线对象:
{
"type": "LineString",
"coordinates": [[-105, 39 ], [-107, 38 ]]
} 面对象:
{
"type": "Polygon",
"coordinates":[[ [30, 0], [31, 0], [31, 5], [30, 5], [30, 0] ]]
}

  由以上格式可以发现,每一个对象都有一个成员变量 coordinates。如果 type 的值为 Point、MultiPoint、LineString、MultiLineString、Polygon、MultiPolygon 之一,则该对象必须有变量 coordinates。

  如果 type 的值为 GeometryCollection(几何体集合),那么该对象必须有变量 geometries,其值是一个数组,数组的每一项都是一个 GeoJSON 的几何对象。例如:

 {
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100, 40]
},
{
"type": "LineString",
"coordinates": [ [100, 30], [100, 35] ]
}
]
}

  如果 type 的值为 Feature(特征),那么此特征对象必须包含有变量 geometry,表示几何体,geometry 的值必须是几何体对象。此特征对象还包含有一个 properties,表示特性,properties 的值可以是任意 JSON 对象或 null。例如:

 {
"type": "Feature",
"properties": {
"name": "北京"
},
"geometry": {
"type": "Point",
"coordinates": [ 116.3671875, 39.977120098439634]
}
}

  如果 type 的值为 FeatureCollection(特征集合),则该对象必须有一个名称为 features 的成员。features 的值是一个数组,数组的每一项都是一个特征对象。

2. TopoJSON

  TopoJSON 是 GeoJSON 按拓扑学编码后的扩展形式,是由 D3 的作者 Mike Bostock 制定的。相比 GeoJSON 直接使用 Polygon、Point 之类的几何体来表示图形的方法,  TopoJSON 中的每一个几何体都是通过将共享边(被称为arcs)整合后组成的。

  TopoJSON 消除了冗余,文件大小缩小了 80%,因为:

1.边界线只记录一次(例如广西和广东的交界线只记录一次);
2.地理坐标使用整数,不使用浮点数。

3.在线工具

最新文章

  1. NOIP提高模拟题 完全平方数
  2. PAT A 1119. Pre- and Post-order Traversals (30)【二叉树遍历】
  3. [转载]TableView详解
  4. 20145334实验三《敏捷开发与XP实践》
  5. 9----Lua中的面向对象
  6. 最近提交并被合并的 jDiameter pull request 31 解决的问题
  7. Zclip复制页面内容到剪贴板兼容各浏览器
  8. 对 Azure 虚拟网络网关的改进
  9. delphi datasnap 心跳包
  10. 定位linux jdk安装路径
  11. 跨越VLAN
  12. Ansible工作流程详解
  13. Css设置img属性让图片水平居中/居左/居右的写法
  14. Nginx+redis的Asp.net
  15. UINavigationController 、UINavigationBar 、UINavigationItem 超清晰直观详解
  16. Python进阶 学习笔记(二)
  17. Ansible之ansible-playbook roles
  18. C#可选参数、命名参数、参数数组
  19. 16-spring学习-配置文件操作
  20. CXF框架介绍及Spring集成

热门文章

  1. Qt Multimedia 模块类如何使用?(表格)
  2. SSL连接分为两个阶段:握手和数据传输阶段
  3. 洛谷P4064 加法 [JXOI2017] 贪心
  4. 洛谷P4358密钥破解 [CQOI2016] 数论
  5. tomcat去掉项目名称
  6. oracle常见的执行计划
  7. 多线程2.md
  8. 矩形嵌套(dp)
  9. 【4】axios 获取数据
  10. openshift 容器云从入门到崩溃之三《安装openshift》