GeoJSON

GeoJSON是一种基于Javascript对象表示法的 地理空间信息 数据交换格式。GeoJSON对象可以表示 几何 特征 或者 特征集合 。GeoJSON支持下面几何类型: 点、线、面、多点、多线、多面 几何集合 。GeoJSON里的特征包含一个 几何对象和其他属性 ,特征集合表示 一系列特征
一个完整的GeoJSON数据结构总是一个(JSON术语里的)对象。在GeoJSON里,对象由名/值对--也称作成员的集合组成。对每个成员来说,名字总是字符串。成员的值要么是字符串、数字、对象、数组,要么是下面文本常量中的一个:"true","false"和"null"。数组是由值是上面所说的元素组成。
GeoJSON总是由一个单独的对象组成。这个对象(指的是下面的GeoJSON对象)表示几何、特征或者特征集合。
  • GeoJSON对象可能有任何数目成员(名/值对)。
  • GeoJSON对象必须有一个 名字为"type"的成员 。这个成员的值是由GeoJSON对象的类型所确定的字符串。
  • type成员的值必须是下面之一: "Point", "MultiPoint", "LineString", "MultiLineString", "Polygon", "MultiPolygon", "GeometryCollection", "Feature", 或者 "FeatureCollection"
  • GeoJSON对象可能有一个可选的" crs "成员,它的值必须是一个坐标参考系统的对象。
  • GeoJSON对象可能有一个" bbox "成员,它的值必须是边界框数组。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
GeoJSON特征集合:
{
     "type": "FeatureCollection",
     "features": [{
             "type": "Feature",
             "geometry": {
                 "type": "Point",
                 "coordinates": [102.0, 0.5]
             },
             "properties": {
                 "prop0": "value0"
             }
         }, {
             "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"
                 }
             }
         }
     ]
}

   
   

点的数据格式

{
  "type": "Feature",
  "geometry": {
    "type": "Point",
    "coordinates": [125.6, 10.1]
  },
  "properties": {
    "name": "Dinagat Islands"
  }
}
是一个特征feature。它包含几何要素属性几何要素包含要素的类型和坐标属性可以包含各种数据类型。

线的数据格式

 {
  "type": "LineString",
  "coordinates": [ [100.0, 0.0], [101.0, 1.0] ]
}

线状数据由两个以上的点组合而成,在坐标的外面多包上一层中括号,表示json中的数组。

面的数据格式

 {
   "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": "FeatureCollection",
    "features": [
      { "type": "Feature",
        "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
        "properties": {"prop0": "value0"}
        },
      { "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"}
           }
         }
       ]
     }

不同的数据类型间可以包成一个FeatureCollection,最外层有个type来表示类型,而features指向各个feature数组。有人肯定会疑惑shp中有proj的属性,geojson中可以用crsbbox来表示投影参数和边界范围,详情参考

案例

这里分享一个小案例。

网友问我,获取大批量线段的起点和终点。

我的第一反应就是并不是用arcpy等api,这方法也可行,但是并不是最简洁的方法。我的解决方法是最直接的:

  • 通过qgis将shapefile文件转换成geojson
  • 用python内置库json去解析获取数据

这样相对来说,虽然多了一个数据转换的过程,但是结合本章内容,geojson是文本,结构简洁,方便解析。数据可以很容易获取且替换。这个小实验作为课余作业。json的解析大概是10行代码左右,熟悉python的高手可能5行代码就搞定,比arcpy大大节省代码。



作者:brandonxiang
链接:https://www.jianshu.com/p/144033b1b87e
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值