¿Cómo implementar el mapa de valor por alfa en SIG?


14

He estado leyendo algo de fondo sobre los cartogramas recientemente y me topé con una alternativa interesante: mapas de valor por alfa .

El concepto se describe con más detalles aquí y el documento completo está disponible [no abiertamente] [aquí] 2 .

Hay algunos detalles sobre la implementación en el blog indiemaps :

... todos los gráficos anteriores se produjeron con ActionScript 3, utilizando solo un editor de texto y el último SDK de Flex gratuito ...

¿Cómo podría implementar algo así en el paquete SIG (ArcGIS? QuantumGIS?)? O R y ggplot2? O Python?


El documento completo está disponible (para todos) en geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton

cierto, no tiene cifras aunque: [
radek

44
Prueba personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf, que Rob me asegura que también tiene cifras.
Ian Turton

Respuestas:


7

Aquí hay un método para hacer Alpha By Value en QGIS

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

Puede usar los símbolos nuevos ramp_colory scale_linearfunciones y los datos 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)))

ingrese la descripción de la imagen aquí


1
Buen trabajo (aunque no estoy seguro acerca de la rampa de color, aunque me doy cuenta de que es solo un útil). Una buena adición podría ser cómo hacer que la leyenda vaya con ella.
Andy W

Sí, la rampa de color realmente no funcionó. Si tiene una sugerencia mejor, puedo hacer una imagen actualizada. He estado pensando en la leyenda, se actualizará una vez que tenga un buen plan. (Eso funcionará con QGIS 2.0)
Nathan W


Echa un vistazo al artículo original de Roth : han sugerido rampas. Debido a la desaturación, utilizan algunas de las rampas de cerveza de color bivariadas más (inicialmente) saturadas. Los fondos negros se ven bien porque proporcionan un contraste mayor / más sorprendente con el fondo IMO. He escrito algo sobre mi especulación aquí .
Andy W

@AndyW actualizado con una (quizás) mejor imagen.
Nathan W

5

En R puede leer los polígonos y trazarlos en un dispositivo que admita la transparencia. Aquí estoy usando el dispositivo windows (), R 2.12.0 con paquetes rgdal y 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


Gracias mdsumner! Eso se parece más a lo que me gustaría lograr. Comencé a jugar un poco con la funcionalidad espacial de R, así que ahora intentaré replicarlo con mis datos.
radek

Algunos ejemplos más en R: dsparks.wordpress.com/2011/10/24/…
radek

4

Le sugiero que consulte el sitio de Geo Vista y su software. El Visual Inquiry Toolkit proporciona un programa GUI para implementar los mapas de cloroplasto bivariados (sé que un póster aquí funciona en ese proyecto y puede señalar otros recursos).

Creo que la publicación del blog de cartogrammer es suficiente para explicar la técnica, pero aquí hay un artículo bastante bueno (abierto al público) para ver su uso en la práctica.

Analítica geográfica para mejorar la interpretación estadística de la exploración espacial: un análisis de la mortalidad por cáncer de cuello uterino en EE. UU. Jin Chen, Robert E Roth, Adam T Naito, Eugene J Lengerich y Alan M MacEachren International Journal of Health Geographics 2008, 7:57

¡Espero ver algunos ejemplos de código para Python y R también! Básicamente, cualquier programa que pueda implementar un esquema de color de dos escalas (o bivariado) puede crear un valor por mapa alfa. Aunque todas las implementaciones que he visto enumeradas hasta ahora son para mapas coropléticos, no hay ninguna razón por la que no pueda implementar esto también para un mapa basado en puntos o ráster.


Recientemente escribí una publicación de blog sobre cómo implementarlos en ArcGIS, Cómo hacer valor por mapas alfa con ArcMap . Básicamente implica hacer capas separadas para una transparencia dada, y luego utilizar las herramientas de edición de vectores disponibles dentro de ArcMap para producir la leyenda bivariada necesaria (o usar un mapa inserto falso para replicar la leyenda si desea producir un mapa VBA de fondo negro).

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí


Gracias Andy. VIT parece bastante interesante, tendrá que intentarlo.
radek

Se requiere un poco de retoques con la entrada de datos, pero funciona de forma inmediata. Gran herramienta para el análisis exploratorio. El único problema _ No puedo encontrar ninguna manera de exportar datos para su posterior procesamiento.
radek

3

Puede hacer esto con uDig usando un estilo basado en SLD que calcula el% de opacidad usando las funciones matemáticas en la especificación del filtro OGC. No estoy seguro de cuán eficiente sería, pero ciertamente podría usarse como prueba de concepto.

He creado una demostración en http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html con una discusión en http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram. html . Resulta que es bastante 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>

(donde 30e6 es la población de California)


Gracias Iant. ¿Sería posible automatizarlo y aplicar estos estilos 'por polígono' usando una de las variables?
radek

Debería poner una función para calcular un valor entre 0-1 en el parámetro de opacidad.
Ian Turton

¿No debería ser "Value-by-alpha Map" en lugar de "Value-by-alpha Cartograms"? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html afirma correctamente que: "Un cartograma es un mapa donde se sustituye alguna otra variable en lugar de área o distancia".
oscuro

1
probablemente :-) Pero la otra definición de cartograma es "un mapa con el que te metiste para hacer un punto"
Ian Turton

2

Puede usar GDAL para hacer esto, ya sea a través de archivos VRT o configurando los valores mediante programación, accediendo a la cuarta banda de un conjunto de datos RGBA (como un GeoTiff). Mostraré cómo usar un VRT porque es algo más simple: comenzando con un RGB Tiff, puede crear una imagen paletizada según las Preguntas frecuentes :

# 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

En el paso de edición, abra el resultado rgb.vrty modifique la tabla de colores según sea necesario, ajustando los c4valores (0-255) para establecer 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> 

Gracias scw. ¿Cómo sería exactamente mi flujo de trabajo para un escenario con polígonos vectoriales de 3k como entrada? ¿Debería crear primero un mapa coroplético sin alfa - guardar como ráster - y luego ajustar los valores ráster? Los valores tendrían que ser adaptados 'por polígono', supongo. Y tendría que automatizarlo de alguna manera de acuerdo con el campo que generará los valores alfa ...
radek

1

Me gusta eso, nunca antes había pensado en ese concepto.

Si tiene acceso a FME o la extensión de interoperabilidad de datos en ArcGIS, entonces hay un montón de transformadores que le permitirán manipular los valores de banda en un dataset ráster, incluida la banda alfa.

RasterExpressionEvaluator, RasterInterpretationCoercer y RasterBandOrderer son los que probaría al principio. Entonces podría importar / usar los datos en cualquier herramienta SIG / Visulisation.

Un colega mío utilizó una idea similar para crear contraseñas 'ocultas' dentro de una imagen de trama: http://www.fmepedia.com/index.php/PasswordGenerator

Divulgación: trabajo para Safe Software, creadores de FME.


Thx Mark. Lamentablemente no tengo acceso a FME. Y la interoperabilidad de datos no está incluida en mi licencia uni para ArcGIS: [
radek

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.