如何用ArcGIS API for Python将道路Polyline数据合并绘制在同一地图
解决方案
要把所有道路Polyline合并显示在同一地图上,你可以借助ArcGIS API for Python的Map和图层组件实现,两种实用方法如下:
方法1:直接加载FeatureLayer(推荐)
无需手动请求JSON,直接通过服务URL创建FeatureLayer并添加到地图,ArcGIS会自动处理渲染、图层合并等逻辑:
from arcgis.gis import GIS from arcgis.layers import FeatureLayer # 匿名登录ArcGIS gis = GIS() # 创建地图,初始视角定位到爱尔兰区域 m = gis.map('Ireland', zoomlevel=7) # 道路服务的FeatureLayer地址 road_layer_url = "https://services-eu1.arcgis.com/FH5XCsx8rYXqnjF5/arcgis/rest/services/Roads___OSi_National_250k_Map_Of_Ireland/FeatureServer/0" # 创建图层并添加到地图 road_layer = FeatureLayer(road_layer_url) m.add_layer(road_layer) # 显示合并后的地图 display(m)
方法2:手动处理JSON数据并添加到GraphicsLayer
如果需要自主处理API返回的JSON数据,可以将所有道路Polyline转为Graphic对象,统一添加到GraphicsLayer后再展示:
import requests from arcgis.gis import GIS from arcgis.layers import GraphicsLayer from arcgis.geometry import Polyline from arcgis.features import Graphic # 请求道路数据 url = 'https://services-eu1.arcgis.com/FH5XCsx8rYXqnjF5/arcgis/rest/services/Roads___OSi_National_250k_Map_Of_Ireland/FeatureServer/0/query?where=1%3D1&outFields=*&outSR=4326&f=json' response = requests.get(url) road_features = response.json()['features'] # 初始化地图和图形图层 gis = GIS() m = gis.map('Ireland', zoomlevel=7) graphics_layer = GraphicsLayer() # 遍历所有道路,转为Graphic并批量添加到图层 for feature in road_features: polyline = Polyline(feature['geometry']) graphic = Graphic(geometry=polyline, attributes=feature['attributes']) graphics_layer.add(graphic) # 将图层挂载到地图并显示 m.add_layer(graphics_layer) display(m)
问题原因说明
你之前的代码每次display(Polyline(...))都会生成独立的地图实例,而将所有图形统一放到同一个GraphicsLayer或FeatureLayer中,就能实现同一地图上的合并显示。
内容的提问来源于stack exchange,提问作者user101
相关产品推荐
相关产品推荐

