arcgis如何将一部分shp地图截取下来并处理成networkx格式

一、准备工作

---你需要有:

  • 一个要被裁剪的 目标图层(比如全国行政区划 shp)
  • 一个用来定义裁剪范围的 边界图层(比如某个省、市、或矩形区域)

二、操作步骤(以 ArcGIS Pro 为例)

方法一:使用"Clip(裁剪)"工具

  1. 打开 ArcGIS Pro / ArcMap

  2. 在菜单栏选择:
    Analysis → Tools → 搜索 "Clip"

  3. 打开工具后,设置参数:

    • Input Features(输入要素):你要裁剪的主图层(例如全国地图)
    • Clip Features(裁剪要素):用来裁剪的范围(例如某个省的边界)
    • Output Feature Class(输出要素类) :输出文件路径和名称(例如 D:\clip_result.shp
  4. 点击 Run(运行)

    ✅ 执行完成后,会生成一个新的 shapefile,只包含在裁剪范围内的部分。


方法二:如果没有现成的裁剪范围

可以自己绘制:

  1. 在地图上新建一个图层(或用"Create Feature Class"创建一个简单矩形)。
  2. 在编辑模式下绘制你希望保留的范围(例如框选一个区域)。
  3. 再用这个矩形作为 Clip Features 去裁剪目标图层。

方法三:选择 + 导出

如果你只想快速提取一小部分数据(不精确裁剪):

  1. 使用 Select Features 工具在地图上选中目标区域。
  2. 右键图层 → Data → Export Features
  3. 在弹出窗口中选择"Selected features",保存为新 shapefile。
    ✅ 这样导出的就是你选中的部分。

📁 输出结果

生成的文件(例如 clip_result.shp)将只包含被裁剪范围内的地理要素。


💡 小技巧

  • 如果你只想裁剪属性表的一部分 ,可先用 "Select by Attributes" 筛选后再导出。
  • 如果只是想看某一区域,而不真正创建新文件,可以使用 "Definition Query" 设置显示过滤条件。
  • 如果想裁剪栅格数据 (.tif),要用 Clip Raster 工具。

取地图

bash 复制代码
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()}")

遍历

bash 复制代码
# 假设你已经有 G 了
source = list(G.nodes())[0]
target = list(G.nodes())[-1]

path = nx.shortest_path(G, source=source, target=target, weight='weight')
print("最短路径:", path)

作图

bash 复制代码
import matplotlib.pyplot as plt

pos = {node: node for node in G.nodes()}
nx.draw(G, pos, node_size=5, linewidths=0.2)
plt.show()

下一步是如何进行算法以及找 baseline了,

这个领域的base 不好找啊

相关推荐
细节控菜鸡3 天前
【2025最新】ArcGIS for JS 实现地图卷帘效果
开发语言·javascript·arcgis
细节控菜鸡5 天前
【2025最新】ArcGIS for JS 实现地图卷帘效果,动态修改参数(进阶版)
开发语言·javascript·arcgis
GIS阵地5 天前
CSV转换为QGIS的简单分类符号
arcgis·二次开发·qgis·地理信息系统·pyqgis
角砾岩队长6 天前
基于ArcGIS实现Shapefile转KML并保留标注
arcgis
细节控菜鸡6 天前
【2025最新】ArcGIS for JS二维底图与三维地图的切换
javascript·arcgis
zenithdev16 天前
开源库入门教程 Cesium:3D地球和地图库
其他·3d·arcgis
徐赛俊9 天前
QGIS + ArcGIS Pro 下载常见卫星影像及 ESRI Wayback 历史影像
arcgis
大大大大大大大大大泡泡糖9 天前
使用arcgis提取评价指标时,导出数据是负数-9999
arcgis
杨超越luckly9 天前
HTML应用指南:利用POST请求获取全国索尼体验型零售店位置信息
前端·arcgis·html·数据可视化·门店数据