最近在做一个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

 

异步ui操作

 2:未使用Dispatcher

 

 

未使用Dispatcher

现分别对两种方法的疑问:

第一种:Dispatcher是wpf里面特有的对UI线程的东西,但是,居然还可以适合于Winform的控件

第二种:这样写,居然运行不报错,按理说,也应该有个什么不能够访问UI线程的错误撒,虽然没有异常抛出 ,但是,界面还是没有任何显示的。也就是说,对ui层的操作,根本就不起作用。

posted on 2009-11-02 17:55  颜昌钢  阅读(2836)  评论(1编辑  收藏  举报