谷歌地图离线包-尝试
怎么會去搞一個離線調試包呢,為什么不直接在線調試呢?其實,主要是因為我用了大半年的免費無線被加密了,從此我就開始了我的斷網生活,但又想搞點Google Maps API玩玩,沒有網絡就不能使用Google Maps API開發了嗎?就不能本地脫機離線調試嗎?我不甘心。于是就產生了這個離線調試代碼包,其實簡單的來說,就是將Google Maps API封裝的那些JS下載到本地,然后就可以在離線的狀態下進行本地調試了。測試了幾個晚上,也不能說我的代碼包中的JS代碼已經下載全,但是至少在本地調試一些marker和poly等還是OK的,代碼包中附帶了Google提供的三個例子,最后一個放大鏡的例子是蠻沒有意思的不建議看(主要是因為本地沒有任何地圖,全是抱歉找不到這個縮放區域,所以看不出任何的效果),但另外兩個例子是在本地完全可以運行的,一個是地理知識考題,一個是標點畫線得到距離。但是我在測試本地調用kml的時候沒有成功,雖然我也已經加載了kmlapi的js文件,這一點可能需要繼續研究一下。但是對于mark、poly、tip等等都是OK的,至少example里就能看出效果來。我還沒有怎么用,也沒有測試過太多的函數,如果后期發現問題那么以后再來修正吧。
那么我們來說說如何得到這個離線調試包,授人以魚不如授人以漁,當然這里也很簡單算不上什么授漁。首先,當然是去Google獲取域名的key了,這個簡單的道理不用多說了。然后把該頁面中說的簡單調用代碼完整的保存成html文件,打開這個文件我們就可以看到Google Map了,一個最簡單的調用就完成了。一般要想得到別人的東西首先肯定是保存這個頁面,沒錯,我也是這么做的,然后就得到了一個maps文件,其實也就是下載了Gmap的調用文件,地址:http://maps.google.com/maps?file=api&v=2&key=ABQIAAAALnobdtcQBfcYCnVSCwRHOxS79ylobW1eCJiHSW2SS5sQtpAV3RTgS5_aqQLZwCkEn_OAeso4797XXA,直接通過瀏覽器也是可以下載到這個文件的,這個是我127.0.0.1的域名所得到的key。將maps文件改名成maps_my.js文件,然后將script調用的上面帶有key的地址換成maps_my.js,重新運行html,發現OK可以運行,并且沒有任何問題,但是僅僅依靠這個maps_my.js文件肯定是不可行的,因為這個js文件又在內部調用了很多的js文件,而Google很厲害的就給你僅僅下載了這么一個js,其余的js都是通過maps_my.js文件中的js再去調用遠程的js,但是你卻看不到任何的js文件的明碼地址,這其實是有點可惡的。如果僅僅通過maps_my.js文件離線調用,那么你的運行就僅僅是一個圖片樣子的內容,無法做任何的操作也看不懂是什么東西。那么我們接下來就是要分析maps_my.js了。
為了去掉煩人的網站驗證,我們首先去開刀Gmap的key認證吧。找到那個alert,就在下面沒幾行的位置,并且中文提示那么的好找,而GValidateKey函數其實就是最后的驗證,驗證不通過就alert了,那么最簡單的肯定是要驗證通過,將GValidateKey函數前的表示不等的感嘆號去掉,這樣就不驗證了,至少不會跳出煩人的key注冊對話框了,因為我的域名錯了反而是讓他認證通過,而正確的域名反而不通過。此點在Google了一下以后有個臺灣的網友對此做過一個簡單的分析,也是講如何去掉驗證的,不過我想我的這個方法并不是什么正確的方法,因為僅僅將不等于改成等于來免除alert,而網站的訪問是依舊的,就是說域名肯定會返回Google去驗證key,只是錯誤的域名反而通過了驗證。由此我在想,Google本身對網站有多少萬的訪問請求限制,那么通過這樣的方法,是否可以免去這個限制呢,這樣你的域名就可以超量訪問Google的地圖服務器了。雖然我想是如此,但感覺Google應該不會那么簡單。對于此,如果有朋友不想驗證域名key的,可以用此方法嘗試看看。
繼續分析maps_my.js文件,有兩個非常顯眼的main.js文件,分別位于http://maps.google.com/intl/zh-CN_ALL/mapfiles/140g/maps2/main.js和http://maps.google.com/intl/zh-CN_ALL/mapfiles/140g/maps2.api/main.js,我想這兩個應該是主要的對js再調用的文件,下載下來讓他們到本地進行調試,發現竟然也能通過,看來這兩個main.js調用了Google絕對路徑的js文件,為了找到這些絕對路徑的js文件,打開Firefox使用FireBug來查看(FireBug確實是非常優秀的查看HTML代碼的工具,清晰明了)。首先看到的是這樣的一個js文件:http://maps.google.com/intl/zh-CN_ALL/mapfiles/140g/maps2.api/mod_jslinker.js,下載OK。然后又有一個http://maps.google.com/cat_js/intl/zh-CN_ALL/mapfiles/140g/maps2.api/%7Bmod_drag,mod_controls%7D.js文件,竟然會取名為{mod_drag,mod_controls}.js這樣的文件名,夠怪,但結果也是能夠下載的,夠暈吧。但當我回到家離線調用的時候,發現不是這個{}.js文件了,是mod_drag.js和mod_controls.js,看來Google搞鬼。另外一個厲害的地方是,Google在js中首先會去判斷所要調用的png或者gif文件是否存在,如果不存在那么全部使用transparent.png文件將界面變灰,你什么都看不到,包括GLargeMapControl的圖片你都無法看到,郁悶吧,這樣的情況下一片灰色就毫無意義了,讓人也無法下手。不過我在聯網的時候通過HTML查看了那些png圖片,下載了一部分到本地,這樣的話本地的調用就可以看到GLargeMapControl了,marker也可以看到了,這樣讓人心里有點底了。第二天我就聯網把這兩個js文件下載了下來,為了驗證是否可用,我還下載了Google的三個實例。回到家以后再來調試,發現marker可以了,但在第二個例子的時候藍色的line沒有出現,point是OK的。再次查看HTML,發現是mod_poly.js沒有下載。看來mod_開頭的JS文件都是Gmap的模塊文件,我如果把這些所有的模塊文件下載全不就可以完全實現本地調用了,而測量距離中的這個藍色線也應該可以顯示出來了。但我又不想碰到一個mod就再去下載一個mod,這要煩死人的,我通過js找到這所有的mod文件并把他們全部下載下來,免得下次再去找麻煩。那么我就要看js代碼了,看Google如何去調用這些mod的,最后發現Google非常的壞,mod_poly.js中poly不是直接給出的,而是將poly、drag、jslinker、controls等這些放在了一個組中,需要調用的時候再去從這些組里調用組合成的js,總算找到環節了,搜索上述的關鍵字,出現有幾個地方,我也不管,將這些組里的東西全部組合成mod_*.js,結果弄了100多個mod的js,第二天早上的時候我就用影音傳送帶(和迅雷、快車類似的玩意,就是現在已經銷聲匿跡了,不過比網絡螞蟻堅持的時間長一些)去下載這些所有的js,結果真正能夠下載下來的js文件也就30多個,將這30多個文件放到maps2.api文件夾下,這樣的話調用的時候就可以直接調用了,一般的需求應該是可以滿足了。所以將example等整合好,然后打包就提供到網絡上給大家下載了。如果發現無法本地調用的,可以再做交流,不過個人認為,僅僅做marker和line的,應該是足夠用的了,不要小看這30多個JS,既然能夠離線調用,也就是說Gmap的核心也基本上就在這么多的JS中了,喜歡研究的朋友可以研究一下這里的js,把Gmap的核心給看懂然后自己開發一個吧。(呵呵,這個當然是玩笑了,因為Google的js都是a啊b啊c啊,一點意義都沒有的函數名和變量,誰看懂了就是神仙了,這里我小小的佩服一下step1的站長,K大俠早年就研究Gmap的API還是很厲害的)
寫的又是很亂。最近一直在mapbar的js和Gmap API之間徘徊,一來準備將mapbar的js開放成一個API,功能要比mapbar官方的強一些,用jquery+xml,不過感覺難度很大,畢竟對于我這樣不懂js的菜鳥來說,另外一個就是用Gmap API來做個東西,畢竟Gmap API還是非常的強悍的,但正是因為它的強悍,更讓我顧慮我是否會用,所有的API函數都要從頭學習,煩。另外我有一個想法,Gmap API既然能夠本地調試,那么那么,如果我們將Google maps的地圖圖片(tile)的路徑全部替換成自己的圖片,或者直接將路徑改成WMS的路徑,那么一個自己定制的本地Google Map是否就可以出現了呢?
說多了,放上我的Google Maps API的離線調試代碼包吧。下載地址:GoogleMapsAPI_OfflineDebugPack.rar
說明:maps_my.js文件和mapfiles文件夾是核心內容,所有的js都在里面,對于htm頁面的調用只需要script調用maps_my.js文件即可,但在maps_my.js文件中的開頭我添加了一個myurl的全局變量,為的是將所有js文件做成絕對路徑,并且JS中確實有一個需求是要提供絕對路徑,比如氣泡框和控制條的png圖片就需要用到絕對路徑,你只需要修改這個路徑為你maps_my.js文件所在路徑即可。index_my.htm文件是一個最簡單的實例,一個點擊出氣泡框的marker,example_my.htm和example2_my.htm是Google提供的示例程序,分別是標點測算距離和地理知識考題,這里能夠體現point和line的效果,可以直接調用查看演示。
補充說明:如果免域名key驗證方法說的不對還望指正,而mapfiles目錄下的png文件要是誰能下載全那當然是最好,到時候提供給大家一份。
總結
以上是生活随笔為你收集整理的谷歌地图离线包-尝试的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安装spoonwep
- 下一篇: python读取大智慧数据_大智慧数据格