5 votos

GDAL (u otro equivalente de código abierto) de la herramienta Point To Raster de Arc

Estoy tratando de convertir una secuencia de comandos de python que se basa en arcpy en la que sólo se basa en el código abierto de los módulos, pero estoy teniendo algunos problemas. La mayor parte de mi procesamiento se encuentra en una herramienta " Arco "de Punto a Ráster." El objetivo es tomar un archivo csv con el lat/long coords y convertirlo en un mapa de bits, donde cada valor de la celda es el número de puntos contenidos dentro de la celda. Cuando soy capaz de utilizar arcpy, el flujo de trabajo se parece a esto:

Make XY event layer from csv of points -->
Use Event layer as input in Point To Raster tool, with cell assignment = COUNT, specifying spatial extent and cellsize -->
Mask out NoData values -->
Write output to .tif

Esto funciona muy bien, y me da el resultado de mi deseo, pero ahora tengo que escribir el mismo guión sin arcpy. He encontrado gdal herramientas que funcionan para todo, excepto el proceso principal: Punto a Ráster. ¿Sabes de algún gdal de utilidad (o de mala gana, alguna otra herramienta de código abierto) que podrían hacer lo del Arco de Punto a Ráster herramienta está haciendo? El 2 gdal herramientas que parecen que se podría lograr esto son:

  1. gdal_grid (http://www.gdal.org/gdal_grid.html) -Esta herramienta no pretende hacer exactamente lo que yo quiero hacer, aunque lleva un conjunto de puntos (shapefile, o un archivo csv escrito como un VRT**) y convertirlo en una trama de cuadrícula. Puedo especificar el alcance de la gridd junto con su resolución, que es importante. También hay una opción para configurar la celda de la cuadrícula de valores basados en datos métricas, con 'contar' es uno de ellos. Sin embargo, en el recuento de métricas que afirma que "Un número de puntos de datos se encuentran en la cuadrícula de nodo elipse de búsqueda." ¿Qué significa el "grid nodo elipse de búsqueda"? No puedo asignar valores a partir de un número de puntos de datos que se encuentran en cada celda de la cuadrícula'? Hay una diferencia?

  2. gdal_rasterize (http://www.gdal.org/gdal_rasterize.html) -Esto se ve un poco menos prometedor, o tal vez eso es sólo porque no me terminaba de entender. En resumen, la herramienta de "quemaduras geometrías vectoriales (puntos, líneas y polígonos) en la trama de la banda(s) de una imagen ráster", que suena como lo que necesito, aunque no hay ninguna palabra clave para especificar el conteo de puntos como el valor para ser quemado, así que no sé.

Un par de cosas más:

  • **Me iba a poner a prueba utilizando gdal_grid, pero no puede encontrar en cualquier lugar ¿cómo convertir un archivo CSV a una VRT en python. Sé que es posible por la mano, cada tutorial/página de ayuda que puedo encontrar, dice algo así como: "Dicen que usted tiene un archivo CSV con el lat/long, usted puede escribir una VRT archivo de CSV", a continuación, salta a la derecha en "he Aquí lo que el archivo VRT parece que para el CSV." Pero, ¿CÓMO puedo escribir en este archivo VRT, en python? Varias páginas de decir que para descargar un FW toolkit (o algo) para crear el CSV, pero necesito hacer esto dentro de python como estoy automatizar el proceso para cientos de CSVs. Traté de ogr2ogr pero tengo el error: "VRT controlador no es compatible con los datos de la fuente de la creación," así que estoy en una pérdida. Podría convertir csv a shapefile o algún otro OGR-formato reconocido, pero la VRT es atractivo porque el shapefile/lo que sea que se crearía sería muy, muy grande, y es probable que tome un tiempo para crear. Lo que me lleva a...

  • Cada csv tiene un obsenely gran cantidad de puntos: ~78 millones de euros. Así python/numpy ni siquiera leerlos sin que se caiga. Además, el raster resultante será global, con buena resolución (1km), por lo que un hack que manipula las coordenadas o bucles a través de los puntos de las células está fuera de la cuestión.

No estoy seguro de si debo poner mi CSV para VRT pregunta en un hilo separado, así que mis disculpas si esto es demasiado para una sola pregunta.

Pensamientos/sugerencias?

1voto

GreyCat Puntos 146
  • Respuesta a cómo convertir el csv en un archivo vrt

Para los archivos CSV con las coordenadas xey de las columnas "x" e "y", el archivo VRT resultante es:

 <OGRVRTDataSource>
    <OGRVRTDataSource>
        <OGRVRTLayer name="points">
        <SrcDataSource>/path/your.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>EPSG:...</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="x" y="y"/>
   </OGRVRTLayer>
</OGRVRTDataSource>
 

Así que en Python con el módulo estándar xml.etree.ElementTree , por ejemplo (hay muchos otros módulos):

 import xml.etree.ElementTree as ET 
root = ET.Element("OGRVRTDataSource")
layer = ET.SubElement(root, "OGRVRTLayer")
layer.attrib['name'] = "points"
source = ET.SubElement(root, "SrcDataSource")
source.text = "/path/your.csv"
type = ET.SubElement(root, "GeometryType")
type.text = "wkbPoint"
srs = ET.SubElement(root, "LayerSRS")
srs.text = "EPSG:...."
geom_fld = ET.SubElement(root, "GeometryField")
geom_fld.attrib["encoding"]= 'PointFromColumns'
geom_fld.attrib["x"]= 'x'
geom_fld.attrib["y"]= 'y'
# save the file
file  = ET.ElementTree(root)
file.write("test.vrt")
 

0voto

timothymh Puntos 5183

Para la parte 1 de su pregunta: El gdal_rasterize función es la que usted desea - usted puede especificar el campo para grabar en el uso de la opción-a o la opción 3d dependiendo de cómo su archivo está estructurado. Y,- te, -ts y tr opciones permiten especificar la cuadrícula de la extensión y la resolución (sólo tiene que tirar de estos valores directamente desde el original de la cuadrícula para mantener todo alineado).

Para la parte 2: Me gustaría subconjunto de la red global en x lat/long cuadro de extensiones, y sacar los puntos que caen dentro de esa extensión del archivo csv a través de cada ciclo (en lugar de la conversión de la totalidad de csv a los puntos de todos a la vez, leer línea por línea y tire sólo los puntos que usted necesita para ese subconjunto en una estructura de datos, a continuación, convertir lat/long para los puntos y los quemaba en una trama). Una vez que hayas terminado de procesar, mosaico de los rásteres individuales produce de nuevo en un solo archivo.

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