Consulte el ejemplo y la imagen correspondiente.
Me gustaría lograr lo siguiente: proporcionar dos ubicaciones (lat / lng), que se muestran a continuación como A y B . A partir de esto, se trazaría una línea virtual y luego se calcularía la distancia entre esta línea y C (en cualquier medida).
Lo he logrado actualmente en la API v3 de Google Maps, pero me gustaría poder realizar esto detrás de escena en el idioma que elija. Cualquier sugerencia / idea sería muy apreciada!
geolocation
mathematics
Prisionero
fuente
fuente
Respuestas:
¿La longitud más corta es la distancia que necesita, a menos que me equivoque?
fuente
None
cuando existe una solución legítima. El problema es que el último condicional asume X1 <X2 e Y1 <Y2, lo que no siempre se puede asegurar. Se necesita una mejor prueba de intermediación.Tal vez lo estoy haciendo demasiado complicado, pero lo que quieres es la distancia de un punto a una línea. Esa es la distancia desde un punto a lo largo de AB que une AB con C con una línea ortogonal a AB. Este vector perpendicular a AB viene dado por
(He utilizado los corchetes para definir un vector o una matriz de dos elementos). La distancia entre C [xp, yp] y el punto A es
La distancia entre la línea y C es solo la proyección de u sobre v. Si suponemos que mod (v) = 1 (solo lo normalizamos), entonces
La única complicación es que probablemente desee asegurarse de que sus coordenadas no sean pares lat / log WGS84, sino proyectadas (o utilice coordenadas geodésicas). Puede usar OGR o Proj4 para esto.
fuente
Siendo un poco reacio a todas estas matemáticas también, lo abordaría desde un ángulo diferente. Lo convertiría en una línea 'real', en lugar de una línea virtual, y luego usaría las herramientas existentes.
Si A y B comparten un atributo, puede conectarlos dibujando una línea (Kosmo GIS tiene una herramienta que creará líneas a partir de puntos, y creo que también hay un complemento QGIS para esto). Una vez que tenga las líneas, una función 'cerca' en la capa de puntos 'C' le dará la distancia a la línea. ¡Deje que el software maneje las matemáticas por usted!
fuente
Si estabas usando Java en Android, es solo una línea con la función de biblioteca
distanceToLine:
Calcula la distancia en la esfera entre el punto p y el segmento de línea de principio a fin.
Parámetros: p - el punto a medir
inicio: el comienzo del segmento de línea
end - el final del segmento de línea
Retornos: la distancia en metros (suponiendo tierra esférica)
Simplemente agregue la biblioteca a su
fuente