前一篇提到,用偷吃步的方法是不能用 Google Map Geocoder 的功能的,但山不轉路轉,路不轉人轉,不到最後關頭,絕不輕言放棄。在找到方法之前事實上我己經和 Google Map API 纏鬥很多種方法了,一直想找到方法可以不需要 Server 的支援,用完全 client 端的方法來呼叫搞定所有的步驟,一開始我試圖從 api 尋找是不是有繞過驗證的方式,但呼叫 geocode 的驗證是在 google 的 server 端,所以躲不掉,再來我想即時去申請 API Key 然後再進行呼叫,但這種跨 domain 的動作是限制重重的,不能用 XMLHttpRequest, 也不能用 IFRAME call,而用 on-demand javascript 又因為申請 API Key 的回傳不能 parse 而失敗。到此其實就可以宣判純 client 的解法行不通了。
先說明一下什麼是 Geocoder 好了,Geocoder 簡單的說,就是可以用地址來在地圖上定位(查出經緯度),另一個方向是由經緯度找出所在的地址。也不只是精確的地址,概略性的地名也可以進行查詢。之前 Google Map 開放查台灣地址的功能,也就是台灣 Geocode 的資料已經建立在 Google 裡了。像這種資料一般人是不太可能建立的,像 Google 這種有能力的大公司已經建立了很龐大,功能很強的 Geocode 功能,而且基本上己開放出來,當然各式各樣的 AP 如果能 mashup 這個功能當然就如虎添翼了。(所以因為 API Key 的因素而看得到吃不到就更恨了…)
既然宣告純 client 端做不到,那就要找一個 Server 了,但我還是想至少要找個不用花錢的解法,這時靈光一現,Yahoo Pipes 說不定就可以做得到?之前沒有真正研究過 Yahoo Pipes 怎麼玩,現在正好有個機會試試看,經過一陣玩弄,果然可以搞出一個 geocoder pipe。原理就是由 Yahoo Pipes 做為 Proxy 對 Google Map 呼叫 Geocode,而只需申請 Yahoo Pipes 的 API Key 就可以了。
所以標題是不太對的,應該是說建立一個公開的 Google Maps Geocoder Proxy 才對。這麼做有個缺點是,Google Map Geocode query 每天是有次數限制的,所以是有用到這個 proxy 的人去共用這個次數。不過每天 50000 應該是還好啦,現在應該也只有我的 Flickr GMap Show 會來用,還不用擔心。一樣來個範例程式:http://www.wctang.info/maptest3.html。
至此,我的 Flickr GMap Show 的功能大致就完整了,找個時間來整理一下所遇到的問題和想法吧。
2 comments:
多謝您開發出來的Flickr Gmap show,真是方便又有趣!
然而我在使用上發現一個問題。Flickr的網址好像除了www.flickr.com之外,有時候也會顯示flickr.com,這兩者都是有效的網址,但是Flickr Gmap show似乎只能在www.flickr.com運作?我在flickr.com上使用時就會回到原來的Y!map。
這我到沒發現到,謝謝你的提醒。
現在最新的版本應該可以解決這個問題,請你先移除後再重新安裝試試。
Post a Comment