近期应客户的要求, 需要在地图中呈现热力图效果,我们知道在B/S中百度地图可以直接呈现热力图,相对要容易很多。在C/S中呈现的并不是特别完美。

既然客户有需求,就抽出半天时间给弄了一个热力图的组件。 近期跟GDI绘图组件干上了。 

没啥技术含量的一个小组件。 就是一个绘图,需要掌握GDI绘图要素。 由于是GDI绘图 在WPF中也会有独到的优势, 绘制热力图模版也可以进行完全自定义

整理了一下发现代码量也就400多行,还包含大量的回车符。支持地图源切换,公里标记,以及创建热力图。

在不同的Zoom中呈现对应的数据信息。 下面有个GIF动态图,相对比较大。 耐心等待。

 

 

 此窗口用的WPF ,需要考虑经纬度坐标的对应转换。

 

 

 

还需要注意在地图中需要对坐标的一个数据转换。

在网上随便找了一个转换坐标的处理。能用就行。 不做太精确。 等客户的数据对接即可。

public static double pi = 3.14159265358979324;


public static double a = 6378245.0;


public static double ee = 0.00669342162296594323;


public static double[] transform(double wgLat, double wgLon)
{
double[] latlng = new double[2];

double dLat = transformLat(wgLon - 105.0, wgLat - 35.0);
double dLon = transformLon(wgLon - 105.0, wgLat - 35.0);
double radLat = wgLat / 180.0 * pi;
double magic = Math.Sin(radLat);
magic = 1 - ee * magic * magic;
double sqrtMagic = Math.Sqrt(magic);
dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);
dLon = (dLon * 180.0) / (a / sqrtMagic * Math.Cos(radLat) * pi);
latlng[0] = wgLat + dLat;
latlng[1] = wgLon + dLon;
return latlng;
}


private static double transformLat(double x, double y)
{
double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y + 0.2 * Math.Sqrt(Math.Abs(x));
ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.Sin(y * pi) + 40.0 * Math.Sin(y / 3.0 * pi)) * 2.0 / 3.0;
ret += (160.0 * Math.Sin(y / 12.0 * pi) + 320 * Math.Sin(y * pi / 30.0)) * 2.0 / 3.0;
return ret;
}

private static double transformLon(double x, double y)
{
double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1 * Math.Sqrt(Math.Abs(x));
ret += (20.0 * Math.Sin(6.0 * x * pi) + 20.0 * Math.Sin(2.0 * x * pi)) * 2.0 / 3.0;
ret += (20.0 * Math.Sin(x * pi) + 40.0 * Math.Sin(x / 3.0 * pi)) * 2.0 / 3.0;
ret += (150.0 * Math.Sin(x / 12.0 * pi) + 300.0 * Math.Sin(x / 30.0 * pi)) * 2.0 / 3.0;
return ret;
}

 

 贴出部分代码

 

 

 

放了一个控件,以及三个button按钮

private void MapExpansion_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{

}

private void MapExpansion_OnTileLoadComplete(long ElapsedMilliseconds)
{
//Console.WriteLine("加载时间: " + ElapsedMilliseconds);
}

private void MapExpansion_OnTileLoadStart()
{
//Console.WriteLine("开始加载: " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}


public int MapProviderIndex
{
get
{
return (int)base.GetValue(MapExpansion.MapProviderIndexProperty);
}
set
{
base.SetValue(MapExpansion.MapProviderIndexProperty, value);
}
}
public static readonly DependencyProperty MapProviderIndexProperty = DependencyProperty.Register("MapProviderIndex", typeof(int), typeof(MapExpansion),
new FrameworkPropertyMetadata(0, new PropertyChangedCallback(MapExpansion.OnSourceMapProviderChanged)));

private static void OnSourceMapProviderChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)

mapExpansion.MapProvider = MapProviders.AMap; 
mapExpansion.Refresh();
}
}

功能没啥东西。

在就是融合用户的数据部分, 可将对应的热力点与地图上的所有经纬度进行整合。

算法也没啥东西。 根据具体的业务以及数据参数,进行处理热力数据业务即可。

如果需要看具体效果。可以看头条发了一个视频展示的效果更多一些。

视频效果地址:https://www.ixigua.com/7038095419494269455

 

posted @ 2021-12-06 09:55 真有意思 阅读(1860) 评论(0) 推荐(0) 编辑
摘要: 最近接了个小项目10K。用了2个下班时间写完,共花费了6-7个小时完成。如有同类需求的可以与本人联系,QQ:120772981 视频效果地址: 一、自制winform超牛用流程图工作流组件,纯GDI绘图面向对象涂层设计 二、自制winform超牛用流程图工作流组件,追加体验功能以及讲解代码设计 功能 阅读全文
posted @ 2021-11-19 09:14 真有意思 阅读(3330) 评论(21) 推荐(19) 编辑
摘要: 最近项目中运用到了WPF处理三维软件,在C/S结构中WPF做UI还是有很多优越性,简单的学了一点WPF知识,成功的完成项目目标。项目过度阶段对于WPF的一些基本特点有了进一步了解 。至此花费一点时间研究研究WPF控件。 为以后的项目开发中提供一些可观的资源也是不错的。 目前控件完成数量有限,空余时间 阅读全文
posted @ 2019-09-17 15:04 真有意思 阅读(1863) 评论(2) 推荐(3) 编辑
摘要: C++处理google 百度地图在网上查阅了很多都是通过浏览器方式显示地图信息, 跟我目前项目很不符合, 所以仔细研究了一下C++方式显示地图。通过地图投影以及墨卡托投影,在通过平面地图计算经纬度。 最终今天终于搞定的初步功能,鼠标移动位置显示经纬度。切换Zoom 选择地图信息。 再也不用为C++调 阅读全文
posted @ 2017-08-31 14:45 真有意思 阅读(1122) 评论(0) 推荐(0) 编辑
摘要: 属实C++不会。 目前帮朋友弄个小项目需要小折腾一下。 c# 一直采用 log4net ,c++的呢,找找有个log4cplus 知识有限,做个通用类吧。别把精力放在这里。 动手创建个静态类。 为了保持一致性,由于好几年前还有一些BCL的动态库。 所以命名规则还采用原来的风格。 BCLLogHelp 阅读全文
posted @ 2016-12-09 22:08 真有意思 阅读(845) 评论(0) 推荐(0) 编辑
摘要: 这几个月一直忙APP的项目,没来得及更新项目,想想该抽出时间整理一下开发思路,跟大家分享,同时也希望得到宝贵的建议。 先说一下我们的权限管理的的设计思路,首先一个企业信息化管理系统一定会用到权限管理, 那么一个动态的菜单在企业信息化管理系统占有一定的分量。 下面介绍我的一些思路。 由于原声的winf 阅读全文
posted @ 2016-04-10 22:04 真有意思 阅读(4852) 评论(2) 推荐(4) 编辑
摘要: 对于web方向的工作流,一直在用gooflow对于目前我的winform开发平台却没有较好的工作流组件。 针对目前的项目经验告诉我们。一个工作流控件是很必要的。 当然在winform方面的工作流第三方组件在网上找了很久,也没有发现自己比较心仪的组件。 对于工作流组件通过web方式来实现具有绝对的优势 阅读全文
posted @ 2015-10-18 11:04 真有意思 阅读(8436) 评论(36) 推荐(20) 编辑
摘要: 通常我们在处理编辑窗体时。往往会遇到数据绑定。例如combobox控件绑定数据字典可能是我们经常用到的。然而在我的winform快速开发平台中我是如何处理这个频繁的操作呢? 首先,我们要绑定combobox动态数据,大致都是来自于数据字典的数据绑定,那么思路来了,我们需要绑定的是通过获取字典属性来绑 阅读全文
posted @ 2015-10-09 14:10 真有意思 阅读(1873) 评论(2) 推荐(2) 编辑
摘要: 一个项目控件主要由及部分的常用组件,当然本次介绍的是通用分页控件。 处理思想:我们在处理分页过程中主要是针对数据库操作。 一般情况主要是传递一些开始位置,当前页数,和数据总页数以及相关关联的业务逻辑。 当然我们不可能将控件的所有事件都发布出来。 我们返现所有的按钮操作都是围绕着我们的的查询记录来进行 阅读全文
posted @ 2015-10-03 14:34 真有意思 阅读(2748) 评论(11) 推荐(5) 编辑
摘要: 扩展方法: 异常处理。通常我们写异常经常在function内容添加Try catch.. 在方法过多的时候这么写确实不是什么好办法。介绍一下我的扩展处理。 可能大家都是这么用的。会用的路过就剋以了。 不会的可以学习一下。扩展代码如下 :public static class ExceptionHel... 阅读全文
posted @ 2015-02-11 17:15 真有意思 阅读(804) 评论(1) 推荐(0) 编辑
点击右上角即可分享
微信分享提示