8 votos

Cómo interpolar una lat/long point entre otros dos en una distancia determinada

Estoy tratando de resolver el problema de la interpolación de un punto a una determinada distancia (en metros) entre otros dos lat/long puntos. (por ejemplo, P1 (50,10), P2(50.01, 9.990), quiero interploate P3 a una distancia "X" en la ruta más corta entre P1 y P2, suponiendo que X es siempre menor que la distancia entre P1 y P2)

Mientras que al principio parecía fácil no podía por la vida de mí encontrar una fácil implementación para esto (por ejemplo, un par de líneas de código y un par externos constantes, como para ser fácil de depurar y rápida de ejecutar).

Actualmente estoy usando la fórmula:

val x : Double = RadiusOfEarth*Math.toRadians(lon)*CentralLatCos
val y : Double = RadiusOfEarth*Math.toRadians(lat)

para proyecto en 2d cartesiano, me permito el punto en coordenadas cartesianas (ya que para eso hay un montón de fórmulas que he hecho entender y se puede utilizar). Y luego vuelvo a lon/lat utilizando:

val lat : Double = Math.toDegrees(y/RadiusOfEarth)
val lon : Double = Math.toDegrees( x/(RadiusOfEarth*CentralLatCos) )

Sin embargo, esto parece estar causando bastante grandes errores, así que estoy bastante seguro de que el camino que yo proyecto mi punto es errónea.

Me podrían ayudar por que sugiere y fácil algoritmo para proyecto de atrás/adelante de la esfera de cartesiano (que mantener el rumbo y distancia), o una forma de interpolar un punto intermedio entre otras dos lon/lat puntos a una distancia dada ?

También, favor de proporcionar algún material de origen que "demuestra" que la solución para que me puedas entender mejor, hice esta pregunta en algún otro lugar y algunas fórmulas sin un contexto donde arrojado a mí (que realmente no ayuda, me pueden encontrar un montón de quienes utilizan internet).

Tenga en cuenta, yo estoy tratando de hacer esto para los pequeños de la distancia, el mayor de la que podría ser algo que alrededor de las líneas de 2-3k metros (distancia entre los cables de los puntos originales sé). Así que realmente no tengo ninguna necesidad de una fórmula que se precisa en una escala global, si se tiene un pequeño error, pero es fácil de implementar estoy más que bien con ella.

(Nota: estoy trabajando en un mapa entre lat 45 - 55 y lon 7-13)

0voto

deaan Puntos 11

Puede utilizar una transformación de proyección de tales UTM a resolver fácilmente. En QGIS, por ejemplo. Para Alemania la proyección UTM a utilizar es la zona 32North usted puede revisar en: http://www.latlong.net/lat-long-utm.html

Aquí está el código para hacerlo. Acaba de iniciar QGIS (software Libre) abra la consola de python en QGIS (ctrl-alt-P) copie y pegue el siguiente script.

lat1=50
lon1=10
lat2=50.1
lon2=10.1
partial=1500 #distance in meters from point 1 towards point 2

from qgis import core
#Projections
crs_latlon = core.QgsCoordinateReferenceSystem(4326,core.QgsCoordinateReferenceSystem.EpsgCrsId)
crs_utm32U = core.QgsCoordinateReferenceSystem(32632,core.QgsCoordinateReferenceSystem.EpsgCrsId) 

#Transform
latlon2UTM = QgsCoordinateTransform(crs_latlon, crs_utm32U)          
UTM2latlon = QgsCoordinateTransform(crs_utm32U, crs_latlon)

#Apply transform        
UTMp1=latlon2UTM.transform(QgsPoint(lon1,lat1))
UTMp2=latlon2UTM.transform(QgsPoint(lon2,lat2))            
UTMx1=UTMp1.x()
UTMy1=UTMp1.y()
UTMx2=UTMp2.x()
UTMy2=UTMp2.y()

#linear interpolation
#Get world distance by pythagorus
world_distance=((UTMx2-UTMx1)**2+(UTMy2-UTMy1)**2)**0.5
UTMx3=UTMx1+(UTMx2-UTMx1)*partial/world_distance
UTMy3=UTMy1+(UTMy2-UTMy1)*partial/world_distance

latlonp3=UTM2latlon.transform(QgsPoint(UTMx3,UTMy3))
lon3=latlonp3.x()
lat3=latlonp3.y()

print lon3, lat3

Puedes probarlo por ti mismo en google earth mediante la adición de puntos, la edición de la lat y lon para cada uno, a continuación, mida la distancia desde el punto 1 al punto 3

Si usted no desea utilizar el QGIS funciones de transformación estoy seguro de que hay otros en línea UTM converiosn funciones que usted podría utilizar o usted podría formular su propio de la matemática de la transformación de sí mismo que probablemente esté disponible en wikipedia.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X