Come implementare la mappa valore per alfa in GIS?


14

Recentemente ho fatto qualche lettura di base sui cartogrammi e mi sono imbattuto in un'interessante alternativa: mappe valore per alfa .

Il concetto è descritto in maggiori dettagli qui ed è disponibile un documento completo [non apertamente] [qui] 2 .

Ci sono alcuni dettagli sull'implementazione sul blog di indiemaps :

... tutta la grafica di cui sopra è stata prodotta con ActionScript 3, usando solo un editor di testo e l'ultimo Flex SDK gratuito ...

Come hai potuto implementare qualcosa del genere nel pacchetto GIS (ArcGIS? QuantumGIS?)? O R e ggplot2? O Python?


L'intero documento è disponibile (per tutti) su geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton

vero, non ha cifre però: [
radek,

4
Prova personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf che Rob assicura che anche io abbia delle cifre.
Ian Turton

Risposte:


7

Ecco un metodo per eseguire Alpha By Value in QGIS

http://nathanw.net/2013/06/27/alpha-by-value-choropleth/

È possibile utilizzare la nuova ramp_colore scale_linearfunzioni e dati definiti simboli

regexp_replace( ramp_color('usa', scale_linear( "unemployed_by_county_xgv_Rate",0,15,0,1)),',[^,]*$',','|| toint(scale_linear("unemployed_by_county_xgv_Labor_Force",0,100000,0,255)))

inserisci qui la descrizione dell'immagine


1
Bel lavoro (anche se non sono sicuro della scala dei colori - anche se mi rendo conto che è solo un utile come fare). Una bella aggiunta potrebbe essere come realizzare la leggenda con essa.
Andy W,

Sì, la scala dei colori non ha funzionato davvero. Se hai un suggerimento migliore, posso creare un'immagine aggiornata. Ho pensato alla leggenda, aggiornerò una volta che ho un buon piano. (Funzionerà con QGIS 2.0)
Nathan W,

1
Ho provato il bianco e il nero che ha un bell'aspetto i.imgur.com/Wfg8T8P.png
Nathan W

Leggi l' articolo originale di Roth : hanno suggerito rampe. A causa della desaturazione, usano alcune delle rampe di birra a colori bivariate più (inizialmente) sature. Gli sfondi neri sembrano belli perché offrono un contrasto maggiore / più sorprendente con lo sfondo IMO. Ho scritto alcune delle mie speculazioni qui .
Andy W,

@AndyW aggiornato con un'immagine (forse) migliore.
Nathan W,

5

In R puoi leggere i poligoni e disegnarli su un dispositivo che supporta la trasparenza. Qui sto usando il dispositivo Windows (), R 2.12.0 con i pacchetti rgdal e sp.

## read some example polygons
library(rgdal)
dsn <- system.file("vectors/ps_cant_31.MIF", package = "rgdal")[1]
ps_cant_31 <- readOGR(dsn=dsn, layer="ps_cant_31")

## scale population values 

ps_cant_31$sclpop <- sqrt((ps_cant_31$POP - min(ps_cant_31$POP))/ diff(range(ps_cant_31$POP)))

## randomly assign 0 or 1
ps_cant_31$rand <- sample(0:1, length(ps_cant_31$POP), replace = TRUE)

## plot red or blue, scaled by population
plot(ps_cant_31,  col = ifelse(ps_cant_31$rand == 0, rgb(0, 0, 1, ps_cant_31$sclpop), rgb(1, 0, 0, ps_cant_31$sclpop)))

testo alternativo


Grazie mdsumner! Sembra più vicino a ciò che mi piacerebbe ottenere. Ho iniziato a fare casini con la funzionalità spaziale di R, quindi proverò a replicarlo con i miei dati ora.
Radek,

Alcuni altri esempi in R: dsparks.wordpress.com/2011/10/24/…
radek

4

Ti consiglierei di visitare il sito Geo Vista e il loro software. La visivo Inchiesta Toolkit , fornisce un programma di grafica per l'attuazione delle mappe chloropleth bi-variata (lo so un poster qui lavora a questo progetto e può essere in grado di punto ad altre risorse).

Penso che il post sul blog dei cartogrammi sia sufficiente per spiegare la tecnica, ma ecco un articolo piuttosto interessante (aperto al pubblico) per vederne l'uso nella pratica.

Analisi geovisuali per migliorare l'interpretazione statistica della scansione spaziale: un'analisi della mortalità per cancro cervicale negli Stati Uniti Jin Chen, Robert E Roth, Adam T Naito, Eugene J Lengerich e Alan M MacEachren International Journal of Health Geographics 2008, 7:57

Spero di vedere alcuni esempi di codice anche per Python e R! Fondamentalmente qualsiasi programma in grado di implementare una combinazione di colori (o bivariati) su due scale può creare un valore mediante una mappa alfa. Sebbene tutte le implementazioni che ho visto finora elencate siano per le mappe coropletiche, non c'è motivo per cui non sia possibile implementarlo anche per una mappa raster o basata su punti.


Di recente ho scritto un post sul blog su come implementarli in ArcGIS, Valorizzare le mappe alfa con ArcMap . Fondamentalmente implica la creazione di livelli separati per una determinata trasparenza e quindi l'utilizzo degli strumenti di modifica vettoriale disponibili in ArcMap per produrre la legenda bivariata necessaria (o l'utilizzo di una mappa di inserti falsi per replicare la legenda se si desidera produrre una mappa VBA con sfondo nero).

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


Grazie Andy. VIT sembra piuttosto interessante - dovremo provarlo.
Radek,

Richiede un po 'di armeggiamento con l'immissione dei dati, ma funziona immediatamente. Strumento di Greaat per analisi esplorative. L'unico problema _ Non riesco a trovare alcun modo per esportare i dati per ulteriori elaborazioni.
Radek,

3

Puoi farlo usando uDig usando uno stile basato su SLD che calcola l'opacità% usando le funzioni matematiche nelle specifiche del filtro OGC. Non sono sicuro di quanto sarebbe efficace, ma potrebbe certamente essere usato per la prova del concetto.

Ho creato una demo su http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html con una discussione su http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram. html . Si scopre che è abbastanza facile.

          <PolygonSymbolizer>
            <Fill>
              <!-- CssParameters allowed are fill (the color) and fill-opacity -->
              <CssParameter name="fill">#4DFF4D</CssParameter>
              <CssParameter name="fill-opacity">
                <ogc:Div>
                  <ogc:PropertyName>PERSONS</ogc:PropertyName>
                  <ogc:Literal>30e6</ogc:Literal>
                </ogc:Div>
              </CssParameter>
            </Fill>     
          </PolygonSymbolizer>

(dove 30e6 è la popolazione della California)


Grazie Iant. Sarebbe possibile automatizzarlo e applicare questi stili su base "per poligono" utilizzando una delle variabili?
radek,

Dovresti inserire una funzione per calcolare un valore compreso tra 0-1 nel parametro di opacità.
Ian Turton

Non dovrebbe essere "Mappa valore per alfa" anziché "Cartogrammi valore per alfa"? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html afferma correttamente che: "Un cartogramma è una mappa in cui viene sostituita qualche altra variabile al posto di area o distanza."
underdark

1
probabilmente :-) Ma l'altra definizione di cartogramma è "una mappa con cui hai sbagliato per fare un punto"
Ian Turton

2

È possibile utilizzare GDAL per farlo, tramite i file VRT, o impostando i valori a livello di codice, accedendo alla quarta banda di un set di dati RGBA (come un GeoTiff). Mostrerò come usare un VRT perché è un po 'più semplice: a partire da un RGB Tiff, potresti creare un'immagine pallettizzata secondo le FAQ :

# translate the rgba tiff to a VRT
gdal_translate -of VRT rgb.tif rgb.vrt

# modify the color table in an editor

# translate back to an image
gdal_translate rgb.vrt mask-by-alpha.tif

Nel passaggio di modifica, apri il risultante rgb.vrte modifica la tabella dei colori secondo necessità, regolando i c4valori (0-255) per impostare l'alfa:

<VRTDataset rasterXSize="226" rasterYSize="271">
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Palette</ColorInterp>
    <ColorTable>
      <Entry c1="238" c2="238" c3="238" c4="0"/>
      <Entry c1="237" c2="237" c3="237" c4="64"/>
      <Entry c1="236" c2="236" c3="236" c4="128"/>
      <Entry c1="229" c2="229" c3="229" c4="255"/>
    </ColorTable>
  </VRTRasterBand>
</VRTDataset> 

Grazie scw. Come sarebbe esattamente il mio flusso di lavoro per uno scenario con poligoni vettoriali 3k come input? Dovrei prima creare una mappa coropletica senza alfa - salva come raster - e quindi regolare i valori raster? I valori dovrebbero essere adattati sulla base del "per poligono" presumo? E dovrei automatizzarlo in qualche modo in base al campo che determinerà i valori alfa.
Radek,

1

Mi piace, non avevo mai pensato a quel concetto prima d'ora.

Se hai accesso a FME o l'estensione di interoperabilità dei dati in ArcGIS, ci sono un sacco di trasformatori che ti permetteranno di manipolare i valori di banda in un set di dati raster, inclusa la banda alfa.

RasterExpressionEvaluator, RasterInterpretationCoercer e RasterBandOrderer sono quelli che proverei all'inizio. Quindi è possibile importare / utilizzare i dati in qualsiasi strumento GIS / di visualizzazione.

Un mio collega ha usato un'idea simile per creare password "nascoste" all'interno di un'immagine raster: http://www.fmepedia.com/index.php/PasswordGenerator

Divulgazione: lavoro per Safe Software - produttori di FME.


Grazie. Purtroppo non ho accesso a FME. E l'interoperabilità dei dati non è inclusa nella mia licenza uni per ArcGIS: [
radek,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.