una saber obtener mis longitud latitud google geograficas ejemplos direccion definicion coordenadas como buscar algorithm geolocation gps location latitude-longitude

algorithm - saber - obtener latitud y longitud de una direccion javascript



Algoritmo para encontrar todas las ubicaciones de latitud y longitud dentro de una cierta distancia desde una ubicaciĆ³n determinada de Lat Lng (11)

Dada una base de datos de lugares con ubicaciones de latitud + longitud, como 40.8120390, -73.4889650, ¿cómo encontraría todas las ubicaciones dentro de una distancia determinada de una ubicación específica?

No parece muy eficiente seleccionar todas las ubicaciones desde el DB y luego recorrerlas una por una, obteniendo la distancia desde la ubicación de inicio para ver si están dentro de la distancia especificada. ¿Hay una buena manera de reducir las ubicaciones inicialmente seleccionadas de la base de datos? Una vez que tengo (¿o no?) Un conjunto reducido de ubicaciones, ¿sigo revisándolas una a una para verificar la distancia, o hay una forma mejor?

El lenguaje en el que hago esto en realidad no importa. ¡Gracias!


Comience Comparando la distancia entre latitudes. Cada grado de latitud está aproximadamente a 69 millas (111 kilómetros) de distancia. El rango varía (debido a la forma ligeramente elipsoide de la Tierra) de 68.703 millas (110.567 km) en el ecuador a 69.407 (111.699 km) en los polos. La distancia entre dos ubicaciones será igual o mayor que la distancia entre sus latitudes.

Tenga en cuenta que esto no es cierto para las longitudes: la longitud de cada grado de longitud depende de la latitud. Sin embargo, si sus datos están limitados a algún área (por ejemplo, un país), también puede calcular límites mínimos y máximos para las longitudes.

Continuará con un cálculo de distancia rápida de baja precisión que asume tierra esférica:

La distancia del círculo máximo d entre dos puntos con coordenadas {lat1, lon1} y {lat2, lon2} está dada por:

d = acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))

Una fórmula matemáticamente equivalente, que está menos sujeta al error de redondeo para distancias cortas es:

d = 2*asin(sqrt((sin((lat1-lat2)/2))^2 + cos(lat1)*cos(lat2)*(sin((lon1-lon2)/2))^2))

d es la distancia en radianes

distance_km ≈ radius_km * distance_radians ≈ 6371 * d

(6371 km es el radio promedio de la tierra )

Los requisitos computacionales de este método son mínimos. Sin embargo, el resultado es muy preciso para distancias pequeñas.

Luego, si está a una distancia dada, más o menos, use un método más preciso.

GeographicLib es la implementación más precisa que conozco, aunque también puede usarse la fórmula inversa de Vincenty .

Si está utilizando un RDBMS, establezca la latitud como la clave principal y la longitud como una clave secundaria. Consulte un rango de latitud, o un rango de latitud / longitud, como se describió anteriormente, luego calcule las distancias exactas para el conjunto de resultados.

Tenga en cuenta que las versiones modernas de todos los RDBMS principales admiten tipos de datos geográficos y consultas de forma nativa.


Como dice que cualquier idioma es aceptable, la elección natural es PostGIS:

SELECT * FROM places WHERE ST_DistanceSpheroid(geom, $location, $spheroid) < $max_metres;

Si desea utilizar el datum WGS, debe configurar $spheroid ''SPHEROID["WGS 84",6378137,298.257223563]''

Suponiendo que tiene places indexados por la columna geom , esto debería ser razonablemente eficiente.


Como mencionó biziclop, una especie de árbol de espacio métrico sería probablemente tu mejor opción. Tengo experiencia en el uso de árboles kd y quad para hacer este tipo de consultas de rango y son increíblemente rápidos; tampoco son tan difíciles de escribir. Sugiero buscar en una de estas estructuras, ya que también te permiten responder otras preguntas interesantes como "¿cuál es el punto más cercano en mi conjunto de datos a este otro punto?"


En función de la latitud, la longitud y la distancia que desee encontrar del usuario actual, la consulta SQL se detalla a continuación.

SELECT * FROM( SELECT *,(((acos(sin((@latitude*pi()/180)) * sin((Latitude*pi()/180))+cos((@latitude*pi()/180)) * cos((Latitude*pi()/180)) * cos(((@longitude - Longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM Distances) t WHERE distance <= @distance

@latitude y @longitude son la latitud y la longitud del punto. Latitud y longitud son las columnas de la tabla de distancias. El valor de pi es 22/7




Puede convertir latitud-longitud en formato UTM, que es un formato métrico que puede ayudarlo a calcular distancias. Luego puede decidir fácilmente si un punto cae en una ubicación específica.



Yogihosting de tanques

Tengo en mi base de datos un grupo de tablas de Open Streep Maps y probé con éxito.

La distancia funciona bien en metros.

SET @orig_lat=-8.116137; SET @orig_lon=-34.897488; SET @dist=1000; SELECT *,(((acos(sin((@orig_lat*pi()/180)) * sin((dest.latitude*pi()/180))+cos((@orig_lat*pi()/180))*cos((dest.latitude*pi()/180))*cos(((@orig_lon-dest.longitude)*pi()/180))))*180/pi())*60*1.1515*1609.344) as distance FROM nodes AS dest HAVING distance < @dist ORDER BY distance ASC LIMIT 100;


puedes verificar esta ecuación, creo que ayudará

SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;