GeoJSONcn
GeoJSONcn / 技术专栏 / GeoJSON 到底是什么?搞懂…

GeoJSON 到底是什么?搞懂这种地理数据格式并不难

发布于 2026-07-15 · GeoJSONcn 技术团队 · 阅读约 5 分钟

上篇聊了坐标系,这篇把"容器"讲清楚,也就是 GeoJSON。说实话,我刚接触的时候也被它一堆 FeatureCollection、geometry 绕晕过,但真拆开看,它其实就是用 JSON 描述地理要素的一套约定,没那么玄乎。

先给个定义

GeoJSON 是用 JSON 语法表示地理数据的格式。点、线、面,还有一堆带属性的要素,全都能用 {} 和 [] 装进去。它最大的好处是人类能读、机器能解析、浏览器直接能处理,不用装任何二进制解析库。

最常见的三种几何类型

日常 90% 场景只会碰到这三个:

类型干啥用坐标长相
Point标记一个点(比如某个坐标)[经度, 纬度]
LineString一条线(河流、道路、边界线)[[lon,lat], [lon,lat], ...]
Polygon一个面(省界、市界、地块)[[ [lon,lat], ... , [lon,lat] ]]

注意 Polygon 是"数组的数组":最外层是"环"的列表,第一个环是外边界,后面的环是洞(比如一个省里有飞地或者湖泊)。这点新手特别容易写错。

一个完整的例子

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "name": "北京市",
        "level": "province",
        "code": "110000"
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [116.0, 40.0],
            [116.5, 40.0],
            [116.5, 40.5],
            [116.0, 40.5],
            [116.0, 40.0]
          ]
        ]
      }
    }
  ]
}

要点:

为什么选它而不是 KML / Shapefile

所以在 Web 地图项目里,GeoJSON 几乎是默认选择。我做的 GeoJSONcn 就把全国行政区划边界全做成了 GeoJSON,前端拿到就能渲染,不用任何中间转换。

几个实战里容易翻车的地方

1. 坐标顺序:永远 [lon, lat],别被某些库的 (lat, lon) 习惯带偏。 2. 多边形必须闭合:首尾坐标要一样,不然 Canvas 填充会裂。 3. 经纬度别用字符串:写成数字,否则算距离、面积时全变字符串拼接。 4. 小数精度:行政区划边界留 5~6 位小数足够,再多纯属浪费体积。

最后

GeoJSON 就是用 JSON 装地理要素,记住 FeatureCollection → Feature → properties/geometry 这个三层结构,坐标 [经度, 纬度] 别写反,Polygon 注意闭合和"环的数组"就稳了。

下一篇聊点更实用的:拿到 GeoJSON 之后,怎么把它转成 KML、SVG、CSV 甚至 PNG 大图,每种格式又该在什么场景用。