Como implementar o mapa de valor por alfa no GIS?

14

Recentemente, tenho lido algumas informações básicas sobre cartogramas e me deparei com alternativas interessantes - mapas de valor por alfa .

O conceito é descrito em mais detalhes aqui e o artigo completo está disponível [não abertamente] [aqui] 2 .

Existem alguns detalhes sobre a implementação no blog indiemaps :

... todos os gráficos acima foram produzidos com o ActionScript 3, usando apenas um editor de texto e o mais recente Flex SDK gratuito ...

Como você pode implementar algo parecido no pacote GIS (ArcGIS? QuantumGIS?)? Ou R e ggplot2? Ou Python?

radek
fonte
O artigo inteiro está disponível (para todos) em geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton
verdade, ele não tem números tho: [
radek 21/10/10
4
Tente personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf, que Rob garante que também tenho números.
Ian Turton

Respostas:

7

Aqui está um método para executar Alpha By Value no QGIS

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

Você pode usar os símbolos novos ramp_colore scale_linearfunções e dados definidos

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

insira a descrição da imagem aqui

Nathan W
fonte
1
Bom trabalho (embora eu não tenha certeza sobre a rampa de cores - embora eu saiba que é apenas um guia prático). Uma boa adição pode ser como criar a legenda.
Andy W
Sim, a rampa de cores realmente não funcionou. Se você tem uma sugestão melhor, posso fazer uma imagem atualizada. Estive pensando sobre a lenda, irá atualizar uma vez que eu tenho um bom plano. (Isso funcionará com o QGIS 2.0) #
W Nathan Nathan
1
Eu tentei branco e preto, que tem uma aparência muito legal i.imgur.com/Wfg8T8P.png #
W Nathan Nathan #
Confira o artigo original de Roth - eles sugeriram rampas. Devido à dessaturação, eles usam algumas das rampas de cervejaria em cores bivariadas mais (inicialmente) saturadas. Os fundos pretos parecem agradáveis ​​para eles porque fornecem um contraste maior / mais impressionante com o IMO de fundo. Eu escrevi um pouco sobre minha especulação aqui .
21813 Andy W no dia
@ AndyW atualizado com uma (talvez) melhor imagem.
Nathan W
5

Em R, você pode ler os polígonos e plotá-los em um dispositivo compatível com transparência. Aqui estou usando o dispositivo windows (), R 2.12.0 com os pacotes 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)))

texto alternativo

mdsumner
fonte
Obrigado mdsumner! Parece mais próximo do que eu gostaria de alcançar. Comecei a mexer um pouco com a funcionalidade espacial do R, então tentarei replicá-lo com meus dados agora.
Radek
Mais alguns exemplos em R: dsparks.wordpress.com/2011/10/24/…
radek 24/10
4

Eu sugiro que você verifique o site do Geo Vista e seu software. O Visual Inquiry Toolkit , fornece um programa GUI para implementar os mapas de cloropletos bi-variados (eu sei que um pôster aqui funciona nesse projeto e pode ser capaz de apontar para outros recursos).

Eu acho que a postagem no blog de cartograma é suficiente para explicar a técnica, mas aqui está um artigo muito legal (aberto ao público) para ver seu uso na prática.

Análise geovisual para aprimorar a interpretação estatística do escaneamento espacial: uma análise da mortalidade por câncer cervical nos EUA Jin Chen, Robert E Roth, Adam T Naito, Eugene J Lengerich e Alan M MacEachren International Journal of Health Geographics 2008, 7:57

Espero ver alguns exemplos de código para Python e R também! Basicamente, qualquer programa que possa implementar um esquema de cores em duas escalas (ou bivariada) pode criar um valor pelo mapa alfa. Embora todas as implementações que eu vi listadas até agora sejam para mapas de choropleth, não há motivo para você não poder implementar isso também para um mapa raster ou baseado em pontos.


Eu escrevi recentemente um post sobre como implementá-los no ArcGIS, Valorizando os mapas alfa com o ArcMap . Isso basicamente envolve criar camadas separadas para uma determinada transparência e, em seguida, utilizar as ferramentas de edição de vetores disponíveis no ArcMap para produzir a legenda bivariada necessária (ou usar um mapa de inserção falso para replicar a legenda, se você deseja produzir um mapa VBA em fundo preto).

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Andy W
fonte
Thx Andy. VIT parece bastante interessante - terá que experimentá-lo.
Radek
Necessário um pouco de mexer com a entrada de dados, mas funciona imediatamente. Ferramenta Greaat para análise exploratória. O único problema _ Não consigo encontrar nenhuma maneira de exportar dados para processamento adicional.
Radek
3

Você pode fazer isso com o uDig usando um estilo baseado em SLD que calcula a% de opacidade usando as funções matemáticas na especificação do filtro OGC. Não tenho certeza de quão eficiente seria, mas certamente poderia ser usado como prova de conceito.

Criei uma demonstração em http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html com uma discussão em http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram. html . Acontece que é bem fácil.

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

(onde 30e6 é a população da Califórnia)

Ian Turton
fonte
Obrigado Iant. Seria possível automatizá-lo e aplicar esses estilos com base em 'por polígono' usando uma das variáveis?
Radek
Você precisaria colocar uma função para calcular um valor entre 0-1 no parâmetro opacidade.
Ian Turton
Não deveria ser "Mapa Valor por Alfa" em vez de "Cartogramas Valor por Alfa"? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html afirma corretamente que: "Um cartograma é um mapa em que alguma outra variável é substituída no lugar da área ou da distância."
Underdark
1
provavelmente :-) Mas a outra definição de cartograma é "um mapa com o qual você mexeu para esclarecer"
Ian Turton
2

Você pode usar o GDAL para fazer isso, por meio de arquivos VRT ou definindo os valores programaticamente, acessando a quarta banda de um conjunto de dados RGBA (como um GeoTiff). Vou mostrar como usar um VRT porque é um pouco mais simples: começando com um RGB Tiff, você pode criar uma imagem em paletes conforme as Perguntas frequentes :

# 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

Na etapa de edição, abra o resultado rgb.vrte modifique a tabela de cores conforme necessário, ajustando os c4valores (0-255) para definir 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
fonte
Obrigado scw. Como seria meu fluxo de trabalho no cenário com polígonos de vetor de 3k como entrada? Devo primeiro criar um mapa de coroas sem alfa - salvar como raster - e depois ajustar os valores da varredura? Os valores teriam que ser adaptados com base em 'por polígono', presumo? E eu teria que automatizá-lo de alguma forma, de acordo com o campo que irá conduzir alfa valores ..
radek
1

Eu gosto disso - nunca tinha pensado nesse conceito antes.

Se você tem acesso ao FME ou à extensão de interoperabilidade de dados no ArcGIS, existem vários transformadores que permitem manipular os valores da banda em um conjunto de dados raster, incluindo a banda alfa.

RasterExpressionEvaluator, RasterInterpretationCoercer e RasterBandOrderer são os que eu tentaria primeiro. Em seguida, você pode importar / usar os dados em qualquer ferramenta GIS / Visulização.

Um colega meu usou uma idéia semelhante para criar senhas 'ocultas' dentro de uma imagem rasterizada: http://www.fmepedia.com/index.php/PasswordGenerator

Divulgação: Trabalho para fabricantes de software seguro da FME.

Mark Ireland
fonte
Thx Mark. Infelizmente não tenho acesso ao FME. E a interoperabilidade de dados não está incluída na minha licença uni para o ArcGIS: [
radek
1

Mais uma descrição de Josh sobre como implementá-lo no QGIS

insira a descrição da imagem aqui

Tutorial muito bom e detalhado.

radek
fonte