【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无缝集成。下面是一个点的示例文件:
在这里插入图片描述

Shapefile转geojson

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

下载这个软件。根据电脑是win32还是x64的进行选择。
在这里插入图片描述
如果是,windows,大家要下载zip版本
在这里插入图片描述
下载后解压,运行SDKShell.bat:
在这里插入图片描述
然后以命令行式进行输入:

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

在这里插入图片描述

#当然也可以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安装。
在这里插入图片描述

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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值