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 不好找啊

相关推荐
非科班Java出身GISer10 小时前
ArcGIS JS 基础教程(46):编辑要素属性 FeatureForm
arcgis·arcgis js编辑要素·arcgis js 要素·arcgis js要素属性·arcgis js 编辑属性·arcgis js编辑要素属性
梅如你2 天前
ISPRS | 1990-2020年间中国人工林与天然林的空间分布数据
arcgis·gis·遥感
limit00755 天前
公开 WMTS / XYZ 瓦片接入 Cesium:6 类常见问题与排查顺序
chrome·低代码·arcgis·web3·旅游
limit00756 天前
三维模型悬空与切片偏移的排查顺序
低代码·3d·arcgis·web3·安卓·webgl
最强小杰6 天前
Continue + minimax-m3 接入教程:协议、模型 ID、404 与工具调用排错
arcgis·ai
2501_9343044010 天前
新增2026年! 2012-2026年全国逐月夜间灯光数据
arcgis·gis数据
梅如你10 天前
中国2026年路网数据
arcgis·gis·遥感
梦想的初衷~11 天前
GPT × ArcGIS 强强联合:AI助力数据处理、空间分析、可视化及多案例综合应用实战教程
人工智能·gpt·arcgis
时间的情敌11 天前
《WebGIS EPSG:4326 与 EPSG:3857 墨卡托投影转换》
arcgis·mars2d
时间的情敌12 天前
《Mars2D 快速上手,从零搭建三维 GIS 项目》
arcgis·mars2d