文章目录
- 前言
- 1. 安装所需库
- 2. 读取 Shapefile 文件
- 3. 可视化地图
- 4. 用户输入坐标和清除指定区域内的图形
- 5. 可视化删除指定区域内的图形之后的地图
- 6. 保存为新的 Shapefile (.shp)文件
- 完整代码及解析
- 分析说明
- 测试文件地址
- 特别说明
- 完结
前言
在地理信息系统(Geographic Information System,简称 GIS)领域,处理和分析地理空间数据是一项非常重要的任务。而Python中的
geopandas
和shapely
是两个非常强大的库,提供了便捷的功能来处理和可视化地理空间数据。
本文将介绍如何使用geopandas
和shapely
来读取、处理、可视化和保存地理Shapefile文件。
1. 安装所需库
首先,我们需要安装 geopandas
和 shapely
库。可以通过以下命令来安装:
pip install geopandas
pip install shapely
2. 读取 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)
分析说明
-
导入需要使用的库
geopandas
、shapely
和matplotlib.pyplot
。 -
定义一个变量
shp_file
,指定 Shapefile 文件的路径。 -
使用
gpd.read_file()
函数读取 Shapefile 文件,并将其保存为GeoDataFrame
对象gdf
。 -
创建一个图形窗口,大小为 10x10 英寸。
-
使用
gdf.plot()
函数将地理数据绘制在图形上,ax=ax
参数指定图形窗口。 -
使用
plt.show()
函数显示图形窗口,展示可视化的地图。 -
提示用户输入两对 x 和 y 坐标。
-
使用
box()
函数基于用户输入的坐标创建一个矩形框,并赋值给变量bbox
。 -
使用
gdf.difference()
函数,从原始地理数据中删除bbox
区域内的地理要素,并将结果保存到gdf
中。10. 创建一个新的图形窗口,大小为 10x10 英寸。 -
使用
gdf.plot()
函数将更新后的地理数据绘制在图形上,ax=ax
参数指定图形窗口。 -
使用
plt.show()
函数显示图形窗口,展示可视化的地图。12. 定义一个变量new_shp_file
,指定保存新 Shapefile 文件的路径。 -
使用
gdf.to_file()
函数将更新后的地理数据保存为新的 Shapefile 文件。
测试文件地址
链接: https://pan.baidu.com/s/1JLQ2CVFiTVWDeuh3z6HJDw 提取码: k7jx
特别说明
本文只是为了学习使用,提供一种学习方式方法
完结
即将开启新的篇章, 给个关注哦!!!