10 votos

Crear un archivo Raster de una ASCII grid archivo?

estoy usando un sistema especial para hacer geomagnética encuestas. Su software permítanme salida de la información como archivos de imagen, ASCII o en su propio formato de archivo propietario. Ahora quiero llegar su información en mi SIG (utilizando QGIS) Yo, por supuesto, pueden importar exportar los archivos de imagen, pero me encantaría para importar los datos en bruto para jugar alrededor con la visualización de un poco más. no dependiendo del software original.

Los archivos de este aspecto:

X   Y   Messwert
995.00  1000.00 0.00
995.00  1000.05 0.14
995.00  1000.10 0.28
995.00  1000.15 -0.07
995.00  1000.20 -0.42
995.00  1000.25 -1.26
995.00  1000.30 -2.17

y así sucesivamente..... (looooong archivo ;) )

Cada 0.05 cm de movimiento en X e y contiene un valor de datos, positivos y negativos. Quiero convertir estos datos en un archivo raster, un píxel para cada valor de datos. Mi objetivo es afinar la visualisastion comparable a la de un DEM archivo tiff en mi proyecto de qGIS, sin tener el problema de la exportación de este a través del software original cada vez.

¿Cuál sería la mejor manera de hacer esto? Creo que gdal es el programa que uso yo necesito algo de ayuda. Quizás incluso hay una forma para hacer esto en qgis? Gracias por la ayuda!

Actualización:

Así que finalmente me importan una fracción de mis Datos, ordenar todo a Y. Guardar todo como tiff no era un problema así. Ahora mi siguiente paso fue conseguir este spacialy datos correctos (interms de longitud) en mi proyecto. las coordenadas en el archivo es sólo un local orientado a proyectos del sistema de coordenadas.

La georreferenciación de los creó tiff no era un gran problema, pero resulta un poco molesto problema. después de la georreferenciación de mi cuadrado perfecto obtiene rotatet un poco. resultando en grandes zonas nodata. Mis datos también contiene positivos como los negativos de datos e incluso el cero es importante.

No pude encontrar una manera de conseguir este nodata área de desaparecer, de qgis georeferenciación le da un valor que está contenida en los datos de las áreas. si he de poner esto a la transparencia mis archivos ráster presenta algunos molestos agujeros.

11voto

Dan Puntos 16

Usted puede abrir fácilmente ASCII xyz de datos por triplicado en QGIS en "Agregar Datos Ráster" con un "ASCII de Cuadrícula XYZ (.xyz)" tipo de archivo. También puede convertirla a un formato diferente en virtud de la "Trama > Conversión > Translate (Convertir de formato)" en el menú. Alternativamente, usted puede hacer esto en virtud de la "Trama > Conversión > Rasterizar" menú "valores Separados por Comas (.csv)" tipo de archivo.

5voto

SpliFF Puntos 214

De acuerdo a http://www.gdal.org/frmt_xyz.html:

Las células con las mismas coordenadas deben ser colocados en líneas consecutivas

que no es cumplida por el conjunto de datos.

Así que usted puede

  • complejo de la tabla de datos con un externo programmwe
  • intercambiar X y y en el encabezado (espejo de su trama más tarde)
  • cargar los datos como los datos de punto de uso Delimited text, luego rasterizar.

2voto

Trevor Johns Puntos 126

Yo le golpeó con una secuencia de comandos de python.

import numpy as np
asc = open('yourfilename', 'r')
grid = []
for line in asc:
  line = line.strip()
  if line == 'X   Y   Messwert':
    continue
  grid.append(map(float, line.split(' ')))
asc.close()
grid = np.array(grid)

#naively get number of rows
rows = np.sum(grid[:,0] == grid[0,0])

#naively get number of colums
cols = np.sum(grid[:,1] == grid[0,1])

#get values
vals = grid[:, 2]

#pad some nodata values if the total number of elements does not form
#a nice rectangle with exactly rows*cols number of cells.
if len(vals) != rows * cols:
   vals = np.hstack((vals, -9999 * np.ones(rows * cols - len(vals))))

#turn data into 2-d matrix(column-wise using order='F')
value_grid = np.reshape(vals, (rows, cols), order='F')

#write out dummy ascii raster file:
out = open('raster.asc', 'wb+')
out.write('ncols         %i\n' % cols)
out.write('nrows         %i\n' % rows)
out.write('xllcorner     %i\n' % 1111)#dummy or put your own
out.write('yllcorner     %i\n' % 2222)#dummy or put your own
out.write('cellsize      %i\n' % 0.05)
out.write('NODATA_value  %i\n' % -9999)

np.savetxt(out, value_grid, fmt='%%.%2f')
out.close()

por supuesto, usted puede cargar el archivo con una colección de comandos que iba a ahorrar un par de líneas y usted puede combinar algunas operaciones, pero mi intención es dar a algo legible...y espero que útil. Por favor, disculpe los errores de sintaxis, que no se ha ejecutado a mí mismo.

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