使用 geopandas 和 shapely(.shp) 进行地理空间数据处理和可视化

news2024/12/27 18:53:59

文章目录

  • 前言
    • 1. 安装所需库
    • 2. 读取 Shapefile 文件
    • 3. 可视化地图
    • 4. 用户输入坐标和清除指定区域内的图形
    • 5. 可视化删除指定区域内的图形之后的地图
    • 6. 保存为新的 Shapefile (.shp)文件
    • 完整代码及解析
      • 分析说明
  • 测试文件地址
  • 特别说明
  • 完结

前言

使用 geopandas 和 shapely 进行地理空间数据处理和可视化

在地理信息系统(Geographic Information System,简称 GIS)领域,处理和分析地理空间数据是一项非常重要的任务。而Python中的 geopandasshapely 是两个非常强大的库,提供了便捷的功能来处理和可视化地理空间数据。
本文将介绍如何使用 geopandasshapely 来读取、处理、可视化和保存地理Shapefile文件。

1. 安装所需库

安装所需库

首先,我们需要安装 geopandasshapely 库。可以通过以下命令来安装:

pip install geopandas
pip install shapely

2. 读取 Shapefile 文件

读取 Shapefile 文件

首先,我们需要准备一个 Shapefile 文件。这里我们使用的是名为“海南省界Export_Output.shp”的Shapefile文件 (文件链接下载链接在附件)

通过下面代码,我们可以使用 geopandas 库中的 read_file 函数来读取 Shapefile 文件,并将其保存为一个 GeoDataFrame 对象:

import geopandas as gpd

# 读取 Shapefile 文件
shp_file = "海南省界/海南省界Export_Output.shp"
gdf = gpd.read_file(shp_file)

3. 可视化地图

在可视化地图

我们可以使用 matplotlib 库来可视化地图。通过以下代码,我们可以创建一个图形,并使用 plot 函数将地理数据绘制在图形上:

import matplotlib.pyplot as plt

# 可视化地图
fig, ax = plt.subplots(figsize=(10, 10))
gdf.plot(ax=ax)
plt.show()

这将显示一个具有地理数据的图形窗口,您可以在其中观察地理边界、点、线或多边形等地理要素。

4. 用户输入坐标和清除指定区域内的图形

清除指定区域内的图形

代码中的下一部分需要用户提供两对坐标(x, y),以定义一个矩形框,我们将在该矩形框内清除地理要素。

from shapely.geometry import box

# 让用户输入两对 x,y 坐标
x1 = float(input("请输入第一对 x 坐标:"))
y1 = float(input("请输入第一对 y 坐标:"))
x2 = float(input("请输入第二对 x 坐标:"))
y2 = float(input("请输入第二对 y 坐标:"))

# 清空指定区域内的图形
bbox = box(x1, y1, x2, y2)  # 构建矩形框
gdf = gdf.difference(gpd.GeoDataFrame(geometry=[bbox], crs=gdf.crs))

用户输入了两对坐标之后,我们使用 shapely 库中的 box 函数构建了一个矩形框,并使用 difference 函数从 GeoDataFrame 中清除了该矩形框内的地理要素。

5. 可视化删除指定区域内的图形之后的地图

删除指定区域内的图形

我们使用相同的方法可视化删除指定区域内图形之后的地图:

fig, ax = plt.subplots(figsize=(10, 10))
gdf.plot(ax=ax)
plt.show()

这将显示一个更新后的图形窗口,其中已经从地图中删除了指定区域内的地理要素。

6. 保存为新的 Shapefile (.shp)文件

在这里插入图片描述

最后,我们将删除指定区域内的地理要素保存为一个新的 Shapefile 文件:

new_shp_file = "海南省界/海南省界Export_Output.shp"
gdf.to_file(new_shp_file)

通过 to_file 函数,我们可以将 GeoDataFrame 对象保存为一个新的 Shapefile 文件。

完整代码及解析

import geopandas as gpd
from shapely.geometry import box
import matplotlib.pyplot as plt

# 读取 Shapefile 文件
shp_file = "海南省界/海南省界Export_Output.shp"
gdf = gpd.read_file(shp_file)

# 可视化地图
fig, ax = plt.subplots(figsize=(10, 10))
gdf.plot(ax=ax)
plt.show()

# 让用户输入两对 x,y 坐标
x1 = float(input("请输入第一对 x 坐标:"))
y1 = float(input("请输入第一对 y 坐标:"))
x2 = float(input("请输入第二对 x 坐标:"))
y2 = float(input("请输入第二对 y 坐标:"))

# 清空指定区域内的图形
bbox = box(x1, y1, x2, y2)  # 构建矩形框
gdf = gdf.difference(gpd.GeoDataFrame(geometry=[bbox], crs=gdf.crs))

# 可视化删除指定区域内的图形之后的地图
fig, ax = plt.subplots(figsize=(10, 10))
gdf.plot(ax=ax)
plt.show()

# 将删除后的图形保存为新的 Shapefile 文件
new_shp_file = "海南省界/海南省界Export_Output.shp"
gdf.to_file(new_shp_file)

分析说明

  1. 导入需要使用的库 geopandasshapelymatplotlib.pyplot

  2. 定义一个变量 shp_file,指定 Shapefile 文件的路径。

  3. 使用 gpd.read_file() 函数读取 Shapefile 文件,并将其保存为 GeoDataFrame 对象 gdf

  4. 创建一个图形窗口,大小为 10x10 英寸。

  5. 使用 gdf.plot() 函数将地理数据绘制在图形上,ax=ax 参数指定图形窗口。

  6. 使用 plt.show() 函数显示图形窗口,展示可视化的地图。

  7. 提示用户输入两对 x 和 y 坐标。

  8. 使用 box() 函数基于用户输入的坐标创建一个矩形框,并赋值给变量 bbox

  9. 使用 gdf.difference() 函数,从原始地理数据中删除 bbox 区域内的地理要素,并将结果保存到 gdf 中。10. 创建一个新的图形窗口,大小为 10x10 英寸。

  10. 使用 gdf.plot() 函数将更新后的地理数据绘制在图形上,ax=ax 参数指定图形窗口。

  11. 使用 plt.show() 函数显示图形窗口,展示可视化的地图。12. 定义一个变量 new_shp_file,指定保存新 Shapefile 文件的路径。

  12. 使用 gdf.to_file() 函数将更新后的地理数据保存为新的 Shapefile 文件。

测试文件地址

链接: https://pan.baidu.com/s/1JLQ2CVFiTVWDeuh3z6HJDw 提取码: k7jx

特别说明

在这里插入图片描述

本文只是为了学习使用,提供一种学习方式方法

完结

即将开启新的篇章, 给个关注哦!!!

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

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

相关文章

力扣竞赛勋章 | 排名分数计算脚本

文章目录 力扣竞赛勋章介绍竞赛评分算法脚本(本文的重点内容)运行结果 代码修改自:https://leetcode.cn/circle/discuss/6gnvEj/ 原帖子的代码无法正常运行。 力扣竞赛勋章介绍 https://leetcode.cn/circle/discuss/0fKGDu/ 如果你想知道自…

【Elasticsearch】初识elasticsearch

目录 初识elasticsearch 1.1.了解ES 1.1.1.elasticsearch的作用 1.1.2.ELK技术栈 1.1.3.elasticsearch和lucene 1.1.4.为什么不是其他搜索技术? 1.1.5.总结 1.2.倒排索引 1.2.1.正向索引 1.2.2.倒排索引 1.2.3.正向和倒排 1.3.es的一些概念 1.3.1.文档…

前端各种方法自我整理

Javascript方法 slice [slaɪs]切片 slice (-2)取出数组中倒数两个植变生成一个新数组 slice(0,3)取出数组下标0到下标3的值,生成新数组 includes [ɪnˈkluːdz]包含 查看数组或字符串内是否有该值,有返回true,无返回false 例子&#…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(十二)完结篇

今天开始使用 vue3 + ts 搭建一个项目管理的后台,因为文章会将项目的每一个地方代码的书写都会讲解到,所以本项目会分成好几篇文章进行讲解,我会在最后一篇文章中会将项目代码开源到我的GithHub上,大家可以自行去进行下载运行,希望本文章对有帮助的朋友们能多多关注本专栏…

linux常用压缩/解压缩命令的使用

目录 gzipbzip2tar gzip gzip 的常用选项: -l(list) 列出压缩文件的内容。 -k(keep) 在压缩或解压时,保留输入文件。 -d(decompress) 将压缩文件进行解压缩。 如果 gzip 不加任何选项,此时为压缩。压缩完该文件会生成后缀为.gz 的压缩文…

java读取excel,指定列A列为空,将下方空行上移,并将指定列F列数据拼接

java读取excel,将空行上移 改造前: 效果图: 上代码: import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileInputStream; import java.io.FileOutputStream; import jav…

SqueezeNet算法解析—鸟类识别—Paddle实战

文章目录 一、理论基础1.前言2.设计理念2.1 CNN微架构(CNN MicroArchitecture)2.2 CNN宏架构(CNN MacroArchitecture)2.3 模型网络设计探索过程2.4 结构设计策略2.5 Fire模块 3.网络结构4.评估分析 二、实战1.数据预处理2.数据读取…

树莓派登录密码忘记了怎么办????

我们常常会不记得我们的密码,比如说我近期想玩一下我们树莓派开发版,登录的时候忘记了怎么办,第一想到的就是重刷系统,从头再来,今天我给大家带来了一个解决忘记了登录密码如何去修改它,从而进入系统里。 …

分享一款超级好用的下载软件,IDM--不限速,破解版,IDM破解版下载安装

本片文章分为四个部分: 第一部分,下载安装IDM 第二部分,IDM破解 第三部分,浏览器插件的安装 第四部分,百度网盘使用IDM下载 下载IDM 首先大家可以在浏览器搜索IDM 网址:https://www.internetdownloadma…

Zynq PS无法读取SD卡(TF卡)异常分析及如何读写SD卡

最近我正在进行一个Zynq项目,我使用了Xilinx SDK自带的系统库函数来读取SD卡中的配置信息。然而,一直读取异常。 我进行了一系列的调试和检查,包括确认PS部分的代码正确性以及Xilffs的配置是否正确,但是问题仍然没有解决。最后&am…

NYDIG最新报告:比特币今年上半年回报率达83.6%,远超其他资产类别

本文要点: 比特币的强劲势头延续到了二季度,本季度比特币上涨 6.8%,年初至今上涨 83.6%。 二季度末,一系列新的现货比特币 ETF 申请(尤其是 ETF 巨头贝莱德的申请)提振了比特币价格。 在多家机构提交现货 B…

POI下载excel通用方法

POI下载excel通用方法 最近遇到一个业务是需要下载excel&#xff0c;使用POI,这里记录一下实现过程 1、导包 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency>…

本周大新闻|传微软曾考虑收购Niantic;腾讯引进Quest挑战重重

本周XR大新闻&#xff0c;AR方面&#xff0c;传微软曾考虑收购AR头部公司Niantic&#xff1b;Q-PIXEL公布5000PPI可调色Micro LED&#xff1b;三星智能眼镜商标曝光&#xff1b;Humane公布首款产品Ai Pin&#xff1b;空客推企业级AR解决方案。 VR方面&#xff0c;Vision Pro销…

边缘计算那些事儿-漫谈网络切片关键技术

0、背景 网络切片作为一种比较前沿的技术&#xff0c;当前并没有太多系统的资料可以学习&#xff0c;很多的技术资料都是比较分散地分布在论文和一些技术博客中&#xff0c;笔者当前是通过论文的解读获取相关的技术信息&#xff0c;在过程中笔者总结了相关的技术栈&#xff0c;…

pytorch多分类问题 CrossEntropyLoss()函数的输入size/shape不一致问题

在使用pytorch实现一个多分类任务的时候&#xff0c;许多多分类任务在训练过程中都会有如下的代码&#xff1a; criterion nn.CrossEntropyLoss() loss criterion(output, target) # output.size : [batch_size, class_num] # target.size : [batch_size]许多的初学者会卡在…

Kubernetes 容器类型 Init - pause - sidecar - app容器

目录 Kubernetes 的容器类型 Init 初始化容器 参考文档&#xff1a;Init 容器 | Kubernetes 使用 Init 容器的情况 案例&#xff1a;定义了一个具有 2 个 Init 容器的简单 Pod 你通过运行下面的命令启动 Pod&#xff1a; 发现两个Init容器都没有运行成功 查看更多详细…

一些行业报告--From 艾瑞咨询

一些行业报告--From 艾瑞咨询 1 介绍2 机械臂行业研究 [From 艾瑞咨询 -- 中国工业机器人行业研究报告&#xff08;2023&#xff09;2.1 发展历程2.2 中国工业机器人相关政策2.3 产业链2.4 三大部分六大系统2.5 伺服&控制器 主要玩家 及 关键指标及难点2.6 减速机 主要玩家…

mysql中根据已有的表来创建新表的三种方式

mysql根据现有表创建新表 1、语法1&#xff1a;CREATE TABLE new_tbl LIKE orig_tbl; 1、1 根据departments表创建新表departments1 departments 表结果和表数据库如下 创建departments1如下 使用命令&#xff1a; CREATE TABLE departments1 LIKE departments; 这种语法&…

GEE:在地图上添加时间滑动条,以交互式可视化不同年份影像

作者:CSDN @ _养乐多_ 本文将介绍在Google Earth Engine(GEE)平台上的地图显示区域创建一个交互式界面,可以为用户添加一个时间滑动条,通过滑动条可以选择显示不同年份的遥感影像。 结果如下图所示, 文章目录 一、代码二、代码链接一、代码 // 使用滑块从图像集合中选…

Auto-Rig Pro 手指控制器骨骼(IK-FK)

选中手指控制器骨骼,在tool面板里看到snap IK-FK, IK-FK,还有snap all to IK 和 FK: 这些都是Auto-Rig Pro提供的一些工具&#xff0c;可以让您在IK&#xff08;反向动力学&#xff09;和FK&#xff08;正向动力学&#xff09;之间切换和同步。IK和FK是两种不同的绑定方式&…