Python:Shapefile矢量转化为GeoJSON格式
在最近的项目中,完成了许多python处理矢量数据的算法程序,比如缓冲区分析、叠置分析、统计分析等,主要用到的是GDAL/OGR库,很多功能都参照了此链接中的示例:http://pcjericks.github.io/py-gdalogr-cookbook/#
由于完成的功能在上面链接中都能找到实现的代码,所以原来不打算写博客的,但是今天写的这个SHP转GeoJSON的算法把我坑得不轻,着实郁闷了好久才解决,因此就写一下权当纪念吧。有时候写程序真的是一件充满玄学的事情,原理上怎么看怎么对,但是运行起来却偏偏不是那回事,就算调试也给你不报错直接闪退,特别是处理空间数据时属性的编码问题,更是搞得人头皮发麻。这种情况下,能不能调的出来全靠运气,搞不好一个小问题卡一个星期都是正常,这可能也是程序员普遍发量稀少的原因吧。更加玄学的是,解决问题的方式又常常充满戏剧性,折腾了一个早上加半个下午没找到原因,起来喝杯水却突然灵感乍现,三四行代码调整一下顺序,一顿骚操作,点击运行,突然就能运行成功了,再看一下结果,还真是对的!山穷水尽疑无路,柳暗花明又一村,这种感觉真是刺激。
好了,将Shapefile转化为GeoJSON的完整代码如下:
# -*- coding: utf-8 -*-
from osgeo import ogr
import gdal
import sys
import os def ChangeToJson(vector, output):
print("Starting........")
#打开矢量图层
gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")
gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
shp_ds = ogr.Open(vector)
shp_lyr = shp_ds.GetLayer(0) # 创建结果Geojson
baseName = os.path.basename(output)
out_driver = ogr.GetDriverByName('GeoJSON')
out_ds = out_driver.CreateDataSource(output)
if out_ds.GetLayer(baseName):
out_ds.DeleteLayer(baseName)
out_lyr = out_ds.CreateLayer(baseName, shp_lyr.GetSpatialRef())
out_lyr.CreateFields(shp_lyr.schema)
out_feat = ogr.Feature(out_lyr.GetLayerDefn()) #生成结果文件
for feature in shp_lyr:
out_feat.SetGeometry(feature.geometry())
for j in range(feature.GetFieldCount()):
out_feat.SetField(j, feature.GetField(j))
out_lyr.CreateFeature(out_feat) del out_ds
del shp_ds
print("Success........") if __name__ == '__main__':
shapefile = 'D:/Python37Work/HainanAOI/affected_bridge.shp'
out = 'D:/Python37Work/HainanAOI/affected_bridge.json'
ChangeToJson(shapefile, out)
有以下几个注意事项:
1、gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES")和gdal.SetConfigOption("SHAPE_ENCODING", "GBK")
这两行用于支持中文,前一句用于支持文件名称及路径内的中文,后一句用于支持属性字段中的中文,最好将其放在最前面,否则读取矢量文件时不能按GBK编码方式读取。
2、out_lyr.CreateFields(shp_lyr.schema)和out_feat = ogr.Feature(out_lyr.GetLayerDefn())
这两句的顺序一定不能错,否则会导致部分字段无法写入,应该是先对out_lyr创建相应的字段,然后再由out_feat来一个个生成Feature。
最终生成的.json文件内容如下:

Python:Shapefile矢量转化为GeoJSON格式的更多相关文章
- 用shp制作geoJson格式地图数据(shp convert to geoJson)
本文紧接前文,简单说明利用shp数据制作Echarts支持的geoJson格式的地图数据.本文以北京市通州区各镇的shp数据为例进行说明. 软件环境: ArcGIS 10.2 (ArcGIS 10.2 ...
- GeoJson格式与转换(shapefile)Geotools
转自:https://blog.csdn.net/cobramonkey/article/details/71124888 作为大数据分析的重要工具,Hadoop在这一领域发挥着不可或缺的作用.有些人 ...
- Python:GeoJson格式的多边形裁剪Tiff影像并计算栅格数值
JSON是通过键值对表示数据对象的一种格式,其全称为JavaScript Object Notation,它采用完全独立于编程语言的文本格式来存储和表示数据,轻量级.简洁清晰的层次结构.容易解析等特点 ...
- 将搜狗词库.scel格式转化为.txt格式
由于项目中要用到词库,而下载的搜狗词库是.scel格式,所以就用python脚本将搜狗词库.scel格式文件转化为.txt格式文件. #!/bin/python # -*- coding: utf-8 ...
- Python将html转化为pdf
前言 前面我们对博客园的文章进行了爬取,结果比较令人满意,可以一下子下载某个博主的所有文章了.但是,我们获取的只有文章中的文本内容,并且是没有排版的,看起来也比较费劲... 咋么办的?一个比较好的方法 ...
- TensorFlow 自定义模型导出:将 .ckpt 格式转化为 .pb 格式
本文承接上文 TensorFlow-slim 训练 CNN 分类模型(续),阐述通过 tf.contrib.slim 的函数 slim.learning.train 训练的模型,怎么通过人为的加入数据 ...
- 怎么将txt文件转化为html格式的文件?--极为丑陋的方式
# -*- coding: utf-8 -*- #python 27 #xiaodeng #怎么将txt文件转化为html格式的文件?--极为丑陋的方式 import os #找出所有的txt格式的文 ...
- GeoJSON格式规范说明
GeoJSON格式规范说明 1.简介 GeoJSON是一种对各种地理数据结构进行编码的格式.GeoJSON对象可以表示几何.特征或者特征集合.GeoJSON支持下面几何类型:点.线.面.多点.多线.多 ...
- 安装.cer证书并将证书从.cer格式转化为.pem格式
## 安装.cer证书并将证书从.cer格式转化为.pem格式 ### 安装.cer证书到本地 打开*运行*窗口 输入MMC.exe, 单击*确定* 在打开的控制台1的窗口中. 选择*文件*, 选择* ...
随机推荐
- html两端对齐的代码
html语言两端对齐的代码为: <p style="text-align:justify; text-justify:inter-ideograph;"> 文字,需要对 ...
- Spring cloud微服务安全实战-4-11Zuul网关安全开发(四)
限流,有个现成的开源项目可以帮助我们来做网关上的限流 用最新的这个版本 在pom.xml加入引用. 在限流的过程中需要存一些信息,可以存在数据库里 也可以存在redis里.这里我们演示存到数据库里 比 ...
- LeetCode_237. Delete Node in a Linked List
237. Delete Node in a Linked List Easy Write a function to delete a node (except the tail) in a sing ...
- 【物联网】arduino wifi
https://www.arduino.cn/forum.php?mod=viewthread&tid=49561 http://dy.163.com/v2/article/detail/DC ...
- jvm(3)---常用监控工具指令
1.jps 查看jvm中运行的进程(获取对应pid) 参数:默认-V(大写) -v: 列出jvm启动参数. ---------------------------------- 2.jstack pi ...
- 最新 中细软java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.中细软等10家互联网公司的校招Offer,因为某些自身原因最终选择了 中细软.6.7月主要是做系统复习.项目复盘.LeetC ...
- javascrtpt DOM操作
DOM DOM:(document object mode)文档对象模型.DOM为文档提供了结构化表示,并定义了如何通过脚本来访问文档结构. 目的就是为了能让js操作html元素而制定的一个规范 DO ...
- LeetCode 605. 种花问题(Can Place Flowers) 6
605. 种花问题 605. Can Place Flowers 题目描述 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去. ...
- TensorSpace:超酷炫3D神经网络可视化框架
TensorSpace:超酷炫3D神经网络可视化框架 TensorSpace - 一款 3D 模型可视化框架,支持多种模型,帮助你可视化层间输出,更直观地展示模型的输入输出,帮助理解模型结构和输出方法 ...
- CentOS7 Python3下安装 TensorToolbox 1.0.22时的一些错误及解决办法
CentOS7 Python3下安装 TensorToolbox 1.0.22 (python3) [jiangshan@localhost ~]$ pip install TensorToolbox ...