如何使用散点图在可缩放地图上叠加元素?

时间:2013-01-07 09:55:42

标签: wpf arcgis pixelsense

我正在使用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放在视图框中。当我这样做时,元素在地图中保持正确的位置,但现在出现了一个新问题:当我放大和缩小地图时,元素会向上和向下缩放(例如,当地图完整显示时,元素几乎不可见),而首选的行为是当用户放大或缩小地图时元素保持其大小(例如像谷歌地图中的标记)。

有没有人建议如何解决这个问题?

干杯

1 个答案:

答案 0 :(得分:1)

您应该执行以下操作,而不是将ScatterView放在Viewbox中:

  • 将ScatterViewItem放置在地图上后,将其Center点(在视口坐标中)转换为世界坐标(纬度和经度)中的位置。 ArcGIS API应该提供这样的转换。

  • 当地图被缩放或以其他方式转换时,将每个世界位置转换回视口坐标并相应地设置每个ScatterViewItem的Center属性。

为了存储每个ScatterViewItem的世界坐标,您可以创建an attached property