5 votos

QGIS afín - forma de la ecuación

Yo estoy a la merced de un gobierno de autoridad que han proporcionado la utilidad de la información en un formato de cad con un 0,0 origen y una tontería de la cuadrícula. Alrededor de una docena de archivos de la cuadrícula y el origen son completamente arbitrarias.

Para hacer un afín en una capa vectorial en QGIS, propongo el uso de la Geoprocesamiento Plugin - Vector de Transformación Afín.

Pero mis habilidades matemáticas que me traiciones....

La coincidencia de puntos para el control de tierra son

pt1 raw 6.42775 3.61140
pt1 gcp 567742 6450622

pt2 raw 2.7524 4.1539
pt2 gcp 562285 6450858

pt3 raw 6.0293 6.4965
pt3 gcp 566709 6454802

(editado x 2 , ahora hay 3 puntos) Un poco áspero en las ubicaciones correctas.

El control de tierra es un formato UTM. ¿Cuál sería la forma de la ecuación, así como yo puede configurar en una hoja de cálculo y laboriosamente?

La entrada en el plugin es la Escala de Escala X Rotación x X Y (no puedo esperar) Traducción X Y Traducción

Es este el más elegante de flujo de trabajo?

muchas gracias

6voto

cjstehno Puntos 131

Ajuste de ecuaciones a los datos es un procedimiento estadístico, por lo que es mejor para el uso de software estadístico para el propósito. Potente, fácil de usar software libre, disponible para todos en el R Proyecto.

Debido a que la muestra de datos son demasiado escasos para mostrar todas las capacidades esenciales de R, para ilustrar su uso, vamos a agregar un cuarto enlace correspondiente a la "cruda" (fuente) en el punto (5,5) a la "bpc" (destino) punto (565440.0, 6452443.9). Aunque R puede leer muchos formatos de archivo, con un pequeño número de enlaces es sencillo de escribir, lo cual puede ser hecho como este, con dos líneas de código:

source <- t(matrix(c(6.42775,3.61140,  2.7524,4.1539,  6.0293,6.4965, 5.0,5.0), nrow=2))
dest <- t(matrix(c(567742,6450622,  562285,6450858,  566709,6454802, 565440.0,6452443.9), nrow=2))

Estos crear matrices en la que cada fila muestra un par de coordenadas. Como un cheque, usted puede obtener una mejor forma de matriz como la visualización de estos datos por volver a escribir los nombres de las variables en el símbolo del sistema (>). Por ejemplo:

> source
        [,1]   [,2]
[1,] 6.42775 3.6114
[2,] 2.75240 4.1539
[3,] 6.02930 6.4965
[4,] 5.00000 5.0000

Ahí están, uno por línea. Independientemente, una vez que los enlaces en R en esta forma, la búsqueda de las mejores (mínimos cuadrados) ajuste es muy sencillo:

lm(dest ~ source)

Eso es todo allí está a él. Aquí es lo que se ve el resultado:

Coefficients:
             [,1]       [,2]     
(Intercept)   558910.8  6444331.5
source1         1461.7      152.8
source2         -156.1     1469.9

Esta transformación de la matriz se multiplica origen de coordenadas en el derecho. Un ejemplo que aparece a continuación.

Es una buena idea para investigar la solución más estrechamente. Volvamos a empezar, esta vez de guardar el ajuste:

a <- lm(dest ~ source)

Resumen de los resultados para obtener más información:

> summary(a)
Response Y1 :

Call:
lm(formula = Y1 ~ source)

Residuals:
      1       2       3       4 
-0.3227 -0.4617 -0.5605  1.3449 

Coefficients:
              Estimate Std. Error  t value Pr(>|t|)    
(Intercept)  5.589e+05  4.062e+00 137586.8 4.63e-06 ***
source1      1.462e+03  5.642e-01   2590.7 0.000246 ***
source2     -1.561e+02  7.387e-01   -211.3 0.003013 ** 
---
Signif. codes:  0 ‘***' 0.001 ‘**' 0.01 ‘*' 0.05 ‘.' 0.1 ‘ ' 1 

Residual standard error: 1.562 on 1 degrees of freedom
Multiple R-squared:     1,      Adjusted R-squared:     1 
F-statistic: 3.447e+06 on 2 and 1 DF,  p-value: 0.0003809 
<SNIP>

Este es el resultado de la x coordenadas sólo. El extirpados de material es otro panel de salida encabezada por la "Respuesta " Y2"; es para que los y las coordenadas. En cada panel se desea comprobar que el residual de error estándar (expresado en coordenadas del mundo, generalmente metros) es aceptablemente pequeño. Entonces quieres comprobar que los residuos de los mismos (que se enumeran en la parte superior) de forma individual dentro de su rango de tolerancia para un ajuste: estas son las diferencias entre los datos y los valores pronosticados. El residual error estándar nos dice que el típico discrepancia entre una cocina equipada coordenada x y la intención (gcp) de la coordenada x es de alrededor de 1,56 metros.

Como ustedes saben, relativamente alta precisión numérica es necesario en este tipo de trabajo. Este resumen no tiene la suficiente precisión para, digamos, un mundo de archivo. En su lugar, extraer los coeficientes con

> print(a$coefficients, digits=10)
                      [,1]            [,2]
(Intercept) 558910.7522289 6444331.5258144
source1       1461.6779888     152.7722764
source2       -156.0974128    1469.8705760

Como un ejemplo de cómo estos coeficientes de trabajo, podemos preguntar, R para realizar la multiplicación de la matriz de encontrar donde (por ejemplo) el punto (5,5) va, recordando que el intercepto es manejado por la ampliación de estas dos dimensiones de los vectores de tres dimensiones mediante la inserción de un 1 en el principio:

> print(c(1, 5,5) %*% a$coefficients, digits=10)
            [,1]       [,2]
[1,] 565438.6551 6452444.74

La primera coordenada es de aproximadamente 1.35 baja y el segundo es acerca de 0.84 alta: estos son los aspectos negativos de la denuncia de los residuos.

Mucho, mucho más se puede hacer aquí. Por ejemplo, una matriz de "raw" puntos ahora puede ser transformada en un solo mando, el más complejo de ajuste puede ser hecho (como el polinomio se ajusta de orden superior); etc. El poder, la flexibilidad y la precisión de este software recomiendan como un propósito general de la solución a este problema de la transformación de los puntos de un sistema de coordenadas a otro.


Por cierto, la repetición de estos análisis sólo con los tres puntos en el ejemplo se genera la matriz de transformación afín

                           [,1]            [,2]
(Intercept)      558915.7606071 6444328.3973676
1                  1463.4093542     151.6907917
2                  -158.5614756    1471.4097348

R ofrece servicios útiles para el análisis de tales matrices. Por ejemplo, podemos constatar que esta transformación no un Euclidiana de movimiento (es decir, una composición de un uniforme de escala, rotación y traslación). Como un ejemplo, la Descomposición de Valor Singular se obtiene a través de

m <- tail(a$coefficients, 2) # The scale-rotation-skew portion of `a`
a.svd <- svd(m)

El resultado tiene tres partes: una rotación, dos factores de escala, y otro de rotación. Los factores de escala son diferentes:

> a.svd$d
[1] 1480.859 1470.313

Por lo tanto, podemos pensar que esta transformación como la inclusión de un reescalado factor que varía entre 1470 y 1481, dependiendo de la orientación. Usted puede trabajar con las orientaciones de la enfermedad vesicular porcina si te gusta analizando a.svd$v y a.svd$u, pero en los SIG esto rara vez se hace: simplemente queremos obtener un buen ajuste. Lo que los diferentes factores de escala en la SVD nos dicen, sin embargo, es que su plugin de QGIS no podrá ser de hasta el trabajo. Busca una solución que le permite especificar los coeficientes de la matriz de transformación (a) directamente.

1voto

¡Uy, lo hizo siempre dos puntos. Creo que la transformación parámetros podría parecer esto:

Escala: x: 1470.214334304364 y: 1470.214334304364

Rotación: 5.920175054087165

Traducción: x: 567735.57225 y: 6450618.3886

Si se puede hacer la rotación complemento afín (que nunca he podido hacer) podría ser vale la pena probar estos. Definitivamente parece ser cierta rotación.

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