2010-09-03 10 views
17

¿Hay alguna manera fácil de obtener el nombre del país en cuyo territorio se encuentra un punto determinado?Nombre de país para las coordenadas de GPS

No me preocupa demasiado la precisión ni las ambigüedades dadas por las disputas políticas. Solo necesito una aproximación lo suficientemente buena.

+1

¿Desea hacer esto usando un servicio en línea o también sin conexión? Además, ¿con qué plataforma/lenguaje de programación desea que se relacione la respuesta? – hippietrail

Respuesta

6

EDITAR: Yahoo API ya no está disponible.

Pruebe el Yahoo! APIs.

Latitud y longitud

Latitud y longitud pueden especificarse para el parámetro ubicación. Latitud y longitud pueden expresarse como decimal grados o grados-minutos-segundos, con indicaciones direccionales o finales o señales de inicio. Si se proporcionan direccionales, la longitud puede aparecer antes de la latitud. Si no se proporcionan direccionales, longitud puede aparecer antes de la latitud si está fuera del rango -90 a 90. En caso contrario, la latitud debe aparecer primero. Los signos de puntuación (comas, grados, minutos, segundos) son ignorados.

Examples: 

•50.3 -120.5 
•50.3, -120.5 
•-120.5 50.3 
•50.3 N 120.5 W 
•120.5 W 50.3 N 
•50 18 0 -120 30 0 
•50 18 0 N 120 30 0 W 
•50° 18' 0" N 120° 30' 0" W 

El elemento de respuesta le dará el país, así como muchos otros elements.

No olvides enviar como parámetro gflags = R, para hacer la geocodificación inversa. Si desea la salida en json, envíe también el parámetro flags = J.

+0

El Yahoo! La API de ubicación de geocodificación no proporciona ninguna información para varias solicitudes que he intentado, por una ubicación que no es tan difícil de buscar (nada en el medio o el océano o algo así), así que sería muy cuidadoso al depender de esto. – Guss

+0

¿Conoces los límites de la API? –

+1

@Felipe - 50,000 solicitud/día en [PlaceFinder] (http://developer.yahoo.com/geo/placefinder/). – GalacticJello

5

¿Qué le parece usar el servicio google's reverse geo-encoding?

+1

El problema de esto es: El uso de la API de codificación geográfica de Google está sujeto a un límite de consulta de 2,500 solicitudes de geolocalización por día. (El usuario de la API de Google Maps for Business puede realizar hasta 100.000 solicitudes por día). (...) Nota: la API de codificación geográfica solo se puede usar junto con un mapa de Google; Se prohíbe la geocodificación de resultados sin mostrarlos en un mapa. Para obtener detalles completos sobre el uso permitido, consulte las Restricciones de licencia de los Términos de servicio de la API de Maps. –

5

Solo como referencia, geonames.org también tiene un buen servicio web, pero tiene una tarifa limitada (que fue un problema en mi caso ya que tuve que buscar un gran lote de coordenadas).

Ejemplo: http://ws.geonames.org/findNearbyPlaceName?lat=47.3&lng=9

+0

¡Eso me salvó, gracias! Necesitas un nombre de usuario para que funcione, y 'felix' y' nico' funcionan bien. (Para otras personas:) tienes un límite de 2000 por hora, así que úsalas sabiamente – Nico

0

También podría mirar a los servicios de tinygeocoder.

Otra alternativa es descargar los mapas de país de la tierra natural (u otra fuente). Usando Geotools puedes buscar si el punto está dentro de uno de los países.

1

Aquí hay algo de código JavaScript para obtener el nombre del país desde la latitud y longitud coordenadas:


  1. El uso de servicios de geocodificación de Google [jsfiddle]: lookupCountryWithGoogle

    var = function (lat, lng) { var latlng = new google.maps.LatLng (lat, lng);

    var geoCoder = new google.maps.Geocoder(); 
    
    geoCoder.geocode({ 
        location: latlng 
    }, function(results, statusCode) { 
        var lastResult = results.slice(-1)[0]; 
    
        if (statusCode == 'OK' && lastResult && 'address_components' in lastResult) { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'country: ' + lastResult.address_components.slice(-1)[0].long_name); 
        } else { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'failed: ' + statusCode); 
        } 
    }); 
    

    };

    lookupCountryWithGoogle (43.7534932, 28.5743187); // tendrá éxito lookupCountryWithGoogle (142, 124); // fallará

(Tendrá que cargar el soporte de JavaScript de Google para esto desde un enlace como maps.google.com/maps/api/js?sensor=false&fake=.js)


  1. Usando ws.geonames.org[jsfiddle]:

    lookupCountryWithGeonames var = function (lat, lng) {

    $.getJSON('http://ws.geonames.org/countryCode', { 
        lat: lat, 
        lng: lng, 
        type: 'JSON' 
    }, function(results) { 
        if (results.countryCode) { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'country: ' + results.countryName); 
        } else { 
         alert('coordinates: ' + lat + ', ' + lng + '\n' + 'failed: ' + results.status.value + ' ' + results.status.message); 
        } 
    }); 
    

    };

    lookupCountryWithGeonames (43.7534932, 28.5743187); // tendrá éxito

    lookupCountryWithGeonames (142, 124); // fallará

Cuestiones relacionadas