一、简介
Shp格式是GIS中非常重要的数据格式,主要在Arcgis中使用,但在进行很多基于网页的空间数据可视化时,通常只接受GeoJSON格式的数据,众所周知JSON(JavaScript Object Nonation)是利用键值对+嵌套来表示数据的一种格式,以其轻量、易解析的优点,被广泛使用与各种领域,而GeoJSON就是指在一套规定的语法规则下用JSON格式存储矢量数据,本文就将针对GeoJSON的语法规则,以及如何利用Python完成Shp格式到GeoJSON格式的转换进行介绍。
二、Shp转GeoJSON
2.1 GeoJSON格式说明
GeoJSON本质依旧是JSON,其基本格式如下:
{ "type": "FeatureCollection", "features": [] }
一个完整的GeoJSON文件最外层为一个字典,把整个GeoJSON文件看做自顶向下的树状结构的话,其根目录包含键值对 “type”:”FeaturesCollection” ,以及存放所有要素的键值对 “features”:[] ,所有矢量要素都存放在这个列表中,每个要素都是一个字典,下面我们来认
识一下各种矢量要素在GeoJSON中的规范格式:
点要素(Point):
对于单个点要素,其格式如下:
{"type":"Feature", "properties":{value1,value2}, "geometry":{ "type":"Point", "coordinates":[经度,纬度] } }
其中properties对应的值为这个要素对应的属性表中按顺序存放的值,geometry对应的值中type指明了要素类型,coordinates传入一个包含两个元素的列表,第一个元素代表经度,第二个元素代表纬度。
多点要素(MultiPoint):
多点要素是点要素的特殊情况,其geometry下的type属性传入”MultiPoint”,其coordinates属性传入的是一个二维列表,其最内层列表定义了每个点的经纬度,如下:
{"type":"Feature", "properties":{value1,value2}, "geometry":{ "type":"MultiPoint", "coordinates":[[经度1,纬度1], [经度2,纬度2] ] } }
线要素(LineString):
线要素记录的是一条线上所有折点的经纬度信息,只需要按顺序连接这些折点就可以还原一条线的形态,在GeoJSON中线要素与多点要素在coordinates属性上格式相同,区别在于geometry属性需要传入”LineString”,如下:
{"type":"Feature", "properties":{value1,value2}, "geometry":{ "type":"LineString", "coordinates":[[经度1,纬度1], [经度2,纬度2], [经度3,纬度3], [经度4,,纬度4]] } }
多线要素(MultiLineString):
多线要素是多个线要素的组合,因此其coordinates传入三维列表,来组合多条线,对应的geometry下type属性为”MultiLineString”,如下:
{"type":"Feature", "properties":{value1,value2}, "geometry":{ "type":"MultiLineString", "coordinates": [ [ [经度1,纬度1], [经度2,纬度2], [经度3,纬度3], [经度4,纬度4] ], [ [经度5,纬度5], [经度6,纬度6] ] ] } }
多边形要素(Polygon):
多边形要素记录了构成一个多边形所有边缘折点的经纬度信息,其coordinates属性传入”Polygon”,其geometry下type属性格式为三维列表,其第三层列表中嵌套的所有列表记录的经纬度按顺序连接即构成了一个多边形,但需要注意的是,多边形头尾折点的经纬度需要相同,才能构成一个闭合的多边形,如下:
{"type":"Feature", "properties":{value1,value2}, "geometry":{ "type":"Polygon", "coordinates":[ [ [经度1,纬度1], [经度2,纬度2], [经度3,纬度3], [经度4,纬度4], [经度1,纬度1] ] ] } }