GeoJSON文件格式英文说明:https://tools.ietf.org/html/rfc7946
GeoJSON是基于JSON的地理空间数据交换格式,它定义了几种JSON对象及其组合方式,以表示有关地理要素,其属性和空间信息。GeoJSON采用WGS1984坐标系和十进制的单位。
GeoJSON是一种用于编码各种地理数据的格式使用JavaScript对象符号(JSON)[RFC7159]的结构。一个GeoJSON对象可以表示一个空间区域(一个Geometry),一个受空间限制的实体(要素Feature)或要素集(FeatureCollection)。 GeoJSON支持以下几何类型:点,线,面,多点,多线,多面和几何集。 GeoJSON中的功能包含一个几何对象和其他属性以及FeatureCollection包含功能列表。
示例
A GeoJSON FeatureCollection:
{
“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”
}
}
}]
}
GeoJSON是JSON文本,由单独的GeoJSON对象组成。
GeoJSON对象表示Geometry(几何)、Feature(要素)、collection of Features(要素集)。
1.GeoJSON对象是JSON对象
2.GeoJSON对象必须由一个名字为"type"的成员。这个成员的值是由GeoJSON对象的类型所确定的字符串
3.GeoJSON对象可能有一个"bbox"成员,它的值必须是边界框数组
4.一个GeoJSON对象可能有别的成员
几何体对象表示坐标空间中的点、曲线和曲面。每一个几何体对象都是一个GeoJSON对象,不管它出现在GeoJSON文本的什么地方。
几何对象的类型必须是七种类型之一:“Point”(点), “MultiPoint”(多点), “LineString”(线段), “MultiLineString”(多线), “Polygon”(面), “MultiPolygon”(多面), 或者"GeometryCollection"(几何集)。
除了“GeometryCollection”外的其他任何类型的GeoJSON几何对象必须由一个名字为"coordinates"的成员。coordinates成员的值总是数组。这个数组里的元素的结构由几何类型来确定。
位置是基本的几何结构。几何对象的"coordinates"成员由一个位置(几何点)、位置数组(线或者几何多点),位置数组的数组(面、多线)或者位置的多维数组(多面)组成。
位置由数字数组表示。必须至少两个元素,可以有更多元素。元素的顺序必须遵从x,y,z顺序(投影坐标参考系统中坐标的东向、北向、高度或者地理坐标参考系统中的坐标长度、纬度、高度)。
对类型"Point"来说,“coordinates"成员必须是一个单独的位置。
对类型"MultiPoint"来说,"coordinates"成员必须是位置数组。
对类型"LineString"来说,“coordinates"成员必须是两个或者多个位置的数组。
对类型“MultiLineString"来说,"coordinates"成员必须是一个线坐标数组的数组。
对类型"Polygon"来说,"coordinates"成员必须是一个线性环坐标数组的数组。对拥有多个环的的面来说,第一个环必须是外部环,其他的必须是内部环或者孔。
对类型"MultiPlygon"来说,"coordinates"成员必须是面坐标数组的数组。
类型为"GeometryCollection"的GeoJSON对象是一个集合对象,它表示几何对象的集合。
几何集合必须有一个名字为"geometries"的成员。与"geometries"相对应的值是一个数组。这个数组中的每个元素都是一个GeoJSON几何对象。
类型为"Feature"的GeoJSON对象是特征对象。
特征对象必须由一个名字为"geometry"的成员,这个几何成员的值是上面定义的几何对象或者JSON的null值。
特征对戏那个必须有一个名字为“properties"的成员,这个属性成员的值是一个对象(任何JSON对象或者JSON的null值)。
如果特征是常用的标识符,那么这个标识符应当包含名字为“id”的特征对象成员。
类型为"FeatureCollection"的GeoJSON对象是特征集合对象。
类型为"FeatureCollection"的对象必须由一个名字为"features"的成员。与“features"相对应的值是一个数组。这个数组中的每个元素都是上面定义的特征对象。
GeoJSON对象的坐标参考系统(CRS)是由它的"crs"成员(指的是下面的CRS对象)来确定的。如果对象没有crs成员,那么它的父对象或者祖父对象的crs成员可能被获取作为它的crs。如果这样还没有获得crs成员,那么默认的CRS将应用到GeoJSON对象。
默认的CRS是地理坐标参考系统,使用的是WGS84数据,长度和高度的单位是十进制标示。
名字为"crs"成员的值必须是JSON对象(指的是下面的CRS对象)或者JSON的null。如果CRS的值为null,那么就假设没有CRS了。
crs成员应当位于(特征集合、特征、几何的顺序的)层级结构里GeoJSON对象的最顶级,而且在自对象或者孙子对象里不应该重复或者覆盖。
非空的CRS对象有两个强制拥有的对象:“type"和"properties”。
type成员的值必须是字符串,这个字符串说明了CRS对象的类型。
属性成员的值必须是对象。
CRS应不能更改坐标顺序
为了包含几何、特征或者特征集合的坐标范围信息,GeoJSON对象可能有一个名字为"bbox的成员。bbox成员的值必须是2*n数组,这儿n是所包含几何对象的维数,并且所有坐标轴的最低值后面跟着最高者值。bbox的坐标轴的顺序遵循几何坐标轴的顺序。除此之外,bbox的坐标参考系统假设匹配它所在GeoJSON对象的坐标参考系统。
要素边框示例:
{
“type”: “Feature”,
“bbox”: [-10.0, -10.0, 10.0, 10.0],
“geometry”: {
“type”: “Polygon”,
“coordinates”: [
[
[-10.0, -10.0],
[10.0, -10.0],
[10.0, 10.0],
[-10.0, -10.0]
]
]
}
//…
}
边界框的四条线在坐标参考系;即,对于以值为边界的框“西”、“南”、“东”和“北”,最北端的每个点行可以表示为
(lon,lat)=(west+(east-west)*t,north)
0<=t<=1。
6.1、外部对象
本规范中未描述的对象(“外部对象”)可以在GeoJSON文档中使用。请注意,对外国对象的支持可能因实现而异,并且没有为外部对象定义规范的处理模型。因此,过于依赖外国对象的实现可能会降低与其他实现的互操作性。
例如:
{
“type”: “Feature”,
“id”: “f1”,
“geometry”: {…},
“properties”: {…},
“title”: “Example Feature”
}
“title”:“Example Feature”的名称/值对是外来的对象。当一个外部对象的值是一个对象时,所有该对象的后代成员本身就是外国对象。