8 votos

Consejos para la compresión de archivos Shapefile complejos

Estoy buscando algunos consejos sobre cómo puedo simplificar este shapefile muy detallado para ser utilizado en última instancia para la web (como topojson) como un mapa de calor interactivo. Fue creado originalmente a partir de un archivo raster (geotiff - http://ecotope.org/anthromes/v2/data/ ). Creo que habrá que masajear un poco más antes de utilizar un algoritmo Douglas-Peucker o Visvalingam. Creo que la mejor manera de conseguirlo sería de forma inteligente fusionar las características en función del valor del atributo que contiene cada una. No estoy seguro de cuál es la mejor manera de conseguirlo. Tengo la ligera sospecha de que "disolver" es lo que necesito, pero QGIS sólo se congela cada vez que lo intento.

Estoy trabajando con las utilidades gdal de la línea de comandos y QGIS.

He adjuntado algunas capturas de pantalla a continuación para que os hagáis una mejor idea de lo que estoy tratando.

enter image description here

enter image description here

enter image description here

6voto

Blair Conrad Puntos 56195

Eso sería una gran disolución. Podrías probar a simplificar primero en la versión rasterizada, y luego convertirla en vectorial y hacer una nueva simplificación. http://docs.qgis.org/2.6/en/docs/training_manual/rasters/terrain_analysis.html#moderate-fa-simplifying-the-raster

Un par de formas de simplificar los vectores mediante gdal: en ogr2ogr puede utilizar el comando -simplify # en cualquier dato, y el comando -lco COORDINATE_PRECISION=# para convertir a geojson

6voto

Jay Puntos 521

Actualización

Me gustaría ampliar mi solución un poco aquí para cualquiera que pueda estar teniendo un problema similar. @neuhausr ha dado en el clavo. Me di cuenta de que establecer el umbral a un número bajo, digamos 10 o 50 no era suficiente, mientras que un número más alto lo comprimiría demasiado dejando algunas áreas sin tocar. Curiosamente, descubrí que si se comprime con el mismo umbral bajo una y otra vez, el resultado es mucho más consistente. Básicamente, dar el archivo de múltiples pases. Así que escribí un pequeño bash script para ayudarme y estoy obteniendo grandes resultados a pesar de lo hacky que puede ser. Ajusta la COMPRESIÓN y el UMBRAL a tu gusto.

    #!/bin/bash

    # Which raster to compress.
    ORG_FILE=./raw/anthromes/1700/anthro2_a1700.tif

    # Where to output the new file.
    TMP_DIR=./tmp

    # Total amount of compression that should be done.
    COMPRESSION=800

    # Threshold for each iteration.
    THRESHOLD=50

    # Process...
    rm -rf $TMP_DIR
    mkdir -p $TMP_DIR
    gdal_sieve.py -st 50 -4 $ORG_FILE $TMP_DIR/output-"$THRESHOLD".tiff
    _CUR=$THRESHOLD
    while [ $_CUR -le $COMPRESSION ]; do
        let _PREV=$_CUR
        let _CUR=$_CUR+$THRESHOLD
        echo "Compressing output-$_PREV.tiff into $_CUR.tiff"
        gdal_sieve.py -st $THRESHOLD -4 "$TMP_DIR/output-$_PREV.tiff" \
            "$TMP_DIR/output-$_CUR.tiff"
    done

Los resultados son los siguientes:

Original (sin compresión):

enter image description here

Criba básica con 2100 trillas:

enter image description here

Usando bash script 21 pases de umbral 100 (2100):

enter image description here

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