使用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、我只需要在上面相同的模式中显示美国国家层面的点。
您可以使用派生的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"/>