Python 读取.shp文件并生成图幅编号

代码适用于需要处理和分析地理空间数据的场景,如城市规划、环境监测或自然资源管理,其中它可以帮助用户读取特定区域的Shapefile文件,确定其地理边界,并基于这些边界计算出按照经纬度5度间隔的图幅编号,进而用于地图制作、空间数据管理和快速数据检索。

实现思路:
代码主要用于处理地理空间数据,具体功能如下:
- 读取一个Shapefile(
.shp)文件,获取其地理边界范围。 - 根据获取的边界范围,计算出按照经纬度
5°间隔的图幅编号。 - 将每个国家的地图边界范围和对应的图幅编号存储起来,并打印出来。
完整代码
import csv
import geopandas as gpddef get_map_extent(shp_file_path):"""读取.shp文件并获取其边界范围。:param shp_file_path: .shp文件路径:return: 地图边界的范围 (minx, miny, maxx, maxy)"""# 读取.shp文件gdf = gpd.read_file(shp_file_path)# 获取地图边界boundary = gdf.geometry.total_bounds# 返回地图范围return boundarydef calculate_sheet_ranges(map_extent):"""根据地图边界计算图幅范围,并按照南北纬和东西经的5度分隔规则返回图幅范围的格式。:param map_extent: 地图边界的范围 (minx, miny, maxx, maxy):return: 图幅范围列表,每个元素包含(lon_start, lat_start, lon_end, lat_end, sheet_range)"""minx, miny, maxx, maxy = map_extent# 初始化图幅范围列表sheet_ranges = []# 计算图幅编号# for lon_start in range(int(minx // 5) * 5, int(maxx // 5 + 1) * 5, 5):# for lat_start in range(int(miny // 5) * 5, int(maxy // 5 + 1) * 5, 5):for lon_start in range(int(minx // 5) * 5, int(maxx // 5 + 1) * 5, 5):for lat_start in range(int(miny // 5 + 1) * 5, int(maxy // 5 + 2) * 5, 5): # GLC_FCS30D 纬度需要上调一格5度lon_end = lon_start + 5lat_end = lat_start + 5sheet_range = f"{'W' if lon_start < 0 else 'E'}{abs(lon_start)}" \f"{'S' if lat_start < 0 else 'N'}{abs(lat_start)}"sheet_ranges.append(sheet_range)return sheet_rangesdef main():iso_data = []with open('../../ISO.csv', newline='') as csvfile:# 创建 CSV 读取器csv_reader = csv.reader(csvfile)data = list(csv_reader) # 将文件内容读取到内存中# 初始化行数计数器iso_count = 0for country in data:iso_count += 1sids_country = country[0]iso_map_extent = [iso_count, sids_country] # [1, 'BMU']# 示例文件路径shp_file_path = fr'path_to_admin_division\{sids_country}.shp'# 获取地图范围map_extent = get_map_extent(shp_file_path=shp_file_path)# 计算图幅范围sheet_ranges = calculate_sheet_ranges(map_extent=map_extent)# 打印结果print(iso_count, sids_country, map_extent)iso_map_extent.extend(sheet_ranges)iso_data.append(iso_map_extent)print('- Map Extent Num: ', len(sheet_ranges), iso_map_extent[2:], '\n')if __name__ == '__main__':main()
实现流程:
- 导入库:导入
csv库用于读取CSV文件,导入geopandas库用于处理地理空间数据。 - 定义
get_map_extent函数:该函数接收一个.shp文件路径作为参数,读取该文件,并返回其地理边界范围。 - 定义
calculate_sheet_ranges函数:该函数接收一个边界范围作为参数,计算并返回一个图幅编号列表。图幅编号的计算规则是按照经纬度5度的间隔。 - 定义
main函数:这是程序的主要执行函数。它首先读取一个CSV文件,然后对于CSV文件中的每一个条目,执行以下步骤:- 构造
.shp文件路径。 - 调用
get_map_extent函数获取地图边界范围。 - 调用
calculate_sheet_ranges函数计算图幅编号。 - 打印出当前处理的国家和其地图边界范围。
- 将地图边界范围和图幅编号添加到结果列表中。
- 构造
- 执行入口:如果该脚本作为主程序运行,将调用
main函数。
代码运行示例:
- 预备Shapefile文件:

- 程序输出:


应用范围:
- 地理信息系统(GIS):用于处理和分析地理空间数据。
- 地图制作:确定地图的边界范围和图幅编号,有助于地图的制作和布局。
- 空间数据分析:在进行空间数据分析时,可以利用此脚本快速获取地图边界和图幅编号,进而进行更深入的分析。
- 科研和教育:在地理学、城市规划、环境科学等领域的研究和教学中,用于数据处理和分析。
注意事项:
- 代码中的
shp_file_path是一个格式化字符串,需要根据实际的文件路径进行调整。 calculate_sheet_ranges函数中的注释掉的代码块可能是用于不同的计算规则或示例。- 代码中的打印语句用于调试和验证,展示了每个国家的边界范围和图幅编号。
相关函数及调用库的解释说明:
| 函数及调用库 | 描述 |
|---|---|
| csv | Python标准库中的模块,用于读写CSV(逗号分隔值)文件。在此代码中,它被用来读取包含国家信息的CSV文件。 |
| geopandas | 一个开源项目,扩展了pandas库的功能,使其能够处理地理空间数据。它允许用户读取、处理和分析地理空间数据。 |
| get_map_extent(shp_file_path) | 此函数接收一个Shapefile的文件路径作为参数,使用geopandas的read_file方法读取Shapefile,并获取其几何边界。返回值是一个包含最小经度、最小纬度、最大经度、最大纬度的元组。 |
| calculate_sheet_ranges(map_extent) | 此函数接收一个地图边界范围作为参数,并基于这个范围计算图幅编号。按照南北纬和东西经的5度间隔规则来划分图幅,并返回一个包含这些图幅编号的列表。 |
如果这对您有所帮助,希望点赞支持一下作者! 😊
点击查看原文

相关文章:
Python 读取.shp文件并生成图幅编号
代码适用于需要处理和分析地理空间数据的场景,如城市规划、环境监测或自然资源管理,其中它可以帮助用户读取特定区域的Shapefile文件,确定其地理边界,并基于这些边界计算出按照经纬度5度间隔的图幅编号,进而用于地图制…...
【算法】位运算算法——判断字符是否唯一
题解:判断字符是否唯一(位运算算法) 目录 1.题目2.题解3.位图参考代码4.细节5.总结 1.题目 题目链接:LINK 2.题解 题解有两种方法, 一是做一个哈希数组,去查重; 二是直接用一个变量每一位来对应表示是否有这个字母…...
AAAI2024 基于扩散模型 多类别 工业异常检测 DiAD
前言 本文分享一个基于扩散模型的多类别异常检测框架,用于检测工业场景的缺陷检测或异常检测。 设计SG语义引导网络,在重建过程中有效保持输入图像的语义信息,解决了LDM在多类别异常检测中的语义信息丢失问题。高效重建,通过在潜…...
JavaEE-Spring Controller(服务器控制以及Controller的实现和配置)
Spring Controller 服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器,也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成,服务器整体架构如下: Server&…...
页面导出PDF,非可视区域如何解决
const exportToPDF () > {const element document.getElementById(chart-container);if (!element) return;const originalScrollHeight element.scrollHeight;// 临时解除滚动条限制,确保所有内容都可见element.style.height ${originalScrollHeight}px;// …...
Android UI:ViewTree: 监听
文章目录 涉及设计模式 观察者模式+策略模式API源码分析总结涉及设计模式 观察者模式+策略模式 被观察者:ViewTree ViewTree持有一个观察器ViewTreeObserver 系统在ViewRootImpl和View的相关方法中调用ViewTreeObserver上的注册的监听器的方法,…...
【光伏干货】光伏无人机巡检步骤
随着光伏产业的迅速发展和无人机技术的日益成熟,光伏无人机巡检已成为提高光伏电站运维效率、降低运维成本的重要手段。本文将详细介绍光伏无人机巡检的步骤,帮助读者更好地理解和应用这一技术。 一、前期准备 1、设备检查:对无人机及其相关…...
『大模型笔记』从头开始代码构建GPT!
从头开始代码构建GPT! 文章目录 一. 从头开始代码构建GPT!二. 参考文献一. 从头开始代码构建GPT! 我们构建了一个生成式预训练Transformer (GPT),遵循论文《Attention is All You Need》和OpenAI的GPT-2 / GPT-3的方法。我们讨论了与ChatGPT的联系,ChatGPT已经风靡全球。我…...
idea的project structure下project [lauguage ]()level 没有java的sdk17选项如何导入
idea的project structure下project lauguage level 没有java的sdk17选项如何导入 别导入了,需要升级idea版本。idea中没有project language level没有17如何添加 - CSDN文库 别听这文章瞎扯淡 2021版本就是没有,直接卸载升级到最新版本就可以了。没办法…...
JavaScript数据类型与转换
JavaScript是一种弱类型语言,在定义变量的时候不用规定数据的类型,但这部表示JavaScript没有规定数据类型。 数值 JavaScript中数值类型不区分浮点数与整数,所有的数值都以浮点型来表示。另外JavaScript核心,Math还提供了大量的…...
三十、openlayers官网示例解析Double click, Drag and Zoom——第二次点击鼠标拖拽缩放地图效果、取消地图双击放大事件
这篇展示了如何在地图上添加第二次按下鼠标移动鼠标实现拖拽缩放地图效果。 官网demo地址: Double click, Drag and Zoom 官网介绍文字的翻译如下: 示例比较简单,直接贴代码: const map new Map({//添加第二次点击拖拽缩放地图i…...
前端基础入门三大核心之网络安全篇:TLS/SSL的魔法之旅
前端基础入门三大核心之网络安全篇:TLS/SSL的魔法之旅 TLS/SSL:数据安全的守护神工作原理:四步走,安全到家1. 握手,你好吗?代码示例(伪代码):客户端发起握手请求 2. 身份…...
Flutter 中的 SnackBarAction 小部件:全面指南
Flutter 中的 SnackBarAction 小部件:全面指南 在 Flutter 中,SnackBar 是一种流行的用于提供轻量级反馈的方式,它可以在屏幕上短暂显示消息。SnackBarAction 则是与 SnackBar 结合使用的一种按钮组件,允许用户对显示的消息做出响…...
Point-Nerf 理论笔记和理解
文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些?什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…...
深度学习中的梯度消失和梯度爆炸问题
在深度学习领域,随着模型层数的增加,我们常常会遇到两个棘手的问题:梯度消失(Vanishing Gradients)和梯度爆炸(Exploding Gradients)。这两个问题严重影响了深度神经网络的训练效率和性能。本文…...
Flink 通过 paimon 关联维表,内存降为原来的1/4
你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益: 了解大厂经验拥有和大厂相匹配的技术等 希望看什么,评论或者私信告诉我! 文章目录 一…...
Python知识详解【1】~{正则表达式}
正则表达式是一种用于匹配字符串模式的文本工具,它由一系列普通字符和特殊字符组成,可以非常灵活地描述和处理字符串。以下是正则表达式的一些基本组成部分及其功能: 普通字符:大多数字母和数字在正则表达式中表示它们自己。例如…...
装饰模式:鸡腿堡
文章目录 UML类图目录结构Humburger.javaChickenBurger.javaCondiment.javaChuilli.javaLettuce.javaTest.java深度理解test怎么写 UML类图 目录结构 我们从指向最多的开始写 Humburger.java package zsms;public abstract class Humburger {protected String name;public S…...
视图【mysql数据库】
目录 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 cascaded和local的区别 三、视图的更新 四、视图的作用 一、视图的创建、查看、修改、删除 二、cascaded、local检查选项 上面的几句SQL中,我们虽然给视图插入了id 30的数据,但…...
opencv的findContours()函数
来自WaTab AI Pro 请详细解释cv2.findContours(): cv2.findContours() 是 OpenCV 中用于检测图像轮廓的函数。轮廓可以看作是将连续的点(沿边界)连接在一起的一条曲线,具有相同的颜色或强度。该函数常用于图像处理和计算机视觉中…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
AirSim/Cosys-AirSim 游戏开发(四)外部固定位置监控相机
这个博客介绍了如何通过 settings.json 文件添加一个无人机外的 固定位置监控相机,因为在使用过程中发现 Airsim 对外部监控相机的描述模糊,而 Cosys-Airsim 在官方文档中没有提供外部监控相机设置,最后在源码示例中找到了,所以感…...
人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent
安全大模型训练计划:基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标:为安全大模型创建高质量、去偏、符合伦理的训练数据集,涵盖安全相关任务(如有害内容检测、隐私保护、道德推理等)。 1.1 数据收集 描…...
