Python: – Dada una lista de coordenadas de tupla, busque la coordenada más cercana a una coordenada específica (Google Maps Coords))

Estoy usando Python y he hecho algo con lo siguiente, dada una lista de coordenadas de tupla, encuentra la coordenada más cercana a una coordenada específica (Google Maps Coords)

Pero no las coordenadas más precisas en comparación con los mapas de Google en mi código. Por favor, ayúdame.

Aqui esta mi codigo

def find_coords(c, l): tmp_list = [] (x,y) = l[0] for (a,b) in l[1:]: if (xc[0])**2 + (yc[1])**2 > (ac[0])**2 + (bc[1])**2: (x,y) = (a,b) tmp_list.append((x,y)) return tmp_list ccoordinate_list = [(11.6702634, 72.313323), (11.6723698, 78.114523), (31.67342698, 78.465323), (12.6702634, 72.313323), (12.67342698, 75.465323)] coordinate = (11.6723698, 78.114523) while coordinate_list[1:]: coordinate_list = find_coords(coordinate, coordinate_list) 

Si desea encontrar la coordenada geográfica más cercana, debe utilizar estructuras de coordenadas geográficas específicas (consulte geopy ). En este caso, propongo la siguiente solución:

 import geopy import geopy.distance # your data ccoordinate_list = [(11.6702634, 72.313323), (11.6723698, 78.114523), (31.67342698, 78.465323), (12.6702634, 72.313323), (12.67342698, 75.465323)] coordinate = (11.6723698, 78.114523) # the solution pts = [ geopy.Point(p[0],p[1]) for p in ccoordinate_list ] onept = geopy.Point(coordinate[0],coordinate[1]) alldist = [ (p,geopy.distance.distance(p, onept).km) for p in pts ] nearest_point = min(alldist, key=lambda x: (x[1]))[0] # or you can sort in by distance with sorted function 

Tenga en cuenta que la métrica euclidiana (como en su ejemplo) puede ser incorrecta en el mundo.

La razón por la que sus resultados difieren de los de Google es que está utilizando la fórmula de distancia para el plano (Teorema de Pitágoras), pero la Tierra no es un plano, y la latitud y la longitud no son un sistema de coordenadas cartesiano .

Esa fórmula plana está bien para pequeñas distancias en regiones que no están demasiado cerca de los polos. Para obtener mejores resultados, puede utilizar la fórmula de gran distancia de círculo .

Para una mayor precisión, debe tener en cuenta el hecho de que la Tierra no es una esfera perfecta: está algo aplanada en los polos, lo que la convierte en un elipsoide (casi). Para calcular distancias en un elipsoide puede usar las fórmulas de Vincenty . Incluso esas fórmulas no son perfectamente precisas, pero el error es bastante pequeño.

Actualizar

Las fórmulas de Vincenty no se recomiendan para uso moderno. Se remontan a la década de 1970 y estaban destinados a ser utilizados en las calculadoras de escritorio de la época. Ahora tenemos acceso a una tecnología informática mucho mejor, y hay mejores formas de calcular las distancias en el elipsoide. Yo recomiendo geographiclib CFF Karney’s. El Dr. Karney es un importante colaborador de los artículos de Wikipedia sobre geodésicos, en particular, Geodésicos en un elipsoide , como mencioné en esta respuesta, que presenta una breve demostración de cómo utilizar geographiclib biblioteca geographiclib para calcular la distancia entre 2 puntos en el elipsoide de referencia WGS84 y Un enlace a un ejemplo más extenso.