2012-07-10 100 views
0

我正在嘗試實施Google地圖。 第一部分是將地圖集中到一個特定的地址,這非常好。根據搜索結果放置Google地圖標記

我的下一個問題是,我必須在商店名稱上進行搜索,在地圖上放置商店的標記。標記應該可能連接到搜索結果,以便在點擊時顯示信息氣泡。如何解決這個問題,我完全沒有答案。

google map with result

回答

1

你的腳步似乎確定以我來說,我認爲對於店名搜索進入到你的服務器,並返回一些結果和商店名稱和地址,然後你看,最多使用谷歌地理編碼API並獲取緯度/經度座標,並把標記在地圖上,這裏是我可能會使用的步驟:

  • 在一個特定的地址創建一個映射
  • 中心
  • 搜索商店
  • 如果結果具有與其關聯的地理編碼,那麼只需使用它來放置標記。
  • 如果結果沒有緯度/經度,然後向谷歌地理編碼API請求獲取緯度/經度座標。之後放置標記,將接收到的地理編碼存儲到數據庫中(通過使用一些背景Ajax請求)。

Google Geocoding API best practices建議您應該存儲地理編碼,以便您不必每次都查詢Google的服務器。爲此,您需要修改後端,以便將Geocode與商店詳細信息一起存儲,並且在搜索結果中可以返回地理編碼(如果可用)。

在旁註中,您可以使用GMaps JavaScript庫來簡化地圖操作。

更新

上述解決方案完全在你的修訂方案。讓我再改一下流程:

  1. 後端將返回店鋪列表時,由商店名稱搜索(這應該是很容易我猜)
  2. 如果結果不是空的,則通過列表循環和看看他們是否都有一個緯度/經度值相關。
  3. 如果您沒有找到記錄的緯度/經度值,則向Google服務器發送一個Geocode請求,傳遞該商店的地址(您至少需要商店的地址,否則您無法獲取緯度/ lng來自Google的價值)作爲參數。如果記錄具有緯度/經度值,那麼只需繼續並在地圖上放置一個標記。
  4. 一旦您收到來自Geocode API的響應,然後繼續並使用提供的地圖庫API在地圖上放置一個標記。對於GMaps,它是map.addMarker({...})
  5. 一旦所有的請求都完成了,那麼你可以考慮優化一下前面建議的位置,在這裏你可以將接收到的地理編碼存儲在你自己的服務器中,這樣你就不必一次又一次地獲取它們。

要實現上述步驟,您需要熟悉Maps JS庫以及JavaScript和Ajax/JSONP。請記住,所有您的Geocode請求(我認爲JSONP)都是異步的,只有當響應可用時(通常在回調中),您才應該調用標記放置代碼。 GMaps庫示例非常簡單易用。我希望這個解釋應該足以解決你的問題,如果它能幫助你,那麼你可以考慮標記這個答案。

+0

您澄清了我以爲我想做的事情,現在我修改了我的問題。還有什麼想法? – Xavio 2012-07-12 07:52:23

+0

@Xavio我已經更新了我的答案。 – Arnab 2012-07-13 09:23:56