15 votos

Cómo implementar valor-por-alfa mapa en SIG?

He estado haciendo una lectura de fondo acerca de cartograms recientemente y tropezó con la alternativa interesante - valor-por-alfa mapas.

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

Hay algunos detalles acerca de la aplicación en indiemaps blog:

... todos los anteriores gráficos fueron elaborados con ActionScript 3, el uso de un editor de texto y la gratuita más reciente del SDK de Flex...

Y al parecer, esta característica es una parte de indiemapper servicio.

Mi pregunta es: ¿cómo se podría implementar algo así como que en el paquete de SIG (ArcGIS? QuantumGIS?)? O R y ggplot2? O Python?

7voto

Jauder Ho Puntos 3172

Aquí es un método para hacer Alfa Por Valor en QGIS

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

Puede utilizar el nuevo ramp_color y scale_linear funciones de datos y símbolos 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)))

enter image description here

5voto

sgwill Puntos 2444

En R se puede leer en los polígonos y representar en un dispositivo que admite la transparencia. Aquí estoy usando el de windows (), R 2.12.0 con rgdal y sp paquetes.

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

4voto

Adam Tuttle Puntos 7982

Yo sugeriría que usted echa un vistazo a la Geo Vista del sitio y su software. El Visual kit de herramientas de Investigación, proporciona una interfaz gráfica de usuario del programa para implementar el bi-variable chloropleth mapas (conozco a una persona de aquí trabaja en ese proyecto y puede ser capaz de señalar a otros recursos).

Creo que el cartogrammer blog es suficiente para explicar la técnica, pero aquí es una genial artículo (abierto al público) para ver su uso en la práctica.

Geovisual analytics para mejorar la exploración espacial interpretación estadística: un análisis de los Estados Unidos la mortalidad por cáncer cervicouterino Jin Chen , Robert E Roth , Adam T Naito , Eugene J Lengerich y Alan M MacEachren Revista Internacional de Salud Geográficos de 2008, 7:57

Espero ver algunos ejemplos de código de Python y R también! Básicamente, cualquier programa que se pueda implementar un escala de esquema de color (o bivariante) puede crear un valor de alfa de mapa. A pesar de todas las implementaciones que he visto mencionados hasta ahora son para choropleth mapas, no hay ninguna razón que usted no podía hacer esto para un ráster o punto de mapas basados en así.


Recientemente he escrito un post en el blog sobre cómo llevarlas a la práctica en ArcGIS, Haciendo que el valor de alfa de mapas en ArcMap. Básicamente implica hacer capas separadas para un determinado transparencia y, a continuación, utilizando el vector de herramientas de edición disponibles dentro de ArcMap para producir la necesaria bivariante de la leyenda (o el uso de un falso recuadro del mapa para replicar la leyenda si usted desea producir un fondo negro VBA mapa).

enter image description here

enter image description here

3voto

Adam Ernst Puntos 6939

Usted podría hacer esto es uDig el uso de un SLD estilo basado en el que se calcula el % de opacidad uso de las funciones matemáticas de la OGC filtro de especificaciones. No estoy seguro de qué tan eficiente sería, pero sin duda podría ser utilizado para la prueba de concepto.

He construido una demostración en http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html con un debate 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)

2voto

Robert Höglund Puntos 5572

Usted podría utilizar GDAL para ello, ya sea a través de VRT archivos, o mediante el establecimiento de los valores mediante programación, accediendo a la cuarta banda de un RGBA conjunto de datos (como un GeoTiff). Te voy a mostrar cómo el uso de un VRT porque es algo más simple: partiendo de un RGB Tiff, podría crear un palleted de la imagen como por el 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

En la edición de paso, abrir la resultante rgb.vrt, y modificar la tabla de colores según sea necesario, el ajuste de la c4 valores (de 0 a 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> 

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X