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的窗口中. 选择*文件*, 选择* ...
随机推荐
- docker安装并运行mysql
docker拉取mysql镜像: [mall@VM_0_7_centos ~]$ sudo docker pull mysql:5.7 5.7: Pulling from library/mysql ...
- 前端速查手册——Note
目录 自定义弹框(模块框) HTML5新增标签 HTML5新增属性 自定义弹框(模块框) HTML <div style="display:none" id="mo ...
- linux下配置face_recognition
1.如linux下已有python2.7,但需要更新一下python 2.7至python2.x sudo add-apt-repository ppa:fkrull/deadsnakes-pytho ...
- 123457123456#5#----com.MC.HuaHuaGame866----前拼后广--babyDrawGame-mc555
com.MC.HuaHuaGame866----前拼后广--babyDrawGame-mc
- LeetCode_345. Reverse Vowels of a String
345. Reverse Vowels of a String Easy Write a function that takes a string as input and reverse only ...
- Delphi XE中使用dbExpress连接MySQL数据库疑难问题解决
Delphi IDE中包含一个Data Explorer的组件,如下图所示: 该组件基于dbExpress(包含TSQLConnection.TSQLDataSet.TSQLQuery.TSQLSto ...
- centos7上安装mysql8(上)
1.删除系统现存的mysql rpm -pa | grep mysql 2.卸载mysql组件 yum remove mysql-xxx-xxx- 3.删除mysql的配置文件,卸载不会自动删除配置文 ...
- AD 常用策略
配置WSUS 配置NTPS 配置用户配置文件漫游 配置漫游区磁盘配额 配置修改本地管理员用户名 配置修改本地管理员密码 配置网络验证(提示是否联网错误) 配置允许开设永久共享 配置允许开设共享打印机 ...
- (一)eclipse Dynamic web project 工程目录以及文件路径问题
如图,我创建了一个work 的web project,当工程完成之后,部署在服务器上时,整个work工程会被打包成一个war包,如 除了可以在eclipse上运行,工具会帮我们自动部署在服务器上之外, ...
- 手把手教你如何安装Tensorflow(Windows和Linux两种版本)
tensorflow 不支持Python2.7,最好选择下载Python3.5 现在越来越多的人工智能和机器学习以及深度学习,强化学习出现了,然后自己也对这个产生了点兴趣,特别的进行了一点点学习,就通 ...