我正在使用Microsoft Surface 2.0(现在称为PixelSense)上运行的交互式地图(使用ArcGIS API for WPF)构建应用程序。在我的应用程序中,我有一个librarycontainer,其中包含用户可以拖出并放置在地图上某个位置的元素。我通过在地图上的元素层中放置一个散点图(将整个地图包裹起来)来实现这一点,如下所示:
<esri:ElementLayer>
<esri:ElementLayer.Children>
<local:DragDropScatterView esri:ElementLayer.Envelope="-19949487.9573175,-20100080.1372686,20125528.7282505,20131479.5822274" x:Name="ScatterLayer" Background="Transparent" Height="Auto" Width="Auto" ItemContainerStyle="{StaticResource ScatterItemStyle}" />
</esri:ElementLayer.Children>
</esri:ElementLayer>
当用户放大或缩小地图时会出现问题,导致放置在散点图中的元素完全改变其位置。
要解决此问题,我尝试将scatterview放在视图框中。当我这样做时,元素在地图中保持正确的位置,但现在出现了一个新问题:当我放大和缩小地图时,元素会向上和向下缩放(例如,当地图完整显示时,元素几乎不可见),而首选的行为是当用户放大或缩小地图时元素保持其大小(例如像谷歌地图中的标记)。
有没有人建议如何解决这个问题?
干杯
答案 0 :(得分:1)
您应该执行以下操作,而不是将ScatterView放在Viewbox中:
将ScatterViewItem放置在地图上后,将其Center点(在视口坐标中)转换为世界坐标(纬度和经度)中的位置。 ArcGIS API应该提供这样的转换。
当地图被缩放或以其他方式转换时,将每个世界位置转换回视口坐标并相应地设置每个ScatterViewItem的Center属性。
为了存储每个ScatterViewItem的世界坐标,您可以创建an attached property。