一、地图会说谎

地图作为真实世界的抽象,是“用图说话”最可靠的工具,但是有的时候地图也会撒一些小小的谎言,其中最著名的例子当属美国总统大选。如图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

数据处理:

  1. 把上面得到的表格与美国州的地理数据(矢量面数据)使用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工具使用说明:

  1. 如果使用的是ArcGIS10及以上版本,需要对工具中的两个dll文件进行注册,在命令行中输入regsvr32+dll存放路径,例如:

regsvr32“F:\ArcGIS Tools\Cartograms\BnchMrkCartogram.dll”

  1. value field只能处理正数,如果有小数和负数则执行会发生错误;
  2. 输出的格式只能为Geodatabase。

(本文示例数据可在http://ishare.iask.sina.com.cn/f/65192714.html下载)

 

ArcGIS之Cartogram地图变形记的更多相关文章

  1. 重写TiledServiceLayer实现Arcgis访问Mapabc地图服务 (转载)

    package com.baixin.main;/** *  * @ClassName:   MapAbcToArcGISTLayer * @Description:    ArcGIS访问MapAb ...

  2. 三角形变形记之纯css实现的分布导航条效果

    三角形变形记,用纯css实现的分布导航条效果 <style type="text/css"> ul,li { list-style-type:none; font-si ...

  3. [转]ArcGIS移动客户端离线地图的几种解决方案

    原文地址:http://blog.chinaunix.net/uid-10914615-id-3023158.html 移动GIS中,通常将数据分为两大类:basemap layer和operatio ...

  4. ArcGIS for Silverlight 地图卷帘

    原文:ArcGIS for Silverlight 地图卷帘 ArcGIS 地图卷帘 for Silverlight 地图卷帘,其实就是遮罩的效果,在Silverlight里实现这样的效果,对于熟悉S ...

  5. 前端 MVC 变形记

    背景: MVC是一种架构设计模式,它通过关注点分离鼓励改进应用程序组织.在过去,MVC被大量用于构建桌面和服务器端应用程序,如今Web应用程序的开 发已经越来越向传统应用软件开发靠拢,Web和应用之间 ...

  6. Echarts地图使用经验-地图变形和添加数据

    关于echart2,echart3地图的使用一点人生经验: 1.echart3,echart2加载地图变形修复. 最近在使用echart2使用过程中,发现加载海南地图会产生变形.如下图,海南地图产生了 ...

  7. ArcGIS for Android地图上实际距离与对应的屏幕像素值计算

    本篇文章主要介绍了"ArcGIS for Android地图上实际距离与对应的屏幕像素值计算",主要涉及到ArcGIS for Android地图上实际距离与对应的屏幕像素值计算方 ...

  8. ArcGIS软件操作——地图配准

    初次写博文,出现措词不当.表述不明确等之类的问题,敬请见谅,但会努力做好.同时,也欢迎各位提出意见,共同交流,共同进步! 直奔主题——运用ArcGIS软件对地图进行配准! 1 数据准备:网络下载的中国 ...

  9. 旧书重温:0day2【5】shellcode变形记

    紧接上一篇,结合第一篇 //这篇文章主要成功溢出一个带有缓冲区溢出的小程序,其中我们的shellcode被strcpy截断了所以我们需要变形shellcode,这个实验中也出现了很多意想不到的拦路虎, ...

随机推荐

  1. 小tips

    ios::sync_with_stdio(false);  加速读入的,加上这条语句可以使cin和cout的速度和scanf和printf差不多.

  2. JavaScript(三) 正则表达式 以及实现的功能

    RegExp 是正则表达式的缩写.定义RegExp正则表达式 RegExp 对象用于存储检索模式. 通过 new 关键词来定义 RegExp 对象.以下代码定义了名为 p 的 RegExp 对象,其模 ...

  3. Redis——学习之路四(初识主从配置)

    首先我们配置一台master服务器,两台slave服务器.master服务器配置就是默认配置 端口为6379,添加就一个密码CeshiPassword,然后启动master服务器. 两台slave服务 ...

  4. json序列化及反序列化

    /// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T"> ...

  5. React-webpack开发需要的那些坑

    nvariant Violation: _registerComponent(...): Target container is not a DOM element. 就是一个找不到DOM节点的问题, ...

  6. 栈的JS实现

    栈,是一种特殊的线性表,其插入及删除的操作都在线性表的同一端进行.这一端称为栈顶,另一端称为栈底.就类似于餐厅里的一摞盘子,后放的盘子在上方,也会先被人拿走.栈具有"后进先出"的逻 ...

  7. BZOJ4516: [Sdoi2016]生成魔咒 后缀自动机

    #include<iostream> #include<cstdio> #include<cstring> #include<queue> #inclu ...

  8. Java序列化、反序列化和单例模式

    学习JAVA的时候,特别是涉及到网络编程时,我们时常让我们的实体类实现一个接口 public class Entity implements Serializable{ } 这样子我们可以通过输入输出 ...

  9. dubbo 常见错误

    1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 或 Caused by: java.lang.NoSuchMet ...

  10. 正则表达式preg_replace中危险的/e修饰符带来的安全漏洞问题

    mixed preg_replace ( mixed pattern, mixed replacement, mixed subject [, int limit]) /e 修饰符使 preg_rep ...