2012-02-14 76 views
1

我使用的是版本3 API,並且我有一個文本輸入,用戶輸入用於通過API進行地理編碼的搜索字符串。地圖更新並在結果匹配處放置標記。除少數情況外,這一切都可以正常工作。以下是代碼:Google Maps地理編碼API - 處理來自用戶的緯度/經度輸入

geocoder.geocode({ 
    'address': address, 
    region: 'AU' 
}, function(results, status) { 
    // do stuff with results 
} 

問題出在用戶輸入經緯度對的位置, 22°53'21"S, 118°28'36"E。當座標位於農村地區時,返回的匹配不是輸入座標的精確表示,但似乎是Google的匹配地點的中心。例如。結果是-22.4951839, 118.73455850000005。即,標記從用戶輸入的位置移開。

那麼,在用戶輸入lat/lng的情況下,如何防止這個局部匹配/居中?在這些情況下,我希望將標記放置在解析座標的緯度/經度座標上,而不是匹配地點的中心(但我想繼續使用API​​,因爲它處理/解析所有不同的緯度/經度格式,而我還存儲地點/地址信息)。

回答

1

你可以在輸入框上進行模式匹配,測試數字加標點符號和°。如果匹配,則轉換爲十進制經度/緯度並創建標記,否則通過地理編碼器運行。

+0

我寧願不 - 有很多lat/lng的格式,我更喜歡用Google的解析方式,就像我在問題中所說的那樣。例如。如果輸入lat/lng還指定了基準/座標系。 – nickdos 2012-02-14 02:35:42

+0

你真的沒有選擇。如果你使用地理編碼器,它會以不同的方式解釋它,如果你分開解析它們,那麼你可以得到完全匹配。 – 2012-02-14 05:40:58

+0

再次查看文檔後,我認爲你可能是對的。我希望有一些聰明的工作,我沒有想到... maps.google.com做到了「正確」的方式,但他們必須有特殊的代碼,通過API不可用。 – nickdos 2012-02-14 06:34:18

1

我遇到過類似的問題。如果你決定寫你自己的解析代碼,那麼如果你有唯一的字母字符是NSEWnsew,那麼用戶可能輸入座標。

然後,您可以更改所有非數字爲空格和分析字符串: 6號意味着你有度,分,秒 4個數字意味着你有度,小數分 2號意味着你有小數度

其他唯一的問題是處理字符:NSEW + -

+0

謝謝。僅供參考,請參閱我對Mano答案的最新評論 - 我在這裏找到了一個很好的JS實現:http://www.movable-type.co.uk/scripts/latlong.html#geo-src – nickdos 2012-02-15 02:52:01

0

我今天不得不重新審視這個問題,我發現,在解析用戶輸入的座標(十進制和DMS)做了一個相當不錯的工作一個JS庫:

http://dbarbalato.github.io/magellan/

雖然只處理latlng - 所以我不得不在輸入上做split(',')