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...
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.