当前位置: 首页 > news >正文

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

 

相关文章:

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

前言 本次所利用的geojson数据来自https://geo.datav.aliyun.com/areas_v3/bound/410000_full.json ,如果觉得下方代码看起来不方便,可以来GitHub上来看,在这上面还有一些辅助内容便于理解 GISpjd/GIS-union-Python (github.com)https://gi…...

Docker容器化技术(使用Dockerfile制作镜像)

Docker中的镜像分层 Docker 支持通过扩展现有镜像,创建新的镜像。实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的。 1、Docker 镜像为什么分层 镜像分层最大的一个好处就是共享资源。 比如说有多个镜像都从相…...

C++ struct 结构体类型

在处理大批量数据时,一般会使用数组来实现,数组中各元素都属于同一数据类型。但在实际问题中,要处理的一组数据往往具有不同的数据类型。如一个学生的个人信息有学号(num)、姓名(name)、性别&am…...

什么是VR虚拟现实体验店|VR主题馆加盟|元宇宙文化旅游

VR虚拟现实体验店是一种提供虚拟现实技术体验的场所。在这样的店铺里,顾客可以通过专业的设备和技术,体验虚拟现实技术带来的沉浸式感觉。 通常,这些商店提供一系列VR体验,包括互动游戏、沉浸式模拟、虚拟旅游和其他VR内容。客户可…...

【智能家居入门1之环境信息监测】(STM32、ONENET云平台、微信小程序、HTTP协议)

作为入门本篇只实现微信小程序接收下位机上传的数据,之后会持续发布如下项目:①可以实现微信小程序控制下位机动作,真正意义上的智能家居;②将网络通讯协议换成MQTT协议再实现上述功能,此时的服务器也不再是ONENET&…...

AIGC安全研究简述(附资料下载)

2023 AIGC技术实践及展望资料合集(29份).zip 2023 AIGC大型语言模型(LLM)实例代码合集.zip 2023大模型与AIGC峰会(公开)PPT汇总(25份).zip AIGC的安全研究是一个复杂且重要的领域,涉及多个关键…...

初识Spring MVC

什么是Spring MVC? 官方给的解释是 Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从⼀开始就包含在 Spring 框架中。它的 正式名称“Spring Web MVC”来⾃其源模块的名称(Spring-webmvc),但它通常被称为"Spring MVC" 注:Severlet是…...

云原生之容器编排实践-ruoyi-cloud项目部署到K8S:Nginx1.25.3

背景 前面搭建好了 Kubernetes 集群与私有镜像仓库,终于要进入服务编排的实践环节了。本系列拿 ruoyi-cloud 项目进行练手,按照 MySQL , Nacos , Redis , Nginx , Gateway , Auth ,…...

PHP立体安全攻击向量:保护应用程序的关键挑战

PHP立体安全攻击向量:保护应用程序的关键挑战 PHP作为一种广泛使用的服务器端脚本语言,拥有庞大的用户群体和丰富的生态系统。然而,随着互联网的发展,网络安全问题也变得愈发严重。本文将深入探讨PHP的立体安全攻击向量&#xff0…...

【功能大全】手机短信验证码一键注册登录流程

目录 发送验证码 注册登录 用户表设计 ​编辑申请腾讯云短信与密钥 找到云短信服务 开通腾讯云短信服务 ​编辑​​​​​创建短信签名 ​编辑​编辑创建短信正文模版​编辑​编辑 等待审核 测试短信​编辑 SDK密钥创建 SpringBoot集成腾讯云短信 pom中导入腾讯云短…...

【Python】【Matplotlib】深入解析plt.grid()---原理、应用与注意事项

【Python】【Matplotlib】深入解析plt.grid()—原理、应用、源码与注意事项 🌈 个人主页:高斯小哥 🔥 高质量专栏:Matplotlib之旅:零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&#x1f4…...

数据库规范化设计案例解析

1.介绍 数据库规范化设计是数据库设计的一种重要方法,旨在减少数据库中的冗余数据,提高数据的一致性,确保数据依赖合理,从而提高数据库的结构清晰度和维护效率。规范化设计通过应用一系列的规范化规则(或称“范式”&a…...

服务器段的连接端口和监听端口编程实现

new ServerSocket(int)是开启监听端口,并不是连接端口。真正的连接端口是随机开辟的空闲端口,当连接创建完成后,监听关口可以继续等待下一次连接请求,处于空闲等待状态。 编程实现方式 1 、主线程一直处于阻塞等待状态&#xff0c…...

用“定时执行专家”武装你的电脑,做时间管理大师!

简介 你是否厌倦了重复繁琐的电脑操作?你是否希望能够解放双手,提高工作效率?“定时执行专家”是一款功能强大的定时任务执行软件,可以帮你轻松实现自动化办公,让你成为时间管理大师! 软件功能 支持25种任…...

css3实现3D立方体旋转特效源码

源码介绍 CSS3自动旋转正方体3D特效是一款基于css3 keyframes属性制作的图片相册自动旋转立方体特效 效果展示 下载地址 css3实现3D立方体旋转特效代码...

计算器系统基础知识-校验码

1.奇偶校验码 通过在编码中增加一位奇数校验位来使编码中1的个数为奇数(奇校验)或者为偶数(偶校验),从而使码距变为2。   常见的奇偶校验码有三种:水平奇偶校验码、垂直奇偶校验码和水平垂直校验码。   以下是奇偶校验码的示例: public …...

springboot换日志框架后爆SLF4J: Class path contains multiple SLF4J bindings的解决办法

sringboot原本使用的是logback日志框架,将它去掉,修改为log4j2日志框架后,往往会出现以下错误: SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/C:/Users/admin/.m2/repository/ch/qos…...

k8s+zabbix

一,环境: 1),k8s部署,master和node节点都部署成功 二,部署: 1),安装python3(资源中有) wget https://www.python.org/ftp/python/3.7.4/Python-…...

k8s-生产级的k8s高可用(2) 25

部署containerd k8s2、k8s3、k8s4在配置前需要重置节点(reset)在上一章已完成 禁用所有节点docker和cri-docker服务 所有节点清除iptables规则 重置后全部节点重启 由于之前部署过docker,因此containerd默认已安装 修改配置 启动containe…...

ubuntu20.04 创建ros环境、创建rospackage

roswiki教程:https://wiki.ros.org/cn/ROS/Tutorials 环境准备 安装ros环境 这里选择noetic版本的ros,安装步骤参考:https://zhuanlan.zhihu.com/p/662284005 创建工作空间 这里我在用户目录下创建catkin的工作目录catkin_ws &#xff0…...

HTML 语义化

目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案&#xff1a; 语义化标签&#xff1a; <header>&#xff1a;页头<nav>&#xff1a;导航<main>&#xff1a;主要内容<article>&#x…...

7.4.分块查找

一.分块查找的算法思想&#xff1a; 1.实例&#xff1a; 以上述图片的顺序表为例&#xff0c; 该顺序表的数据元素从整体来看是乱序的&#xff0c;但如果把这些数据元素分成一块一块的小区间&#xff0c; 第一个区间[0,1]索引上的数据元素都是小于等于10的&#xff0c; 第二…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

DiscuzX3.5发帖json api

参考文章&#xff1a;PHP实现独立Discuz站外发帖(直连操作数据库)_discuz 发帖api-CSDN博客 简单改造了一下&#xff0c;适配我自己的需求 有一个站点存在多个采集站&#xff0c;我想通过主站拿标题&#xff0c;采集站拿内容 使用到的sql如下 CREATE TABLE pre_forum_post_…...