Wie implementiere ich eine Alpha-Wert-Karte in GIS?

14

Ich habe in letzter Zeit einige Hintergrundinformationen zu Kartogrammen gelesen und bin auf interessante Alternativen gestoßen - Value-by-Alpha- Karten .

Das Konzept wird hier ausführlicher beschrieben und das vollständige Papier ist [nicht offen bis] [hier] verfügbar . 2 .

Es gibt einige Details zur Implementierung auf Indiemaps- Blog :

... alle oben genannten Grafiken wurden mit ActionScript 3 erstellt, wobei nur ein Texteditor und das neueste kostenlose Flex SDK verwendet wurden ...

Wie können Sie so etwas in ein GIS-Paket (ArcGIS? QuantumGIS?) Implementieren? Oder R und ggplot2? Oder Python?

radek
quelle
Das gesamte Papier ist verfügbar (alle) bei geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton
Es stimmt, es hat keine Zahlen tho: [
Radek
4
Versuchen Sie es mit personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf. Rob versichert, dass ich auch Zahlen habe.
Ian Turton

Antworten:

7

Hier ist eine Methode zum Durchführen von Alpha By Value in QGIS

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

Sie können die neuen ramp_colorund scale_linearFunktionen und Daten definierten Symbole verwenden

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)))

Bildbeschreibung hier eingeben

Nathan W
quelle
1
Gute Arbeit (obwohl ich nicht sicher bin, welche Farbe ich habe - obwohl mir klar ist, dass dies nur eine nützliche Anleitung ist). Eine schöne Ergänzung könnte sein, wie man die Legende dazu macht.
Andy W
Ja, der Farbverlauf hat nicht wirklich funktioniert. Wenn Sie einen besseren Vorschlag haben, kann ich ein aktualisiertes Bild machen. Hab über die Legende nachgedacht, werde updaten sobald ich einen guten Plan habe. (Das wird mit QGIS 2.0 funktionieren)
Nathan W
1
Ich habe versucht, weiß und schwarz, die einen ziemlich coolen Look i.imgur.com/Wfg8T8P.png hat
Nathan W
Schauen Sie sich den originalen Roth-Artikel an - sie haben Rampen vorgeschlagen. Aufgrund der Entsättigung verwenden sie einige der (anfangs) gesättigten bivariaten Farbbrührampen. Schwarze Hintergründe sehen für diese gut aus, da sie einen besseren Kontrast zum IMO-Hintergrund bieten. Ich habe hier etwas über meine Spekulationen geschrieben .
Andy W
@AndyW aktualisiert mit einem (vielleicht) besseren Bild.
Nathan W
5

In R können Sie die Polygone einlesen und auf einem Gerät zeichnen, das Transparenz unterstützt. Hier verwende ich das Gerät windows (), R 2.12.0 mit den Paketen rgdal und 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)))

Alt-Text

mdsumner
quelle
Danke mdsumner! Das kommt dem, was ich erreichen möchte, am nächsten. Begann ein wenig mit der räumlichen Funktionalität von R zu experimentieren, also werde ich versuchen, es jetzt mit meinen Daten zu replizieren.
Radek
Einige weitere Beispiele in R: dsparks.wordpress.com/2011/10/24/…
radek
4

Ich würde vorschlagen, dass Sie sich die Geo Vista-Website und deren Software ansehen. Das Visual Inquiry Toolkit bietet ein GUI-Programm zum Implementieren der bi-variablen Chloropleth-Karten (ich weiß, dass ein Poster hier in diesem Projekt arbeitet und möglicherweise auf andere Ressourcen verweisen kann).

Ich denke, der Cartogrammer-Blogbeitrag ist ausreichend, um die Technik zu erklären, aber hier ist ein ziemlich cooler Artikel (öffentlich zugänglich), um seine Verwendung in der Praxis zu sehen.

Geovisuelle Analysen zur Verbesserung der statistischen Interpretation von räumlichen Scans: Analyse der US-amerikanischen Gebärmutterhalskrebssterblichkeit Jin Chen, Robert E. Roth, Adam T. Naito, Eugene J. Lengerich und Alan M. MacEachren International Journal of Health Geographics 2008, 7:57

Ich hoffe, auch einige Codebeispiele für Python und R zu sehen! Grundsätzlich kann jedes Programm, das ein Farbschema mit zwei Maßstäben (oder ein bivariates Farbschema) implementieren kann, einen Wert über eine Alphakarte erstellen. Obwohl alle Implementierungen, die ich bisher gesehen habe, für Choropleth-Karten sind, gibt es keinen Grund, warum Sie dies nicht auch für eine raster- oder punktbasierte Karte implementieren könnten.


Kürzlich habe ich einen Blog-Beitrag über die Implementierung in ArcGIS verfasst, in dem es darum geht, mithilfe von Alpha-Maps mit ArcMap einen Mehrwert zu erzielen . Grundsätzlich müssen separate Layer für eine bestimmte Transparenz erstellt und anschließend die in ArcMap verfügbaren Vektorbearbeitungswerkzeuge verwendet werden, um die erforderliche bivariate Legende zu erstellen.

Bildbeschreibung hier eingeben

Bildbeschreibung hier eingeben

Andy W
quelle
Vielen Dank Andy. VIT sieht ziemlich interessant aus - muss es versuchen.
Radek
Benötigte ein wenig Basteln mit Dateneingabe, funktioniert aber sofort. Greaat-Tool für die explorative Analyse. Das einzige Problem _ Ich kann keine Möglichkeit finden, Daten zur weiteren Verarbeitung zu exportieren.
Radek
3

Dies könnte uDig sein, indem ein SLD-basierter Stil verwendet wird, der die% -Opazität mithilfe der mathematischen Funktionen in der OGC-Filterspezifikation berechnet. Ich bin mir nicht sicher, wie effizient es wäre, könnte aber durchaus als Proof of Concept verwendet werden.

Ich habe eine Demo unter http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html mit einer Diskussion unter http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram erstellt. html . Es stellt sich heraus, dass es ziemlich einfach ist.

          <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>

(wo 30e6 die Bevölkerung von Kalifornien ist)

Ian Turton
quelle
Vielen Dank Iant. Wäre es möglich, es zu automatisieren und diese Stile 'pro Polygon' unter Verwendung einer der Variablen anzuwenden?
Radek
Sie müssten eine Funktion einfügen, um einen Wert zwischen 0 und 1 im Opazitätsparameter zu berechnen.
Ian Turton
Sollte es nicht "Value-by-Alpha Map" statt "Value-by-Alpha Cartograms" sein? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html gibt Folgendes korrekt an: "Ein Kartogramm ist eine Karte, bei der anstelle der Fläche oder Entfernung eine andere Variable eingesetzt wird."
Underdunkel
1
wahrscheinlich :-) Aber die andere Definition des Kartogramms ist "eine Karte, mit der Sie herumgespielt haben, um einen Punkt zu machen"
Ian Turton
2

Sie können GDAL verwenden, um dies entweder über VRT-Dateien oder durch programmgesteuertes Festlegen der Werte zu tun, indem Sie auf das vierte Band eines RGBA-Datasets (z. B. GeoTiff) zugreifen. Ich werde zeigen, wie man eine VRT verwendet, weil es etwas einfacher ist: Ausgehend von einem RGB-Tiff könnten Sie ein Palettenbild gemäß den FAQ erstellen :

# 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

Öffnen Sie im Bearbeitungsschritt das Ergebnis rgb.vrtund ändern Sie die Farbtabelle nach Bedarf, indem Sie die c4Werte (0-255) anpassen , um Alpha festzulegen:

<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> 
scw
quelle
Danke scw. Wie genau würde mein Workflow für ein Szenario mit 3k-Vektorpolygonen als Eingabe aussehen? Soll ich zuerst eine Choropleth-Karte ohne Alpha erstellen - als Raster speichern - und dann die Rasterwerte anpassen? Müssten die Werte wohl 'pro Polygon' angepasst werden? Und ich müsste es irgendwie entsprechend dem Feld automatisieren, das
Alphawerte antreibt
1

Ich mag das - ich hatte noch nie wirklich an dieses Konzept gedacht.

Wenn Sie in ArcGIS Zugriff auf FME oder die Data Interoperability-Erweiterung haben, gibt es eine Reihe von Transformern, mit denen Sie Bandwerte in einem Raster-Dataset, einschließlich Alphaband, bearbeiten können.

Zuerst würde ich RasterExpressionEvaluator, RasterInterpretationCoercer und RasterBandOrderer ausprobieren. Dann können Sie die Daten in jedes GIS / Visulization-Tool importieren / verwenden.

Ein Kollege von mir verwendete eine ähnliche Idee, um Kennwörter 'versteckt' in einem Rasterbild zu erstellen: http://www.fmepedia.com/index.php/PasswordGenerator

Offenlegung: Ich arbeite für Safe Software - Hersteller von FME.

Markieren Sie Irland
quelle
Thx Mark. Leider habe ich keinen Zugang zu FME. Dateninteroperabilität ist in meiner Uni-Lizenz für ArcGIS nicht enthalten: [
radek
1

Eine weitere Beschreibung von Josh zur Implementierung in QGIS

Bildbeschreibung hier eingeben

Sehr gutes und detailliertes Tutorial.

radek
quelle