【Python&Geo】Shapefile转geojson

矢量数据格式

矢量数据目前是最常用的地理空间格式,因为它是存储空间信息最有效的一种方式。而且大体上来说,计算机存储和处理所需的资源少于栅格数据。

矢量数据只存储几何图元,包括点、线和多边形。

Shapefile

使用最普遍的地理空间格式是Esri的Shapefile文件。1998年,地理信息软件公司Esri将Shapefile文件格式标准作为一种开放规范。

项目Shapefile文件支持的文件扩展名 用途 备注
.shp 用于存储要素几何的主文件其中包括几何图形 必要文件。某些软件只需要读取.shp文件中的几何元素,而不需要.shx和.dbf文件
.shx 形状索引文件,适当尺寸的几何元素索引信息可以加快访问 必要文件。这个文件必须和.shp文件配合使用,否则就会失去意义
.dbf 数据库文件,其中包括几何元素的属性信息 必要文件。基于非常古老的FoxPro和Dbase格式设计。目前在开放规范中称其为Xbase。.dbf文件可以被大部分电子表格软件打开
.sbn 空间bin文件,Shapefile文件的索引文件 包含一个特征的边框,映射了一个256×256的整数网格。很常见
.sbx .sbn文件的索引记录文件 常用空间索引的有序记录索引。很常见
.prj 以WKT格式存储的地图投影信息 很常见的文件并且常用于GIS软件中地图实时投影。相同的格式文件对栅格数据也适用
.fbn 只读特征元素的空间索引 非常少见
.fbx .fbn文件空间索引的记录索引 非常少见
.ixs 地理编码索引 地理编码应用中很常见,其中包括车辆导航类应用
.mxs 另外一种地理编码索引 比.ixs格式少见一些
.aih 属性索引 非常传统的格式,现代软件已经很少使用
.aih 属性索引 和.ain文件搭配使用
.qix 四叉树索引 开源社区发明的一种空间索引格式,因为Esri直到最近才提供了.sbn和.sbx文件的说明文档
.atx 属性索引 Esri发布的软件中采用的一种特殊的属性索引,可以加快属性查询速度
.shp.xml 元数据 地理空间元数据.xml的容器,可以是任何遵循XML标准的信息,其中的标准包括FGDC和ISO
.cpg .dbf的代码文件 为.dbf文件提供国际化支持

geojson

GeoJOSN是基于JavaScript对象表示(JavaScript Object Notation,JSON)格式的一种新的、智能化的文本格式,其中JSON用作数据交换格式已经很多年了。除了历史较短,GeoJSON已被主流的地理空间软件和大部分网站发布数据所采用,因为JavaScript是动态网页支持的语言,GeoJSON能够和JavaScript无缝集成。下面是一个点的示例文件:
【Python&Geo】Shapefile转geojson_第1张图片

Shapefile转geojson

方法一:ogr2ogr命令转换文件格式

下载这个软件。根据电脑是win32还是x64的进行选择。
【Python&Geo】Shapefile转geojson_第2张图片
如果是,windows,大家要下载zip版本
【Python&Geo】Shapefile转geojson_第3张图片
下载后解压,运行SDKShell.bat:
【Python&Geo】Shapefile转geojson_第4张图片
然后以命令行式进行输入:

#Shapefile转geojson
ogr2ogr -f GeoJSON D:\\xxx\\result.geosion D:\\xxx\\mangrove.shp

【Python&Geo】Shapefile转geojson_第5张图片

#当然也可以GeoJson转shp
ogr2ogr -f "ESRI Shapefile" D:\\xxx\\result.shp  D:\\xxx\\test.geojson

方法二:Python

1、需要安装geopandas

可以使用pip进行安装,也可以使用conda 安装,但需要把其他的一些依赖库事先安装好(numpy, pandas, shapely, fiona, pyproj等)。最省事的就是利用Anaconda安装。
【Python&Geo】Shapefile转geojson_第6张图片

2、代码

两个参数,input_file(输入的文件,xxx.shp),output_file(输出的文件,xxx.json)。主要代码只有两行:读数据(read_file),写数据(to_file);写数据时指定 driver=“GeoJSON” 即可;为防止中文乱码,指定 encoding=‘utf-8’。

import geopandas as gpd

def Shptogeoj(input_file, output_file):
    data = gpd.read_file(input_file)
    # 指定utf-8编码,防止中文乱码
    data.to_file(output_file, driver="GeoJSON", encoding='utf-8')
    print('Success: File '+input_file.split('\\') [-1] + ' conversion completed')

if __name__ == '__main__':
    input_file = r"MSCities_Geo_Pts\MSCities_Geo_Pts.shp"
    output_file = "MSCities_Geo_Pts_toGeojson.txt"
    Shptogeoj(input_file,output_file)

总结

学习笔记,仅供学习,如有侵权请联系删除。
参考:
《Python地理空间分析指南 第2版》
Python+GIS — shapefile转geojson(核心代码只需2行)
Geojson转Shapefile

你可能感兴趣的:(GIS,Geospatial,Analysis,Anaconda,python,pycharm,qgis)