你知道 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
 后端开发教程 - Java、Spring Boot 实战 - msg200.com
            后端开发教程 - Java、Spring Boot 实战 - msg200.com
          



