python(ogr)处理geojson为本地shp文件

 前言


        本次所利用的geojson数据来自https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json

,如果觉得下方代码看起来不方便,可以来GitHub上来看,在这上面还有一些辅助内容便于理解

GISpjd/GIS-union-Python (github.com)icon-default.png?t=N7T8https://github.com/GISpjd/GIS-union-Python

 

一.展示


二.环境


        我是在Anaconda下的jupyter notebook完成代码的编写,下面是我对应的版本号,我建议大家在这个环境下编写,因为在下载gdal等包的时候会更方便。

三.参考网站 

osgeo.osr module — GDAL documentation

osgeo.ogr module — GDAL documentation

 不过对应API像字典一样,对新手不太友好,可以结合网上博客和AI来学习,而且随着时间的变化,相应API可能也会变化,发现实现不了的时候及时查阅。

对于ogr的矢量结构,可以阅读:OGR矢量结构 — headfirst gdal 0.1 documentation (headfirst-gdal.readthedocs.io)

四. 代码


from osgeo import ogr, osr, gdal
import requests
import json# 设置Shapefile的编码为UTF-8,这有助于确保中文或其他非ASCII字符能够正确保存和显示。
gdal.SetConfigOption('SHAPE_ENCODING', 'UTF-8')# 获取geojson
url = 'https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json'
geojson = requests.get(url)
data = json.loads(geojson.content)# 准备shp数据源
driver = ogr.GetDriverByName('ESRI Shapefile')
shp_path = r'C:\python爬虫\henan.shp' #换成自己想保存的位置
data_source = driver.CreateDataSource(shp_path)# 定义坐标系
srs = osr.SpatialReference()
srs.ImportFromEPSG(4326)# 创建坐标系
layer = data_source.CreateLayer('province',srs,ogr.wkbMultiPolygon)feature_def = layer.GetLayerDefn() #获取图层定义
properties = data['features'][0]['properties']# 字段名重命名映射表
rename_map = {'adcode': 'adcode','name': 'name','center':'center','childrenNum': 'childNum',  # 将'childrenNum'简化为'childNum''level': 'level','parent': 'parent','subFeatureIndex': 'subIdx',  # 将'subFeatureIndex'简化为'subIdx''acroutes':'acroutes','geometry': 'geometry'
}# 为图层创建字段,基于GeoJSON数据的属性。
for prop_name in properties.keys():#dict.get(key,default)short_name = rename_map.get(prop_name, prop_name[:10]) # 使用重命名映射表或截断过长的字段名。field = ogr.FieldDefn(short_name,ogr.OFTString)# 创建新的字段定义。layer.CreateField(field)# 在图层中添加该字段。# 遍历GeoJSON数据中的每一个特征(Feature),将它们转换为Shapefile格式并添加到图层中。
for feature in data['features']:geom = ogr.CreateGeometryFromJson(json.dumps(feature['geometry'])) #创建几何对象shp_feature = ogr.Feature(feature_def) #生成新的特征(Feature),以便将其添加到layer中#为特征设置属性值for prop_name,prop_value in feature['properties'].items():# 根据rename_map获取映射后的字段名short_name = rename_map.get(prop_name, prop_name[:10])prop_value = str(prop_value) if prop_value is not None else ''shp_feature.SetField(short_name, prop_value)# 设置特征的属性。shp_feature.SetGeometry(geom) # 将几何对象与特征关联。layer.CreateFeature(shp_feature)# 将特征添加到图层中。# 销毁要素,释放内存shp_feature = None
# 关闭数据源
data_source = None

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

14.WEB渗透测试--Kali Linux(二)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:13.WEB渗透测试--Kali Linux(一)-CSDN博客 netcat简介内容:13.WE…

精品基于Springboot的体育用品租赁租用管理系统的设计与实现

《[含文档PPT源码等]精品基于Springboot的体育用品管理系统的设计与实现[包运行成功]》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程、包运行成功! 软件开发环境及开发工具: Java——涉及技术: 前端使用技术&…

c# DbHelper的封装

c# DbHelper的封装 基于ADO.NET框架,封装了适用于多个关系型数据库的DbHelper。通过简洁明了的代码,实现了对各种数据库的高效操作。 public class DbHelper{private readonly DataBase _dataBase;public DbHelper(DataBase dataBase){_dataBase data…

SpringCloud-实现基于RabbitMQ的消息队列

消息队列是现代分布式系统中常用的通信机制,用于在不同的服务之间传递消息。在Spring Cloud框架中,我们可以利用RabbitMQ实现强大而可靠的消息队列系统。本篇博客将详细介绍如何在Spring Cloud项目中集成RabbitMQ,并创建一个简单的消息队列。…

【Kotlin】类和对象

1 前言 Kotlin 是面向对象编程语言,与 Java 语言类似,都有类、对象、属性、构造函数、成员函数,都有封装、继承、多态三大特性,不同点如下。 Java 有静态(static)代码块,Kotlin 没有&#xff1…

Spring AOP常见面试题

目录 一、对于AOP的理解 二、Spring是如何实现AOP的 1、execution表达式 2、annotation 3、基于Spring API,通过xml配置的方式。 4、基于代理实现 三、Spring AOP的实现原理 四、Spring是如何选择使用哪种动态代理 1、Spring Framework 2、Spring Boot 五…

博士推荐 | 纤维与聚合物科学博士,功能性纺织品研发主管

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态,用科技解决职业领域问题,提升行业数字化服务水平,提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

二分查找【详解】

本期介绍🍖 主要介绍:二分查找的简单思路,为什么必须在有序的前提下才能使用二分查找,该怎么用C程序来实现二分查找,二分查找的局限性👀。 文章目录 1. 题目2. 思路3. 前提条件4. 编写程序 1. 题目 在一个有…

选择性遗忘可以帮助人工智能学得更好?

最近,一些计算机科学家创建了一种更灵活、更灵巧的机器学习模型。诀窍在于:它必须定期忘记它所知道的信息。虽然这种新方法不会取代支撑最大应用程序的庞大模型,但它能揭示这些程序如何理解语言的更多信息。 (PS:如果…

日常007:alias给长命令起个简短的别名

alias 命令可以给那些太长的命令起一个简短的别名。便于记忆,提高输入效率。 用法和示例 1. 创建别名 创建别名,使用语法alias new_commandoriginal_command,例如 alias llls -lF使用别名 $ ll total 32 -rw-r--r-- 1 soulio soulio 1…

【动态规划】代码随想录算法训练营第四十六天 |139.单词拆分,关于多重背包,你该了解这些! ,背包问题总结篇!(待补充)

139.单词拆分 1、题目链接:. - 力扣(LeetCode) 2、文章讲解:代码随想录 3、题目: 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词…

【Docker】Node 容器部署及配置参数

Node.js环境标准软件基于Bitnami node 构建。当前版本为20.11.1 你可以通过轻云UC部署工具直接安装部署,也可以手动按如下文档操作,该项目已经全面开源,可以从如下环境获取 配置文件地址: https://gitee.com/qingplus/qingcloud-platform Q…

解决报错The following packages have unmet dependencies

一、问题描述 终端输入: nvcc -V 提示: Command nvcc not found, but can be installed with:sudo apt install nvidia-cuda-toolkit按照提示安装,终端输入 sudo apt install nvidia-cuda-toolkit,报错内容如下: …

3分钟彻底搞懂Web UI自动化测试之【POM设计模式】

为什么要用POM设计模式 前期,我们学会了使用PythonSelenium编写Web UI自动化测试线性脚本 线性脚本(以快递100网站登录举例): import time from selenium import webdriver from selenium.webdriver.common.by import By dri…

Python SSH协议库之paramiko使用详解

概要 在网络编程中,远程操作是一项非常常见的需求,特别是在服务器管理和自动化任务执行方面。Python提供了许多库来实现远程操作,其中Paramiko是一个备受欢迎的选择。Paramiko是一个纯Python编写的SSH协议库,它提供了一种简单而强大的方式来执行远程命令、上传和下载文件等…

YUNBEE云贝-热烈祝贺Guo同学成功通过Oracle 19c OCP认证考试!

恭喜Guo同学在 #Oracle19c OCP 考试中取得了OCP证书!该认证是Oracle公司的权威技术标准,适用于有资格为Oracle核心产品提供服务和支持的专业人员。尽管OCP认证考题随着版本变化,并且是全英文考试,对中文习惯的人来说有一定的难度&…

怎样将PPT转成文本格式?PPT文本一键生成文本格式 工作经验分享

在日常工作和学习中,我们经常需要将PPT文件转换为文本格式,以便更好地进行编辑、搜索和分享。下面,我将介绍2种常见的PPT转文本格式的方法,帮助大家轻松实现这一需求。 方法一、使用汇帮PDF转换器软件里的“PPT文件操作”菜单进行…

Git的一些基础命令

使用Git主要涉及以下几个基本步骤和概念。 1. 安装Git 首先,你需要在你的计算机上安装Git。可以从Git的官方网站下载安装程序。 2. 配置Git 安装Git后,需要配置用户信息(用户名和电子邮件地址),因为Git的每次提交都会…

我们做的小工具,爆了!

好消息,好消息,江南皮革。。 开个玩笑,大家好,我是程序员鱼皮。 前段时间我在公众号发文宣传了团队新开发的小工具《代码小抄》,这是一个简单易用的代码分享工具,可以快速、跨设备地自由分享代码。 网址&…

K8S Pod

基本概念 Pod是K8S中非常重要的概念之一,是整个K8S架构的基础和核心。Pod是K8S调度的最小单位,是一个不可拆分的独立个体,K8S将多个业务上相关联的容器(Docker容器)合并到一起,组合成一个Pod,这…