简述一下背景
最近在工作中接触了一些和不同类型的存储矢量数据的数据,往往要把获取到的这些数据转变为可以在ArcGIS中显示的矢量图形,所以研究了一下各种类型数据的格式。
WKT数据
WKT(Well-known text)我主要是在一些网站的返回数据里见过,格式大致是这样的:
- 点
POINT (30 10)
- 线
LINESTRING (30 10, 10 30, 40 40)
- 多条线
MULTILINESTRING ((10 10, 20 20, 10 40),(40 40, 30 30, 40 20, 30 10))
- 面
POLYGON ((30 10, 40 40, 20 40, 10 20, 30 10))
- 多个面
MULTIPOLYGON (((30 20, 45 40, 10 40, 30 20)),((15 5, 40 10, 10 20, 5 10, 15 5)))
有一个可以在线绘制的网站 wkt在线绘制
GeoJSON
与WKT数据不同的地方除了格式不一样之外,GeoJSON还可以存储图形的属性数据
可以在ArcGIS Pro里通过工具箱工具转换为矢量数据,具体方法为【工具箱】-【转换工具】-【JSON】-【JSON转要素】
在ArcMap中只可以把要素转为GeoJSON,反过来不行,操作方法类似上面,最后一步要选【要素转JSON】,输出时有一个可选项【GeoJSON(可选)】,选中就可以输出了。
有一个可以在线绘制的网站 geojson在线绘制
总体结构如下:
1 | { |
其中”properties”里具体的属性可以自定义,上面只是示意。
上面”geometry”字段的属性也就是图形信息的格式如下:
- 点
{ “type”: “Point”, “coordinates”: [30, 10] }
- 线
{ “type”: “LineString”, “coordinates”: [ [30, 10], [10, 30], [40, 40] ] }
- 多条线
{ “type”: “MultiLineString”, “coordinates”: [ [[10, 10], [20, 20], [10, 40]], [[40, 40], [30, 30], [40, 20], [30, 10]] ] }
- 面
{ “type”: “Polygon”, “coordinates”: [ [[30, 10], [40, 40], [20, 40], [10, 20], [30, 10]] ] }
- 多个面
{ “type”: “MultiPolygon”, “coordinates”: [ [ [[30, 20], [45, 40], [10, 40], [30, 20]] ], [ [[15, 5], [40, 10], [10, 20], [5, 10], [15, 5]] ] ] }
Esri JSON
这个是可以导入到ArcMap或者ArcGIS Pro里的JSON数据格式,都可以通过工具箱工具转换为矢量数据,具体方法为【工具箱】-【转换工具】-【JSON】-【JSON转要素】
整体的结构可以参考 官方说明文档 JSON Response syntax
1 | { |
大多都是可选的字段,必选的有表示图形元素类型的"geometryType"
、表示坐标系的"spatialReference"
、表示各图形元素中字段的基本信息的"fields"
,这里也相当于是ArcGIS里查看的矢量数据的属性表里的表头部分,"features"
是一个列表,包括了每一个具体的图形要素,其中每个要素均为一个字典,包括表示属性的"attributes"
和表示空间信息的"geometry"
两个键,其中"attributes"
是由描述要素各个属性的键值对组成,所有的键需要在前面"fields"
中出现过才可以。
每一类图形要素的格式可以参考官方文档 Geometry objects
上面”geometry”字段的属性:
- 点
{
“x”: -118.15,
“y”: 33.80,
}
- 线
1
2
3
4
5
6
7
8{
"paths": [
[
[<x11>, <y11>],
[<x1N>, <y1N>]
]
],
} - 多条线
1
2
3
4
5
6
7
8
9
10
11
12{
"paths": [
[
[<x11>, <y11>],
[<x1N>, <y1N>]
],
[
[<xk1>, <yk1>],
[<xkM>, <ykM>]
]
],
} - 面
1
2
3
4
5
6
7
8
9{
"rings": [
[
[<x11>, <y11>],
[<x1N>, <y1N>],
[<x11>, <y11>],//终点坐标应该于起点坐标一致,不过也许也可以省略
]
],
} - 多个面
1 | { |