How to use Geocoding API v3 in Classic ASP

孤街浪徒 提交于 2019-12-06 12:29:33

Your code is not working because the URL is different for the Google Geocoding API v3, if I go to your URL in browser;

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

I get the following response;

<?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>

Your code will never find the <coordinates> element and so will fail every time.


The solution

Based on code I've used for this exact purpose I've made a few minor changes to your source. You don't actually need to pass a key if you stay within the limits on usage set up by the google maps api but if you have a api key already then just add it into the url variable.

<%
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
%>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!