5 votos

En python, cómo generar una matriz de coordenadas entre dos puntos

Tal vez estoy buscando a un resuelto la pregunta, pero, mientras que la búsqueda no he encontrado ninguna solución. Necesito construir una matriz de lat, lon valores, basado en dos puntos, y una tasa de muestreo (distancia entre puntos).

Una posibilidad es implementar una solución con numpy, con todas las reglas. Sin embargo, algunos de excepción el tratamiento es necesario, especialmente si mi región está en un poste o a mediados del pacífico zonas, donde una de coordenadas WGS-84 basada en la matriz iba a cambiar de 179.9 a -179.9, por ejemplo.

Me gustaría saber si ya existe una biblioteca que es capaz de generar de forma interactiva una matriz dentro de esos dos puntos, y capaz de controlar los problemas.

5voto

Mat Puntos 196

Ciertamente factible en numpy. Puede que haya una manera mejor de hacer esto, pero pongo la envoltura alrededor de la lógica en un generador de método y la usó para construir una matriz de coordenadas. Este es entonces (onu)ravelled en una serie de coordenadas x,y. Los pueden guardar en csv y carga como una delimitado de la capa.

Este código se utiliza un número de pasos, en lugar de un tamaño de paso, pero usted debería ser capaz de cambiar el pointiterator() método para adaptarse.

import numpy as np

def pointiterator(fra,til,steps):
    '''
    generator, like range() but uses number of steps,
    and handles edge cases (like -180 to +180 crossover)
    '''
    val = fra
    if til < fra:
        til += 360.0
    stepsize = (til - fra)/steps
    while val < til + stepsize:
        if (val > 180.0):
            yield val - 360.0
        else:
            yield val
        val += stepsize

# edge case - crosses antimeridian
xiter = pointiterator(150.0,-120.0,10)
yiter = pointiterator(-20.0,60.0,10)

# standard case
xiter = pointiterator(-20.0,70.0,10)
yiter = pointiterator(-10.0,20.0,10)

# make grid
xx=np.fromiter(xiter,dtype=np.float)
yy=np.fromiter(yiter,dtype=np.float)
xo, yo = np.meshgrid(xx,yy,indexing='xy')

# make array of tuples
tups = np.rec.fromarrays([xo,yo], names='x,y')

# dump points, load into qgis as delimited
print "x,y"
for x,y in np.ravel(tups):
    print "%f,%f" % (x,y)

Tomar en qgis como una delimitado capa y mostrar en un mapa web...

enter image description here

Que muestra un caso estándar, y el caso extremo donde los puntos se superponen la antimeridian.

No maneje el caso extremo en los polos. 91 grados norte no envuelve a 89 grados sur ;) Pero va a trabajar a través de la antimeridian. Para la polar caso de que usted puede ser que necesite para ajustar el generador de salida del clip de los valores > 90 o < -90.

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