使用XAML地图控件在基于c# VS2013 WPF的OpenStreetMap的地图上添加热图层

本文关键字:地图 OpenStreetMap 图层 WPF 添加 控件 XAML 使用 VS2013 | 更新日期: 2023-09-27 18:17:22

我正在尝试使用XAML MAP控件(https://xamlmapcontrol.codeplex.com/)在基于c# VS2013 WPF的OpenStreetMap的地图上添加热图层。

我通过在MainWindow.xaml中设置北、南、东、西纬度/经度,将热图图像添加到地图中。

但是,我需要热图中的位置显示在地图中具有相同纬度和经度的正确位置,因为它们是从输入文件创建的,而不仅仅是将图像粘贴到地图上。

例如,给定的输入是:
   Logitude,    latitude,    value
       -77.85      42.96      9798

输入文件中有50万个位置。

我想把地图上的位置显示为热图点。在上面的例子中,该点位于纽约州。我想显示它在地图上的一些颜色,是根据在一个传奇指定的值分配事先。

此外,因为地图上显示的50万个点可能不是一个很好的视图,当缩放级别较大时,例如15。所以,我希望当我放大地图时,热图上的点可以在不同的聚合地理级别上合并到一个点上。

例如,如果在一个邮政编码区域中有5000个点,在缩放级别> 12时,我只在邮政编码质心处显示一个邮政编码区域中的一个点,或者只是将邮政编码区域着色为只有一种颜色的多边形。

当缩放级别为8

当缩放级别为3

当缩放级别为<3、我只需要在上面相同的模式中显示美国国家层面的点。

使用XAML地图控件在基于c# VS2013 WPF的OpenStreetMap的地图上添加热图层

您可以使用派生的MapImageLayer并覆盖其UpdateImage来动态创建热图位图。如果创建位图不需要花费太多时间,这当然是一种明智的方法。

public class HeatmapImage : MapImageLayer
{
    protected override void UpdateImage(
        double west, double east, double south, double north, int width, int height)
    {
        BitmapSource bitmap = ... // create heatmap here
        UpdateImage(west, east, south, north, bitmap);
    }
}

然后你只需将HeatmapImage添加到地图中,然后你就完成了:

<map:Map TileLayer="{x:Static map:TileLayer.OpenStreetMapTileLayer}">
    <local:HeatmapImage />
</map:Map>

请注意,位图中的地图图像必须使用Web墨卡托投影来创建。


编辑:为了让您了解MapImage是如何工作的,请查看XAML Map Control中的样例应用程序中的以下XAML片段。它在地图控件中以覆盖的形式显示具有给定纬度/经度边界的图像。实际图像是从Google Maps复制的航拍图像:

<map:MapImage South="53.54031" North="53.74871" West="8.08594" East="8.43750"
              Source="10_535_330.jpg"/>