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


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

实现思路:

代码主要用于处理地理空间数据,具体功能如下:

  1. 读取一个Shapefile(.shp)文件,获取其地理边界范围。
  2. 根据获取的边界范围,计算出按照经纬度 间隔的图幅编号。
  3. 将每个国家的地图边界范围和对应的图幅编号存储起来,并打印出来。

完整代码

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()

实现流程:

  1. 导入库:导入csv库用于读取CSV文件,导入geopandas库用于处理地理空间数据。
  2. 定义get_map_extent函数:该函数接收一个.shp文件路径作为参数,读取该文件,并返回其地理边界范围。
  3. 定义calculate_sheet_ranges函数:该函数接收一个边界范围作为参数,计算并返回一个图幅编号列表。图幅编号的计算规则是按照经纬度5度的间隔。
  4. 定义main函数:这是程序的主要执行函数。它首先读取一个CSV文件,然后对于CSV文件中的每一个条目,执行以下步骤:
    • 构造.shp文件路径。
    • 调用get_map_extent函数获取地图边界范围。
    • 调用calculate_sheet_ranges函数计算图幅编号。
    • 打印出当前处理的国家和其地图边界范围。
    • 将地图边界范围和图幅编号添加到结果列表中。
  5. 执行入口:如果该脚本作为主程序运行,将调用main函数。

代码运行示例:

  • 预备Shapefile文件:

  • 程序输出:


应用范围:

  • 地理信息系统(GIS):用于处理和分析地理空间数据。
  • 地图制作:确定地图的边界范围和图幅编号,有助于地图的制作和布局。
  • 空间数据分析:在进行空间数据分析时,可以利用此脚本快速获取地图边界和图幅编号,进而进行更深入的分析。
  • 科研和教育:在地理学、城市规划、环境科学等领域的研究和教学中,用于数据处理和分析。

注意事项:

  • 代码中的shp_file_path是一个格式化字符串,需要根据实际的文件路径进行调整。
  • calculate_sheet_ranges函数中的注释掉的代码块可能是用于不同的计算规则或示例。
  • 代码中的打印语句用于调试和验证,展示了每个国家的边界范围和图幅编号。

相关函数及调用库的解释说明:

函数及调用库描述
csvPython标准库中的模块,用于读写CSV(逗号分隔值)文件。在此代码中,它被用来读取包含国家信息的CSV文件。
geopandas一个开源项目,扩展了pandas库的功能,使其能够处理地理空间数据。它允许用户读取、处理和分析地理空间数据。
get_map_extent(shp_file_path)此函数接收一个Shapefile的文件路径作为参数,使用geopandas的read_file方法读取Shapefile,并获取其几何边界。返回值是一个包含最小经度、最小纬度、最大经度、最大纬度的元组。
calculate_sheet_ranges(map_extent)此函数接收一个地图边界范围作为参数,并基于这个范围计算图幅编号。按照南北纬和东西经的5度间隔规则来划分图幅,并返回一个包含这些图幅编号的列表。

如果这对您有所帮助,希望点赞支持一下作者! 😊

点击查看原文

file

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

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

相关文章

django中,无法跳转到请求的html页面?

出现错误&#xff1a; You’re seeing this error because you have DEBUG True in your Django settings file. Change that to False, and Django will display a standard 404 page. 在urls中&#xff0c;注释了系统的默认配置&#xff0c;这时就需要在setting配置文件中&…

Android Studio 版本升级后 Gradle project sync failed(Android V 应用升级)

问题及解决方案 更新到蜥蜴 Android Studio Iguana 后&#xff0c;出现Gradle project sync failed的问题&#xff08;IDE更新版本的常态了&#xff09;。 背景&#xff1a;对应用进行Android V版本升级&#xff08;SDK35&#xff0c;gradle插件版本要 8.4.0&#xff09; 1、…

Java实现对PDF、纵向、横向页面添加自定义水印功能

Java实现对PDF、纵向、横向页面添加自定义水印 效果图 -- 纵向 页面PDF使用到JAR Maven依赖版本效果图 -- 横向页面PDF 效果图 – 纵向 页面PDF 代码如下&#xff1a; 使用到JAR Maven依赖版本 <dependency><groupId>org.apache.pdfbox</groupId><artifa…

redis 主从复制薪火相传 哨兵sentinel配置以及底层原理

薪火相传 我们知道redis的主从复制还有一个常见的架构 ---薪火相传 使用这种结构可以有效减轻master节点的复制数据同步压力 注意这里的6380节点仍然是slave节点 可以理解为一个中间节点,仍然是不可以写只可以读取的 我们只需要使用 slaveof ip port 这里可能访问节点的时候出…

yolov系列

学习一个深度学习网络&#xff0c;就看三点&#xff0c;1. 网络架构 2.输入输出 3.损失函数 yolov1 2015年诞生的YOLOv1创造性地使用端到端结构完成了物体检测任务&#xff0c;把检测问题转换成了回归问题&#xff0c;直接预测物体的类别和位置。 每个grid有30维&#xff0c;…

修改了vue3 <script setup>留言板

Лунная ночь <template><button class"edit_view_checkbox"><input type"checkbox" v-model"editshowInput" value"编辑" /></button><div class"editshowInput" v-if"editshowI…

Spring MVC+mybatis 项目入门:旅游网(二) dispatcher与controller与Spring MVC

个人博客&#xff1a;Spring MVCmybatis 项目入门:旅游网&#xff08;二&#xff09;dispatcher与controller与Spring MVC | iwtss blog 先看这个&#xff01; 这是18年的文章&#xff0c;回收站里恢复的&#xff0c;现阶段看基本是没有参考意义的&#xff0c;技术老旧脱离时代…

若依ruoyi-vue element-ui 横向滚动条 动态横向滚动条

动态横向滚动条 因为每次横向滑动都要到底部&#xff0c;引入插件 https://github.com/mizuka-wu/el-table-horizontal-scroll //动态横向滚动条移入样式 .el-table-horizontal-scrollbar :hover{//高度 变大10%transform: scaleY(1.5) translateY(-10%);//百分之八十亮度&a…

【Spring-01】BeanFactory和ApplicationContext

【Spring-01】BeanFactory和ApplicationContext 1. 容器接口1.1 什么是 BeanFactory1.2 BeanFactory 能做什么&#xff1f; 1. 容器接口 以 SpringBoot 的启动类为例&#xff1a; /*** BeanFactory 与 ApplicationContext的区别*/ SpringBootApplication public class Spring…

Grafana详解

目录 ​编辑 一、Grafana的主要特点 二、Grafana的基本功能 三、Grafana的使用方法 Grafana是一款开源的数据可视化工具&#xff0c;主要用于大规模指标数据的可视化展现。下面将详细介绍Grafana的特点、功能以及基本使用方法。 一、Grafana的主要特点 跨平台性&#xff…

牛客ONT45 距离是K的二叉树节点【中等 宽度优先遍历 Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/e280b9b5aabd42c9b36831e522485622 思路 图&#xff0c;队列 构件图&#xff0c;直接从target出发&#xff0c;扩展到第k层就是答案Java代码 import java.util.*;/** public class TreeNode {* int val 0;* …

vue3+vite解决项目打包后本地图片等资源找不到的问题

1.在vite.config.js里面做如下配置 import { defineConfig } from vite import vue from vitejs/plugin-vueexport default defineConfig({base: ./, // 打包的静态资源引用路径plugins: [vue()], // 放插件用的resolve: {alias: {: /src // 配置/提示符}}, })上述配置主要就是…

[IMX6ULL驱动开发]-Linux对中断的处理(二)

上一篇文章中&#xff0c;引入了Linux对于中断的一些简略流程以及中断抽象为具体实际形象。此文章主要是继续加深对Linux对中断的处理流程以及一些相应的数据结构。 目录 Linux对中断的扩展&#xff1a;硬件中断、软件中断 多中断处理 中断上下部处理流程 发生中断A&#…

SpringBoot整合SpringSecurit,实现ajax的登录、退出、权限校验

1、本文章中SpringBoot整合SpringSecurity&#xff0c;只是基于session方式&#xff0c;并且没有使用到redis。 2、登录、登出都是通过ajax的方式进行。 项目目录&#xff1a; 1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xm…

FastReport 主子表关系

代码中只需要绑定主表的数据就可以&#xff0c;子表的数据会通过报表中的关连关系自动到数据库中带出。 using CloudSaaS.DB.Handler; using CloudSaaS.Model; using CloudSaaS.DAL; using FastReport; using FastReport.Web; using System; using System.Collections.Generic;…

(2020|ICML PMLR,线性 Transformer,核函数,RNN)Transformer 是 RNN

Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention 公众号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 3. 线性 Transformers 3.1. Transformer 3.2.…

2023、2024国赛web复现wp

2023 Unzip 类型&#xff1a;任意文件上传漏洞 主要知识点&#xff1a;软链接 随便上传一个一句话木马文件&#xff0c;得到一串php代码 根据代码上传zip文件发现进入后还是此页面 代码审计&#xff1a; <?php error_reporting(0); highlight_file(__FILE__);$finfo fin…

Stable Diffusion【写实模型】:逼真,逼真,超级逼真的国产超写实摄影大模型万享XL

今天和大家分享的是一个国产万享系列中使用量最高的大模型:万享XL_超写实摄影&#xff0c;顾名思义&#xff0c;该大模型主要是面向写实摄影&#xff0c;一方面生成的图片人物皮肤纹理细节超级逼真&#xff0c;另一方面对于光影效果的处理也非常到位。对于万享XL超写实摄影大模…

揭秘Tensor Core黑科技:如何让AI计算速度飞跃

揭秘 Tensor Core 底层&#xff1a;如何让AI计算速度飞跃 Tensor Core&#xff0c;加速深度学习计算的利器&#xff0c;专用于高效执行深度神经网络中的矩阵乘法和卷积运算&#xff0c;提升计算效率。 Tensor Core凭借混合精度计算与张量核心操作&#xff0c;大幅加速深度学习…

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2

参数高效微调PEFT(二)快速入门P-Tuning、P-Tuning V2 参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 今天&#xff0c;我们继续了解下来自清华大学发布的两种参数高效微调方法P-Tuning和P-Tuning v2。可以简单的将P-Tuning是认为针对Prompt Tuning的改进…