^ 关注我,带你一起学GIS ^
注:当前使用的是 ol [9.2.4] 版本,天地图使用的
key
请到天地图官网申请,并替换为自己的key
前言
❝
GeoJSON
是一种用于编码各种地理数据结构的格式,采用JSON
方式表示。在WebGIS
开发中,被广泛应用于数据传输和共享交换。
1. GeoJSON数据格式
GeoJSON
对象类型多样,具有Geometry
类型:Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon
以及GeometryCollection
,要素类型Feature
和要素集类型FeatureCollection
共九大类。几何对象(Geometry)
加上属性信息(Properties)
构成要素(Feature)
,要素集(Features)
组成要素集合(FeatureCollection)
,其逻辑关系如下图。
图1几何对象组成结构图
图2几何对象包含结构图
2. GeoJSON对象结构特点
GeoJSON
对象表示几何对象(Geometry)
、要素对象(Feature)
、以及要素类对象(Features)
的集合(FeatureCollection)
,具有如下特征。
每一个 GeoJSON
对象都是JSON
对象每一个 GeoJSON
对象都具有一个type
属性,其值必须是GeoJSON
类型,以上九大类型之一。GeoJSON
对象还可能具有"bbox"
属性,其值必须是边界范围数组。GeoJSON
对象还可能具有其他属性,如用户自定义属性。
3. GeoJSON几何对象
3.1. GeoJSON-Point
Point
属性coordinates
是一个数组,在投影坐标系中按[x,y]
顺序显示,在地理坐标系中按经度和纬度[longitude,latitude]
显示。
{
"type": "Point",
"coordinates": [100.0, 0.0]
}
3.2. GeoJSON-LineString
LineString
属性coordinates
是一个数组,元素为Point
数组坐标对。
{
"type": "LineString",
"coordinates": [
[100.0, 0.0],
[101.0, 1.0]
]
}
3.3. GeoJSON-Polygon
Polygon
属性coordinates
是一个数组,元素为LineString
线性环数组。数组的第一个元素表示外环,任何后续元素表示内环。无孔洞
{
"type": "Polygon",
"coordinates": [
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
]
]
}
有孔洞
{
"type": "Polygon",
"coordinates": [
// 外环
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
],
// 内环
[
[100.8, 0.8],
[100.8, 0.2],
[100.2, 0.2],
[100.2, 0.8],
[100.8, 0.8]
]
]
}
3.4. GeoJSON-MultiPoint
MultiPoint
属性coordinates
是一个LineString
数组,元素为Point
数组。
{
"type": "MultiPoint",
"coordinates": [
[100.0, 0.0],
[101.0, 1.0]
]
}
3.5. GeoJSON-MultiLineString
MultiLineString
属性coordinates
是一个数组,元素为LineString
数组。
{
"type": "MultiLineString",
"coordinates": [
[
[100.0, 0.0],
[101.0, 1.0]
],
[
[102.0, 2.0],
[103.0, 3.0]
]
]
}
3.6. GeoJSON-MultiPolygon
MultiPolygon
属性coordinates
是一个数组,元素为Polygon
数组。
{
"type": "MultiPolygon",
"coordinates": [
[
[
[102.0, 2.0],
[103.0, 2.0],
[103.0, 3.0],
[102.0, 3.0],
[102.0, 2.0]
]
],
[
[
[100.0, 0.0],
[101.0, 0.0],
[101.0, 1.0],
[100.0, 1.0],
[100.0, 0.0]
],
[
[100.2, 0.2],
[100.2, 0.8],
[100.8, 0.8],
[100.8, 0.2],
[100.2, 0.2]
]
]
]
}
3.7. GeoJSON-GeometryCollection
GeometryCollection
属性geometries
是一个数组,元素为geometry
对象。
{
"type": "GeometryCollection",
"geometries": [
{
"type": "Point",
"coordinates": [100.0, 0.0]
},
{
"type": "LineString",
"coordinates": [
[101.0, 0.0],
[102.0, 1.0]
]
}
]
}
4. GeoJSON要素对象
要素Feature
对象type
属性为"Feature"
,由几何对象和属性信息构成。
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}
}
5. GeoJSON要素集对象
要素FeatureCollection
对象type
属性为"FeatureCollection"
,由features
数组构成。元素是Feature
对象。
{
"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"
}
}
}]
}
6. 注意
GeoJSON
坐标对是经度在前,纬度在后,即[longitude,latitude]
GeoJSON
遵循右手规则,即外环为逆时针,内环为顺时针。GeoJSON
数据都有一个type
属性,Geometry
对象为对应Geometry
类型值,Feature
对象为"Feature"
,FeatureCollection
对象为"FeatureCollection"
GeoJSON
数据可能会有额外属性"bbox"
或者用户自定义属性,"bbox"
值为:["west", "south", "east", "north"]
,即[xmin,ymin,xmax,ymax]
❝
OpenLayers示例数据下载,请在公众号后台回复:ol数据
全国信息化工程师-GIS 应用水平考试资料,请在公众号后台回复:GIS考试
❝
GIS之路公众号已经接入了智能助手,欢迎大家前来提问。
欢迎访问我的博客网站-长谈GIS:
http://shanhaitalk.com
都看到这了,不要忘记点赞、收藏+关注 哦!
本号不定时更新有关 GIS开发 相关内容,欢迎关注