9 votos

¿Usando la librería PROJ.4 para transformar de coordenadas del sistema de coordenadas locales al sistema de coordenadas global utilizando puntos de control de tierra?

Tengo una nube de puntos cuyas coordenadas son con respecto a un sistema de coordenadas local. También tengo tierra puntos de control con valores GPS. ¿Puedo convertir a las coordenadas locales a un sistema global de coordenadas usando PROJ.4 o cualquier otra biblioteca?

Cualquier código en Python para el anterior problema indicado sería de gran ayuda.

7voto

ayaz Puntos 6910

Usted parece estar buscando para llevar a cabo una transformación afín entre el sistema de coordenadas local y un sistema de coordenadas georreferenciadas.

Afín transforma causantes de todos los sistemas de coordenadas y puede ser representada por la ecuación de matriz a continuación.

|x_1 y_1 1| |a d|   |x'_1 y'_1|
|x_2 y_2 1| |b e| = |x'_2 y'_2|
|x_3 y_3 1| |c f|   |x'_3 y'_3|
input     transform.  output
coords    matrix      coords
(n x 3)   (3 x 2)     (n x 2)

Sin embargo, usted tiene dos etapas problema.

  1. Encontrar la matriz de transformación a partir de la conocida emparejamientos de entrada y salida de coordenadas (puntos GPS y sus respectivas ubicaciones en su localmente definidos por la red).
  2. El uso de esta matriz de transformación para la georreferencia de su nube de puntos.

Proj.4 destaca en #2: la transferencia entre sistemas de coordenadas georreferenciadas con conocidas las matrices de transformación. No puede a mi conocimiento se utiliza para encontrar una matriz de transformación de datos de punto. Sin embargo, usted puede hacer toda la cosa fácilmente mediante el uso de un poco de luz de álgebra lineal (mínimos cuadrados de la matriz de inversión) en Numpy. He utilizado una versión de esta clase para la reducción de los datos a partir de varios estudios de campo:

import numpy as N 

def augment(a):
    """Add a final column of ones to input data"""
    arr = N.ones((a.shape[0],a.shape[1]+1))
    arr[:,:-1] = a
    return arr

class Affine(object):
    def __init__(self, array=None):
        self.trans_matrix = array

    def transform(self, points):
        """Transform locally projected data using transformation matrix"""
        return N.dot(augment(N.array(points)), self.trans_matrix)

    @classmethod
    def from_tiepoints(cls, fromCoords, toCoords):
        "Produce affine transform by ingesting local and georeferenced coordinates for tie points"""
        fromCoords = augment(N.array(fromCoords))
        toCoords = N.array(toCoords)
        trans_matrix, residuals, rank, sv = N.linalg.lstsq(fromCoords, toCoords)

        affine =  cls(trans_matrix) # Setup affine transform from transformation matrix
        sol = N.dot(fromCoords,affine.trans_matrix) # Compute model solution
        print "Pixel errors:"
        print (toCoords - sol)
        return affine

Puede ser utilizado como tal:

transform = Affine.from_tiepoints(gps_points_local,gps_points_geo)
projected_data = transform.transform(local_point_cloud)

projected_coordinates ahora está en WGS84, UTM, o cualquiera que sea el sistema de coordenadas de su registrados por el GPS. Una característica importante de este método es que puede ser utilizado con cualquier número de puntos de fijación (3 o más) y las ganancias de la precisión de las más puntos de fijación se utilizan. Se trata de encontrar el mejor ajuste a través de todos sus puntos de fijación.

0voto

SpliFF Puntos 214

Siempre es más fácil identificar el sistema de coordenadas local, como lo hicimos aquí:

Proyección estereográfica de WGS84 elipsoide en un plano [python]

GDAL es ahora abel para transformar los datos de vector usando puntos GCP. Si puede compartir algunos de sus datos, nos podríamos hacer ejercicio.

0voto

Celso Puntos 66

Función de la transformación de pasto hace exactamente lo que necesita, aunque no es python o Proy basado en el requerimiento:

http://Grass.OSGeo.org/grass65/manuals/g.Transform.html

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