你知道 GeoJSON 吗?
介绍
术语
几何类型
资源
介绍
对于那些不知道的人来说,GeoJSON 是用于存储位置数据和地理特征的标准数据格式。
内容
- 术语
- 不同的几何类型
- 资源
GeoJSON 只是一个 JSON 对象。它与普通 JSON 数据类型的区别在于其规范。
一些数据库(例如 Mongo DB)已正式支持 GeoJSON 数据类型。就像 MongoDB 识别字符串和整数类型一样,它能够识别 GeoJSON 并将其与普通 JSON 区分开来。它还支持对 GeoJSON 进行索引和查询
在这篇文章中,我将介绍 GeoJSON 数据类型的一些基本概念。
典型的 GeoJSON 格式如下所示。
别担心,我们在下面已经详细讨论了所有内容。
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [-40.078125,70.72897946208789]
}
}
术语
坐标
地图上的单个点称为坐标。
当我们指向地图上的某个位置时,我们指向的是一些经度和纬度单位。我们将这些单位存储在一个称为“坐标”的数组中。
坐标数组包含两个元素:经度和纬度。
注意:顺序很重要。coordinates : [ longitude , latitude ]
几何学
将几何体视为结构。几何体定义了坐标的存储结构。
有一些预定义的区分大小写的几何体类型,例如“点”、“线”、“多边形”等等。我们将逐一介绍它们。
一个典型的几何体如下所示
"geometry": {
"type": "Point",
"coordinates": [longitude,latitude]
}
“类型”
每个几何体都必须有一个名为“type”的属性,其值必须是GeoJSON RFC中提到的 GeoJSON 类型之一
有一些几何类型用于存储其他几何类型。它们是“Feature”和“FeatureCollection”,我们在下面讨论过它们。
几何类型
观点
点是地图上的单个点或标记。其几何形状包含单个坐标。这可用于存储单个地点,例如商店。
"geometry": {
"type": "Point",
"coordinates": [
78.4918212890625,
22.304343762932216
]
}
多点
顾名思义,MultiPoint 几何体用于在单个几何体中存储多个坐标点。坐标数组中的每个元素本身就是一个坐标。这可以用来存储收藏地点列表。
{
"type": "MultiPoint",
"coordinates": [
[80.26951432228088,13.09223800602329],
[80.27061939239502,13.091631907724683],
[80.2714991569519,13.09260375427521],
[80.27050137519836,13.093241199930675]
]
}
线串
它们是一排点。JSON 结构与 MultiPoint 相同,但由于它是 LinePoint 类型,因此各个坐标被视为一条相连的线,而不是分散的点。
"geometry": {
"type": "LineString",
"coordinates": [
[80.2122116088867,13.113586344333864],
[80.25959014892577,13.072121016365408],
[80.29048919677733,13.114923819297273],
[80.3207015991211,13.075799674224164],
[80.33477783203125,13.112248862097216]
]
}
多行字符串
顾名思义,它用于在单个几何体中存储多个 LineString。Coordinates 数组的每个元素都类似于一个 LineString Coordinates 数组。
"geometry":{"type": "MultiLineString",
"coordinates" : [
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]
],
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]
],
[
[longitude,latitude],
[longitude,latitude],
[longitude,latitude]
],
]}
多边形
RFC 规范将多边形定义为线性环。如果您想知道什么是线性环,我也是。
这么说吧,多边形是任何闭合的形状,没错,任何形状。在这篇文章的女巫集会图片中,每个字母都是一个多边形。
如果你理解了 LineString 的概念,那么 RFC 规范还定义了多边形是闭合的 LineString,也就是说,多边形是任何闭合的形状。闭合的 LineString 意味着第一个坐标和最后一个坐标相同。
这可以用来存储边界。可以是国家边界、城市边界、村庄边界,也可以是某个地区的边界。
"geometry": {
"type": "Polygon",
"coordinates": [
[
[78.44238281249999,22.62415215809042],
[77.8436279296875,22.151795575397756],
[78.486328125,21.764601405743978],
[79.0521240234375,22.233175265402785],
[78.44238281249999,22.62415215809042]
]
]
}
多边形
到现在你应该已经猜到了,和 MultiPoint 和 MultiLine 一样,MultiPolygon 也是 Polygon 的集合。你可以用它来存储一个州内不同城市的边界信息。
这篇文章的封面图片可以是 MultiPolygon 的一个例子
特征和特征集合
重点来了。现在你学习了如何以点、线、面等各种结构存储地理数据。那么,如何存储这些位置的信息呢?
存储地理信息的正确方法是使用 Feature 和 FeatureCollection。
GeoJSON Feature 和 FeatureCollections 本身就是几何体。它们是一种用于存储其他几何体及其属性(信息)的几何体。
典型的特征如下
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [-10.0,-10.0]
},
"properties": {
"temperature": "4C",
"country": "IN",
"somepropertyName": "Some description"
}
}
在上面的 GeoJSON 中,几何体可以是我们之前讨论过的任何类型,如点、线或多边形,并且属性包含有关该几何体的数据和信息。
特征集合
顾名思义,FeatureCollection GeoJSON 包含一个要素集合。
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [78.31054687499999,22.39071391683855]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [78.486328125,11.43695521614319]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [77.9150390625,27.176469131898898]
}
},
{
"type": "Feature",
"properties": {},
"geometry": {
"type": "Point",
"coordinates": [75.673828125,19.766703551716976]
}
}
]
}
资源
-
GeoJSON 的 RFC 规范
https://tools.ietf.org/html/rfc7946 -
使用 GeoJSON 进行交互式实践
https://geojson.io/ -
最佳 JS 地图库
Leaflet.js