Posterior a consultar con especialistas en esta materia, programadores de diversas áreas y maestros dimos con la respuesta al problema y la plasmamos en este post.
Solución:
No necesitas una proyección equidistante, sino distancias geodésicas calculadas sobre un esferoide (fórmulas de Vincenty) o una esfera (distancia de ciclo máximo). Por ejemplo, geopy
es capaz de calcularlos.
Aquí hay un ejemplo de uso de la distancia Vincenty:
>>> from geopy.distance import vincenty >>> newport_ri = (41.49008, -71.312796) >>> cleveland_oh = (41.499498, -81.695391) >>> print(vincenty(newport_ri, cleveland_oh).miles) 538.3904451566326
Usando la distancia del círculo máximo:
>>> from geopy.distance import great_circle >>> newport_ri = (41.49008, -71.312796) >>> cleveland_oh = (41.499498, -81.695391) >>> print(great_circle(newport_ri, cleveland_oh).miles) 537.1485284062816
Fuente: https://pypi.python.org/pypi/geopy#measuring-distance
¿Cómo encontrar el punto B con el método descrito anteriormente?
Necesitas resolver el problema directo, es decir dado un punto inicial, su acimut y una distancia geodésica calcular el punto final. Una implementación de Python del problema directo está disponible en el paquete PyGeodesy.
Ejemplo:
>>> from pygeodesy.ellipsoidalVincenty import LatLon
>>> p = LatLon(-37.95103, 144.42487)
>>> d = p.destination(54972.271, 306.86816)
>>> print d.lon, d.lat
143.926497668 -37.6528177174
Para esto, tengo que proyectar el punto A a una proyección que conserve la distancia (Equidistante).
Es posible que haya malinterpretado “Equidistante” en las proyecciones Equidistantes. Es un malentendido común que las proyecciones “Equidistantes” preservan las distancias en todas partes, lo cual es imposible debido a uno de los teoremas de Gauss.
Algunas proyecciones se denominan “equidistantes” porque conservan la distancia a lo largo de un conjunto de líneas específicas, como meridianos o paralelos, que se denominan líneas estándar.
Si en su caso, los puntos A y B siempre están al Este/Oeste uno del otro, entonces en la proyección Sinusoidal, todas las líneas paralelas son estándar.
De lo contrario, puede usar la distancia esferoidal, por ejemplo, calculando la distancia directamente con sus puntos en latitud/longitud (EPSG 4326) usando el tipo de geografía de PostGIS.
Si no necesita precisión al milímetro, puede usar uno de los sistemas de coordenadas transversales Mercator comunes para esta área, UTM zona 33 (EPSG 32633) o Gauß-Krüger zona 4 (EPSG 31468):
gk4_data = latlon_data.to_crs(epsg=31468)
Berlín está cerca de un límite de zona en ambos sistemas, lo que genera pequeños errores. Como menciona Matte, en UTM las desviaciones rondan los 25 cm por km; Gauß-Krüger utiliza zonas más estrechas, pero sin el factor de escala de UTM, por lo que las desviaciones son aproximadamente las mismas.