当前位置:   article > 正文

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

python处理shp数据的库

前言

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

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

1. 安装所需库

安装所需库

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

pip install geopandas
pip install shapely
  • 1
  • 2

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)
  • 1
  • 2
  • 3
  • 4
  • 5

3. 可视化地图

在可视化地图

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

import matplotlib.pyplot as plt

# 可视化地图
fig, ax = plt.subplots(figsize=(10, 10))
gdf.plot(ax=ax)
plt.show()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

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

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))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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

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

删除指定区域内的图形

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

fig, ax = plt.subplots(figsize=(10, 10))
gdf.plot(ax=ax)
plt.show()
  • 1
  • 2
  • 3

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

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

在这里插入图片描述

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

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

通过 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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

分析说明

  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

特别说明

在这里插入图片描述

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

完结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/爱喝兽奶帝天荒/article/detail/860015
推荐阅读
相关标签
  

闽ICP备14008679号