Comment implémenter une carte valeur par alpha dans le SIG?

14

J'ai récemment lu quelques informations sur les cartogrammes et suis tombé sur une alternative intéressante - les cartes de valeur par alpha .

Le concept est décrit plus en détail ici et le document complet est disponible [pas ouvertement] [ici] 2 .

Il y a quelques détails sur l'implémentation sur le blog indiemaps :

... tous les graphiques ci-dessus ont été produits avec ActionScript 3, en utilisant uniquement un éditeur de texte et le dernier SDK Flex gratuit ...

Comment pourriez-vous implémenter quelque chose comme ça dans un package SIG (ArcGIS? QuantumGIS?)? Ou R et ggplot2? Ou Python?

radek
la source
L'ensemble du document est disponible (pour tous) sur geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton
vrai, il n'a pas de chiffres: [
radek
4
Essayez personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf dont Rob m'assure qu'il a aussi des chiffres.
Ian Turton

Réponses:

7

Voici une méthode pour faire Alpha By Value dans QGIS

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

Vous pouvez utiliser le nouveau ramp_coloret les scale_linearfonctions et symboles définis par les données

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

entrez la description de l'image ici

Nathan W
la source
1
Beau travail (bien que je ne sois pas sûr de la palette de couleurs - même si je me rends compte que c'est juste un mode d'emploi utile). Un bon ajout pourrait être de savoir comment créer la légende.
Andy W
Oui, la rampe de couleur n'a pas vraiment fonctionné. Si vous avez une meilleure suggestion, je peux faire une image mise à jour. J'ai pensé à la légende, je mettrai à jour une fois que j'ai un bon plan. (Cela fonctionnera avec QGIS 2.0)
Nathan W
1
J'ai essayé le blanc et le noir qui ont un look plutôt cool i.imgur.com/Wfg8T8P.png
Nathan W
Consultez l' article original de Roth - ils ont suggéré des rampes. En raison de la désaturation, ils utilisent certaines des rampes d'infusion bivariées plus (initialement) saturées. Les arrière-plans noirs sont agréables pour ces derniers car ils offrent un contraste plus grand / plus étonnant avec l'arrière-plan IMO. J'en ai écrit ici sur mes spéculations .
Andy W
@AndyW mis à jour avec une (peut-être) meilleure image.
Nathan W
5

Dans R, vous pouvez lire les polygones et les tracer sur un appareil qui prend en charge la transparence. Ici, j'utilise le périphérique windows (), R 2.12.0 avec les packages rgdal et 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)))

texte alternatif

mdsumner
la source
Merci mdsumner! Cela ressemble le plus à ce que j'aimerais réaliser. J'ai commencé à jouer un peu avec la fonctionnalité spatiale de R, alors j'essaierai de la répliquer avec mes données maintenant.
radek
Quelques exemples dans R: dsparks.wordpress.com/2011/10/24/...
radek
4

Je vous suggère de consulter le site Geo Vista et leurs logiciels. Le Visual Inquiry Toolkit , fournit un programme GUI pour implémenter les cartes de chloroplèthes bi-variées (je sais qu'une affiche ici fonctionne sur ce projet et peut être en mesure de pointer vers d'autres ressources).

Je pense que le blog du cartogrammer est suffisant pour expliquer la technique, mais voici un article assez cool (ouvert au public) pour voir son utilisation en pratique.

Analyses géovisuelles pour améliorer l'interprétation statistique des analyses spatiales: une analyse de la mortalité américaine par cancer du col utérin Jin Chen, Robert E Roth, Adam T Naito, Eugene J Lengerich et Alan M MacEachren International Journal of Health Geographics 2008, 7:57

J'espère voir aussi quelques exemples de code pour Python et R! Fondamentalement, tout programme qui peut implémenter un jeu de couleurs à deux échelles (ou bivarié) peut créer une valeur par carte alpha. Bien que toutes les implémentations que j'ai vues jusqu'à présent concernent des cartes choroplèthes, il n'y a aucune raison pour que vous ne puissiez pas implémenter cela pour une carte raster ou basée sur des points.


J'ai récemment écrit un article de blog sur la façon de les implémenter dans ArcGIS, Making value by alpha maps with ArcMap . Cela implique essentiellement de créer des couches distinctes pour une transparence donnée, puis d'utiliser les outils d'édition vectorielle disponibles dans ArcMap pour produire la légende bivariée nécessaire (ou utiliser une fausse carte en médaillon pour reproduire la légende si vous souhaitez produire une carte VBA de fond noir).

entrez la description de l'image ici

entrez la description de l'image ici

Andy W
la source
Thx Andy. VIT semble assez intéressant - devra essayer.
radek
Requis un peu de bricolage avec l'entrée de données, mais fonctionne hors de la boîte. Outil Greaat pour l'analyse exploratoire. Le seul problème _ Je ne trouve aucun moyen d'exporter les données pour un traitement ultérieur.
radek
3

Vous pouvez le faire en utilisant uDig en utilisant un style basé sur SLD qui calcule le% d'opacité en utilisant les fonctions mathématiques dans la spécification de filtre OGC. Je ne sais pas à quel point ce serait efficace, mais pourrait certainement être utilisé comme preuve de concept.

J'ai construit une démo à http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html avec une discussion à http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram. html . Il s'avère que c'est assez facile.

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

(où 30e6 est la population de la Californie)

Ian Turton
la source
Merci Iant. Serait-il possible de l'automatiser et d'appliquer ces styles «par polygone» en utilisant l'une des variables?
radek
Vous auriez besoin de mettre une fonction pour calculer une valeur entre 0-1 dans le paramètre d'opacité.
Ian Turton
Ne devrait-il pas s'agir de "Carte valeur par alpha" au lieu de "Cartogrammes valeur par alpha"? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html indique correctement que: "Un cartogramme est une carte où une autre variable est substituée à la place de la zone ou de la distance."
underdark
1
probablement :-) Mais l'autre définition du cartogramme est "une carte avec laquelle vous avez joué pour faire valoir un point"
Ian Turton
2

Vous pouvez utiliser GDAL pour ce faire, soit via des fichiers VRT, soit en définissant les valeurs par programme, en accédant à la quatrième bande d'un jeu de données RGBA (tel qu'un GeoTiff). Je vais vous montrer comment utiliser un VRT car c'est un peu plus simple: à partir d'un RVB Tiff, vous pouvez créer une image sur palette selon la 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

Dans l'étape d'édition, ouvrez le résultat rgb.vrtet modifiez la table de couleurs selon vos besoins, en ajustant les c4valeurs (0-255) pour définir l'alpha:

<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
la source
Merci scw. À quoi ressemblerait exactement mon flux de travail pour un scénario avec des polygones vectoriels 3k en entrée? Dois-je d'abord créer une carte choroplèth sans alpha - enregistrer en tant que raster - puis ajuster les valeurs du raster? Les valeurs devraient être adaptées «par polygone», je présume? Et je devrais l'automatiser en quelque sorte en fonction du champ qui conduira aux valeurs alpha ..
radek
1

J'aime ça - je n'avais jamais vraiment pensé à ce concept auparavant.

Si vous avez accès à FME ou à l'extension d'interopérabilité des données dans ArcGIS, il existe un tas de transformateurs qui vous permettront de manipuler les valeurs de bande dans un jeu de données raster, y compris la bande alpha.

RasterExpressionEvaluator, RasterInterpretationCoercer et RasterBandOrderer sont ceux que j'essaierais au début. Ensuite, vous pouvez importer / utiliser les données dans n'importe quel outil SIG / Visulisation.

Un de mes collègues a utilisé une idée similaire pour créer des mots de passe «cachés» dans une image raster: http://www.fmepedia.com/index.php/PasswordGenerator

Divulgation: Je travaille pour les éditeurs de logiciels sûrs de FME.

Mark Ireland
la source
Thx Mark. Malheureusement, je n'ai pas accès à FME. Et l'interopérabilité des données n'est pas incluse dans ma licence uni pour ArcGIS: [
radek
1

Une autre description de Josh sur la façon de l'implémenter dans QGIS

entrez la description de l'image ici

Tutoriel très bon et détaillé.

radek
la source