Bagaimana cara mengimplementasikan peta value-by-alpha di GIS?

14

Saya telah melakukan beberapa bacaan latar belakang tentang cartograms baru-baru ini dan tersandung pada menarik alternatif - nilai-by-alpha peta .

Konsep dijelaskan secara lebih rinci di sini dan makalah lengkap tersedia [tidak secara terbuka] [di sini] 2 .

Ada beberapa detail tentang implementasi di blog indiemaps :

... semua gambar di atas diproduksi dengan ActionScript 3, hanya menggunakan editor teks dan Flex SDK gratis terbaru ...

Bagaimana Anda bisa mengimplementasikan sesuatu seperti itu dalam paket GIS (ArcGIS? QuantumGIS?)? Atau R dan ggplot2? Atau Python?

Radek
sumber
Seluruh makalah tersedia (untuk semua) di geovista.psu.edu/publications/2010/RothEtAl_2010_CJ.pdf
Ian Turton
benar, itu tidak memiliki angka tho: [
radek
4
Coba personal.psu.edu/rer198/publications/RothEtAl_2010_CJ.pdf yang Rob meyakinkan saya memiliki angka juga.
Ian Turton

Jawaban:

7

Berikut adalah metode untuk melakukan Alpha By Value di QGIS

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

Anda dapat menggunakan simbol baru ramp_colordan scale_linearfungsi dan data yang ditentukan

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

masukkan deskripsi gambar di sini

Nathan W
sumber
1
Kerja yang bagus (walaupun saya tidak yakin dengan color ramp - walaupun saya sadar ini hanya cara yang berguna). Tambahan yang bagus mungkin adalah bagaimana membuat legenda itu sesuai dengannya.
Andy W
Ya jalur warna tidak benar-benar berfungsi. Jika Anda memiliki saran yang lebih baik, saya dapat membuat gambar yang diperbarui. Telah memikirkan legenda, akan memperbarui begitu saya punya rencana yang baik. (Itu akan bekerja dengan QGIS 2.0)
Nathan W
1
Saya memang mencoba putih dan hitam yang memiliki tampilan cukup keren i.imgur.com/Wfg8T8P.png
Nathan W
Lihat artikel Roth yang asli - mereka telah menyarankan landai. Karena desaturasi, mereka menggunakan beberapa landai bir warna bivariat yang lebih (awalnya). Latar belakang hitam terlihat bagus untuk ini karena mereka memberikan kontras yang lebih besar / lebih menakjubkan dengan latar IMO. Saya telah menulis beberapa spekulasi saya di sini .
Andy W
@AndyW diperbarui dengan (mungkin) gambar yang lebih baik.
Nathan W.
5

Dalam R Anda dapat membaca dalam poligon dan memplotnya pada perangkat yang mendukung transparansi. Di sini saya menggunakan perangkat windows (), R 2.12.0 dengan paket rgdal dan 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)))

teks alternatif

mdsumner
sumber
Terima kasih mdsumner! Itu terlihat paling dekat dengan apa yang ingin saya capai. Mulai mengotak-atik fungsi spasial R sedikit jadi akan mencoba untuk mereplikasi dengan data saya sekarang.
radek
Beberapa contoh lagi di R: dsparks.wordpress.com/2011/10/24/…
radek
4

Saya sarankan Anda memeriksa situs Geo Vista dan perangkat lunak mereka. The Visual Kirim Toolkit , menyediakan program GUI untuk melaksanakan peta chloropleth bi-variate (saya tahu satu poster di sini bekerja di proyek itu dan mungkin dapat titik ke sumber daya lainnya).

Saya pikir posting blog kartogrammer cukup untuk menjelaskan teknik, tetapi di sini ada artikel yang cukup keren (terbuka untuk umum) untuk melihat penggunaannya dalam praktek.

Analitik geovisual untuk meningkatkan interpretasi statistik pemindaian spasial: analisis mortalitas kanker serviks AS Jin Chen, Robert E Roth, Adam T Naito, Eugene J Lengerich, dan Alan M MacEachren International Journal of Health Geographics 2008, 7:57

Saya berharap untuk melihat beberapa contoh kode untuk Python dan R juga! Pada dasarnya setiap program yang dapat mengimplementasikan skema warna dua-skala (atau bivariat) dapat membuat nilai berdasarkan peta alfa. Meskipun semua implementasi yang saya lihat terdaftar sejauh ini adalah untuk peta choropleth, tidak ada alasan Anda tidak dapat mengimplementasikan ini untuk peta berbasis raster atau titik juga.


Baru-baru ini saya menulis posting blog tentang bagaimana mengimplementasikannya di ArcGIS, Membuat nilai berdasarkan peta alpha dengan ArcMap . Pada dasarnya diperlukan membuat lapisan terpisah untuk transparansi yang diberikan, dan kemudian menggunakan alat pengeditan vektor yang tersedia dalam ArcMap untuk menghasilkan legenda bivariat yang diperlukan (atau menggunakan peta inset palsu untuk mereplikasi legenda jika Anda ingin membuat peta VBA latar belakang hitam).

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Andy W
sumber
Terima kasih Andy VIT terlihat cukup menarik - harus mencobanya.
radek
Diperlukan sedikit mengutak-atik input data, tetapi bekerja di luar kotak. Alat Greaat untuk analisis eksplorasi. Satu-satunya masalah _ Saya tidak dapat menemukan cara untuk mengekspor data untuk diproses lebih lanjut.
radek
3

Anda bisa melakukan ini dengan menggunakan gaya berbasis SLD yang menghitung% opacity menggunakan fungsi matematika dalam spesifikasi filter OGC. Saya tidak yakin seberapa efisien itu tetapi pasti bisa digunakan untuk bukti konsep.

Saya telah membuat demo di http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html dengan diskusi di http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram. html . Ternyata itu cukup mudah.

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

(di mana 30e6 adalah populasi California)

Ian Turton
sumber
Terima kasih Iant. Apakah mungkin untuk mengotomatisasi dan menerapkan gaya-gaya ini atas dasar 'per poligon' menggunakan salah satu variabel?
radek
Anda harus meletakkan fungsi untuk menghitung nilai antara 0-1 di parameter opacity.
Ian Turton
Bukankah seharusnya "Value-by-alpha Map", bukan "Value-by-alpha Cartograms"? ian01.geog.psu.edu/geoserver_docs/cartogram/index.html menyatakan dengan benar bahwa: "Kartogram adalah peta tempat beberapa variabel lain diganti di tempat luas atau jarak."
underdark
1
mungkin :-) Tetapi definisi lain dari kartogram adalah "peta yang Anda buat untuk membuat titik"
Ian Turton
2

Anda bisa menggunakan GDAL untuk melakukan ini, baik melalui file VRT, atau dengan menetapkan nilai-nilai secara terprogram, dengan mengakses band keempat dari dataset RGBA (seperti GeoTiff). Saya akan menunjukkan bagaimana menggunakan VRT karena ini lebih sederhana: dimulai dengan RGB Tiff, Anda dapat membuat gambar pucat sesuai 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

Pada langkah pengeditan, buka hasilnya rgb.vrt, dan ubah tabel warna sesuai kebutuhan, sesuaikan c4nilainya (0-255) untuk mengatur 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
sumber
Terima kasih scw. Seperti apa sebenarnya alur kerja saya untuk skenario dengan poligon vektor 3k sebagai input? Haruskah saya membuat peta choropleth tanpa alpha - save as raster - dan kemudian sesuaikan nilai raster? Nilai-nilai harus diadaptasi berdasarkan 'per poligon' saya kira? Dan saya harus mengotomasinya entah bagaimana sesuai dengan bidang yang akan mendorong nilai alpha ..
radek
1

Saya suka itu - saya tidak pernah benar-benar memikirkan konsep itu sebelumnya.

Jika Anda memiliki akses ke FME atau ekstensi Interoperabilitas Data di ArcGIS, maka ada banyak transformer yang akan memungkinkan Anda memanipulasi nilai band dalam dataset raster, termasuk band alpha.

RasterExpressionEvaluator, RasterInterpretationCoercer dan RasterBandOrderer adalah yang akan saya coba pada awalnya. Kemudian Anda dapat mengimpor / menggunakan data dalam alat GIS / Visulisation apa pun.

Seorang kolega saya menggunakan ide serupa untuk membuat kata sandi 'tersembunyi' di dalam gambar raster: http://www.fmepedia.com/index.php/PasswordGenerator

Pengungkapan: Saya bekerja untuk Pembuat Perangkat Lunak Aman.

Tandai Irlandia
sumber
Thx Mark. Sayangnya saya tidak memiliki akses ke FME. Dan Interoperabilitas Data tidak termasuk dalam lisensi uni saya untuk ArcGIS: [
radek
1

Satu lagi deskripsi dari Josh tentang bagaimana mengimplementasikannya di QGIS

masukkan deskripsi gambar di sini

Tutorial yang sangat bagus dan terperinci.

Radek
sumber