【 D3.js 入门系列 — 10.3 】 GeoJSON 文件和 TopoJSON 文件的区别和联系

本人的个人博客为:www.ourd3js.com 

csdn博客为:blog.csdn.net/lzhlzz

转载请注明出处,谢谢。


前些天有朋友留言询问 GeoJSON 文件和 TopoJSON 文件的关系,正好我其实也不是十分明了,查询了一番后整理如下,还望大家指证。

这两种文件都是基于 JSON 语法的,首先来说一下 JSON 语法和文件是怎样的。

1. JSON 格式

JSON(JavaScript Object Notation) 是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管 JSON 是 Javascript 的一个子集,但 JSON 是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。

JSON 的格式[1]如下:

  • 物件( object ):一个物件的数据写在一组大括号内 { ... }
  • 名称/值( collection ): 每一个物件都由一系列的名称/值( collection )组成,名称/值之间用逗号( , )分隔。一个名称可以是一个字符串;一个值可以是字符串,数值,布尔值,有序列表,或 null 值。
name:value

由于 name 必定是字符串,所以要写在双引号之内。

  • 值的有序列表( Array ):列表写在 [ ... ] 之间
[collection, collection, collection, ...]

2. GeoJSON 格式

GeoJSON 是一种对地理数据结构进行编码的格式。它只是一个采用上述 JSON 格式的用于描述地理信息的格式。它的语法和 JSON 是一样的,只是对各名称做了规范,形如[2]:

{ "type": "FeatureCollection",
    "features": [
      { "type": "Feature",
        "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
        "properties": {"prop0": "value0"}
        },
      { "type": "Feature",
        "geometry": {
          "type": "LineString",
          "coordinates": [
            [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
            ]
          },
        "properties": {
          "prop0": "value0",
          "prop1": 0.0
          }
        },
      { "type": "Feature",
         "geometry": {
           "type": "Polygon",
           "coordinates": [
             [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
               [100.0, 1.0], [100.0, 0.0] ]
             ]
         },
         "properties": {
           "prop0": "value0",
           "prop1": {"this": "that"}
           }
         }
       ]
     }

具体的可以参加 http://geojson.org/

3. TopoJSON 格式

TopoJSON 是 GeoJSON 简化后的版本,可以说是 GeoJSON 的小孩。D3.js 的作者认为 GeoJSON 不太好,比较推崇 TopoJSON 格式。

TopoJSON 与 GeoJSON 相比,文件大小缩小了 80% ,因为:

  • 边界线只记录一次(例如广西和广东省的交界线只记录一次)
  • 不使用浮点数,只使用整数

不过 TopoJSON 似乎只在 D3.js 中比较广泛的使用,还不是世界范围内认可的格式。

 

要注意,无论 GeoJSON 还是 TopoJSON ,它们本质上有是 JSON 格式的文件,都遵循 JSON 的语法,只不过对变量的名称做了不同的规范。

在 http://mapshaper.org/ 可以试着转换 GeoJSON 和 TopoJSON 的数据,我们会看到对于同一个地理数据文件,TopoJSON 的文件大小大概相当于 GeoJSON 的 20% ,这对于解决因文件量过大而造成的读取速度过慢是相当简单有效的。


[1] http://zh.wikipedia.org/wiki/JSON

[2] http://geojson.org/

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。