You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ArcGIS Runtime:如何移动地图上已添加的图形/符号?

ArcGIS Runtime动态更新Graphic位置失败问题

我正在尝试用ArcGIS创建GraphicsOverlay,用来显示移动设备传来的坐标更新的动态符号。目前能成功初始显示简单符号,但没法让它在地图上移动。测试代码如下:

GraphicsOverlay machineOverlay = new GraphicsOverlay();
MainMapView.GraphicsOverlays.Add(machineOverlay);
MapPointBuilder rdLocation = new MapPointBuilder(150.864119200149, -32.3478640837185, SpatialReferences.Wgs84); 

SimpleMarkerSymbol sRD1234 = new SimpleMarkerSymbol()
{
    Color = System.Drawing.Color.Red,
    Size = 10,
    Style = SimpleMarkerSymbolStyle.Circle
};

Graphic graphicWithSymbol = new Graphic(rdLocation.ToGeometry(), sRD1234);
machineOverlay.Graphics.Add(graphicWithSymbol);

// 这里红色圆形能正常显示在地图上

rdLocation.SetXY(150.887115, -32.357600); 
rdLocation.ReplaceGeometry(rdLocation.ToGeometry());

// 这里我期望红色圆形移动,但没有效果

我原本以为红色圆形会移动,但实际没反应。是不是需要触发事件重新渲染或刷新叠加层?之前看到类似问题说只要更新几何信息就行,但我这么操作后还是没用。作为ArcGIS Runtime新手,也希望能得到更优的实现建议。


问题原因与解决方法

  • 核心问题:你更新的是MapPointBuilder的几何,但没有把更新后的几何同步到已经添加到GraphicsOverlay里的Graphic对象上。Graphic创建时会复制传入的几何,后续修改MapPointBuilder不会自动同步到Graphic。
  • 正确更新方式:直接修改Graphic的Geometry属性,ArcGIS Runtime会自动触发重绘,无需手动刷新:
    // 更新坐标后,同步到目标Graphic对象
    rdLocation.SetXY(150.887115, -32.357600);
    graphicWithSymbol.Geometry = rdLocation.ToGeometry();
    

进阶实现建议

  • 复用Graphic对象:不要每次坐标更新都创建新的Graphic,复用已有对象修改Geometry属性,性能更优,适合高频坐标更新场景。
  • 空间参考适配:如果移动设备坐标与地图空间参考不一致,记得用GeometryEngine.Project转换后再设置给Graphic。
  • 批量更新优化:多符号更新时,先调用GraphicsOverlay.Graphics.BeginBatch(),更新完成后调用EndBatch(),减少重绘次数提升性能。
  • 附加信息展示:若需显示设备ID等信息,可给Graphic添加CalloutDefinition,实现符号与标注同步移动。

内容的提问来源于stack exchange,提问作者user3259859

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 14:14:38