GeoJSON数据格式解析
GeoJSON数据格式
https://www.bilibili.com/video/BV1VK4y1M78n?spm_id_from=333.337.search-card.all.click
Mapbox和PostGis里面常用的数据格式是GeoJSON
TopoJSON压缩率比GeoJSON更高
TopoJSON 是 GeoJSON 的扩展,增加了拓扑逻辑的编码。
TopoJSON 文件中的几何图形不是独立地表示,而是由共享的线段(称为弧线)拼接而成。TopoJSON 消除了冗余,提供了比 GeoJSON 更紧凑的几何表示;典型的 TopoJSON 文件比 GeoJSON 等价文件小 80%。此外,TopoJSON 还为使用拓扑的应用提供了便利,如拓扑保护形状简化、自动地图着色和制图。
GeoJSON手册
GeoJSON 是一种用于编码各种地理数据结构的格式。
// Feature:表示这是一个要素
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}
}
GeoJSON 支持以下几何类型:Point
、LineString
(线)、 Polygon
(面)、MultiPoint
、MultiLineString
和MultiPolygon
。具有附加属性的几何对象是Feature
对象。特征集包含在FeatureCollection
对象中。
- MultiPolygon:这个面覆盖着好多的小岛
- FeatureCollection(要素集合):多个Feature放在一起,一个要素集合也是一个标准的Geojson格式
- 单独一个点,一个线,一个面也是一个标准的Geojson格式
GeoJSON格式规范说明
https://www.oschina.net/translate/geojson-spec
1. GeoJSON特征集合
// 前后台开发使用的时候FeatureCollection只会寸一种类型,要么是点,要么是线,要么是面
{ "type": "FeatureCollection", // type标识这一段是什么东西:Feature的集合
"features": [
{ "type": "Feature", // 一个Feature要素是包含图形和属性在一起的
// geometry里面也是一个对象,对象里面的type就是点线面、多点、多线、多面六种
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]}, // geometry:图形
"properties": {"prop0": "value0"} // properties:属性
},
// 一个Feature里type和geometry是必须的,properties不是必须的
{ "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的网站:http://geojson.io/#map=2/50.5/50.3
// 一个geometry可以被geojson.io进行解析,所以一个geomtry也可以被称为genjson
{
"type": "LineString",
"coordinates": [
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
]
}
!
// 一个Feature也被认为是一个标准的geojson
{ "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
}
}
!
// 标准的FeatureCollection格式
{
"type": "FeatureCollection",
"features": [
{ "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
}
}]
}

2. GeoJSON对象
GeoJSON总是由一个单独的对象组成。这个对象(指的是下面的GeoJSON对象)表示几何、特征或者特征集合。
- GeoJSON对象可能有任何数目成员(名/值对)。
- GeoJSON对象必须由一个名字为"type"的成员。这个成员的值是由GeoJSON对象的类型所确定的字符串。
- type成员的值必须是下面之一:"Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"。这儿type成员值必须如这儿所示。
- Mapbox GL不支持Geometry Collection
- GeoJSON对象可能有一个可选的"crs"成员,它的值必须是一个坐标参考系统的对象(见3.坐标参考系统对象)。
- GeoJSON对象可能有一个"bbox"成员,它的值必须是边界框数组(见4.边界框)。
2.1 位置
2.1.1 面
对类型"Polygon"来说,"coordinates"成员必须是一个线性环坐标数组的数组。对拥有多个环的的面来说,第一个环必须是外部环,其他的必须是内部环或者孔。
第一个面是大面,如果有第二个面就认为这第二个面是一个洞
附录A.集合例子
下面例子中的每一个都表示一个完整的GeoJSON对象。注意JSON对象里的结尾的空白字符没有意义。例子里所用的空白符有助于说明这个数据结构,不过不是必需的。
// 点坐标是按照x,y顺序的(投影坐标的东向、北向,地理坐标的长度、高度):
// coordinates是一个一维数组,第一个是x,第二个是y
{ "type": "Point", "coordinates": [100.0, 0.0] }
// 线的坐标是位置数组,二维数组,两点确定一条直线
{ "type": "LineString",
"coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}
// 面的坐标是线性环坐标数组的数组。这个数组的第一个元素表示的是外部环。其他后续的元素表示的内部环(或者孔)。
// 没有孔的:
// 二维数组:四边形用5个点表示,最后一个点闭合回初始位置
{ "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.2, 0.2], [100.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2] ]
]
}
// 多面的坐标是面坐标数组的数组
{ "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.8, 0.2], [100.8, 0.8], [100.2, 0.8], [100.2, 0.2]]]
]
}



本文作者:风帆远航
本文链接:https://www.cnblogs.com/flying-birds-xyg/p/16121111.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步