如何在GIS中实现按值绘制地图?


14

我最近一直在做一些有关制图的背景阅读,偶然发现了一些有趣的替代值-按字母 顺序排列的地图

此对概念进行了更详细的描述,并提供了全文(不公开)[此处] 2

在indiemaps 博客上有一些有关实现的详细信息:

...以上所有图形都是使用ActionScript 3制作的,仅使用文本编辑器和最新的免费Flex SDK ...

您如何在GIS软件包(ArcGIS?QuantumGIS?)中实现类似的功能?还是R和ggplot2?还是Python?



是的,它没有数字寿:[
radek 2010年

Answers:


7

这是一种在QGIS中按值进行Alpha的方法

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

您可以使用new ramp_colorscale_linearfunction以及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)))

在此处输入图片说明


1
很好的工作(尽管我不确定色带-尽管我意识到这只是一个有用的方法)。一个不错的补充可能是如何使图例与之搭配。
Andy W

是的,色带并没有真正起作用。如果您有更好的建议,我可以制作更新的图像。一直在考虑传说,一旦我有一个好的计划就会更新。(将与QGIS 2.0一起使用)
Nathan W

1
我确实尝试了白色和黑色,它们看上去很酷i.imgur.com/Wfg8T8P.png
内森(Nathan W)

查看罗斯原始文章 -他们建议使用坡道。由于去饱和,他们使用了一些(最初)饱和的双变量啤酒酿造厂的斜坡。黑色背景看起来不错,因为它们与IMO背景具有更大/更多的惊人对比。我在这里写了一些关于我的猜测的文章
Andy W

@AndyW更新了(也许)更好的图像。
内森·W

5

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

替代文字


谢谢mdsumner!看起来最接近我想要达到的目标。开始有点混乱R的空间功能,所以现在尝试用我的数据复制它。
radek

:R中的一些更多的例子dsparks.wordpress.com/2011/10/24/...
拉德克

4

我建议您检查一下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贴图,则使用伪造的插入图来复制图例)。

在此处输入图片说明

在此处输入图片说明


谢谢安迪。VIT看起来很有趣-必须尝试一下。
radek

需要对数据输入进行一些修改,但可以直接使用。探索性分析工具。唯一的问题_我找不到导出数据进行进一步处理的任何方法。
radek 2010年

3

您可以使用基于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是加利福尼亚的人口)


谢谢伊恩。是否可以自动化并使用其中一个变量在“每个多边形”的基础上应用这些样式?
radek 2010年

您需要放置一个函数来计算opacity参数中介于0-1之间的值。
伊恩·特顿

它不是“按字母顺序绘制的地图”,而不是“按字母顺序绘制的制图”吗?ian01.geog.psu.edu/geoserver_docs/cartogram/index.html正确指出:“地图是在地图上用其他变量代替面积或距离的图。”
昏暗

1
可能是:-)但是,制图的另一个定义是“您为了弄清楚而弄乱的地图”
伊恩·特顿

2

您可以通过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> 

谢谢scw。对于以3k矢量多边形作为输入的场景,我的工作流程会是什么样子?我是否应该先创建没有Alpha的Choropleth贴图-另存为栅格-然后调整栅格值?我认为这些值必须基于“每个多边形”进行调整吗?我不得不它在某种程度上根据,将推动阿尔法值的字段自动化..
拉德克·

1

我喜欢-我以前从未真正想到过这个概念。

如果您可以访问FME或ArcGIS中的数据互操作性扩展,那么可以使用许多转换器来操作栅格数据集中的波段值,包括Alpha波段。

我首先会尝试RasterExpressionEvaluator,RasterInterpretationCoercer和RasterBandOrderer。然后,您可以在任何GIS /可视化工具中导入/使用数据。

我的一位同事使用类似的想法在光栅图像内创建“隐藏”密码:http : //www.fmepedia.com/index.php/PasswordGenerator

披露:我确实为FME的安全软件工作。


谢谢马克。不幸的是,我无法使用FME。我的ArcGIS
统一

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.