从零开始搭建一个GIS开发小框架(五)——GMap.Net组件WPF版本使用体验
目录
- 1.试用情况介绍
- 2.规划功能
- 3.Demo实现效果演示
- 4.传送门(其它后续添加的内容)
- 5.多边形绘制和注册鼠标事件的代码讲解
1.试用情况介绍
现在windows平台的开发越来越流行WPF,我发现GMap.Net也有WPF版本,就跟风尝试了一下,只能说泪流满面,原本在GMap.Net.Winforms版本里使用很方便的方法和属性,在WPF版本里都没有了,很多方法都只能自己硬写代码实现。我计划完成一个WPF版本的Demo(绿色是目前已经完成的功能)。主程序是我以前做的WPF版本万能框子,GMap.Net组件是其中一个UserControl。
2.规划功能
- 加载高德在线地图
- 加载OpenCycleMap离线瓦片地图
- CGCS2000坐标转WGS84坐标
- 添加自定义图标的标记点
- 绘制多边形,多边形对象实现双击事件和右键菜单功能,实现多边形对象带属性和属性传值
- 地址文字字符串寻坐标
- Marker对象鼠标拖动效果
3.Demo实现效果演示
内容包括:添加自定义点对象和多边形对象,同时多边形对象注册右键响应事件,弹出菜单,多边形创建时给与一个uid,作为唯一主键,将这个值传值给删除事件,完成删除动作。
GMap.Net WPF版效果演示
4.传送门(其它后续添加的内容)
【视频演示】GMap.Net.WPF版实现路标可移动效果
5.多边形绘制和注册鼠标事件的代码讲解
以绘制多边形这个最干货的功能为例介绍一下WPF的实现思路以及与Winforms版本的区别。我个人感受最大的区别就是WPF里没有了GMapOverlay类,无法再通过GMapOverlay对图层进行控制,Marker和Polygon对象的OnMarkerClick 和OnPolygonClick 方法都取消了,导致添加右键菜单和传值很不方便,虽然也能实现右键事件和传值,但是总觉得没有找到正统方法。
在WPF里没有了GMapOverlay,所以无法创建一个polygonAuxiliaryLinelay层用于绘制多边形辅助线
//winforms版本
public GMapOverlay polygonAuxiliaryLinelay = new GMapOverlay("polygonAuxiliaryLine"); //WPF版本用List<T>缓存实现
List<GMapRoute> polygonAuxiliaryLinelay = new List<GMapRoute>(); //创建一个多边形辅助线list(作为缓存)
WPF版本里GMapControl没有OnMarkerClick 和OnPolygonClick 方法:
//winforms版本
MainMap.OnMarkerClick += new MarkerClick(mapControl_OnMarkerClick);
MainMap.OnPolygonClick += new PolygonClick(mapControl_OnPolygonClick);
WPF里绘制线条、绘制多边形、给多边形对象添加右键事件代码示例如下:
//绘制线条
GMapRoute _routeOnPolygon = new GMapRoute(latlngs);
_routeOnPolygon.ZIndex = 10;
_routeOnPolygon.Shape = new Path() { StrokeThickness = 1, Stroke = Brushes.Red };
MainMap.Markers.Add(_routeOnPolygon);//绘制多边形
GMapPolygon polygon = new GMapPolygon(PolygonPointList);
Brush b = new SolidColorBrush(Color.FromRgb(255, 255, 0)); //黄色
b.Opacity = 0.5; //设置透明度
polygon.Shape = new Path() { StrokeThickness = 1, Stroke = Brushes.Red, Fill = b };
polygon.Shape.IsHitTestVisible = true;
polygon.Shape.MouseRightButtonDown += Polygon_MouseRightButtonDown; //多边形对象添加右键事件
string ukey = Guid.NewGuid().ToString();
polygon.Shape.Uid = ukey; //这里可以传递key值(但是只能string类型)
polygon.Tag = ukey;
MainMap.Markers.Add(polygon);
GMapPolygon 声明一个对象实例polygon,polygon的MouseRightButtonDown 事件不能直接注册到GMapPolygon 对象polygon上,而是注册到polygon.Shape上,因此MouseRightButtonDown 方法的sender也是polygon.Shape而不是polygon本身,所以MouseRightButtonDown 能获取到的传值只能是通过polygon.Shape(UIElement类型)传递,polygon.Shape只有一个uid(string类型)属性可以传值,上述示例通过给polygon.Shape.Uid赋值并且给polygon.Tag赋一样的值,将多边形polygon的唯一标识ukey传递给Polygon_MouseRightButtonDown方法,在方法里通过找polygon.Tag=Uid的方式找到polygon对象,后续就可以进行相应的业务层操作了,我觉得方法有点笨,但是polygon.Shape没有Tag属性(object类型),没有办法传递一个对象。
从零开始搭建一个GIS开发小框架(五)——GMap.Net组件WPF版本使用体验相关推荐
- 从零开始搭建一个GIS开发小框架(一)——基本框架
目录 1.概述 1.1 项目背景 1.2 传送门 2.技术选型:GMap.NET 3.底图功能实现 2.1 方式一:在线地图(以高德为例) 2.2 greatmaps生成底图(瓦片地图) 3.搭建主程 ...
- 从零开始搭建一个GIS开发小框架(七)——GMap.Net组件WPF版本加载POI性能测试
目录 1.概述 2.工作内容和步骤: 3.测试结果 4.视频演示 5.总结 6.结束和致谢 1.概述 GIS项目中除了多边形那一套功能,另一个应用最广泛的场景就是POI数据的分析挖掘.今天就给大家演示 ...
- 如何搭建python框架_从零开始:写一个简单的Python框架
原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...
- 从零开始搭建一个react项目
Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...
- 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)
从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一) 1.vue-cli搭建一个可靠成熟的项目 1.介绍 vue-cli 我是去年六月份接触的vue1.0,当时还是个菜逼,当 ...
- python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏
集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...
- github项目怎么运行_利用 GitHub 从零开始搭建一个博客
"NightTeam",一个值得加星标的公众号. 趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域 ...
- 利用 GitHub 从零开始搭建一个博客
"NightTeam",一个值得加星标的公众号. 趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域 ...
- 如何利用 GitHub 从零开始搭建一个博客
趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域名是 nightteam.cn,所以这里官方博客使用了二级域名 blo ...
最新文章
- Mac下布置appium环境
- LeetCode题组:第14题-最长公共前缀
- 第九次psp例行报告
- 从Mysql slave system lock延迟说开去
- SqlConnection,SqlCommand,SqldataReader的用法总结
- Leetcode 322.零钱兑换
- comparator比较器用法_电压跟随器的这些点,确定都懂了吗?如果设计成同相端追随反向端会怎样? #运放...
- 广告投入是怎样提高新用户数的(岭回归及主成分回归) | R语言商业分析实践3
- Wireflow - 免费开源的用户流程图绘制工具,专为互联网产品打造
- Houdini17 OptiX Denoise使用
- 楼市调控不断升级,房产中介还能翻身吗?
- SecureCRT免费版下载
- 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
- IDEA惊天bug:进程已结束,退出代码-1073741819 (0xC0000005)
- Oracle SQL Developer 复制数据库数据
- 小米盒子访问计算机硬盘,无需电脑教你手机数据传到小米盒子外置硬盘的教程...
- 134个治病小偏方,从此不用去医院 - 健康程序员,至尚生活!
- 新品PDF黄钻换器在线
- 解决 Pycharm 使用高版本 python(3.9)报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 之修改pycharm
- axios在vue中的简单配置与使用
热门文章
- 安装配置管理 之 为 Canon PIXMA iP1000 喷墨打印机安装驱动程序
- 面试经验 - 怎么回答“跳槽”的原因?
- JS魔法堂:初探传说中的setImmediate函数
- Unity3d NGUI的使用(二)(UILabel中文字体及可点击的字体)
- 【React】redux和React-redux
- 频繁收到小米发送的AC开头的短信的解决方案
- pytest 测试开发 —— 上手 pytest 实现自动化测试
- 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 Spring Cloud Config Client 失败快速响应与超时重试
- 读写文本文件-StreamReader和StreamWriter
- FLV Binder下载