GeoJSON快速入门教程
Posted 新缸中之脑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GeoJSON快速入门教程相关的知识,希望对你有一定的参考价值。
GeoJSON (Geo+ JSON ) 这个名字本身就是一个赠品。GeoJSON 是一种使用javascript 对象表示法(JSON) 对地理数据结构进行编码的格式。简而言之,GeoJSON 为你提供了一种简单的格式来表示简单的地理特征以及它们的非空间属性。
如RFC 中所述,JSON 被设计为一种轻量级、基于文本且与语言无关的数据交换格式,人类和机器都易于读写。GeoJSON 基本上使用这种设计策略来表示有关地理特征、它们的属性和它们的空间范围的数据。
想看看具体例子吗?
GeoJSON 对象可以定义以下内容:
- 空间中的几何对象:例如,点、线串或多边形等。
- 特征:特征是空间有界的实体。
- 特征集合: 也称为 FeatureCollection。
1、GeoJSON对象
几何对象表示坐标空间中的点、曲线和曲面。GeoJSON RFC定义了 GeoJSON 对象可以表示的 7 种几何形状“类型” 。它们是“Point”、“MultiPoint”、“LineString”、“MultiLineString”、“Polygon”、“MultiPolygon”和“GeometryCollection”。
点、线串和多边形形状也称为单一类型的几何对象。而 MultiPoint、MultiLineString 和 MultiPolygon 也称为同构类型的多部分 Geometry 对象。
一旦理解了位置的概念,许多这些形状的构造就会变得清晰。
位置是一个基本的几何结构。简单地说,它是一个由 2 个或 3 个数字组成的数组。前两个数字代表经度和纬度(按此顺序)。第三个(可选)数字代表高度或海拔。因此,位置基本上是数组 [经度、纬度、海拔/高度]。
注意:在不同的地理工具或库中,应该是 [longitude, latitude] 还是 [latitude, longitude] 还没有达成共识。例如,Google Maps API 和 Leaflet.js 期望坐标为 [latitude, longitude],而 GeoJSON、shapefile、D3.js、ArcGIS API 期望坐标为 [longitude, latitude] 格式。因此,请始终注意你的应用程序需要什么顺序。作为参考,可以使用Tom MacWright在他的博客上提供的表格:
所有几何形状都有两个定义该形状的键值对。你可能还在上面看到的示例 GeoJSON 对象中注意到了它们。这两个键是类型和坐标。“type”必须是我们上面看到的七种类型之一,“coordinates”是一个位置值数组。该数组中元素的确切结构由几何类型决定。
1.1 Point
如你所料,如果我们想表示一个 Point 几何图形,我们需要有一个位置。
因此,可以将 GeoJSON 中的 Point 定义为:
"type": "Point",
"coordinates": [30, 10]
1.2 MultiPoint
“坐标”值将是 MultiPoint 对象的 Position 对象数组。
"type": "MultiPoint",
"coordinates": [
[10, 40], [40, 30], [20, 20], [30, 10]
]
1.3 LineString
对于LineString,我们需要提供两个位置,即线段的起点和终点。
例如:
"type": "LineString",
"coordinates": [
[30, 10], [10, 30], [40, 40]
]
1.4 MultiLineString
对于“MultiLineString”类型,“coordinates”成员是 LineString 坐标数组的数组。
"type": "MultiLineString",
"coordinates": [
[[10, 10], [20, 20], [10, 40]],
[[40, 40], [30, 30], [40, 20], [30, 10]]
]
1.5 Polygon
GeoJSON 标准中的多边形比其他几何形状稍微复杂一些。多边形在 RFC 文档中定义为:
对于“多边形”,“坐标”成员必须是线性环坐标数组的数组”。
所以要理解多边形的定义,我们必须先看一下线性环(LinearRing)的概念。
LinearRing 是具有四个或更多位置的封闭 LineString。“Closed”仅仅意味着LinearRing的起点和终点必须在同一个位置。GeoJSON 格式的多边形是根据多个 LinearRing 形状指定的。Polygon 的外边界是一个 LinearRing,并且可以有多个其他 LinearRing 形状来定义该 Polygon 内的其他复杂环形。
根据标准,“坐标”数组中的第一个 LinearRing 数组必须是外环,所有后续的 LinearRing 数组都定义了内环。RFC 7946 还定义了这些环的缠绕顺序,它指定外环位置是逆时针定义的,内环位置值是顺时针定义的。这种缠绕顺序对于许多绘图 API 都很有用。
"type": "Polygon",
"coordinates": [
[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]],
[[20, 30], [35, 35], [30, 20], [20, 30]]
]
1.6 MultiPolygon
对于“MultiPolygon”类型,“coordinates”成员是 Polygon 坐标数组的数组。
"type": "MultiPolygon",
"coordinates": [
[
[[30, 20], [45, 40], [10, 40], [30, 20]]
],
[
[[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]]
]
]
1.7 GeometryCollection
GeometryCollection 是你在上面看到的其他几何类型的异构组合。GeometryCollection 对象没有“coordinates”成员,而是有一个名为“geometries”的成员。“geometries”的值是一个数组。该数组的每个元素都是一个 GeoJSON Geometry 对象。此数组可能为空。
"type": "GeometryCollection",
"geometries": [
"type": "Point",
"coordinates": [0, 0]
,
"type": "Polygon",
"coordinates": [[[45, 45], [45, -45], [-45, -45], [-45, 45], [45,45]]]
]
1.8 Feature
在上一节中看到的几何形状定义了可以在地图上绘制的形状。然而,我们在地图上的形状也应该有一些现实世界的意义。此含义由该形状的属性定义。例如,在地图上用多边形标记的建筑物可能有一个名称属性,如“泰姬陵”,可能还有一些其他参数进一步描述了该形状。在 GeoJSON 中,“Feature”类型的对象定义实体的几何形状和属性。
Feature 对象有一个名为“type”且值为“Feature”的成员。它还有一个名为“geometry”的成员,其值为我们上面讨论的任何几何形状或空值。此外,它有一个名为“properties”的成员,其值是一个 JSON 对象(或空值),定义了该对象的属性。它还可以有一个可选的“id”成员,该成员带有一个唯一的字符串或空值,用于指定功能的标识符。
作为 Feature 对象的示例,请查看在本文开头看到的示例 GeoJSON 对象。
1.9 FeatureCollection
FeatureCollection 对象是 Feature 对象的组合。它是你将在 GeoJSON 文件中观察到的最常见的顶级结构。它有一个成员“type”,其值为“FeatureCollection”,另一个成员名为“features”,其值为 Feature 对象数组。
"type": "FeatureCollection",
"features": [
"type": "Feature",
"geometry":
"type": "Point",
"coordinates": [-80.83775386582222, 35.24980190252168]
,
"properties":
"name": "DOUBLE OAKS CENTER",
"address": "1326 WOODWARD AV"
,
"type": "Feature",
"geometry":
"type": "Point",
"coordinates": [-80.83827000459532, 35.25674709224663]
,
"properties":
"name": "DOUBLE OAKS NEIGHBORHOOD PARK",
"address": "2605 DOUBLE OAKS RD"
]
1.10 杂项 — 边界框
GeoJSON 对象还可能包含一个边界框,用于定义 GeoJSON 对象的边界范围。例如,在二维几何中,边界框只是一个名为“bbox”的成员和一个由四个数字组成的数组作为值。这四个值定义了包含完整 GeoJSON 对象的矩形。
"type": "FeatureCollection",
"bbox": [100.0, 0.0, 105.0, 1.0],
"features": [
//...
]
Cool!下载我们已经了解了掌握 GeoJSON 数据所需的基础知识,接下来看看一些可用于可视化 GeoJSON 数据的工具。
2、GeoJSON可视化工具
在本节中,我将分享一些流行的基于 GUI 的工具,你可以使用它们来快速可视化 GeoJSON 数据。
2.1 Tom的GeoJSON工具清单
Tom MacWright 在他的 Github 上有一个详尽的实用程序列表,用于转换、处理和分析 GeoJSON 数据。
2.2 GeoPandas教程
对于基于 Python 的环境(例如 Jupyter Notebook),你可以使用 GeoPandas 之类的模块。Twilio 有一个使用 Shaply 和 GeoPandas 的不错的小教程。
2.3 GeoJSON App
在GeoJSON App这个网络应用程序上,你可以直接在 Google 地图上绘制几何形状,并在两个窗格中并排显示 GeoJSON 代码。这种可视化对于理解 GeoJSON 概念非常有帮助。你也可以单击下载 .geojson 文件。
2.4 geojson.io
geojson.io是一个基于 Web 的编辑器,可以在其中导入和导出 GeoJSON 数据。它还在并排窗格中显示 GeoJSON 代码和可视化输出。
2.5 QGIS
QGIS 是一款免费的开源跨平台软件,用于查看、编辑和分析地理空间数据。QGIS 支持 GeoJSON 格式,以及大量其他地理空间数据标准。可以从这里下载和安装最新的 QGIS 软件。作为一个例子,我将使用加拿大纳奈莫市的犯罪事件数据。此数据在此处以 GeoJSON 格式提供。
在你的计算机上打开“QGIS Browser”并浏览左侧窗格中的 .geojson 文件。右侧窗格将向你显示数据点的快速预览。
可以通过单击预览选项卡旁边的属性选项卡来查看属性:
原文链接:GeoJSON简明教程 — BimAnt
以上是关于GeoJSON快速入门教程的主要内容,如果未能解决你的问题,请参考以下文章
QGIS入门实战精品教程004:如何将矢量数据转为GeoJSON格式?