2 votos

¿Convertir latlngs en archivo de imagen?

Tengo un enorme archivo CSV de latitudes y longitudes WGS84, y me gustaría convertirlos en un gran archivo de imagen que pueda imprimir (siendo cada punto un píxel de la imagen).

¿Cuál es la mejor manera de hacerlo?

Actualmente estoy planeando convertirlos en este/norte y luego usar imagemagick para imprimir un círculo en cada punto, siguiendo el enfoque adoptado por este autor (en el script imagemagick al final del post).

Pero me pregunto si hay una forma más sencilla. No soy un experto en SIG, y tal vez incluso hay una biblioteca geoespacial dedicada a hacer esto?

ACTUALIZACIÓN

Tal y como se solicitó, aquí hay una muestra de los datos. Los puntos están todos dentro del Reino Unido, pero no forman una cuadrícula regular.

Time,latitude,longitude
2014-12-27 18:35:10,51.7438644,-2.2094204
2014-12-27 18:34:08,51.7438657,-2.2094219
2014-12-27 18:33:06,51.7438657,-2.2094219
2014-12-27 18:32:04,51.7438689,-2.2094198
2014-12-27 18:31:03,51.7438716,-2.2094109
2014-12-27 18:30:01,51.7438537,-2.2094211

MÁS ACTUALIDAD

Para aclarar, estoy buscando una imagen grande que pueda imprimir. Los puntos no están en una cuadrícula regular: Esperaba poder convertir cada punto en un único píxel negro sobre un fondo transparente.

2voto

Lucas Puntos 128

Dado que los puntos no forman una cuadrícula regular, se puede utilizar gdal_rasterize .

Configure una cabecera VRT de esta manera:

<OGRVRTDataSource>
    <OGRVRTLayer name="test">
        <SrcDataSource>test.csv</SrcDataSource> 
    <GeometryType>wkbPoint</GeometryType> 
    <GeometryField encoding="PointFromColumns" x="longitude" y="latitude" z="Time"/> 
    </OGRVRTLayer>
</OGRVRTDataSource>

GDAL no escribe directamente en PNG, pero puede crearlos copiando rásteres existentes, así que primero hay que pasarlos a tiff.

gdal_rasterize -ot byte -burn 255 -burn 100 -burn 100 -burn 255 -tr 0.01 0.01 -l test test.vrt test.tif

El comando anterior crea un tiff de 4 bandas con las tres primeras bandas mostrando los puntos en un rojo claro (RGB 255 100 100), puede utilizar cualquier valor RGB que desee y la cuarta banda se utilizará como el canal de transparencia (alfa) del PNG.

Querrá jugar con los parámetros -tr, 0.01 0.01 es aproximadamente 1.1km x 1.1km píxeles en grados decimales WGS84. Puede utilizar el parámetro -ts width height para especificar el número de filas/columnas en la salida.

A continuación, convierte tu tiff en un PNG transparente:

gdal_translate -of png -mask 4 test.tif test.png

2voto

SpliFF Puntos 214

Utilizando QGIS, la forma más sencilla es cargar los datos como delimited text seleccione EPSG:4326 WGS84 como CRS y guarde el resultado con Project -> Save as image .

El Raster -> Conversion -> Rasterize es un poco más sofisticada, pero como tus puntos están cerca unos de otros, necesita reproyectarse a un CRS proyectado como la zona UTM 10 primero para obtener un tamaño de celda razonable. Usted necesita una columna adicional de enteros para el contenido de la celda también. Desafortunadamente, los puntos mínimos y máximos se omiten con este método.

Otra opción es Vector -> Research Tools -> Vector grid alrededor de la extensión del lienzo con la opción Create as polygons y un tamaño de celda superior a 0,1 metros, entonces ejecute Vector -> Analyze -> Points in polygons en él, y finalmente Raster -> Conversion -> Rasterize en la capa de polígonos.

Una tercera posibilidad es utilizar el SAGA Shape to grid de la caja de herramientas de procesamiento. Vigila el tamaño de las celdas, el predeterminado es demasiado grande.

2voto

Jay Bazuzi Puntos 194

Aquí hay un ejemplo totalmente reproducible con salida:

set.seed(310366) # so we get the same random numbers
library(raster)
uk = getData("GADM",country="GBR", level=0)
bbox(uk) # tells us the bounds (I think it goes as far west as Rockall)
# make 200 points over that area:
pts = cbind(runif(200,-13,1), runif(200,50,60))

Ese código ha hecho la configuración básica.

Ahora haz una trama de 100x100 con los límites aproximados. Ajústalos bien para la cuadrícula que quieras:

r = raster(xmn=-14,xmx=1.8,ymn=49,ymx=61, ncol=100,nrow=100)

Si quiere que sea transparente, proceda, si no, ponga primero todas las celdas a cero con r[]=0 .

Ahora establece cualquier celda con un punto en ella a 1:

r[cellFromXY(r,pts)]=1
plot(r)
plot(uk,add=TRUE)

100x100 raster over UK

Claro que si lo haces con 1000x1000 los píxeles serán pequeños y no verás mucho a no ser que tengas muchos puntos.

Para crear un PNG con transparencia, primero haga un GeoTiff:

writeRaster(r, "uk.tif", format="GTiff", overwrite=TRUE, datatype="INT2U")

A continuación, utilice ImageMagick "convertir" en el prompt del shell para crear un PNG con el blanco hecho transparente:

convert -transparent white uk.tif uk.png

Ignora los avisos de etiqueta desconocida - el conversor no entiende los bits geográficos extra del Tiff. El resultado es un PNG transparente, aquí ampliado contra un tablero:

transparent png

¿qué más quieres?

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