目录

  • 1.试用情况介绍
  • 2.规划功能
  • 3.Demo实现效果演示
  • 4.传送门(其它后续添加的内容)
  • 5.多边形绘制和注册鼠标事件的代码讲解

1.试用情况介绍

现在windows平台的开发越来越流行WPF,我发现GMap.Net也有WPF版本,就跟风尝试了一下,只能说泪流满面,原本在GMap.Net.Winforms版本里使用很方便的方法和属性,在WPF版本里都没有了,很多方法都只能自己硬写代码实现。我计划完成一个WPF版本的Demo(绿色是目前已经完成的功能)。主程序是我以前做的WPF版本万能框子,GMap.Net组件是其中一个UserControl。

2.规划功能

  1. 加载高德在线地图
  2. 加载OpenCycleMap离线瓦片地图
  3. CGCS2000坐标转WGS84坐标
  4. 添加自定义图标的标记点
  5. 绘制多边形,多边形对象实现双击事件和右键菜单功能,实现多边形对象带属性和属性传值
  6. 地址文字字符串寻坐标
  7. 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版本使用体验相关推荐

  1. 从零开始搭建一个GIS开发小框架(一)——基本框架

    目录 1.概述 1.1 项目背景 1.2 传送门 2.技术选型:GMap.NET 3.底图功能实现 2.1 方式一:在线地图(以高德为例) 2.2 greatmaps生成底图(瓦片地图) 3.搭建主程 ...

  2. 从零开始搭建一个GIS开发小框架(七)——GMap.Net组件WPF版本加载POI性能测试

    目录 1.概述 2.工作内容和步骤: 3.测试结果 4.视频演示 5.总结 6.结束和致谢 1.概述 GIS项目中除了多边形那一套功能,另一个应用最广泛的场景就是POI数据的分析挖掘.今天就给大家演示 ...

  3. 如何搭建python框架_从零开始:写一个简单的Python框架

    原标题:从零开始:写一个简单的Python框架 Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你为什么想搭建一个Web框架?我想有下面几个原因: 有一个 ...

  4. 从零开始搭建一个react项目

    Nav logo 120 发现 关注 消息 4 搜索 从零开始搭建一个react项目 96 瘦人假噜噜 2017.04.23 23:29* 字数 6330 阅读 32892评论 31喜欢 36 项目地 ...

  5. 从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一)

    从零开始搭建一个vue项目 -- vue-cli/cooking-cli(一) 1.vue-cli搭建一个可靠成熟的项目 1.介绍 vue-cli 我是去年六月份接触的vue1.0,当时还是个菜逼,当 ...

  6. python写一个游戏多少代码-使用50行Python代码从零开始实现一个AI平衡小游戏

    集智导读: 本文会为大家展示机器学习专家 Mike Shi 如何用 50 行 Python 代码创建一个 AI,使用增强学习技术,玩耍一个保持杆子平衡的小游戏.所用环境为标准的 OpenAI Gym, ...

  7. github项目怎么运行_利用 GitHub 从零开始搭建一个博客

    "NightTeam",一个值得加星标的公众号. 趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域 ...

  8. 利用 GitHub 从零开始搭建一个博客

    "NightTeam",一个值得加星标的公众号. 趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域 ...

  9. 如何利用 GitHub 从零开始搭建一个博客

    趁着周末,搭建了一下 NightTeam 的官方博客和官方主页,耗时数个小时,两个站点终于完工了. 由于 NightTeam 的域名是 nightteam.cn,所以这里官方博客使用了二级域名 blo ...

最新文章

  1. Mac下布置appium环境
  2. LeetCode题组:第14题-最长公共前缀
  3. 第九次psp例行报告
  4. 从Mysql slave system lock延迟说开去
  5. SqlConnection,SqlCommand,SqldataReader的用法总结
  6. Leetcode 322.零钱兑换
  7. comparator比较器用法_电压跟随器的这些点,确定都懂了吗?如果设计成同相端追随反向端会怎样? #运放...
  8. 广告投入是怎样提高新用户数的(岭回归及主成分回归) | R语言商业分析实践3
  9. Wireflow - 免费开源的用户流程图绘制工具,专为互联网产品打造
  10. Houdini17 OptiX Denoise使用
  11. 楼市调控不断升级,房产中介还能翻身吗?
  12. SecureCRT免费版下载
  13. 那些年搞不懂的高深术语——依赖倒置•控制反转•依赖注入•面向接口编程
  14. IDEA惊天bug:进程已结束,退出代码-1073741819 (0xC0000005)
  15. Oracle SQL Developer 复制数据库数据
  16. 小米盒子访问计算机硬盘,无需电脑教你手机数据传到小米盒子外置硬盘的教程...
  17. 134个治病小偏方,从此不用去医院 - 健康程序员,至尚生活!
  18. 新品PDF黄钻换器在线
  19. 解决 Pycharm 使用高版本 python(3.9)报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 之修改pycharm
  20. axios在vue中的简单配置与使用

热门文章

  1. 安装配置管理 之 为 Canon PIXMA iP1000 喷墨打印机安装驱动程序
  2. 面试经验 - 怎么回答“跳槽”的原因?
  3. JS魔法堂:初探传说中的setImmediate函数
  4. Unity3d NGUI的使用(二)(UILabel中文字体及可点击的字体)
  5. 【React】redux和React-redux
  6. 频繁收到小米发送的AC开头的短信的解决方案
  7. pytest 测试开发 —— 上手 pytest 实现自动化测试
  8. 【Spring Cloud 基础设施搭建系列】Spring Cloud Demo项目 Spring Cloud Config Client 失败快速响应与超时重试
  9. 读写文本文件-StreamReader和StreamWriter
  10. FLV Binder下载