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
相关产品推荐
相关产品推荐

