Pregunta

Estoy tratando de utilizar la API de elevación de Google con la función getJSON de jQuery.

Estoy utilizando el código que está utilizando JSONP:

jQuery.getJSON("http://maps.googleapis.com/maps/api/elevation/json?locations=23.444,45.4545&sensor=false&jsoncallback=?", function(json){
    alert("a");
});

Me puede ver en Firebug que la solicitud GET se envía correctamente y recibir la respuesta correcta a partir de Google:

{
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 23.4440000,
      "lng": 45.4545000
    },
    "elevation": 816.7996216
  } ]
}

Sin embargo, nunca la alerta y me sale este error de Firebug:

invalid label
"status": "OK",\n

Estoy utilizando el API de Google Maps v2 así que connato uso la acumulación en el método.

¿Hay alguna manera de obtener la elevación con la API de elevación de Google a través de una petición AJAX y sin crear un proxy?

Gracias por su ayuda.

Benjamin

¿Fue útil?

Solución 3

La API de elevación de Google no son compatibles con JSONP (gracias a Nick Craver para la explicación) y no puedo utilizar el ElevationService que sólo está disponible para la versión 3 del API de Google Maps.

Así que decidí utilizar otro servicio web para obtener la elevación:

http://www.geonames.org/export/web-services. html # astergdem

ejemplo: http://ws.geonames.org/astergdemJSON?lat=X&lng = y & callback = ?

Este apoyo webservice JSONP, por lo que puede ser de uso fácil en JQuery y el método getJSON.

Benjamin

Otros consejos

Eso API no admite JSONP, está volviendo JSON solamente ... así que sí que necesita para proxy en este caso.

Para ser claros, el correcta respuesta sería la siguiente:

someFunction({
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 23.4440000,
      "lng": 45.4545000
    },
    "elevation": 816.7996216
  } ]
})

jQuery sustituye callback=? con callback=someFunction, pero Google no utiliza este parámetro ya que este servicio no soporta JSONP ... así que el problema es que No Eres efectivamente hacer esto:

<script type="text/javascript">
{
  "status": "OK",
  "results": [ {
    "location": {
      "lat": 23.4440000,
      "lng": 45.4545000
    },
    "elevation": 816.7996216
  } ]
}
</script>

lo que resulta en un error, ya que eso no es válido JavaScript ... se obtiene un error de etiqueta válida. Si tenía la función de contenedor allí, podría sea válida y que sería ejecutar esa función jQuery hizo (de su devolución de llamada success).

Se debe utilizar la clase de geolocalización ElevationService de la API de JavaScript. No hay necesidad de proxy.

http://code.google.com/apis/ maps / documentation / javascript / reference.html # ElevationService

Como Broadfoot @ Chris dijo, hay una clase especial para que, en versión 3 del API Un mejor ejemplo aquí https://developers.google.com/maps/documentation/javascript/elevation No es necesario para hacer frente a JSONP ni otro servicio.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top