Wpf 如何使用散点视图将元素覆盖在可缩放地图的顶部?

Wpf 如何使用散点视图将元素覆盖在可缩放地图的顶部?,wpf,arcgis,pixelsense,Wpf,Arcgis,Pixelsense,我正在构建一个应用程序,其中包含一个运行在MicrosoftSurface 2.0(现在称为PixelSense)上的交互式地图(使用ArcGIS API for WPF)。在我的应用程序中,我有一个librarycontainer,其中包含用户可以拖出并放置在地图上某个位置的元素。我通过在地图上的elementlayer中放置散射视图(覆盖整个地图)来实现这一点,如下所示: <esri:ElementLayer> <esri:ElementLayer.Children

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

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

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


干杯

您应该执行以下操作,而不是将散点视图放入视图框中:

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

  • 缩放或变换地图时,将每个世界位置变换回视口坐标,并相应地设置每个ScatterViewItem的“中心”特性


为了存储每个散点视图项的世界坐标,您可以创建。

而不是将散点视图放在视图框中,您应该执行以下操作:

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

  • 缩放或变换地图时,将每个世界位置变换回视口坐标,并相应地设置每个ScatterViewItem的“中心”特性


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

感谢您的快速回复Clemens。我已经试着按照你的建议做了,但是我仍然无法让元素按预期的方式运行。事实上,元素现在在平移和缩放时的行为都很奇怪。如果我将一个元素放置在地图的中心,然后稍微向左平移地图(即将地图拖向屏幕的右侧),则该元素移动的距离与我移动地图的距离相同,但方向错误(即向右)。在缩放时,元素会远离最初指定的位置,尽管在本例中我看不到新位置中的任何逻辑。然后您应该检查ArcGIS API提供的转换。你需要将视口坐标设为lat/lon,反之亦然,视口坐标当然应该与散射视图坐标相同,即左上角是(0,0),x在右边,y在下面。最后,我按照克莱门斯的建议做了一些工作(尽管我不得不稍微偏移元素以使它们正确定位)。非常感谢你的帮助,谢谢你的及时回复。我已经试着按照你的建议做了,但是我仍然无法让元素按预期的方式运行。事实上,元素现在在平移和缩放时的行为都很奇怪。如果我将一个元素放置在地图的中心,然后稍微向左平移地图(即将地图拖向屏幕的右侧),则该元素移动的距离与我移动地图的距离相同,但方向错误(即向右)。在缩放时,元素会远离最初指定的位置,尽管在本例中我看不到新位置中的任何逻辑。然后您应该检查ArcGIS API提供的转换。你需要将视口坐标设为lat/lon,反之亦然,视口坐标当然应该与散射视图坐标相同,即左上角是(0,0),x在右边,y在下面。最后,我按照克莱门斯的建议做了一些工作(尽管我不得不稍微偏移元素以使它们正确定位)。非常感谢你的帮助,克莱门斯。