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

相关推荐
ZHSH.2 天前
ArcGIS地统计综合实战 | 洛杉矶臭氧浓度预测-pretict-pretictable-pretiction
arcgis·预测·地统计分析
cehuishi95274 天前
利用ARCGIS手搓宗地图详细版
arcgis
百***78454 天前
node.js+npm的环境配置以及添加镜像(保姆级教程)
arcgis·npm·node.js
枝上棉蛮5 天前
从“高门槛”到“零门槛”:ArcGIS 和 GISBox如何破解中小用户GIS工具使用难题?
arcgis·gis·gisbox·服务分发·场景编辑·切片转换·gis服务器
Q一件事5 天前
arcgis用累计值进行分级
arcgis
啦啦球晃晃5 天前
ARCGIS删除自定义的七参数转换
arcgis
百***35335 天前
node.js+npm的环境配置以及添加镜像(保姆级教程)
arcgis·npm·node.js
百***41667 天前
node.js+npm的环境配置以及添加镜像(保姆级教程)
arcgis·npm·node.js
农业遥感学子一枚7 天前
Arcgis用DEM影像计算坡度、坡向
arcgis
Jonathan Star8 天前
在 React 生态中,有多个成熟的 虚拟列表 npm 库
react.js·arcgis·npm