5 votos

¿Cómo calcular el error de desvío a partir de los datos del GPS?

Me gustaría analizar la precisión de la navegación, comparando los transectos planificados con la pista real sobrevolada a partir de los datos del GPS.

Por ejemplo, los transectos planificados a continuación (en verde) no coinciden perfectamente con los reales sobrevolados (en azul). para las zonas adyacentes a los transectos ¿cuál es el error medio (distancia), IGNORANDO los bits situados más allá de los extremos de cada transecto?

enter image description here

Los transectos planificados son líneas, normalmente sólo con nodos iniciales y finales. Las pistas proceden de archivos GPX y pueden estar formadas por muchísimos nodos, pero pueden tener sólo unos pocos nodos registrados cuando la aeronave vuela especialmente recta.

Me gustaría utilizar QGIS. Una idea era utilizar la herramienta v.to.points de GRASS en la caja de herramientas Processing para dividir cada transecto en puntos de, digamos, 50 m de espaciado, y determinar la distancia más cercana a la pista para cada punto (y luego promediarlos).

¿Existe, tal vez, una forma mejor de calcular la distancia media que dividir las líneas en puntos individuales?

0 votos

La solución puede depender de la finalidad exacta de los datos. En las respuestas, la distancia de Hausdorff te va a dar una medida "peor que nunca". Así que, dados dos conjuntos de datos, uno de ellos, que está constantemente fuera de lugar, tendrá una distancia de Hausdorff más baja que el otro, que está exactamente dentro de lugar, excepto por una gran excursión. Esto es especialmente peligroso en las mediciones GPS sin procesar, en las que una situación de multitrayecto produce un par de "picos" de error de pseudodistancia de muy corta duración. También es necesario definir con precisión lo que se entiende por "ningún verde adyacente": visualmente bien, pero matemáticamente mal.

0 votos

Cierto - véase mi comentario a @Jesse más abajo, la solución de Hausdorff puede funcionar con suficientes segmentos (es decir, muestras), pero siempre dará una respuesta "máxima" en lugar de "media". Voy a editar la pregunta para responder más de la "no adyacente" cuestión, que está mal definido.

3voto

Slayer_X Puntos 11

Creo que Distancia de Hausdorff puede ser lo que buscas. Es básicamente una medida de la similitud entre dos geometrías.

Pasos generales para aplicarlo a este problema:

  1. Encuentra el punto más cercano de la vía al principio y al final de cada segmento planificado.
  2. dividir la pista en segmentos entre estos conjuntos de puntos.
  3. Calcular la distancia de Hausdorff entre el segmento planificado y el segmento más cercano.

Tu pregunta decía qgis, pero la recompensa dice cualquier solución FOSS, así que voy por PostGIS:

SELECT ST_HausdorffDistance(
  (SELECT geometry FROM segments WHERE fid=1),
  ST_Line_Substring(geometry,
        ST_Line_Locate_Point(geometry, (select st_pointn(geometry, 1) from segments)), 
        ST_Line_Locate_Point(geometry, (select st_pointn(geometry, ST_NPoints(geometry)) from segments))
  )
)
FROM tracks WHERE ogc_fid=1

0 votos

Interesante, pero ¡vaya si esa entrada de Wikipedia necesita una edición "legible por humanos"! ¿El ST_HausdorffDistance() devuelve un valor en una unidad determinada (como metros), o da un número no acotado?

1 votos

Si tus geometrías se almacenan en grados, no es un número muy útil. Si se almacenan en UTM, o ST_Transformarlos a UTM como parte de la consulta, el que parece más útil.

0 votos

Estoy jugando con esto en spatialite, que tiene ST_HausdorffDistance() también - parece que da una lectura que es la máximo distancia entre geometrías, lo que estará bien si utilizo suficientes segmentos.

3voto

xenny Puntos 670

A partir del ejemplo anterior, le sugiero que

  1. Crea puntos a lo largo de las líneas verdes a intervalos regulares
  2. Obtén la distancia perpendicular de esos puntos a la línea azul y, por último,
  3. Calcula el error medio en función de esas distancias.

Tenga en cuenta que podría rechazar puntos que estén demasiado lejos (por encima de una tolerancia dada para la peor precisión del GPS) debido a la ausencia de línea azul delante de una línea verde (esto no ocurre en su dibujo, pero podría ser un problema).

Para el primer y el segundo paso, hay dos respuestas excelentes (ambas de Gene) aquí para el paso 1 y aquí para el paso 2 . El último paso no debería ser un problema para usted (usando postgis, o estadísticas de grupo plugin, o python...).

Alternativamente, puedes dibujar la línea perpendicular para cada punto final de la línea verde. A continuación, construye un área a partir de tu conjunto de líneas (por ejemplo, con CÉSPED ), luego divides tu área por la longitud de las líneas verdes => esto te da el error absoluto medio.

0 votos

Buena observación sobre la posible falta de una línea coincidente ("delante"). Voy a probar esto - aunque mis conocimientos de Python pueden no estar a la altura del paso 2 ...

0 votos

Tenga en cuenta que no sólo el desplazamiento marca la diferencia, sino que el rumbo del transecto puede (por ejemplo) girar el marco de observación en guiñada. Los errores de producción asociados a una mala superposición de las imágenes fotogramétricas pueden estar relacionados con estos problemas de encuadre. Por lo tanto, considere también la posibilidad de evaluar el error absoluto del rumbo del transecto (en relación con la ruta planificada) a intervalos regulares de muestreo.

0 votos

Buen comentario. Sin embargo, en el caso de una pista GPS, la orientación de la pista no debería estar sesgada, que yo sepa. Por supuesto, si los transectos planificados no utilizan el mismo método de orientación que el transecto de campo (por ejemplo, brújula frente a mapa), podría haber un sesgo también por cuestiones de proyección). Se puede detectar el sesgo utilizando una regresión entre las coordenadas de los puntos del recorrido planificado y las coordenadas de los puntos GPS correspondientes (comprobando la hipótesis de que la pendiente de la regresión = 0).

1voto

NickB Puntos 168

El siguiente flujo de trabajo es para QGIS y le dará la distancia media de la ruta para cada transecto en metros. Asumo que los datos estarán usando una proyección en metros.

Buffer sus transectos y ruta, por ejemplo, por 1m con Vector > Geoprocessing Tools > Buffer(s) . Ahora tiene dos capas poligonales: los transectos y la ruta. Dé al polígono de la ruta un valor de 1 en su tabla de atributos. Ahora convierta el polígono de la ruta en una trama con Raster > Conversion > Rasterize . Elija el polígono de la ruta como input file y el attribute field al que le hayas dado el valor de 1. Establece el raster resolution in map units per pixel a 1 metro y crea tu trama.

Ahora corre Raster > Analysis > Proximity (Raster Distance) en esta nueva capa de trama "ruta". Elígela como capa input file set Values a 1 y Dist Units a GEO. Esta segunda capa ráster proporciona el valor de la distancia desde el polígono de su ruta y nos permite utilizar la función Raster > Zonal Statistics disponible en el gestor de plugins. Ejecute el plugin con el botón Raster layer a nuestra trama de "distancia" y la trama Polygon layer al polígono de transectos. Ahora tendrá las distancias medias de cada transecto a la ruta listada en la tabla de atributos.

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