BaseToolbox LogoBaseToolbox
Blog

© 2025 基础工具箱。保留所有权利。

隐私政策关于联系我们

GeoJSON 的 Point、LineString、Polygon 和 FeatureCollection 怎么理解?

发布于 2026年7月3日

GeoJSON 看起来很像普通 JSON,但小的结构错误就可能让地图渲染到错误位置,或者直接加载失败。调试地图组件前,先确认 GeoJSON 对象结构是否正确,往往比反复改样式更有效。

核心概念很简单:GeoJSON 用 geometry 表示形状,用 Feature 给形状附加属性,用 FeatureCollection 组织多个要素。GeoJSON 地球查看 可以帮助你预览这些结构,但先理解类型,会更容易发现错误。

坐标顺序先记住

GeoJSON 的位置坐标是经度在前,纬度在后:

[-122.4194, 37.7749]

这和很多人口头说“纬度,经度”的习惯相反。如果不小心把纬度写在前面,点位可能跑到错误国家、错误海域,甚至完全不在可见范围内。

位置坐标还可以带第三个数字表示高度:

[-122.4194, 37.7749, 20]

很多简单查看工具会忽略高度,但仍然应该能解析这个坐标。

Point 和 MultiPoint

Point 表示一个位置:

{
  "type": "Point",
  "coordinates": [-122.4194, 37.7749]
}

它适合门店、传感器、地标、地址、设备等单点数据。MultiPoint 表示同一个 geometry 里的多个点。如果这些点属于同一个业务对象,可以用 MultiPoint;如果每个点都有独立属性,多个 Feature 往往更清晰。

LineString 和 MultiLineString

LineString 表示由两个或更多坐标组成的路径:

{
  "type": "LineString",
  "coordinates": [
    [-122.42, 37.77],
    [-73.98, 40.75]
  ]
}

它适合路线、边界、轨迹、线缆、巡检记录和连接关系。MultiLineString 则把多条线放在同一个 geometry 里。

如果一条线突然跨过整个地球,优先检查经纬度顺序和是否跨越 180 度经线。很多“地图画错线”的问题,其实不是渲染库坏了,而是坐标解释错了。

Polygon 和 MultiPolygon

Polygon 表示一个面。它的 coordinates 是 ring 数组。第一个 ring 是外边界,后面的 ring 可以表示洞。

{
  "type": "Polygon",
  "coordinates": [
    [
      [-122.5, 37.7],
      [-122.3, 37.7],
      [-122.3, 37.9],
      [-122.5, 37.9],
      [-122.5, 37.7]
    ]
  ]
}

注意第一个点和最后一个点相同,这表示 ring 闭合。MultiPolygon 用于一个要素包含多个分离区域的情况,比如由多个岛屿组成的范围。

Feature 和 FeatureCollection

原始 geometry 只描述形状。Feature 会把 geometry 和 properties 包在一起:

{
  "type": "Feature",
  "properties": { "name": "Example area" },
  "geometry": {
    "type": "Polygon",
    "coordinates": []
  }
}

FeatureCollection 则组织多个 Feature:

{
  "type": "FeatureCollection",
  "features": []
}

多数地图数据会用 FeatureCollection,因为每个形状都可以带自己的名称、分类、状态、颜色或业务字段。

怎么选择合适的类型?

选择 geometry 时,先看这个对象在业务上是什么,而不是先想怎么画样式。门店、设备、地址通常是 Point。配送路线、轨迹、边界线通常是 LineString。服务区域、行政范围、覆盖范围通常是 Polygon。

如果一个业务对象包含多个分离形状,要看这些形状是否需要独立属性。五家门店通常更适合五个 Feature,每个 Feature 一个 Point,并带自己的门店名和编号。由多个岛屿组成的同一个保护区,则可能更适合一个 MultiPolygon,因为它们属于同一个命名区域。

预览不对时怎么排查?

GeoJSON 预览结果不对时,可以从外到内检查:

  1. 先看最外层 type。
  2. 如果是 FeatureCollection,看 features 数量。
  3. 打开一个 Feature,确认里面有 geometry。
  4. 看 geometry 的 type。
  5. 按类型检查坐标嵌套层级。
  6. 确认坐标是经度在前、纬度在后。
  7. 看 bounds 是否有异常离群点。

这个顺序比随机改地图配置更有效。很多显示问题不是样式问题,而是数据结构、坐标顺序、投影假设或某一个坏要素造成的。

Geometry 不是样式

GeoJSON 只说明形状,不保证它应该怎么显示。一个 Polygon 的 properties 里可以有分类或颜色字段,但最终怎么填充、描边、标注,要由渲染器决定。LineString 也一样,它可能是道路、航线、线缆、边界或轨迹。

导出数据时要把这两件事分开:geometry 负责形状,properties 负责业务含义,前端或 GIS 工具负责样式。不要指望通用查看工具理解每个自定义字段,但这些字段可以帮助你在自己的应用里做分类和交互。

还有一点要注意:GeoJSON 默认讨论的是地理坐标,不是任意平面坐标。如果你把 Web Mercator 米制坐标、CAD 坐标或本地投影坐标直接塞进 GeoJSON,经纬度查看工具可能会把它们当成经纬度解释,结果自然会错。遇到坐标数值特别大、bounds 明显超出 -180..180 和 -90..90 时,先检查是否需要投影转换。

常见错误

错误 表现
纬度写在经度前 点位出现在错误位置。
只有数组,没有 GeoJSON 对象 解析器提示缺少 type。
Polygon ring 没闭合 面可能渲染异常或校验失败。
properties 没放在 Feature 里 属性可能被忽略或结构无效。
坐标嵌套层级错 线或面无法通过校验。

一句话总结

GeoJSON 使用“经度、纬度”的坐标顺序。Point 表示单点,LineString 表示路径,Polygon 表示区域,Feature 给几何附加属性,FeatureCollection 组织多个要素。预览结果不对时,先查坐标顺序、嵌套层级和 Polygon 是否闭合。

想直接试试看?

用我们的免费在线工具,把文章里的方法马上用起来。

在地球上查看 GeoJSON