您的位置:首页 > 编程语言 > Go语言

Windows Phone 7 学习志(探索问题一:如何在Windows Phone 7上使用Google Map API(谷歌地图))

2011-03-09 10:05 465 查看
一、背景

  Bingmap在欧美的易用性是显而易见的,可是在中国用Windows Phone 7,Bingmap却不是那么易用,毕竟Windows Phone 7还未正式进入中国市场,所以对于大家偏爱的程度必然是GoogleMap,可是GoogleMap并没有提供Windows Phone 7的官方版本。

1、Google地图提供的API:http://code.google.com/intl/zh-CN/apis/maps/

  粗略看看文档可知比较理想可能可用于Windows Phone 7 的API(API介绍和使用都在上面链接里):Google Maps JavaScript API,Google Maps API for Flash,Google Static Maps API

2、Windows Phone 7使用遇到的问题

  先把直接可以否定掉的两个带上:

  Google Maps API for Flash:Adobe貌似说过要为Windows Phone 7提供Flash支持,不过现在还没有实现。

  Google Static Maps API:静态地图主要用于显示单张图片文件且没有提供手动位置的调整。

  忐忑许久依旧不给力的慢慢道来:

  Google Maps JavaScript API:归根到底就是一个带JavaScript的HTML。

3、Google Maps JavaScript API

  首先:Windows Phone 7 是否支持JavaScript?

  回答是肯定的,现有的Windows Phone 7 的IE版本是Internet Explorer Mobile 7(http://en.wikipedia.org/wiki/Internet_Explorer_Mobile#Internet_Explorer_Mobile_7

  那么问题分为两个方向:程序内使用 和 程序外使用

  程序内使用:调用可以显示HTML的控件WebBrowser,加载本地HTML页面,经过本人实践,WebBrowser如果需要支持JavaScript则要将IsScriptEnabled属性设置为True。

  显示结果:页面布局能够显示(操作按钮和LOGO),但是图片显示存在问题(地图图层),并且拖拉屏幕无法实现对地图的拖拉,地图仅仅和一张图片一样,即JavaScript的事件被Windows Phone 7 控件WebBrowser的事件所取代了。

  结论:JavaScript的事件被Windows Phone 7 控件WebBrowser的事件所取代是最困难的部分,经过对WebBrowser控件的所有属性的搜索,并没有发现有类似属性可以取消默认事件。而Google Maps JavaScript API说明文档也仅有“针对移动设备(iPhone 和 Android 设备)的开发”。

  WebBrowser的使用可以参看:/article/5011646.html

  实验结果图片(加载了蛮久时间):



  程序外使用:即直接使用手机IE进行加载HTML,那么程序内部代码需要using Microsoft.Phone.Tasks(http://msdn.microsoft.com/zh-cn/library/ff428753(v=VS.92).aspx),这个空间里都是些手机功能,使用WebBrowserTask类,使用类的方法,方法很简单,看上面给的链接就可以,不过貌似本地地址比较难弄,我最后就直接放在IIS里面,地址用localhost也可以。不过这样子的话,其实机器程序就不用调试了,直接打开模拟器用IE打开本地的页面吧。如果想直接打开GoogleMap里面的Sample地址(http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/examples/index.html)的话,不想自己打地址的话用WebBrowserTask也是不错的,毕竟还能熟悉下手机功能的调用。

  显示结果:比WebBrowser控件的效果好很多,图片能显示了,操作按钮也能使用,不过最困难的部分依旧存在,仍然无法拖动地图。

  实验结果图片:



解铃还须系铃人,最后无奈FQ找谷歌论坛:http://groups.google.com/group/google-maps-js-api-v3/browse_thread/thread/2e735d1347c9900a?pli=1

谷歌员工原话:

I can't speak to the plans of the Google Maps team, but as far as the Maps API is concerned we can not support Windows Phone 7 (or any other mobile O.S. for that matter) until the browser on these devices implements touchstart, touchmove, and touchend events as discussed here:

http://www.quirksmode.org/mobile/advisoryTouch.html

Without that we have no way of determining when a user is dragging a map with their finger. Right now all such drag actions scroll the page on Windows Phone 7 and there is no way for a JS application to be notified of this user interaction, cancel the default response (the page scroll) and respond accordingly.

We would like to support Windows Phone 7, and as soon as the browser offers these events (and meets the other requirements that we test for) we will support it.

言下之意就是Windows phone 7还没有对于拖拉页面的解决方案直到浏览器提供那些事件后。

二、探索过程

  附上一段近况以显得探索的起因不是无聊:最近欧美公司要求我们把原先在Windows Phone 7上使用的BingMap地图服务(用于显示搜索的商户和GPS本地到达商户的路线)修改成Google地图服务。俗话说的好啊,程序员从来只怕四个字:需求更改。。。(之前做的相当于全盘否决掉了)

  为此我搜索了好几天,仍然想不到更好的办法来实现,看到网上视频有Windows Phone7的Google Map的使用,还有第三方开发的TA Maps(利用Google API),可是自己还是丈二和尚摸不着头脑,不过自从搜索关键字从Google Map API转移重心到Silverlight Google Map后,似乎有了些转机。因为我们现在开发的项目名称都是Silverlight for Windows Phone 7,如果是现有Silverlight项目中有Google Map的使用,岂不是可以“借鉴借鉴”?

三、结论

  经过不断的搜索,最后锁定一贴:《在必应地图SilverLight控件中加载其他地图(Google卫星图等)》

  因为原文用的是Silverlight的Bingmap而不是Phone版的Bingmap受到此文启发之后之后便将引用空间一致改成Microsoft.Phone.Controls.Maps,更改代码后然后寄托希望给程序了,还好最终不负众望,得到了如下实验结果图片:



  虽然其貌不扬,但是拖拉竟然没有了问题,而控制按钮其实只要自行添加即可,不过最恼人的就是左下角的Bing Logo,不过至少我们可以用Bing来加载和使用GoogleMap了,经过之后的调查,还发现,使用原本的Silverlight版本Bingmap也是可行的,本人还将继续探索寻找更好的解决方案,例如加入定位等功能。

程序源代码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐