我最近一直在做一些有关制图的背景阅读,偶然发现了一些有趣的替代值-按字母 顺序排列的地图。
在此对概念进行了更详细的描述,并提供了全文(不公开)[此处] 2。
在indiemaps 博客上有一些有关实现的详细信息:
...以上所有图形都是使用ActionScript 3制作的,仅使用文本编辑器和最新的免费Flex SDK ...
您如何在GIS软件包(ArcGIS?QuantumGIS?)中实现类似的功能?还是R和ggplot2?还是Python?
我最近一直在做一些有关制图的背景阅读,偶然发现了一些有趣的替代值-按字母 顺序排列的地图。
在此对概念进行了更详细的描述,并提供了全文(不公开)[此处] 2。
在indiemaps 博客上有一些有关实现的详细信息:
...以上所有图形都是使用ActionScript 3制作的,仅使用文本编辑器和最新的免费Flex SDK ...
您如何在GIS软件包(ArcGIS?QuantumGIS?)中实现类似的功能?还是R和ggplot2?还是Python?
Answers:
这是一种在QGIS中按值进行Alpha的方法
http://nathanw.net/2013/06/27/alpha-by-value-choropleth/
您可以使用new ramp_color
和scale_linear
function以及data定义的符号
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)))
在R中,您可以读取多边形并将其绘制在支持透明度的设备上。在这里,我使用带有rgdal和sp软件包的windows()设备R 2.12.0。
## 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)))
我建议您检查一下Geo Vista网站及其软件。该视觉查询工具包,提供了一个GUI程序来实现双变量chloropleth地图(我知道这里一张海报作品在该项目中,可能能够指向其他资源)。
我认为,制图师博客文章足以解释该技术,但是这里有一篇很酷的文章(向公众开放),以了解其实际应用。
地理视觉分析,以增强空间扫描统计解释:美国宫颈癌死亡率的分析 Jin Chen,Robert E Roth,Adam T Naito,Eugene J Lengerich和Alan M MacEachren国际卫生地理杂志2008,7:57
我希望也能看到一些Python和R的代码示例!基本上,任何可以实现两级颜色方案(或双变量)的程序都可以通过alpha映射创建值。尽管到目前为止我看到的所有实现都是针对Choropleth映射的,但没有理由您也不能针对基于栅格或基于点的映射实现该实现。
我最近写了一篇有关如何在ArcGIS中实现它们的博客文章,使用ArcMap通过alpha贴图实现价值。基本上,它需要为给定的透明度制作单独的图层,然后利用ArcMap中可用的矢量编辑工具来生成必要的双变量图例(或者,如果要生成黑色背景VBA贴图,则使用伪造的插入图来复制图例)。
您可以使用基于SLD的样式的uDig来执行此操作,该样式使用OGC过滤器规范中的数学函数来计算不透明度百分比。我不确定它的效率如何,但肯定可以用于概念验证。
我已经在http://ian01.geog.psu.edu/geoserver/www/cartogram/alphabyvalue.html上构建了一个演示,并在http://ian01.geog.psu.edu/geoserver_docs/cartogram/cartogram上进行了讨论。 html。事实证明,这很容易。
<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>
(其中30e6是加利福尼亚的人口)
您可以通过VRT文件或通过以编程方式设置值(通过访问RGBA数据集的第四个波段)(例如GeoTiff)来使用GDAL。我将展示VRT的使用方法,因为它稍微简单一些:从RGB Tiff开始,您可以按照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
在编辑步骤中,打开结果rgb.vrt
,然后根据需要修改颜色表,调整c4
值(0-255)以设置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>
我喜欢-我以前从未真正想到过这个概念。
如果您可以访问FME或ArcGIS中的数据互操作性扩展,那么可以使用许多转换器来操作栅格数据集中的波段值,包括Alpha波段。
我首先会尝试RasterExpressionEvaluator,RasterInterpretationCoercer和RasterBandOrderer。然后,您可以在任何GIS /可视化工具中导入/使用数据。
我的一位同事使用类似的想法在光栅图像内创建“隐藏”密码:http : //www.fmepedia.com/index.php/PasswordGenerator
披露:我确实为FME的安全软件工作。