ArcGIS之Cartogram地图变形记
一、地图会说谎
地图作为真实世界的抽象,是“用图说话”最可靠的工具,但是有的时候地图也会撒一些小小的谎言,其中最著名的例子当属美国总统大选。如图1是2012年美国总统大选后网上给出的一个结果图,红色代表共和党罗姆尼获胜的州,蓝色代表民主党奥巴马获胜的州,从地图来看罗姆尼占有很大的优势,而事实却是奥巴马赢得了大选的胜利! 因为在这幅地图中,用颜色来对州来进行定性渲染时,却无意中忽略了选票这个数量指标,所以在这张地图上无法反映出奥巴马的选票优势,这也是为什么有Cartogram出现的原因。

图1 2012年美国大选各州获胜结果示意图
Cartogram又称变形地图或夸张地图,是比较早出现的一种统计地图形式,其历史可以追溯到1868年。Cartogram可以依据某个专题属性对地理要素进行扭曲、变形,用专题属性值的大小取代真实面积,利用夸张的效果更直观地反映数量特征。主流的Cartogram可以分为连续和非连续两类,连续的变形地图是指要素仍然维持原有邻接的拓扑关系,ArcGIS可以支持这种变形的算法;非连续的变形地图指要素之间不再具有相邻接的关系。如图2中就是一种连续的变形地图,根据选票对各个州进行了形状扭曲,利用夸张后的面积来反映选票的数量。

图2 2012年美国大选各州选票变形地图
二、ArcGIS制作Cartogram实例
在这片小文中,我们就在ArcGIS中来真实地再现美国总统大选的这个例子。
数据获取:
2012年大选的选票结果可见网站,我们可以把表格直接保存下来存为csv格式(http://uselectionatlas.org/RESULTS/data.php?year=2012&datatype=national&def=1&f=0&off=0&elect=0)
数据处理:
- 把上面得到的表格与美国州的地理数据(矢量面数据)使用join关联起来,完整的属性信息如下所示:

2.为了区分哪些是奥巴马选票多的州,哪些是罗姆尼选票多的州,需添加一个字段flag,使用字段计算器为其赋值(1为奥巴马获胜的州,-1为罗姆尼获胜的州),这里我们选择Python来写代码:
def calflag(o,r):
if (o>r):
return 1
else:
return -1
3.下面我们就要开始对地图进行变形,那么每个州的变形取决于其获胜者的选票数量,这就要再添加一个字段vote,使用字段计算器为其赋值:
def calvote(flag,o,r):
if (flag==1):
return o
else:
return r
4.打开Cartogram工具(下载地址http://arcscripts.esri.com/details.asp?dbid=15638),参数设置如下:

图层渲染:
对Cartogram工具输入和输出的两个图层都使用下面的渲染方法进行显示,就分别得到了前面图1和图2中的地图。

Cartogram工具使用说明:
- 如果使用的是ArcGIS10及以上版本,需要对工具中的两个dll文件进行注册,在命令行中输入regsvr32+dll存放路径,例如:
regsvr32“F:\ArcGIS Tools\Cartograms\BnchMrkCartogram.dll”
- value field只能处理正数,如果有小数和负数则执行会发生错误;
- 输出的格式只能为Geodatabase。
(本文示例数据可在http://ishare.iask.sina.com.cn/f/65192714.html下载)
ArcGIS之Cartogram地图变形记的更多相关文章
- 重写TiledServiceLayer实现Arcgis访问Mapabc地图服务 (转载)
package com.baixin.main;/** * * @ClassName: MapAbcToArcGISTLayer * @Description: ArcGIS访问MapAb ...
- 三角形变形记之纯css实现的分布导航条效果
三角形变形记,用纯css实现的分布导航条效果 <style type="text/css"> ul,li { list-style-type:none; font-si ...
- [转]ArcGIS移动客户端离线地图的几种解决方案
原文地址:http://blog.chinaunix.net/uid-10914615-id-3023158.html 移动GIS中,通常将数据分为两大类:basemap layer和operatio ...
- ArcGIS for Silverlight 地图卷帘
原文:ArcGIS for Silverlight 地图卷帘 ArcGIS 地图卷帘 for Silverlight 地图卷帘,其实就是遮罩的效果,在Silverlight里实现这样的效果,对于熟悉S ...
- 前端 MVC 变形记
背景: MVC是一种架构设计模式,它通过关注点分离鼓励改进应用程序组织.在过去,MVC被大量用于构建桌面和服务器端应用程序,如今Web应用程序的开 发已经越来越向传统应用软件开发靠拢,Web和应用之间 ...
- Echarts地图使用经验-地图变形和添加数据
关于echart2,echart3地图的使用一点人生经验: 1.echart3,echart2加载地图变形修复. 最近在使用echart2使用过程中,发现加载海南地图会产生变形.如下图,海南地图产生了 ...
- ArcGIS for Android地图上实际距离与对应的屏幕像素值计算
本篇文章主要介绍了"ArcGIS for Android地图上实际距离与对应的屏幕像素值计算",主要涉及到ArcGIS for Android地图上实际距离与对应的屏幕像素值计算方 ...
- ArcGIS软件操作——地图配准
初次写博文,出现措词不当.表述不明确等之类的问题,敬请见谅,但会努力做好.同时,也欢迎各位提出意见,共同交流,共同进步! 直奔主题——运用ArcGIS软件对地图进行配准! 1 数据准备:网络下载的中国 ...
- 旧书重温:0day2【5】shellcode变形记
紧接上一篇,结合第一篇 //这篇文章主要成功溢出一个带有缓冲区溢出的小程序,其中我们的shellcode被strcpy截断了所以我们需要变形shellcode,这个实验中也出现了很多意想不到的拦路虎, ...
随机推荐
- Tween Animation----Alpha渐变透明度动画
本博文是我自己操作过的并且能运行才给大家分享的 layout ----activity_main.xml 在res/新建一个anim文件夹,用来保存动画属性的xml 在anim文件夹里新建一个alph ...
- 解决autolt上传图片报错cannot open system clipboard
今天调试代码,发现本地可以上传图片,但是集成环境无法上传报错cannot open system clipboard: 百度查了下,我的系统没有剪切板程序,才报错. 验证方法如下: win+r,输入c ...
- oracle(sql)基础篇系列(五)——PLSQL、游标、存储过程、触发器
PL/SQL PL/SQL 简介 每一种数据库都有这样的一种语言,PL/SQL 是在Oracle里面的一种编程语言,在Oracle内部使用的编程语言.我们知道SQL语言是没有分支和循环的,而PL语 ...
- SparkLauncher 1.6 版本bug
背景 近期在研究使用java api的方式来调用Spark程序,通过句柄的方式来完成监控Job运行状态.及时杀死Job等功能.官方文档直接指出使用Java/Scala创建Job的方式——利用Spark ...
- Flask下如何处理Requests 上传中文文件名的问题
一.问题的由来 最近有个项目,叫做文档服务资源中心,类似于七牛,为各个业务系统提供统一的文件资源服务,包括文件的存储.操作管理.下载.预览等.在做文件存储的时候,遇到了这个当指定上传的文件名为 ...
- 移动端常用的meta
1. 禁止缩放:<meta name="viewport" content="width=device-width, initial-scale=1.0, maxi ...
- #研发解决方案#分布式并行计算调度和管理系统Summoner
郑昀 创建于2015/11/10 最后更新于2015/11/12 关键词:佣金计算.定时任务.数据抽取.数据清洗.数据计算.Java.Redis.MySQL.Zookeeper.azkaban2.oo ...
- java记录
1. 包装类与自动装箱问题:在justjavac的博客上看到翻译的一篇文章 离开java,寻找更佳语言的十大理由 中关于自动装箱的一个描述: 这个特性是为了解决因原生类型的存在所导致的问题,在Java ...
- css3 linear-gradient实现页面加载进度条效果
最终效果图: html结构: <div> <p class="p1"> <span></span> < ...
- spring quartz 配置实现定时任务 详解
一. 编写定时任务JAVA类 比如: public class QuartzJob { public QuartzJob(){ System.out.println(" ...