Jak wdrożyć mapę wartości alfa według GIS?

14

Czytałem ostatnio o kartogramach w tle i natknąłem się na interesującą alternatywę - mapy wartości według alfa .

Koncepcja jest opisana bardziej szczegółowo tutaj, a pełny papier jest dostępny [nie otwarcie] [tutaj] 2 .

Istnieje kilka szczegółów dotyczących implementacji na blogu indiemaps :

... wszystkie powyższe grafiki zostały utworzone za pomocą ActionScript 3, przy użyciu tylko edytora tekstu i najnowszego bezpłatnego pakietu Flex SDK ...

Jak można zaimplementować coś takiego w pakiecie GIS (ArcGIS? QuantumGIS?)? Lub R i ggplot2? Lub Python?

radek
źródło
Cały artykuł jest dostępny (dla wszystkich) na stronie geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton
to prawda, nie ma liczb::
radek,
4
Wypróbuj personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf, który Rob zapewnia, że ​​też mam dane liczbowe.
Ian Turton

Odpowiedzi:

7

Oto metoda wykonywania wartości alfa według wartości w QGIS

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

Można użyć nowego ramp_colori scale_linearfunkcji i danych zdefiniowanych symboli

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

wprowadź opis zdjęcia tutaj

Nathan W.
źródło
1
Dobra robota (chociaż nie jestem pewna co do kolorowej rampy - chociaż zdaję sobie sprawę, że to po prostu przydatna instrukcja). Przyjemnym dodatkiem może być stworzenie legendy, aby z nią iść.
Andy W
Tak, kolorowa rampa tak naprawdę nie działała. Jeśli masz lepszą sugestię, mogę zrobić zaktualizowany obraz. Myślałem o legendzie, zaktualizuje się, gdy będę miał dobry plan. (To będzie działać z QGIS 2.0)
Nathan W
1
Próbowałem biało-czarnego, który ma całkiem fajny wygląd i.imgur.com/Wfg8T8P.png
Nathan W
Sprawdź oryginalny artykuł Rotha - zasugerowali rampy. Z powodu desaturacji używają niektórych (początkowo) nasyconych dwuwymiarowych ramp piwowarskich. Czarne tła wyglądają ładnie, ponieważ zapewniają większy / bardziej oszałamiający kontrast z IMO tła. Tutaj napisałem trochę o moich spekulacjach .
Andy W
@AndyW zaktualizowano (być może) lepszy obraz.
Nathan W
5

W R możesz czytać wielokąty i drukować je na urządzeniu obsługującym przezroczystość. Tutaj używam urządzenia z systemem Windows (), R 2.12.0 z pakietami rgdal i 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)))

alternatywny tekst

mdsumner
źródło
Dzięki mdsumner! To wygląda najbliżej tego, co chciałbym osiągnąć. Zacząłem trochę bałaganować z przestrzenną funkcjonalnością R, więc spróbuję teraz replikować go z moimi danymi.
radek
Kilka innych przykładów w R: dsparks.wordpress.com/2011/10/24/…
radek
4

Sugeruję sprawdzenie witryny Geo Vista i jej oprogramowania. Wizualna Zapytanie Toolkit , zapewnia program GUI do wdrożenia bi-variate mapy chloropleth (znam jeden plakat tu pracuje przy tym projekcie i może być w stanie wskazać innych zasobów).

Myślę, że post na blogu kartogramera jest wystarczający do wyjaśnienia techniki, ale tutaj jest całkiem fajny artykuł (otwarty dla publiczności), aby zobaczyć jego zastosowanie w praktyce.

Analizy geowizualne w celu poprawy interpretacji statystyki skanowania przestrzennego: analiza śmiertelności z powodu raka szyjki macicy w USA Jin Chen, Robert E Roth, Adam T Naito, Eugene J Lengerich i Alan M MacEachren International Journal of Health Geographics 2008, 7:57

Mam nadzieję, że zobaczę też kilka przykładów kodu dla Pythona i R. Zasadniczo każdy program, który może wdrożyć dwukolorowy schemat kolorów (lub dwuwymiarowy), może utworzyć wartość według mapy alfa. Chociaż wszystkie implementacje, które do tej pory widziałem, dotyczą map choropleth, nie ma powodu, dla którego nie mógłbyś wdrożyć tego również dla mapy rastrowej lub punktowej.


Niedawno napisałem wpis na blogu o tym, jak zaimplementować je w ArcGIS, Tworzenie wartości przez mapy alfa za pomocą ArcMap . Zasadniczo wymaga utworzenia osobnych warstw dla danej przezroczystości, a następnie wykorzystania narzędzi do edycji wektorów dostępnych w ArcMap do stworzenia niezbędnej dwuwymiarowej legendy (lub użycia fałszywej mapy wstawki do odtworzenia legendy, jeśli chcesz utworzyć mapę VBA na czarnym tle).

wprowadź opis zdjęcia tutaj

wprowadź opis zdjęcia tutaj

Andy W.
źródło
Dziękuję Andy. VIT wygląda dość interesująco - trzeba będzie spróbować.
radek
Wymagało trochę majsterkowania przy wprowadzaniu danych, ale działa od razu po wyjęciu z pudełka. Narzędzie Greaat do analizy eksploracyjnej. Jedyny problem _ Nie mogę znaleźć sposobu na eksport danych do dalszego przetwarzania.
radek
3

Możesz to zrobić uDig przy użyciu stylu opartego na SLD, który oblicza% krycia za pomocą funkcji matematycznych w specyfikacji filtra OGC. Nie jestem pewien, jak efektywna byłaby, ale z pewnością mogłaby zostać wykorzystana jako dowód koncepcji.

Zbudowałem demo na http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html z dyskusją na http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram. HTML . Okazuje się, że jest to dość łatwe.

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

(gdzie 30e6 to populacja Kalifornii)

Ian Turton
źródło
Dzięki, Iant. Czy byłoby możliwe zautomatyzowanie go i zastosowanie tych stylów „na podstawie wielokąta” przy użyciu jednej ze zmiennych?
radek
Trzeba by wstawić funkcję, aby obliczyć wartość między 0-1 w parametrze krycia.
Ian Turton
Czy nie powinna to być „mapa według wartości alfa” zamiast „kartogramów wartość według alfa”? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html poprawnie stwierdza, że: „Kartogram to mapa, w której zamiast zmiennej powierzchni lub odległości zastępuje się inną zmienną”.
podmrok
1
prawdopodobnie :-) Ale inną definicją kartogramu jest „mapa, którą pomieszałeś, aby zrobić punkt”
Ian Turton
2

Możesz użyć GDAL, aby to zrobić, albo poprzez pliki VRT, albo ustawiając wartości programowo, uzyskując dostęp do czwartego pasma zestawu danych RGBA (takiego jak GeoTiff). Pokażę, jak korzystać z VRT, ponieważ jest nieco prostszy: zaczynając od RGB Tiff, możesz stworzyć obraz paletowy zgodnie z 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

W kroku edycji otwórz wynikowy rgb.vrti zmodyfikuj odpowiednio tabelę kolorów, dostosowując c4wartości (0–255), aby ustawić wartość 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> 
scw
źródło
Dzięki scw. Jak dokładnie wyglądałby mój przepływ pracy dla scenariusza z wielobokami wektorowymi 3k jako danymi wejściowymi? Czy powinienem najpierw stworzyć mapę choropleth bez alfa - zapisać jako raster - a następnie dostosować wartości rastrowe? Zakładam, że wartości musiałyby być dostosowane na podstawie „na wielokąt”? I musiałbym to jakoś zautomatyzować zgodnie z polem, które będzie sterowało wartościami alfa ..
radek
1

Podoba mi się - nigdy tak naprawdę nie myślałem o tej koncepcji.

Jeśli masz dostęp do FME lub rozszerzenia Interoperacyjności danych w ArcGIS, istnieje kilka transformatorów, które pozwolą ci manipulować wartościami pasma w zestawie danych rastrowych, w tym pasmem alfa.

Najpierw spróbuję RasterExpressionEvaluator, RasterInterpretationCoercer i RasterBandOrderer. Następnie możesz zaimportować / wykorzystać dane w dowolnym narzędziu GIS / Visulization.

Mój kolega wykorzystał podobny pomysł, aby utworzyć hasła „ukryte” w obrazie rastrowym: http://www.fmepedia.com/index.php/PasswordGenerator

Ujawnienie: Pracuję dla Safe Software - twórców FME.

Mark Ireland
źródło
Thx Mark. Niestety nie mam dostępu do FME. Interoperacyjność danych nie jest uwzględniona w mojej licencji uni dla ArcGIS: [
radek,
1

Jeszcze jeden opis od Josha, jak zaimplementować go w QGIS

wprowadź opis zdjęcia tutaj

Bardzo dobry i szczegółowy samouczek.

radek
źródło