需要了解的geojson和操作工具
Minbin Jiang Lv4

geojson对象

  • Geojson的几何对象

包含Point,Linestring,Polygon,multiPoint,MultiLinestring,MultiPolygon。Esri json 的几何对象包含 point,multipoint,polyline,polygon,Envelope

  • position

geojson 的几何对象中最小基元为position,x,y坐标构成position。其他几何对象由一个或者多个position 构成。position按照x,y,z的顺序。但是其可以包含其他任意额外值。也就是可以自己定义x,y,z意外的值。其他的几何对象由一到多个position组成。
标准的position如:[100.0, 0.0]

  • point

geojson中point表示的层级结构:
—point
—coordinates

如:

{ "type": "Point", "coordinates": [100.0, 0.0] }
  • LineString&multiPoint

在geojson中linestring和multipoint的coordinates 的表示是相同的。这也是此处把两者放到一起的原因。
geojson 中multipoint的表示直接为{x:value,y:value}的形式。
geojson中LineString的表示有2到多个coordinates组成。
如:

{ "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]    }

esri json中polyline为2至多个点组成的paths。但是esri json 比geojson强的地方,从10.3开始支持对复杂curve对象,像贝塞尔曲线的支持

  • MultiLinestring & polygon

而multiLinestring的coordinates为一到多个Linestring组成。
geojson中polygon 为linestring的变形,即是起止点相同。

  • multiPolygon

multiPolygon用来表示带洞的多边形。使用coordinates表示的时候, 外环在前面,内环在后面。且两者方向相反。虽然geojson和esri json的标准中都没有指出,但是两者都采用右手规则:

内环逆时针,外环顺时针

  • geojson中不存在envelope对象

  • project system
    geojson 的参考使用的为CRS。其中可以使用named crs和linked crs。named crs 使用ogc的 crs urns参考系统表示字符串。linked crs就是连接一个url地址,从该地址能够retrieve 参考信息,支持prj4,ogcwkt以及esriwkt。
    esri json 的参考使用wkid或者wkt 表示。

Geometry & Feature Collection

在geojson的对象中,geometry collection 和feature collection两类。从字面意思上也容易理解。

geometry collection为上面列举的几何对象组成的合集。其type为GeometryCollection 。然后包含geometries 数组。前面的multi开始的对象只能表示一种几何对象的集合。而geometry collection,可以将不同geometry 类型组成一集合。
但是这种情况通常较少。GC参考如下:

{ "type": "GeometryCollection",
    "geometries": [
      { "type": "Point",
        "coordinates": [100.0, 0.0]
        },
      { "type": "LineString",
        "coordinates": [ [101.0, 0.0], [102.0, 1.0] ]
        }
    ]
  }

在esri json中没有geometry collection对象。

geojson中另一集合对象为Feature Collection。 该对象犹如esri json中的featureset对象。除了包含geometry以为还包含geometry的一些属性信息。其格式参考如下:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [0, 0]
      },
      "properties": {
        "name": "null island"
      }
    }
  ]
}

geojson缺陷

  1. 不能对表达拓扑关系
  2. geojson值为json对象,除了json对象中的string, number, and boolean,其他复杂对象不能表达。以date类型为例,需要转换为timestamp 的字符串形式。
  3. 无法表达circle和curve集合对象。

上面1,2 esri json也存在此类缺陷。

有大神指出geojson有性能上的缺陷。这就没有尝试过了。

与esri json的互操作

曾想自己编程实现两者之间的自由转换。通过搜索以及有很多开源通过pytho和js实现了。js实现的推荐:
esri 官方github中推出的geojson-utils。
https://github.com/Esri/geojson-utils

说道geojson的研究,这TOM MACWRIGHT大神对geojson的研究太投入了,不仅自己弄了网站下数geojson格式的数据,还把挖掘了许多geojson转换,分析工具,在其github中列出list。地址如下:
https://github.com/tmcw/awesome-geojson。可以好不夸张的说。史上最全geojson工具。

本文参考

  1. arcgis rest api geometry object
  2. geojson specification
  3. macwright的博客