最近在做一个wpf的程序,需要在地图上不是很精确的定位湖北省(以及江西省)所有的移动基站以及小区,于是乎,关于在WPF下使用地图功能的技术选择,搞了很长时间,我自己知道的,有如下两种:
1:MapInfo
2:Gmap.net
第一个,虽然说是在WPF下使用,但是,MapInfo提供的还是winform得,也就是说,您需要在wpf里面,host一个winform的用户控件(当然,也可以使用Form.Show的方式打开一个winform的窗体),关于wpf,winform在同一系统中的使用,本人没有怎么研究过,只是在winform中嵌套过wpf,但是,还真没在wpf中嵌套winform。
第二个:开源组件,在codeplex上可以查到。。这个非常的不错,提供了google,微软,argGis等等等的地图,开源的东西,不一定功能非常的强,但是,可以满足很多基本需求,如果对代码研究的深入,还可以使用很多的国内各大型地图网站提供的地图功能,比如包括51地图,e都市等。使用过e都市的同志们都知道,哪种伪3D的地图,看起来是比平面的要舒服。当然,使用google的卫星地图也还是可以的。。。
关于两种的不同:
1:mapinfo就是地图不好看,二呢,如果要再地图上面显示一个自定义控件(wpf的),我还不知道能否实现,但是,mapinfo本身提供的功能,那是足够强大的,包括框选,定位等等,但是,对于本项目的一个需求点来说,不满足,那就是做不到拓扑功能(主要是指两个节点之间的连线,也许是我自己对mapinfo不熟悉,所以不知道有无该功能)
2:gmap.net,开源的东西,主要的好处是,地图选择多,可以扩展(比如可以使用e都市等。),还有个就是,比如,可以画出公交线路图的哦,最最最最爽的一个就是,可以支持地图的缓存,该组件,最大的一个好处就在这,但是,TMD的google,如果使用这个组件经常的连接它的地图服务器,会封ip地址的。。。同时,google提供的国内地图,特别是平面的那类型的,经纬度是有非常大的偏差的,但是,卫星地图没什么偏差。。不知道gmap.net的主人,以后会不会再加入其它的功能,如果能加入拓扑功能以及能够解决封ip的问题,那就真是舒服呀。。。。
最终,经过比较,还是选择mapinfo,主要是因为移动公司会提供gis地图。
。。。。。。
过段时间,在把两个不同应用的效果截图放到这个地方。。
以下是对这两种方案的一些问题的说明:
1:mapinfo,如果要使用右键菜单,则不要定义在wpf里,应该定义到winform窗体中,就其原因,也许是wpf,winform同时存在的话,winform好像永远在最上层。。
2:关于在客户机器上不安装mapxtreme,而要让程序跑起来的问题。
这个,好像我还做不到,因为TMD关系到太多的dll了 ,难得找,还是在客户机上安装吧。。。
为什么要考虑安不安装呢,因为,有的时候,客户,真不想在他们的机器上安装过多的软件环境(特别是那些当大领导的。),当然,变态的还包括不安装.net framework 而让程序能够跑起来。。。。
题外话:
不知道有没有这样的方案或者技术,在某台服务器上,安装软件的运行环境以及程序版本,客户端通过某种技术,运行一种类似于代理的程序,运行指定的程序,实际上呢,真正的程序运行还是在服务端,客户端只是显示服务端程序运行的界面???
应该这个可以满足:
Ctrix
3:关于找不到mapinfo的dll的问题
如果程序编译的时候,出现找不到dll的问题,那有可能因为您使用的是vs 2005,2005默认的对dll的复制到本地设置为True,修改的方法是在引用中,找到mapinfo的dll,然后,右键,属性,复制到本地,false.
4:关于wpf中对winform UI控件的异步调用
两断代码的比较:
1:使用了Dispatcher