Loading [MathJax]/jax/element/mml/optable/BasicLatin.js

6 votos

Corte información de profundidad en la trama. Cálculo de volumen en Qgis

Estoy tratando de calcular hábitat volumen de alrededor de 30 poblaciones de peces en Qgis. He áreas de hábitat (archivos shape) y Batimétrico de la información (.archivo tif). Yo creo que se puede calcular el volumen total de agua por cada área de hábitat de uso de la r.modulo de volumen en el QGIS Hierba plugin (después de haber recortado el archivo tif para representar a cada uno exacta de la zona de hábitat).

Sin embargo, mi problema es que mi poblaciones de peces tienen un determinado rango de profundidad. En otras palabras, ellos no saben nadar, a lo largo de todo el volumen de agua en su área de hábitat.

Mi pregunta es. Puedo calcular el volumen de la zona de hábitat del nivel del mar a la planta, pero ¿cómo puedo cortar todo el volumen por debajo y por encima del rango de profundidad de caldo de pescado. Por ejemplo, si un caldo de pescado tiene un rango de profundidad de 50 a 200 metros, quiero cortar todo el volumen por encima de 50 metros y por debajo de los 200 metros.

Aquí están las Propiedades que se encuentran debajo de las capas, propiedades --> Metadatos

Controlador GDAL proveedor GTiff GeoTIFF

Descripción De Conjunto De Datos /Usuarios/aninahenggeler/Documentos/Humboldt/Tesis /de Alta mar de la propuesta/GIS y Google Earth/Batimetría/Grid - geotiff/ETOPO1_Bed_g_geotiff de la FAO área de 27.tif NC_GLOBAL#Convenciones=COARDS/CF-1.0 NC_GLOBAL#GMT_version=4.4.0 NC_GLOBAL#historia=grdreformat ETOPO1_Bed_g_gdal.grd ETOPO1_Bed_g_gmt4.grd=ni NC_GLOBAL#node_offset=0 NC_GLOBAL#title=ETOPO1_Bed_g_gmt4.grd

x#actual_range=-180, 180

x#long_name=Longitud

x#de unidades=grados

y#actual_range=-90, 90

y#long_name=Latitud

y#de unidades=grados

z#_FillValue=-2147483648

z#actual_range=-10898, 8271

z#long_name=z

La banda 1

NETCDF_VARNAME=z

STATISTICS_MAXIMUM=4208

STATISTICS_MEAN=-1187.2601375688

STATISTICS_MINIMUM=-5808

STATISTICS_STDDEV=1836.8780130609

Dimensiones

X: 7035 Y: 3324 Bandas: 1 Origen -48.1083,89.9583 Tamaño De Píxel 0.0166667,-0.0166667 No Hay Datos De Valor 0

Tipo De Datos

Int16 - Dieciséis bits con signo entero

Pirámide panoramas

La Capa De Sistema De Referencia Espacial +proj=longlat +datum=WGS84 +no_defs

La capa de Medida (capa original de la fuente de proyección) -48.1083333333333201,34.5583333333333584 : 69.1416666666666799,89.9583333333333428 Banda La banda 1 La Banda No 1 No Hay Estadísticas No hay estadísticas recogidas todavía

EL USO DE CALCULADORA RÁSTER:

Por favor, consulte la siguiente expresión que se utiliza. Tenga en cuenta que esta expresión ha creado una nueva trama que aparece vacía (2ª captura de pantalla a continuación).

"ETOPO1_Bed_g_geotiff@1(@z#actual_range>-200)(-200+50)+(@z#actual_range<=-200)(@z#actual_range>-50)*(@z#actual_range+50)"

enter image description here

enter image description here

4voto

sashkello Puntos 325

Yo creo que se puede utilizar algún mapa de álgebra (raster > raster calculator) antes de la preforma en el volumen de las mediciones en la hierba.

Suponiendo que los datos batimétricos de utilizar los valores positivos representan la profundidad del mar, y con su ejemplo, para el rango de 50 la min_depth y 200 la max_depth. Para cada una de las celdas ráster es necesario "eliminar" cualquier cosa por debajo de los 200 y por encima de los 50. Usted tiene 3 posibles situaciones:

  1. su celda de la profundidad es mayor que la max_depth

    (@batimetría > 200)

  2. su celda de la profundidad en el min_depth - max_depth gama

    (@batimetría <= 200) * (@batimetría >= 50)

  3. su celda de la profundidad es menor que su min_depth

    (@batimetría < 50)

En el caso 1 el tamaño de la columna de agua será el tamaño de nuestra gama:

(@bathymetry > 200.0) * (200.0 - 50.0)

En el caso 2 la "columna de agua" es de su bathimetry profundidad hasta el valor mínimo de la gama:

(@bathymetry <= 200.0) * (@bathymetry > 50.0)*(@bathymetry - 50.0)

En el caso 3 no es útil "columna de agua" para su especie, por tanto, sería:

(@bathymetry <= 50)*0.0

Desde el 3 de los casos nunca se produce al mismo tiempo, todo lo que necesitamos es la suma de las expresiones:

(@bathymetry > 200.0) * (200.0 - 50.0) + (@bathymetry <= 200.0) * (@bathymetry > 50.0)*(@bathymetry - 50.0) + (@bathymetry <= 50)*0.0

Desde la última expresión es siempre cero, no hay punto en la inclusión de:

(@bathymetry > 200.0) * (200.0 - 50.0) + (@bathymetry <= 200.0) * (@bathymetry > 50.0)*(@bathymetry - 50.0)

Y la versión genérica de la expresión sería:

(@bathymetry > max_depth) * (max_depth - min_depth) + (@bathymetry <= max_depth) * (@bathymetry > min_depth)*(@bathymetry - min_depth)

Después de esto, usted puede utilizar el ráster de salida en r.el volumen de la suma de todos "agua columnas de" valores

1voto

GriffinHeart Puntos 187

Hay otra HIERBA módulo que usted puede encontrar corresponda a su caso: v.rast.stats. Este módulo crea una tabla de estadísticas univariadas para cada polígono en una capa vectorial, a partir de los valores de una trama. Usted obtendrá: suma=el total de todos los valores de celda con cada polígono, que es su hábitat volumen. Y para libre usted también tendrá max, min, media, sexual, etc.

Entonces, ¿qué Alexandre es lo que sugiere, si entiendo correctamente, es crear 30 nuevos batimétrico rásteres, con específica min y max profundidades para cada una de las 30 especies de peces. Por ejemplo, para el caldo de pescado que vive sólo entre 50 y 200 metros, tendrá una nueva trama con NULL cuando el original de la batimetría es <=50 o >=200, y el real batimétrico de profundidad para todas las otras células entre esas profundidades.

Ahora, el uso de la v. rast.estadísticas del módulo con cada uno de los vectorial de polígonos para cada población de peces, y la nueva adaptación bathemtric rásteres usted debería ser capaz de obtener su hábitat volumen.

Por CIERTO, el uso de herramientas de bucles en un linux shell bash o python, usted podría conseguir todo esto para que se ejecute en un lote. Asumiendo que usted tiene un archivo CSV con la lista de las especies de peces y su min/max profundidades. Podría ser algo como:

# First *set your region* of interest
g.region -p n=<...> s=<...> e=<...> w=<...> res=<...>
# Run the loop to create species specific bathy rasters
# I'm assuing you have the polygons in vector files named by the species
# You probably will have to tweak here
while read species, min, max; do \
    r.mapcalc "bathy_$species = if(bathymetry<=$max && bathymetry>=$min, bathymetry, null() ) \
    v.rast.stats vector=habitat_$species raster=bathy_$species colprefix=$species \
done << min_max_list.csv

HTH

1voto

Trevor Johns Puntos 126

Yo usaría la SAGA o python.

SAGA:

-importación de ráster grid

-reclasificar todos los puntos mayor que el min-profundidad NODATA

-reclasificar todos los puntos menos que max-depth a NODATA

en este punto usted puede visualizar su banda de hábitat.

a continuación, puede hacer varias cosas diferentes, pero me gustaría:

-crear la constante de red con valor min-profundidad (no, max-depth es el significado más profundo)

-rejilla de cálculo: constante en la cuadrícula de su reclasificados de la cuadrícula.

en este punto, que es básicamente la misma, pero todos los valores positivos, con valores más altos, siendo más profunda.(en esencia, esta trama es el grosor de su hábitat banda en cualquier momento) estos dos pasos no son realmente necesarios..pero puede ayudar en averiguar lo que debe restarse de qué, etc.. a Veces la gente como números positivos a trabajar.

-entonces, copiado de: http://sourceforge.net/p/saga-gis/discussion/790705/thread/16b70fdf la Geoestadística-Redes / Zonal de la Cuadrícula de Estadísticas (simplemente crear una "zona de cuadrícula", es decir, una máscara con identificadores únicos (en el caso de una red con el mismo valor en todas las células) y se alimentan de ella junto con su cuadrícula "analizar" para el módulo. La tabla resultante contiene una columna con la suma de todos los valores de celda de cuadrícula dentro de cada zona).

lo que esto significa es que usted necesita una cuadrícula que delimita las diferentes zonas y las estadísticas se dividirá por la zona. usted obtendrá una suma que se multiplica por el área de píxel.

Python:

Si usted tiene python/numpy experiencia:

#let depth_raster be your original depth raster in numpy form
#note both min_depth and max_depth are negative

habitat_mask = (depth_raster < min_depth) & (depth_raster > max_depth)

habitat_points = depth_raster[habitat_mask]

habitat_thickness = - (habitat_points - min_depth)

habitat_volume = np.sum(habitat_thickness) * pixel_area

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