2010-08-25 17 views
1

我一直在使用Google地圖API和數據庫驅動地圖時遇到了一些麻煩。在之前的一個問題中,我曾詢問過有關地圖地址解析的快速地理編碼問題,基本上我需要將Lat/Lng存儲到數據庫中,並從那裏創建地圖,而不是在地圖加載時進行地理編碼。用戶輸入註冊然後地理編碼到數據庫中

但是,我不確定如何做到這一點。我知道基本的前提 - 1)用戶註冊並輸入他們的地址。 2)數據庫應該存儲用戶的信息,以及地址。 3)需要對地址進行地址編碼,然後將其添加到數據庫的Lat/Lng字段中。 4)通過循環查詢Lat/Lng字段,可以將標記放置在地圖上。

任何想法如何做到這一點?我正在使用ColdFusion,SQL Server。

+0

基本前提聽起來不錯。你究竟在哪裏確定? – 2010-08-25 14:53:38

+0

如何從Google的地理編碼獲取座標並將其存儲到數據庫中 – knawlejj 2010-08-25 15:02:35

回答

2

您可以使用Google's Geocoding Service。 API非常簡單。您在url中發送一個地址,並返回一些帶有地理編碼結果的xml。更好的是,RiaForge上有一個名爲Google Geocoder v3的項目,可以爲您完成所有工作。

這裏的CFC的一些示例代碼:

<cfinvoke component="googlegeocoder3" method="googlegeocoder3" returnvariable="variables.geocode_query1">  
    <cfinvokeargument name="address" value="1600 Amphitheatre Parkway, Mountain View, CA"> 
    <cfinvokeargument name="ShowDetails" value="false"> 
</cfinvoke> 

<cfdump var="#variables.geocode_query1#"> 

至於什麼時候做地理編碼,你有兩個選擇。一種方法是在註冊時執行此操作 - 從註冊表中獲取地址,調用地理編碼服務以獲取緯度/經度,然後將所有內容保存到數據庫中。另一個選項是保存註冊地址,然後有一個單獨的計劃任務來定期檢查和地理編碼任何未經地理編碼的地址。

+0

非常感謝Peter。您的兩個地理編碼選項正是我想到的。我喜歡第一個更好,因爲加入的用戶可能想要立即在地圖上看到他們的標記。我會在下午處理這個問題,並讓你知道我想出了什麼。 – knawlejj 2010-08-25 16:09:04

0

好了,在使用Peter的建議和Google Geocoder v3之後,我把自己的東西扔在一起,因爲Google Geocoder v3 cfc不起作用。

 <!---Geocode the address and convert it to Lat/Lng ---> 
     <cfset address2geocode = '#Form.Client_Address#, #Form.Client_City#, #Form.Client_State#'> 

     <cfhttp url="http://maps.google.com/maps/api/geocode/xml?address=#address2geocode#&sensor=true" /> 
     <cfset geocodedXML = #xmlParse(cfhttp.filecontent)#> 

     <!--- Add the record to the database---> 
     <cfquery datasource="#dsn#" name="AddMember"> 
     INSERT INTO BSC_Clients (Client_Lng, Client_Lat) 
     VALUES ('#geocodedXML.GeocodeResponse.result.geometry.location.lng.XmlText#', '#geocodedXML.GeocodeResponse.result.geometry.location.lat.XmlText#') 
     </cfquery> 

這將有效地採取指定的地址+城市+國家(扔在數據庫中的所有其他用戶信息,這是不是在代碼中顯示)和將其轉換成將被儲存回緯度/長值數據庫。谷歌地圖,然後應通過一個標記顯示新地址