博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C#热图生成(三)——with Silverlight改进热图显示
阅读量:4310 次
发布时间:2019-06-06

本文共 1184 字,大约阅读时间需要 3 分钟。

前文介绍了如何在Silverlight中在客户端生成热图并与Bing Maps集成,但当时生成的热图是通过一个Image对象呈现在地图控件之上,有许多不便之处:

  • 为免Image挡住Map控件接收事件,Image必须设IsHitVisible为false
  • Heat Map会挡住Map控件上的元素,比如Navigation和PushPin及其他Map Layer:
  • 移动地图时,若要实时显示热图,必须不断重复绘制,但会让用户感觉很卡

在前文末尾,提出了使用Bing Maps MapLayer的一种解决方法,尝试之后,终于解决了以上问题,现在的效果如下,热图已经在Navigation之下了:

同时,由于现在热图实现为Map控件中的一个MapLayer,因此在拖动地图时,热图会跟随地图一起移动。

具体实现

热图绘制等部分保持不变,只是改了热图的呈现方式:

private void map_ViewChangeEnd (object sender, Microsoft.Maps.MapControl.MapEventArgs e){    var newHeatMap = drawHeatMap ();    mapLayer.Children.Remove (_heatMapImg);    _heatMapImg.Source = newHeatMap;    _heatMapImg.Stretch = Stretch.None;    mapLayer.AddChild (_heatMapImg, map.BoundingRectangle);}

其中,mapLayer定义如下:

而_heatMapImg即一个Image对象。

不过,由于地图放大缩小时,暂时无法让Image跟着变化,所以依然必须先将其隐藏:

private void map_ViewChangeOnFrame (object sender, Microsoft.Maps.MapControl.MapEventArgs e){    if (map.ZoomLevel != _lastZoomLevel)    {        mapLayer.Children.Remove (_heatMapImg);        _lastZoomLevel = map.ZoomLevel;    }}
map.Children.Insert (0, tileLayer);

来添加tile到最下层,也可以通过代码方式在添加tile后添加mapLayer.

----------------------

源码下载:

转载于:https://www.cnblogs.com/Gildor/archive/2010/05/21/1740987.html

你可能感兴趣的文章
我们一起做一个可以商用的springboot脚手架
查看>>
idea在搭建ssm框架时mybatis整合问题 无法找到mapper
查看>>
PHP empty、isset、innull的区别
查看>>
apache+nginx 实现动静分离
查看>>
通过Navicat远程连接MySQL配置
查看>>
phpstorm开发工具的设置用法
查看>>
Linux 系统挂载数据盘
查看>>
Git基础(三)--常见错误及解决方案
查看>>
Git(四) - 分支管理
查看>>
PHP Curl发送数据
查看>>
HTTP协议
查看>>
HTTPS
查看>>
git add . git add -u git add -A区别
查看>>
apache下虚拟域名配置
查看>>
session和cookie区别与联系
查看>>
PHP 实现笛卡尔积
查看>>
Laravel中的$loop
查看>>
CentOS7 重置root密码
查看>>
Centos安装Python3
查看>>
PHP批量插入
查看>>