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 中用于检测图像轮廓的函数。轮廓可以看作是将连续的点(沿边界)连接在一起的一条曲线,具有相同的颜色或强度。该函数常用于图像处理和计算机视觉中…...
KubeSphere 容器平台高可用:环境搭建与可视化操作指南
Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
如何在看板中有效管理突发紧急任务
在看板中有效管理突发紧急任务需要:设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP(Work-in-Progress)弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中,设立专门的紧急任务通道尤为重要,这能…...
用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...
力扣-35.搜索插入位置
题目描述 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
