2014-03-26 25 views
2

想知道是否有人可以幫助我。我試圖返回一個地址的lat和lng的結果。新的編碼和卡住了。下面的代碼工作正常,直到地理編碼從v2到v3。你能告訴我我要去哪裏嗎?我是否需要一個新的v3密鑰或密鑰?提前致謝。如何在經典ASP中使用Geocoding API v3

<% 
Function GetXML(url) 
Dim xmlobj 
Set xmlobj = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") 
xmlobj.setTimeouts 30000, 30000, 30000, 30000 
xmlobj.Open "GET", url, False 
xmlobj.send() 
If xmlobj.status = 200 Then 
    GetXML = xmlobj.responseXML.xml 
Else 
    Response.Write "The geocoding server could not be reached." 
    Response.End 
End If 
End Function 

address = "30 Dixon, EN76HA" 


url="http://maps.google.com/maps/geo?output=xml&key=XXXXXXX &q="&Server.URLEncode(address) 






Response.Write "You entered: "&address&"<br />" 

xml = GetXML(url) 'Function to return raw XML as text 

if InStr(xml,"<coordinates>")>0 then 
coords = split(xml,"<coordinates>") 'Get everything after the opening coordinates tag 
coords2 = split(coords(1),"</coordinates>") 'Get everything before the ending coordinates tag 
coordinatesSplit = split(coords2(0),",") 'split it at the commas 
lng = coordinatesSplit(0) 'The first value is the longitude 
lat = coordinatesSplit(1) 'The second value is the latitude 

Response.Write "The geo-coded coordinates are: "&lat&" "&lng 
else 
'No coordinates were returned 
Response.Write "The address could not be geocoded." 
Response.End 
end if 
%> 
+0

您是否收到錯誤?你看到了什麼輸出? –

+0

對不起。我收到:無法聯繫到地理編碼服務器。我認爲這與URL =「XXX」有關,但還沒有弄清楚。 – user3465723

回答

4

您的代碼不工作,因爲URL是針對谷歌地理編碼API V3不同,如果我去在瀏覽器中的網址;

http://maps.google.com/maps/geo?output=xml&q=30%20Dixon,%20EN76HA

我獲得以下響應;

<?xml version="1.0" encoding="UTF-8" ?> 
<kml xmlns="http://earth.google.com/kml/2.0"> 
    <Response> 
    <Status> 
     <code>610</code> 
     <request>geocode</request> 
     <error_message>The Geocoding API v2 has been turned down on September 9th, 2013. The Geocoding API v3 should be used now. Learn more at https://developers.google.com/maps/documentation/geocoding/</error_message> 
    </Status> 
    </Response> 
</kml> 

您的代碼將永遠找不到<coordinates>元素,因此每次都會失敗。


基於我用我做你的源的一些小的改動這一確切目的代碼的解決方案

。如果您保持在google maps api設置的使用範圍內,您實際上不需要傳遞密鑰,但是如果您已經有api密鑰,則只需將其添加到url變量中即可。

<% 
Function GetXML(addr) 
    Dim objXMLDoc, url, docXML, lat, lng, mapref 

    'URL for Google Maps API - Doesn't need to stay here could be stored in a 
    'config include file or passed in as a function parameter. 
    url = "http://maps.googleapis.com/maps/api/geocode/xml?address={addr}&sensor=false" 
    'Inject address into the URL 
    url = Replace(url, "{addr}", Server.URLEncode(addr)) 

    Set objXMLDoc = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0") 
    objXMLDoc.setTimeouts 30000, 30000, 30000, 30000 
    objXMLDoc.Open "GET", url, False 
    objXMLDoc.send() 

    If objXMLDoc.status = 200 Then 
    Set docXML = objXMLDoc.responseXML 
    'Check the response for a valid status 
    If UCase(docXML.documentElement.selectSingleNode("/GeocodeResponse/status").Text) = "OK" Then 
     lat = docXML.documentElement.selectSingleNode("/GeocodeResponse/result/geometry/location/lat").Text 
     lng = docXML.documentElement.selectSingleNode("/GeocodeResponse/result/geometry/location/lng").Text 
     'Create array containing lat and long 
     mapref = Array(lat, lng) 
    Else 
     mapref = Empty 
    End If 
    Else 
    mapref = Empty 
    End If 

    'Return array 
    GetXML = mapref 
End Function 

Dim coords, address 

address = "30 Dixon, EN76HA" 
coords = GetXML(address) 
'Do we have a valid array? 
If IsArray(coords) Then 
    Response.Write "The geo-coded coordinates are: " & Join(coords, ",") 
Else 
    'No coordinates were returned 
    Response.Write "The address could not be geocoded." 
End If 
%> 
+0

工程輝煌。非常感謝。非常感激。 – user3465723