1

我正在使用在 Microsoft Surface 2.0(现在称为 PixelSense)上运行的交互式地图(使用 ArcGIS API for WPF)构建一个应用程序。在我的应用程序中,我有一个库容器,其中包含用户可以拖出并放置在地图上某个位置的元素。我通过在地图上的元素层中放置一个散点图(包围整个地图)来实现这一点,如下所示:

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

有人对我如何解决这个问题有建议吗?

干杯

4

1 回答 1

1

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

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

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

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

于 2013-01-07T10:40:29.990 回答