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.rhkb.cn/news/274212.html

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

相关文章

SQL笔记——数据库系统导论(数据库的设计)

目录 数据依赖范式第一范式1NF第二范式2NF第三范式3NFBC范式 数据依赖的公理系统闭包最小依赖集候选码 设计需求分析概念结构设计E-R图的概念模型E-R模型转换为关系模型(指出转换结果中每个关系模式的主码和外码) 逻辑结构设计物理结构设计数据库实施数据库运行和维护 数据依赖…

内部应用解耦神器-Spring事件

大家好,我是程序员牛牛,《AI超级个体: ChatGPT与AIGC实战指南》的参与人,10年Java编程程序员。 1. 概述 在做业务开发过程中,有些复杂点的逻辑,可能代码逻辑会很冗长,举一个很简单的例子,如&am…

基于Web的论文管理系统设计

目 录 目 录 III 摘 要 V 关键词 V Abstract VI Key Word VI 第一章 绪论 6 1.1系统设计背景 1 1.2系统设计目的与意义 1 1.3国内外现状 2 1.4本文结构 3 第二章 需求分析 3 2.1系统需求分析 4 2.2系统角色设计 4 第三章 系统开发技术 4 3.1 PHP语言简介和特点 5 3.2 Mysql数据…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的铁轨缺陷检测系统(Python+PySide6界面+训练代码)

摘要:开发铁轨缺陷检测系统对于物流行业、制造业具有重要作用。本篇博客详细介绍了如何运用深度学习构建一个铁轨缺陷检测系统,并提供了完整的实现代码。该系统基于强大的YOLOv8算法,并对比了YOLOv7、YOLOv6、YOLOv5,展示了不同模…

工业数学模型——冶金烧结配矿(一)

1、工业场景 从很多种铁矿石中选出适合烧结配料的部分铁矿石及其比例,并使其成本最低。 2、数学模型 设Pi代表了第i种原料的成本,xi代表了第i种原料在总配料中的比例,其中i取值为1,2,…,n。计算1吨配料成本: 第种原料的成本是Y…

Caffeine--实现进程缓存

本地进程缓存特点 缓存在日常开发中起着至关重要的作用, 由于存储在内存中, 数据的读取速度非常快,能大量减少对数据库的访问,减少数据库的压力. 缓存分为两类: 分布式缓存, 例如Redis: 优点: 存储容量大, 可靠性更好, 可以在集群间共享缺点: 访问缓存存在网络开销场景: 缓存数…

第二十一天-NumPy

目录 什么是NumPy NumPy使用 1.数组的创建 2.类型转换 3.赠删改查 4.数组运算 5.矩阵运算 什么是NumPy 1.NumPy操作的是多维数组,什么是纬度? NumPy使用 1. 安装 pip install numpy import numpy as np 2.官网: 中文官网&#xff1a…

Python高级二

一、异常 1、定义 异常是在程序执行过程中出现的错误或意外情况。当程序遇到异常时,它会中断当前的执行流程,并尝试找到相应的异常处理机制来解决问题。 2、常见异常类型 SyntaxError:语法错误,通常是代码书写不符合Python语法规则…

LVS集群 ----------------(直接路由 )DR模式部署 (二)

一、LVS集群的三种工作模式 lvs-nat:修改请求报文的目标IP,多目标IP的DNAT lvs-dr:操纵封装新的MAC地址(直接路由) lvs-tun:隧道模式 lvs-dr 是 LVS集群的 默认工作模式 NAT通过网络地址转换实现的虚拟服务器&…

day01vue学习

day01 一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 **构建用户界面 ** 的 …

网络基础aaa

三次握手 四次挥手 网络模型 TCP or UDP 的特点 如何理解 TCP 的5层协议 TCP的5层协议是指计算机网络体系结构中,与TCP(传输控制协议)相关的五个层次。这五个层次从高到低依次是:应用层、传输层、网络层、数据链路层和物理层。每…

Flask python开发篇: 写一个简单的接口

第一步:新建flask项目 参考使用pycharm新建一个项目 打开pycharm,根据下面图中箭头顺序,新建一个flask的项目; 第二步:运行项目, 安装成功以后,会有个app.py文件,打开以后&#…

OSI七层模型TCP四层模型横向对比

OSI 理论模型(Open Systems Interconnection Model)和TCP/IP模型 七层每一层对应英文 应用层(Application Layer) 表示层(Presentation Layer) 会话层(Session Layer) 传输层&#x…

JavaWeb--Maven

一:概述 1.简介 Maven 是专门用于管理和构建 Java 项目的工具,它的主要功能有: 提供了一套标准化的项目结构 提供了一套标准化的构建流程(编译,测试,打包,发布 …… ) 提供了一套…

【存储】ZYNQ+NVMe小型化全国产存储解决方案

文章目录 1、背景2、基础理论3、设计方案3.1、FPGA设计方案3.1.1、NVMe控制器实现3.1.2、NVMe控制器实现 3.2 驱动软件设计方案3.2.1 读写NVMe磁盘软件驱动3.2.2 NVMe磁盘驱动设计3.2.3 标准EXT4文件系统设计 3.3 上位机控制软件设计方案 4、测试结果4.1 硬件测试平台说明4.2 测…

计算机网络:应用层知识点汇总

文章目录 一、网络应用模型二、域名系统(DNS)三、文本传输协议(FTP)四、电子邮件五、万维网和HTTP协议 一、网络应用模型 p2p也就是对等模型 二、域名系统(DNS) 我们知道,随着人们建立一个网站…

打字通小游戏制作教程:用HTML5和JavaScript提升打字速度

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

Mac M1:通过docker安装RocketMQ、RocketMQ-Dashboard

0. 引言 最近本地启动以前docker安装的rocketmq发现报错了,因为是从老mac迁移过来的,发现支持的芯片还是amd的,于是重新在docker下安装rocketmq,并记录下步骤,方便大家后续参考。 1. 步骤 1、先下载项目源码 git c…

记录一个vue编辑的移动端页面

<template><div class"wrap"><el-form :model"queryParams" ref"queryForm" size"small" :inline"true" label-width"120px"><el-form-item label"班级" prop"classId"…

运维自动化之ansible

pxe 一键安装操作系统 操作系统只是提供一个平台 lnmp 需要多软件协同完成的一个简单项目 服务器正常运行 日常运维 巡检 服务器上的软件正常运行 zabbix 普罗米修斯 系统调优&#xff0c;架构调优 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代…