longitude long latitude lat google from address geolocation geocoding geospatial geo

geolocation - long - google maps geocoding api



Dadas las coordenadas lat/long, ¿cómo podemos averiguar la ciudad/país? (12)

Por ejemplo, si tenemos estos conjuntos de coordenadas

"latitude": 48.858844300000001, "longitude": 2.2943506,

¿Cómo podemos averiguar la ciudad / país?


Estaba buscando una funcionalidad similar y vi los datos " http://download.geonames.org/export/dump/ " compartidos en una respuesta anterior (gracias por compartirlos, es una fuente excelente) e implementé un servicio basado en en los datos de cities1000.txt.

Puedes verlo corriendo en http://scatter-otl.rhcloud.com/location?lat=36&long=-78.9 (enlace roto) Simplemente cambie la latitud y la longitud de sus ubicaciones.

Se implementa en OpenShift (plataforma RedHat). La primera llamada después de un largo período de inactividad puede tomar algún tiempo, pero generalmente el rendimiento es satisfactorio. Siéntase libre de utilizar este servicio como desee ...

Además, puede encontrar el origen del proyecto en https://github.com/turgos/Location .


He usado Geocoder , una buena biblioteca de Python que admite múltiples proveedores, incluidos Google, Geonames y OpenStreetMaps, por mencionar solo algunos . He intentado usar la biblioteca GeoPy, y a menudo obtiene tiempos de espera. Desarrollar su propio código para GeoNames no es el mejor uso de su tiempo y puede terminar obteniendo un código inestable. Geocoder es muy simple de usar en mi experiencia, y tiene suficiente documentation . A continuación se muestra un código de muestra para buscar ciudad por latitud y longitud, o para encontrar latitud / longitud por nombre de ciudad.

import geocoder g = geocoder.osm([53.5343609, -113.5065084], method=''reverse'') print g.json[''city''] # Prints Edmonton g = geocoder.osm(''Edmonton, Canada'') print g.json[''lat''], g.json[''lng''] # Prints 53.5343609, -113.5065084



Necesitas geopy

pip install geopy

y entonces:

from geopy.geocoders import Nominatim geolocator = Nominatim() location = geolocator.reverse("48.8588443, 2.2943506") print(location.address)

para obtener más información:

print (location.raw) {''place_id'': ''24066644'', ''osm_id'': ''2387784956'', ''lat'': ''41.442115'', ''lon'': ''-8.2939909'', ''boundingbox'': [''41.442015'', ''41.442215'', ''-8.2940909'', ''-8.2938909''], ''address'': {''country'': ''Portugal'', ''suburb'': ''Oliveira do Castelo'', ''house_number'': ''99'', ''city_district'': ''Oliveira do Castelo'', ''country_code'': ''pt'', ''city'': ''Oliveira, São Paio e São Sebastião'', ''state'': ''Norte'', ''state_district'': ''Ave'', ''pedestrian'': ''Rua Doutor Avelino Germano'', ''postcode'': ''4800-443'', ''county'': ''Guimarães''}, ''osm_type'': ''node'', ''display_name'': ''99, Rua Doutor Avelino Germano, Oliveira do Castelo, Oliveira, São Paio e São Sebastião, Guimarães, Braga, Ave, Norte, 4800-443, Portugal'', ''licence'': ''Data © OpenStreetMap contributors, ODbL 1.0. http://www.openstreetmap.org/copyright''}


Otra opción:

  • Descargue la base de datos de ciudades desde http://download.geonames.org/export/dump/
  • Agregue cada ciudad como latitud / longitud -> Asignación de ciudad a un índice espacial como un árbol R (algunos DB también tienen la funcionalidad)
  • Utilice la búsqueda del vecino más cercano para encontrar la ciudad más cercana para cualquier punto dado

Ventajas:

  • No depende de que un servidor externo esté disponible
  • Muy rápido (hace fácilmente miles de búsquedas por segundo)

Desventajas:

  • No está automáticamente actualizado
  • Requiere código adicional si desea distinguir el caso donde la ciudad más cercana está a decenas de millas de distancia
  • Puede dar resultados extraños cerca de los polos y la línea de fecha internacional (aunque no hay ciudades en esos lugares de todos modos

Pasé unos 30 minutos tratando de encontrar un código de ejemplo de cómo hacer esto en Javascript. No pude encontrar una respuesta rápida y clara a la pregunta que publicaste. Entonces ... Hice la mía. Esperemos que las personas puedan usar esto sin tener que ir a profundizar en la API o mirar el código que no tienen idea de cómo leer. Si no hay otra cosa, puedo hacer referencia a esta publicación para mis propias cosas. ¡Buena pregunta y gracias por el foro de discusión!

Esto es utilizando la API de Google.

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?key=<YOURGOOGLEKEY>&sensor=false&v=3&libraries=geometry"></script>

.

//CHECK IF BROWSER HAS HTML5 GEO LOCATION if (navigator.geolocation) { navigator.geolocation.getCurrentPosition(function (position) { //GET USER CURRENT LOCATION var locCurrent = new google.maps.LatLng(position.coords.latitude, position.coords.longitude); //CHECK IF THE USERS GEOLOCATION IS IN AUSTRALIA var geocoder = new google.maps.Geocoder(); geocoder.geocode({ ''latLng'': locCurrent }, function (results, status) { var locItemCount = results.length; var locCountryNameCount = locItemCount - 1; var locCountryName = results[locCountryNameCount].formatted_address; if (locCountryName == "Australia") { //SET COOKIE FOR GIVING jQuery.cookie(''locCountry'', locCountryName, { expires: 30, path: ''/'' }); } }); } }


Por favor, verifique la respuesta a continuación. Esto funciona para mi

if(navigator.geolocation) { navigator.geolocation.getCurrentPosition(function(position){ initialize(position.coords.latitude,position.coords.longitude); }); } function initialize(lat,lng) { //directionsDisplay = new google.maps.DirectionsRenderer(rendererOptions); //directionsService = new google.maps.DirectionsService(); var latlng = new google.maps.LatLng(lat, lng); //alert(latlng); getLocation(latlng); } function getLocation(latlng){ var geocoder = new google.maps.Geocoder(); geocoder.geocode({''latLng'': latlng}, function(results, status) { if (status == google.maps.GeocoderStatus.OK) { if (results[0]) { var loc = getCountry(results); alert("location is::"+loc); } } }); } function getCountry(results) { for (var i = 0; i < results[0].address_components.length; i++) { var shortname = results[0].address_components[i].short_name; var longname = results[0].address_components[i].long_name; var type = results[0].address_components[i].types; if (type.indexOf("country") != -1) { if (!isNullOrWhitespace(shortname)) { return shortname; } else { return longname; } } } } function isNullOrWhitespace(text) { if (text == null) { return true; } return text.replace(//s/gi, '''').length < 1; }


Puede usar Google Geocoding API

Bellow es la función php que devuelve Dirección, Ciudad, Estado y País

public function get_location($latitude='''', $longitude='''') { $geolocation = $latitude.'',''.$longitude; $request = ''http://maps.googleapis.com/maps/api/geocode/json?latlng=''.$geolocation.''&sensor=false''; $file_contents = file_get_contents($request); $json_decode = json_decode($file_contents); if(isset($json_decode->results[0])) { $response = array(); foreach($json_decode->results[0]->address_components as $addressComponet) { if(in_array(''political'', $addressComponet->types)) { $response[] = $addressComponet->long_name; } } if(isset($response[0])){ $first = $response[0]; } else { $first = ''null''; } if(isset($response[1])){ $second = $response[1]; } else { $second = ''null''; } if(isset($response[2])){ $third = $response[2]; } else { $third = ''null''; } if(isset($response[3])){ $fourth = $response[3]; } else { $fourth = ''null''; } if(isset($response[4])){ $fifth = $response[4]; } else { $fifth = ''null''; } $loc[''address'']=''''; $loc[''city'']=''''; $loc[''state'']=''''; $loc[''country'']=''''; if( $first != ''null'' && $second != ''null'' && $third != ''null'' && $fourth != ''null'' && $fifth != ''null'' ) { $loc[''address''] = $first; $loc[''city''] = $second; $loc[''state''] = $fourth; $loc[''country''] = $fifth; } else if ( $first != ''null'' && $second != ''null'' && $third != ''null'' && $fourth != ''null'' && $fifth == ''null'' ) { $loc[''address''] = $first; $loc[''city''] = $second; $loc[''state''] = $third; $loc[''country''] = $fourth; } else if ( $first != ''null'' && $second != ''null'' && $third != ''null'' && $fourth == ''null'' && $fifth == ''null'' ) { $loc[''city''] = $first; $loc[''state''] = $second; $loc[''country''] = $third; } else if ( $first != ''null'' && $second != ''null'' && $third == ''null'' && $fourth == ''null'' && $fifth == ''null'' ) { $loc[''state''] = $first; $loc[''country''] = $second; } else if ( $first != ''null'' && $second == ''null'' && $third == ''null'' && $fourth == ''null'' && $fifth == ''null'' ) { $loc[''country''] = $first; } } return $loc; }


Realmente depende de las restricciones tecnológicas que tenga.

Una forma es tener una base de datos espaciales con el bosquejo de los países y las ciudades en las que está interesado. A modo de esquema quiero decir que los países y las ciudades se almacenan como el polígono de tipo espacial. Su conjunto de coordenadas se puede convertir al punto de tipo espacial y consultar contra los polígonos para obtener el nombre del país / ciudad donde se encuentra el punto.

Estas son algunas de las bases de datos que soportan el tipo espacial: SQL server 2008 , MySQL , postGIS - una extensión de postgreSQL y Oracle .

Si desea utilizar un servicio en lugar de tener su propia base de datos para esto, puede utilizar el GeoPlanet de Yahoo. Para el enfoque de servicio, es posible que desee verificar this respuesta en gis.stackexchange.com , que cubre la disponibilidad de servicios para resolver su problema.


Sé que esta pregunta es muy antigua, pero he estado trabajando en el mismo tema y encontré un paquete extremadamente eficiente y conveniente, reverse_geocoder , construido por Ajay Thampi. El código está disponible here . Se basa en una implementación paralela de árboles KD que es extremadamente eficiente para grandes cantidades de puntos (me llevó unos segundos obtener 100.000 puntos).

Se basa en http://download.geonames.org/export/dump/ base de datos, ya destacada por @turgos.

Si su tarea es encontrar rápidamente el país y la ciudad de una lista de coordenadas, esta es una gran herramienta.


Si está utilizando la API Places de Google, así es como puede obtener el país y la ciudad desde el objeto de lugar usando Javascript:

function getCityAndCountry(location) { var components = {}; for(var i = 0; i < location.address_components.length; i++) { components[location.address_components[i].types[0]] = location.address_components[i].long_name; } if(!components[''country'']) { console.warn(''Couldn/'t extract country''); return false; } if(components[''locality'']) { return [components[''locality''], components[''country'']]; } else if(components[''administrative_area_level_1'']) { return [components[''administrative_area_level_1''], components[''country'']]; } else { console.warn(''Couldn/'t extract city''); return false; } }


Una alternativa de código abierto es Nominatim de Open Street Map. Todo lo que tiene que hacer es establecer las variables en una URL y devuelve la ciudad / país de esa ubicación. Por favor, consulte el siguiente enlace para obtener la documentación oficial: Nominatim