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缺陷
- 不能对表达拓扑关系
- geojson值为json对象,除了json对象中的string, number, and boolean,其他复杂对象不能表达。以date类型为例,需要转换为timestamp 的字符串形式。
- 无法表达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工具。