我正在尝试使用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 <1时。等级&lt; 12,我只需要在与上面相同的模式中显示县级点数。
当缩放级别为3 <等级&lt; 5,我只需要在与上面相同的模式中显示状态级别点。
当级别的缩放级别&lt; 3,我只需要以与上面相同的模式显示美国国家级别的分数。
任何帮助都将不胜感激。
答案 0 :(得分:1)
您可以使用派生的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 Mercator投影创建位图中的地图图像。
编辑:为了让您了解MapImage的工作原理,请查看XAML Map Control中示例应用程序中的以下XAML片段。它以地图控件中的叠加显示具有给定纬度/经度边界的图像。实际图像是从Google地图复制的航拍图像:
<map:MapImage South="53.54031" North="53.74871" West="8.08594" East="8.43750"
Source="10_535_330.jpg"/>