如何使用散射视图将元素叠加在可缩放的地图上



我正在构建一个带有交互式地图的应用程序(使用ArcGIS API for WPF),它运行在Microsoft Surface 2.0(现在称为PixelSense)上。在我的应用程序中,我有一个包含元素的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>

当用户在地图上放大或缩小时,会导致已经放置在散射视图中的元素完全改变其位置。

为了解决这个问题,我尝试将散射视图放入视图框中。当我这样做时,元素在地图中保持正确的位置,但是现在出现了一个新问题:当我放大和缩小地图时,元素按比例放大和缩小(例如,当地图完全显示时,元素几乎是不可见的),而首选行为是当用户放大或缩小地图时,元素保持其大小(例如,像Google Maps中的标记)。

谁能给我一个建议,我该如何解决这个问题?

欢呼

不要把ScatterView放在Viewbox中,你应该这样做:

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

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

为了存储每个ScatterViewItem的世界坐标,您可以创建一个附加属性

最新更新