arcgis如何将一部分shp地图截取下来并处理成networkx格式
一、准备工作
—你需要有:
- 一个要被裁剪的 目标图层(比如全国行政区划 shp)
- 一个用来定义裁剪范围的 边界图层(比如某个省、市、或矩形区域)
二、操作步骤(以 ArcGIS Pro 为例)
方法一:使用“Clip(裁剪)”工具
-
打开 ArcGIS Pro / ArcMap。
-
在菜单栏选择:
Analysis → Tools → 搜索 “Clip”。 -
打开工具后,设置参数:
- Input Features(输入要素):你要裁剪的主图层(例如全国地图)
- Clip Features(裁剪要素):用来裁剪的范围(例如某个省的边界)
- Output Feature Class(输出要素类):输出文件路径和名称(例如
D:\clip_result.shp
)
-
点击 Run(运行)。
✅ 执行完成后,会生成一个新的 shapefile,只包含在裁剪范围内的部分。
方法二:如果没有现成的裁剪范围
可以自己绘制:
- 在地图上新建一个图层(或用“Create Feature Class”创建一个简单矩形)。
- 在编辑模式下绘制你希望保留的范围(例如框选一个区域)。
- 再用这个矩形作为 Clip Features 去裁剪目标图层。
方法三:选择 + 导出
如果你只想快速提取一小部分数据(不精确裁剪):
- 使用 Select Features 工具在地图上选中目标区域。
- 右键图层 → Data → Export Features。
- 在弹出窗口中选择“Selected features”,保存为新 shapefile。
✅ 这样导出的就是你选中的部分。
📁 输出结果
生成的文件(例如 clip_result.shp
)将只包含被裁剪范围内的地理要素。
💡 小技巧
- 如果你只想裁剪属性表的一部分,可先用 “Select by Attributes” 筛选后再导出。
- 如果只是想看某一区域,而不真正创建新文件,可以使用 “Definition Query” 设置显示过滤条件。
- 如果想裁剪栅格数据(.tif),要用 Clip Raster 工具。
取地图
import geopandas as gpd
import networkx as nx
from shapely.geometry import LineString, MultiLineString# 1️⃣ 读取 shapefile
gdf = gpd.read_file("road.shp")# 2️⃣ 创建空图
G = nx.Graph()# 3️⃣ 遍历每条道路
for idx, row in gdf.iterrows():geom = row.geometry# 如果是单条线if isinstance(geom, LineString):lines = [geom]# 如果是多条线(MultiLineString)elif isinstance(geom, MultiLineString):lines = list(geom.geoms)else:continue # 忽略非线类型几何(如点、面)# 遍历每条线for line in lines:coords = list(line.coords)for i in range(len(coords) - 1):start = coords[i]end = coords[i + 1]length = LineString([start, end]).length# 添加边到图中G.add_edge(start, end, weight=length, **row.to_dict())print(f"✅ 网络构建完成:节点数 = {G.number_of_nodes()}, 边数 = {G.number_of_edges()}")
遍历
# 假设你已经有 G 了
source = list(G.nodes())[0]
target = list(G.nodes())[-1]path = nx.shortest_path(G, source=source, target=target, weight='weight')
print("最短路径:", path)
作图
import matplotlib.pyplot as pltpos = {node: node for node in G.nodes()}
nx.draw(G, pos, node_size=5, linewidths=0.2)
plt.show()
下一步是如何进行算法以及找 baseline了,
这个领域的base 不好找啊