Nombre del país por latitud y longitud

Esta pregunta puede parecer familiar: tengo la latitud y la longitud de un lugar. Necesito obtener el nombre del país. sé que tengo que usar codificación geográfica inversa para esto. Pero mi problema es que a veces devuelve la forma abreviada del área o país (por ejemplo US para United State o CA para California). ¿Hay alguna manera de que pueda obtener el nombre completo del país? No puedo realizar una operación de coincidencia con estos formularios cortos con mi base de datos de países prealmacenada.

Ya he pasado este, este. Pero no es de mucha ayuda para mi problema.

preguntado el 22 de mayo de 12 a las 12:05

4 Respuestas

La respuesta del geocodificador generalmente devuelve varios results que incluyen esquinas de calles, intersecciones, condados y otros nombres de representación alternativos. encontre eso results[0] es la mejor descripción.

El truco está en buscar "país" en los resultados. Entonces se puede recuperar el nombre_largo.

Haga clic en el mapa

  function getCountry(latLng) {
    geocoder.geocode( {'latLng': latLng},
      function(results, status) {
        if(status == google.maps.GeocoderStatus.OK) {
          if(results[0]) {
            for(var i = 0; i < results[0].address_components.length; i++) {
              if(results[0].address_components[i].types[0] == "country") {
                alert(results[0].address_components[i].long_name);
              }
            }
          }
          else {
            alert("No results");
          }
        }
        else {
          alert("Status: " + status);
        }
      }
    );
  }

contestado el 22 de mayo de 12 a las 17:05

muchas gracias señor. Sólo tenía un día detrás de esto. Su respuesta ahorró mucho tiempo - arjuncc

Hola, he intentado obtener el nombre de la calle usando tu código. He reemplazado "país" en los tipos con "street_address" pero parece que no funciona. ¿Hay alguna posibilidad de que me puedas ayudar con esto? ¡Gracias! - inadcod

Lo encontré. Solo tuve que reemplazar "país" con "ruta" :) - inadcod

La matriz JSON normalmente incluye ambos long_name y short_name. Deberías poder extraer ambos...

contestado el 22 de mayo de 12 a las 12:05

Aquí hay un analizador JSON/XML que funciona tanto para Google Street Maps como para Open Street Maps.

(el único problema es que requiere un objeto JSON o XML como "respuesta" probado en la versión 3 de Google y 0.6 Open Street Maps y funciona bien)

NOTA: devuelve un objeto location.lat o location.lon, también puede hacer que devuelva cualquier otro campo que desee.

JSON.parse(texto) // donde el texto es la respuesta de google o los mapas de calles abiertos XML.parse(texto) // puede crear la suya propia para convertir la respuesta a XML o usar expresiones regulares para analizarla. Si alguien tiene una versión de expresiones regulares para analizar la respuesta de texto, también puede ser útil.

// Parser(ajax reply object, google/open, json/xml); 
// takes the reply from google maps or open street maps and creates an object with location[lat/lon] 
function Parser(reply, provider, type) {
  var location = {};
  if(reply != null) {
    if(provider == "google") { // Google Street Maps
      switch(type) {
      case "xml":
        location["lat"] = reply.getElementsByTagName("lat")[0].textContent; 
        location["lon"] = reply.getElementsByTagName("lng")[0].textContent; 
        break;
      default: // json
        location["lat"] = reply.results[0].geometry.location.lat;
        location["lon"] = reply.results[0].geometry.location.lng;
      }
    }
    else { // Open Street Maps
      switch(type) {
      case "xml":
        location["lat"] = reply.getElementsByTagName("place")[0].getAttribute("lat"); 
        location["lon"] = reply.getElementsByTagName("place")[0].getAttribute("lon"); 
        break;
      default: // json
        location["lat"] = reply[0].lat;
        location["lon"] = reply[0].lon;
      }
    }
  }
  return location;
}

Respondido 23 ago 12, 15:08

function getLocation() {
    if (navigator.geolocation) {
        navigator.geolocation.getCurrentPosition(function (position) {
            $.post("https://maps.googleapis.com/maps/api/geocode/json?latlng=" + position.coords.latitude + "," + position.coords.longitude + "&sensor=false", function (result) {
                for (var i = 0; i < result['results'][0]['address_components'].length; i++) {
                    if (result['results'][0]['address_components'][i]['types'][0] == "country") {
                        alert(result['results'][0]['address_components'][i]['long_name']);
                    }
                }
            });
        });
    }
}
getLocation();

Respondido 29 ago 14, 17:08

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.