Python shapefile转GeoJson的两种方式
GeoJson的简要介绍
GeoJson是用json的语法表达和存储地理数据,可以说是json的子集。
GeoJson以键值对的形式保存原有对象的信息,具有轻量化、易解析等优点。
GeoJson包括的地理要素有Point(点)、 MultiPoint(多点)、 LineString(线)、MultiLineString(多线)、 Polygon(面)、 MultiPolygon(多面)、 GeometryCollection(几何集合)
这些地理要素包括在geometry的type属性中,并且不同的type具有不同的coordinates值。更多的GeoJson相关内容可参考RFC7946标准。
{"type": "MultiPoint","coordinates": [[100.0, 0.0],[101.0, 1.0]]}{"type": "MultiPolygon","coordinates": [[[[102.0, 2.0],[103.0, 2.0],[103.0, 3.0],[102.0, 3.0],[102.0, 2.0]]],[[[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.2, 0.8],[100.8, 0.8],[100.8, 0.2],[100.2, 0.2]]]]}
两种将shapefile文件转换为GeoJson的方式
1. 使用geopandas
- 核心代码:geopandas.GeoSeries 和out_data.to_file
import geopandas as gpddef shp2geojson_gpd(shp_file, geojson_file):"""将shapefile格式的文件转化为geojson:param shp_file: 需要转换的shapefile文件名,投影信息可以缺失,也可以指定:param geojson_file: 转换输出的geojson文件名"""if os.path.exists(geojson_file):os.remove(geojson_file)out_data = gpd.read_file(shp_file)crs = out_data.crsout_data = gpd.GeoSeries(out_data.geometry, crs=crs)out_data.to_file(geojson_file, driver='GeoJSON', encoding="utf-8")print("successfully convert shapefile to geojson")
使用geopandas转换的时候两行核心代码即可搞定,简单粗暴。但是在实践过程中发现,采用geopandas转换后的GeoJson文件并没有保留shapefile中的属性properities信息,如area, name等,如下图所示:
2. 使用gdal
import gdal
import ogr
import osdef shp2geojson_gdal(shp_file, geojson_file):gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")gdal.SetConfigOption("SHAPE_ENCODING", "GBK")src_ds = ogr.Open(shp_file)src_layer = src_ds.GetLayer(0)# 创建结果GeojsonbaseName = os.path.basename(geojson_file)dst_driver = ogr.GetDriverByName('GeoJSON')dst_ds = dst_driver.CreateDataSource(geojson_file)if dst_ds.GetLayer(baseName):dst_ds.DeleteLayer(baseName)dst_layer = dst_ds.CreateLayer(baseName, src_layer.GetSpatialRef())dst_layer.CreateFields(src_layer.schema)dst_feat = ogr.Feature(dst_layer.GetLayerDefn())# 生成结果文件for feature in src_layer:dst_feat.SetGeometry(feature.geometry())for j in range(feature.GetFieldCount()):dst_feat.SetField(j, feature.GetField(j))dst_layer.CreateFeature(dst_feat)del dst_dsdel src_dsprint("successfully convert shapefile to geojson")
结果包含原始shapefile文件中的属性信息:
Python shapefile转GeoJson的两种方式相关推荐
- django + python上传文件的两种方式
突然心血来潮,研究了下django+python上传文件的两种方式. 第一:直接采用文件读写的方式上传 1. settings.py文件中设置文件的存放路径和文件读取路径 MEDIA_ROOT = o ...
- Python实现图片裁剪的两种方式——Pillow和OpenCV
在这篇文章里我们聊一下Python实现图片裁剪的两种方式,一种利用了Pillow,还有一种利用了OpenCV.两种方式都需要简单的几行代码,这可能也就是现在Python那么流行的原因吧. 首先,我们有 ...
- python模块的导入的两种方式区别详解
Python 有两种导入模块的方法.两种都有用,你应该知道什么时候使用哪一种方法.一种方法,import module,另一种是from module import,下面是 from module i ...
- Python调用Jar包的两种方式
概览 因工作场景,需要在python代码里调用Jar包来实现一些功能,调研下来主要有两种方式: java -jar xx.jar JPype 环境配置 因为要在公司内网操作,所以需要通过离线方式进行安 ...
- Python实现平行坐标图的两种方式
平行坐标图,一种数据可视化的方式.以多个垂直平行的坐标轴表示多个维度,以维度上的刻度表示在该属性上对应值,相连而得的一个折线表示一个样本,以不同颜色区分类别. 但是很可惜,才疏学浅,没办法在Pytho ...
- python表单提交的两种方式_Flask框架学习笔记之表单基础介绍与表单提交方式
本文实例讲述了Flask框架学习笔记之表单基础介绍与表单提交方式.分享给大家供大家参考,具体如下: 表单介绍 表单是HTML页面中负责数据采集功能的部件.由表单标签,表单域和表单按钮组成.通过表单,将 ...
- python处理文乱码的两种方式
最近在写爬虫项目,遇到出现中文乱码的问题,汇总一下总共两种处理方式 这样与那样的乱码很头疼,但是以下方法基本可以解决 python处理中文乱码的问题: 方式一:将要处理的乱码对象设置 encoding ...
- Python导入模块(包)的两种方式 TypeError: 'module' object is not callable
Python编程时明明在开始处import了相关包,但是调用函数时就报错如下: TypeError: 'module' object is not callable Python中有两种导入包(模块, ...
- Python pip更新教程(两种方式)
1. 直接采用命令行模式更新 1.1 搜索框搜索cmd,然后以管理员模式打开 1.2 执行命令 python -m pip install --upgrade pip 1.3 查看更新后的版本 pip ...
- python表单提交的两种方式_详解flask表单提交的两种方式
一.通用方式 通用方式就是使用ajax或者$.post来提交. 前端html ... data Submit   将操作绑定 $(document).ready(function() ...
最新文章
- 美妙的模电2013/4/18
- 汉中职业技术学院计算机专业,2020年陕西省青年职业技能大赛计算机网络管理员决赛开幕式在汉中职院举行...
- android仿微博头像_Android 仿instagram和微博的头像点击加载动画
- python中文文本分析_python--文本分析
- Python学习笔记:输入和输出
- Golang之实现一个负载均衡算法(随机,轮询)
- mysql报错 DuplicateKeyException分析与解决
- 动态HTML处理和机器图像识别
- 计算机图形学E11——B样条曲线
- python3.8如何安装jieba库_安装jieba、wordcloud等第三方库
- Django新手入门(三)——使用PyCharm创建Django项目
- Windows10 永久激活查询/激活时间查询/激活查询命令/激活码查询
- 跟我做一个可以聊天的 Visual Studio Code 插件
- html文字闪烁特效代码,HTML最简单的文字闪烁代码
- 《Head First Java(第2版)中文版》辅导书
- Cannot find module ‘vite-plugin-compression‘ or its corresponding type declarations
- sklearn基础篇(三)-- 鸢尾花(iris)数据集分析和分类
- conda的一个坑。channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/pytorch - https://mirro
- CDRshp文件转html,CDR转PDF设置教程-告诉你如何把cdr转换成适合印刷的pdf
- 自媒体视频如何消重?批量处理去重消重去水印去logo软件企鹅号视频不重复必学的消重技巧...
热门文章
- 【Proteus仿真】51单片机+红外测距仪(GP2D12)+ADC0809模数转换
- 复制或粘贴内容到含有隐藏单元格的区域时如何只复制或粘贴可见单元格
- foxmail的邮局和端口_Foxmail如何进行POP、SMTP设置(pop)
- 朴素贝叶斯分类与拉普拉斯平滑
- Springboot2.X项目中添加druid连接池监控
- doapk java环境_android手机QQ尾巴修改成QQ for Pad
- droidcam调用手机摄像头的方法(提供PC+Android软件,不需要积分)
- 流媒体服务器分发RTSP视频流并发压力测试
- 谷歌金山词霸,免费又好用(附下载地址)
- IDEA安装谷歌翻译插件Translation