首家大数据培训挂牌机构 股票代码:837906 | EN CN
阿里巴巴菜鸟级数据产品经理半年回顾总结篇
干货教程:如何绘制业务流程图(二)
干货教程:如何绘制业务流程图(一)
技术贴:如何在数据库中秘密地查询隐私数据
攻略教程:信息图(infographic)是怎么做出来的?
分析师一定要看!用数据讲故事的五个步骤
技术篇:怎样玩转千万级别的数据?
北漂书生:大数据时代SEO数据如何搜集和分析
干货,从十大问题重新认识并读懂互联网
相似图片搜索、算法、识别的原理解析(下)
相似图片搜索、算法、识别的原理解析(上)
制作信息图时请遵循这10条原则
提高表格可读性的一些技巧,适用于Excel、PPT等数据报表
实用教程:如何让Excel图表更具“商务气质”?
一张数据信息图是这样制作完成的
菜鸟读财报,如何从上市公司财报中挖情报?
北大数据分析老鸟写给学弟们一封信
如何一步一步制作出高品质数据信息图?
总结:海量数据分析处理的十个方法
【实战经验】数据分析师如何了解老板真正想法?
零售业数据分析那些事儿
数据分析时l常用电子表格公式【大全】
用数据来告诉你 上市公司财报的秘密
这12个数据能 帮你搞定淘宝店铺
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(四)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(三)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(二)
首席工程师揭秘:LinkedIn大数据后台是如何运作的?(一)
淘宝网店从激活到挽留,4步走玩转数据营销
文案怎样写才有意思、不空洞、打动人?
入门级扫盲贴:数据分析的步骤有哪些?
关系即数据,论社交媒体的关系转换
数据的力量,苹果教你用数据鄙视竞争对手
谁说文科生不能做数据分析?数据分析入行→技能提升→优势
产品运营数据分析——SPSS数据分组案例
如何追踪iPhone和iPad等移动设备的用户行为数据?
阿里巴巴中国站:用户满意度指标权重计算方法
广告中的AdNetwork、AdExchange、DSP、SSP、RTB和DMP是什么?
信息图制作教程:关于数值的表现
为什么大数据会如此轰动?(值得深度的文章)
多图技术贴:深入浅出解析大数据平台架构
面板数据分析中标准误的估计修正——根据Peterson (2009)的归纳
财务官、投资人、CIO看过来:给企业数据定价
推荐系统中常用算法 以及优点缺点对比
探索Weotta搜索引擎背后的大数据技术
如何识别虚假数据?
为什么我们像驯化小狗那样驯化算法
程序员必须知道的10大基础实用算法及其讲解
电子商务:最影响转化率的九大要素
如何迅速成为一名数据分析师?
想从事大数据、海量数据处理相关的工作,如何自学打基础?
如何用亚马逊弹性MapReduce分析大数据?
译文:机器学习算法基础知识
给hadoop新手的一封信:Hadoop入门自学及对就业的帮助
从入门到精通,我是这样学习算法的
小商家,从老客户身上获取的数据才更有意义
13页PPT讲述:大数据下网站数据分析应用
40页PPT详解:京东大数据基础构架与创新应用
67页PPT解密搜索引擎背后的大技术:知识图谱,大数据语义链接的基石
营销洞察力——10个营销度量指标
技术篇:前端数据之美如何展示?
董飞:美国大数据工程师面试攻略【PPT】
easel:如何制作好的信息图——来自专家的顶级技巧
大数据实操:以3D打印机为例,如何知道卖点有没有市场需求?
大数据建模 需要了解的九大形式
用户画像数据建模方法
从规划开始,公司or企业如何入手和实施大数据?
干货:商品信息数据分析和展现系统的设计与开发
高手教你用Excel制作百度迁徙数据地图
50篇干货:淘宝店/电子商务如何玩转数据分析?
精华索引:大数据实际应用案例50篇
验证最小化可行产品 (MVP) 的 15 种方法
干货:数据分析师的完整知识结构
大数据技术Hadoop面试题,看看你能答对多少?答案在后面
用SPSS做数据分析?先弄懂SPSS的基础知识吧
怎样做出优秀的扁平化设计风格PPT? 扁平化PPT设计手册#3
解答│做大数据过程中遇到的13个问题
40页PPT│社交网络发展的新动力:大数据与众包
以Amazon、豆瓣网为例,探索推荐引擎内部的秘密#1
怎样做出优秀的扁平化设计风格PPT?#2
怎样做出优秀的扁平化设计风格PPT?#1
36页PPT│大数据分析关键技术在腾讯的应用服务创新
如何丰满地做SWOT分析?
【35页PPT】TalkingData研发副总阎志涛:移动互联网大数据处理系统架构
27页PPT|以珍爱网为例,如何构建有业务价值的数据分析系统?
国外数据新闻资源分享
21页PPT重磅发布:Mariana——腾讯深度学习平台的进展与应用
从0到100——知乎架构变迁史
PPT解读:百度大数据质量保障方案探索
45页PPT|大数据环境下实现一个O2O通用推荐引擎的实践
从数据看豆瓣兴衰
深度学习系列:解密最接近人脑的智能学习机器——深度学习及并行化实现(四)
重磅推荐:129页PPT讲述移动时代创业黄金法则 via:腾讯企鹅智酷
重磅推荐:大数据工程师飞林沙的年终总结&算法数据的思考
OpenKN——网络大数据时代的知识计算引擎
大数据下城市计算的典型应用
技术贴:大数据告诉你,如何给微信公众号文章取标题?
你的QQ暴露了你的心——QQ大数据及其应用介绍PPT
如何从企业报表看企业的生存能力?
实用的大数据技巧合集
技术帝揭秘:充电宝是如何盗取你的个人隐私的?
重磅!50页PPT揭秘腾讯大数据平台与推荐应用架构
原创教程:饼图之复合饼图与双层饼图(1)
PPT:大数据时代的设计特点——不了解这个你做不了今天的设计
教程贴:如何用方程式写春联?
原创教程:如何用Excel制作简易动态对比图
深度译文:机器学习那些事
教程帖:数学之美——手把手教你用Excel画心(动态图)
董老师走进斯坦福,聊聊硅谷创业公司和大数据的事儿(附课件PPT下载)
【限时】年度钜献,108个大数据文档PDF开放下载
董飞专栏:大数据入门——大数据相关技术、Hadoop生态、LinkedIn内部实战
亿级用户下的新浪微博平台架构
一张图了解磁盘里的数据结构
浅析数据化设计思维在阿里系产品的应用
美团推荐算法实践
一个P2P创业公司有哪些部门,都是做什么的?
一个P2P平台的详细运营框架是怎样的?
机器学习中的算法——决策树模型组合之随机森林与GBDT
神经网络简史
58页PPT看懂互联网趋势,大数据/物联网/云计算/4G都有了
广点通背后的大数据技术秘密——大规模主题模型建模及其在腾讯业务中的应用(附PPT)
微信红包之CBA实践PPT——移动互联网海量访问系统设计
一文读懂机器学习,大数据/自然语言处理/算法全有了……
搜狐新闻客户端的背后大数据技术原理——推荐系统(PPT)
原创教程:用Excel做动态双层饼图
半小时读懂PMP私有广告交易市场
怎样分析样本调研数据(译)
PPT:支付宝背后的大数据技术——DataLab、Higo的实践及应用
大数据技术人员的工具包——开源大数据处理工具list(限时下载)
计算机视觉:随机森林算法在人体识别中的应用
24页PPT:机器学习——支持向量机SVM简介(附下载)
互联网高手教你如何搜集你想要的信息
深度:对地观测大数据处理、挑战与思考
原创教程:用Excel做饼图之复合饼图与双层饼图(2)
移动大数据时代: 无线网络的挑战与机遇(附pdf下载)
Excel使用技巧——25招必学秘技
【年度热门】加上这些 Excel 技能点,秒杀众人(多图)
原创教程:用Excel做纵向折线图
知识图谱——机器大脑中的知识库
何明科专栏:用数据化的方式解析投资条款
DT时代,如何用大数据分析创造商业价值(23页PPT)
MIT牛人梳理脉络详解宏伟现代数据体系
你的老婆是怎么算出来的?揭秘佳缘用户推荐系统
飞林沙:商品推荐算法&推荐解释
PPT:如何成为真正的数据架构师?(附下载)
开源大数据查询分析引擎现状
董飞专栏:打造数据产品必知秘籍
译文:如何做强大又漂亮的信息图
如何使用Amazon Machine Learning构建机器学习预测模型
如何运用数据协助货架管理(内附26张PPT)
SVM算法
主流大数据系统在后台的层次角色及数据流向
PPT:阿里全息大数据构建与应用
人脸识别技术大总结——Face Detection & Alignment
教程:用Excel制作成对条形图
易观智库:大数据下的用户分析及用户画像(18页PPT附下载)
技术向:如何设计企业级大数据分析平台?
电商数据分析基础指标体系
IBM SPSS Modeler 决策树之银行行销预测应用分析
拓扑数据分析与机器学习的相互促进
基于 R 语言和 SPSS 的决策树算法介绍及应用
用php做爬虫 百万级别知乎用户数据爬取与分析
另类新浪微博基本数据采集方法
以10万+阅读的文章为例 教你做微信公众号的运营数据分析
破解数据三大难题:变现?交易?隐私?
微店的大数据平台建设实践与探讨
阿里巴巴PPT:大数据基础建议及产品应用之道
基于社会媒体的预测技术
人工智能简史
技巧:演讲中怎样用数据说话
马云和小贝选谁做老公?写给非数据人的数据世界入门指南
掘金大数据产业链:上游资源+中游技术+下游应用
原创教程:手把手教你用Excel做多层折线图
销售分析:如何从数据指标发现背后的故事
如何一步步从数据产品菜鸟走到骨干数据产品
也来谈谈微博的用户画像
行走在网格之间:微博用户关系模型
如何拍出和明星一样美爆的自拍照?斯坦福大学用卷积神经网络建模告诉你
运营商如何玩转大数据? 浙江移动云计算和大数据实践(PPT附下载)
大数据分析的集中化之路 建设银行大数据应用实践PPT
腾讯防刷负责人:基于用户画像大数据的电商防刷架构
创业提案的逻辑
友盟分享 | 移动大数据平台架构思想以及实践经验
寻路推荐 豆瓣推荐系统实践之路
“小数据”的统计学
重磅!8大策略让你对抗机器学习数据集里的不均衡数据
小团队撬动大数据——当当推荐团队的机器学习实践
微博推荐架构的演进
科普文 手把手教你微信公众号数据分析
信息图制作的六个注意点
【权利的游戏】剧透新玩法:情理之中?意料之外
推荐系统(Recommender System)的技术基础
核心算法 谷歌如何从网络的大海里捞到针
Quora数据科学家和机器学习工程师是如何合作的
阿里巴巴PPT:大数据下的数据安全
数据建模那点事儿
全民拥抱Docker云–Lhotse系统经验分享
实时股票分析系统的架构与算法
架构师必看 京东咚咚架构演进
什么叫对数据敏感?怎样做数据分析?
推荐系统基础知识储备
刘德寰:数据科学的整合与细分 数据科学的七个危险趋势(视频)
实际工作中,如何做简单的数据分析?
分布式前置机器学习在威胁情报中的应用(附PPT下载)
数据科学 怎样进行大数据的入门级学习?
扛住100亿次请求 如何做一个“有把握”的春晚红包系统?(PPT下载)
从 LinkedIn 的数据处理机制学习数据架构
大数据会如何改变管理咨询公司(I)
优秀大数据GitHub项目一览
生硬的数字和数据新闻:这么近,那么远
经典大数据架构案例:酷狗音乐的大数据平台重构(长文)
揭秘中兴大数据在银行领域的系统部署
基于大数据的用户画像构建(理论篇)
【R】支持向量机模型实现
数据图处处有陷阱?五个例子教你辨真伪
如何用R绘制地图
你确定你真的懂用户画像?
数据模型需要多少训练数据?
【接地气】01 数据报表的颜色怎么配
游戏价值和数据分析新思路
【R】异常值检测
快的打车架构实践
豆瓣还是朋友圈:大数据、新方法和日常问
PPT数据图表,怎么做才好看?
大道至简的数据体系构建方法论
数据的误区及自身业务
新浪微博的用户画像是怎样构建的?
面试干货!21个必知数据科学面试题和答案part1(1-11)
易观智库:中国大数据产业生态图谱2016(附下载)
Airbnb的数据基础架构
50PB海量数据排序,谷歌是这么做的
大数据时代工程师如何应对–今日头条走进硅谷技术讲座
D3.js教学记(下)
D3.js教学记(上)
飞林沙:企业级服务公司如何赚钱?只有平台级产品才有大数据的理论
一个母婴电子商务网站的大数据平台及机器学习实践
7大板块 组成数据分析师的完整知识结构
干货:SaaS领域如何分析收入增长?
学术 | 词嵌入的类比特性有实用意义吗?
6个用好大数据的秘诀
一个数据库外行眼中的微信优化 (附专家补充)
大数据调研,如何实现快全准?
数据大师Olivier Grisel给志向高远的数据科学家的指引
数据堂肖永红:数据交易的是使用权或数据的增值,而不是数据本身(PPT附下载)
淘宝商品详情平台化思考与实践
刘译璟:百分点大数据理念和实践(图文+PPT下载)
如何快速搞定一份看起来还不错的演示文档?
【BABY夜谈大数据】决策树
数据驱动设计:数据处理流程、分析方法和实战案例
美图数据总监:Facebook的法宝,我们在产品中怎么用?
树的内核:量化树结构化数据之间的相似性
拿到用户数据之后,LinkedIn怎么赚钱?
GrowingIO张溪梦:增长黑客的核心 企业应该重视产品留存率(附PPT下载)
[译]Airbnb是如何使用数据理解用户旅行体验的?
微博推荐数据服务代理: hyper_proxy的设计和实现
星图数据谷熠:消费领域DaaS 大数据重构未来商业游戏规则(附PPT下载)
鲍忠铁:TalkingData大数据技术与应用实践(PPT下载)
【干货教材】数据分析VS业务分析需求
九枝兰专访:数字营销的核心—企业如何使用数据管理平台(DMP)进行精准营销
我们的应用系统是如何支撑千万级别用户的
R应用空间数据科学
Excel进行高级数据分析(上)
Excel进行高级数据分析(下)
国内各大互联网公司2.0版技术站点收集
网站数据分析思路导图
大数据分析报表设计开发要素
大数据需要的12个工具 推荐
YARN/MRv2 Resource Manager深入剖析—NM管理
YARN/MRv2 Resource Manager深入剖析—RMApp状态机分析
Hadoop 1.0与Hadoop 2.0资源管理方案对比
Hadoop 2.0中单点故障解决方案总结
Hadoop 2.0 (YARN)中的安全机制概述
Hadoop 新特性、改进、优化和Bug分析系列1:YARN-378
Hadoop 新特性、改进、优化和Bug分析系列2:YARN-45
Hadoop 新特性、改进、优化和Bug分析系列3:YARN-392
Hadoop版本选择探讨
探究提高Hadoop稳定性与性能的方法
《Effective C++》读书笔记(第一部分)
Hadoop分布式环境下的数据抽样
Hadoop计算能力调度器算法解析
如何编写Hadoop调度器
数据结构之红黑树
Hadoop pipes设计原理
《C++ Primer plus》学习笔记之”类”
《C++ Primer plus》学习笔记之”类继承”
《C++ Primer plus》学习笔记之”C++中的代码重用”
《C++ Primer plus》学习笔记之”异常”
《C++ Primer plus》学习笔记之”RTTI”
Hadoop pipes编程
Hadoop Streaming高级编程
《C++ Primer plus》学习笔记之”标准模板库”
《C++ Primer plus》学习笔记之”输入输出库”
Linux Shell 命令总结
算法之图搜索算法(一)
awk使用总结
素数判定算法
《C++ Primer plus》学习笔记之“函数探幽”
使用Thrift RPC编写程序
如何在Hadoop上编写MapReduce程序
怎样从10亿查询词找出出现频率最高的10个

如何用R绘制地图

于2017-04-01由小牛君创建

分享到:


r语言绘制地图
本文主要包含三种绘制地图的方法:绘制基础地图、基于空间数据格式(shapefile)绘制地图以及如何调用百度地图和谷歌地图的数据来绘制地图。

基础地图

方法

从map()包里获取地图数据,用geom_polygon()(可以用颜色填充)或者geom_path()(不能填充)绘制。

#install.packages(“ggplot2”)

#install.packages(“maps”)

library(ggplot2)

library(maps) # 为了获取数据

##

## # ATTENTION: maps v3.0 has an updated ‘world’ map. #

## # Many country borders and names have changed since 1990. #

## # Type ‘?world’ or ‘news(package=”maps”)’. See README_v3. #

# 美国地图数据

states_map <- map_data(“state”)

head(states_map)

## long lat group order region subregion

## 1 -87.46201 30.38968 1 1 alabama

## 2 -87.48493 30.37249 1 2 alabama

## 3 -87.52503 30.37249 1 3 alabama

## 4 -87.53076 30.33239 1 4 alabama

## 5 -87.57087 30.32665 1 5 alabama

## 6 -87.58806 30.32665 1 6 alabama

# geom_polygon()

ggplot(states_map, aes(x=long,y=lat,group=group)) +

geom_polygon(fill=”white”,colour=”black”) +

labs(title = “USA Map”)

USA map
# 中国地图

library(mapdata)

map(“china”, col = “red4”, ylim = c(18,54), panel.first = grid())

title(“China Map”)

china map
# 世界地图数据

world_map <- map_data(“world”)

head(world_map)

## long lat group order region subregion

## 1 -69.89912 12.45200 1 1 Aruba

## 2 -69.89571 12.42300 1 2 Aruba

## 3 -69.94219 12.43853 1 3 Aruba

## 4 -70.00415 12.50049 1 4 Aruba

## 5 -70.06612 12.54697 1 5 Aruba

## 6 -70.05088 12.59707 1 6 Aruba

#sort(unique(world_map$region))

# 绘制指定区域的地图数据

# 绘制欧洲足球五大联赛所在地

euro <- map_data(“world”, region = c(“UK”,”France”, “Spain”,”Germany”, “Italy”))

ggplot(euro, aes(x=long, y = lat, group=group,fill=region)) +

geom_polygon(colour=”black”) +

scale_fill_brewer(palette = “Set2”) +

scale_y_continuous(limits=c(40,60)) +

scale_x_continuous(limits=c(-25,25)) +

labs(title = ” Euorpe’s Big Five Football Leagues”)

欧盟足球五大联赛地图
绘制等值区域图

当我们创建一个地图后,如果根据变量值对不同区域填充不同的颜色呢?

方法

很简单,只要把变量值和地图数据合并在一起,然后把一个变量映射到fill上就可以了。

head(USArrests) # 1973年的数据

## Murder Assault UrbanPop Rape

## Alabama 13.2 236 58 21.2

## Alaska 10.0 263 48 44.5

## Arizona 8.1 294 80 31.0

## Arkansas 8.8 190 50 19.5

## California 9.0 276 91 40.6

## Colorado 7.9 204 78 38.7

crimes <- data.frame(state= tolower(rownames(USArrests)), USArrests)

# 合并数据集

crime_map <- merge(states_map,crimes,by.x=”region”,by.y = “state”)

# head(crime_map)

library(plyr) # 加载数据清洗软件包

##

## Attaching package: ‘plyr’

##

## The following object is masked from ‘package:maps’:

##

## ozone

# 按照 group, order排序

crime_map <- arrange(crime_map,group,order)

# head(crime_map)

ggplot(crime_map, aes(x=long,y=lat, group = group, fill = Assault)) +

geom_polygon(colour = “black”) +

coord_map(“polyconic”) +

labs(title = “USA Map”)

USA MAP
# 更改配色

ggplot(crimes, aes(map_id = state, fill = Assault)) +

geom_map(map = states_map, colour = “black”) +

scale_fill_gradient(low=”#FFFFFF”, high = “#BB4444”) +

expand_limits(x = states_map$long, y = states_map$lat)

地图配色
对于犯罪率这个指标,从上图可以看出采用连续取值的方法无法很好地反映出信息,这时采用离散取值反而更容易解释。

# 离散颜色标度

qa <- quantile(crimes$Assault, c(0,0.2,0.4,0.6,0.8,1.0))

qa

## 0% 20% 40% 60% 80% 100%

## 45.0 98.8 135.0 188.8 254.2 337.0

# 新增一个分位数类别变量

crimes$Assault_q <- cut(crimes$Assault, qa, labels = c(“0-20%”, “20-40%”,”40-60%”,

“60-80%”, “80-100%”),

include.lowest = TRUE)

states <- ddply(states_map, .(region),summarise, lat = mean(lat,na.rm = TRUE),

long = mean(long,na.rm = TRUE))

crimes <- merge(crimes, states, by.x = “state”, by.y = “region”)

# 绘制离散分类地图

p <- ggplot(crimes, aes(map_id = state, fill = Assault_q)) +

geom_map(map = states_map, colour = “black”) +

scale_fill_brewer(palette = “Set2”) +

expand_limits(x = states_map$long, y =states_map$lat) +

coord_map(“polyconic”) +

labs(fill=”Assault Rate\nPercentile”, title = “USA Map”)

p

usa map
# 加入州名对应的标签

p + geom_text(aes(x=long,y=lat,label=state),size=3,colour=”black”) +

theme_bw() +

xlab(“long”) + ylab(“lat”)

usa map
# 如果你想去掉网格线和坐标框,那么接着往下翻!

# 创建空白背景地图

theme_clean <- function(base_size=12){

require(grid)

theme_grey(base_size)

theme(

axis.title = element_blank(),

axis.text = element_blank(),

panel.background = element_blank(),

panel.grid = element_blank(),

axis.ticks.length = unit(0, “cm”),

axis.ticks.margin = unit(0, “cm”),

panel.margin = unit(0, “lines”),

plot.margin = unit(c(0,0,0,0), “lines”),

complete = TRUE

)

}

p + theme_clean()

## Loading required package: grid

usa map

基于空间数据格式(shapefile)创建地图

ESRI公司的Shapefile文件是描述空间数据的几何和属性特征的矢量数据结构的一种格式。 一个Shapefile文件最少包括三个文件:主文件(.shp):存储地理要素的几何图形的文件; 索引文件(.shx):存储图形要素与属性信息索引的文件; dBASE表文件(*.dbf):存储要素信息属性的dBase表文件。

除此之外还有可选的文件包括:空间参考文件(.prj), 几何体的空间索引文件(.sbn 和 .sbx), 只读的Shapefiles的几何体的空间索引文件(.fbn 和 .fbx), 列表中活动字段的属性索引(.ain 和 .aih), 可读写Shapefile文件的地理编码索引(.ixs), 可读写Shapefile文件的地理编码索引(.mxs), dbf文件的属性索引(.atx), 以XML格式保存元数据(.shp.xml), 用于描述.dbf文件的代码页,指明其使用的字符编码的描述文件(*.cpg)。

需要注意的是,主文件是一个直接存取,变长记录的文件,其中每个记录描述一个实体的数据,我们称之为称为shape。

下面这个网站中可以下载全球各个国家完整的shapefile格式数据: shapefile数据下载网站

备注:慎用中国地图数据!

方法

利用maptools()包中的readShapePoly()载入空间数据文件,用fortify()把数据转化成数据框的格式,然后画图。

library(maptools)

## Loading required package: sp

## Checking rgeos availability: TRUE

setwd(“~/Desktop/dataset/map”)

# 载入空间数据并转化成数据框

china_shp <- readShapePoly(“china/bou2_4p.shp”)

# 返回一个 SpatialPolygonsDataFrame 对象

# str(china_shp)

china_map <- fortify(china_shp)

## Regions defined for each Polygons

# 绘制中国地图

p <- ggplot(china_map, aes(x = long, y = lat, group = group)) +

geom_path() +

labs(title = “China Map”)

# 绘制空白背景的地图

p + theme_clean()

china map
这里我们只利用了shapefile中最基本的边界信息,还没有对地理信息数据进行更进一步的分析。我们还可以将不同格式的地理数据整合起来,例如如何在上面的地图上绘制出我国的铁路、水系分布等内容。

调用百度地图和谷歌地图的数据

接下来,我将介绍如何从百度地图和谷歌地图中获取心仪的地图数据信息。

百度地图

library(devtools)

#install_github(“badbye/baidumap”)

library(baidumap)

# 随便输入几个经纬度坐标

lon = matrix(c(117.93780, 24.55730, 117.93291, 24.57745, 117.23530, 24.64210,

117.05890, 24.74860), byrow=T, ncol=2)

# 将经纬度坐标转换成真实地理信息

location = getLocation(lon, formatted = T)

location

## lon=117.9378;lat=24.5573 lon=117.93291;lat=24.57745

## “福建省厦门市海沧区坂南路” “福建省厦门市海沧区大溪路”

## lon=117.2353;lat=24.6421 lon=117.0589;lat=24.7486

## “福建省漳州市南靖县” “福建省漳州市南靖县X607”

# 获取厦门大学经纬度坐标,返回json格式文件

getCoordinate(‘厦门大学’) # json

## 厦门大学

## “{\”status\”:0,\”result\”:{\”location\”:{\”lng\”:118.10229694322,\”lat\”:24.442898974406},\”precise\”:0,\”confidence\”:30,\”level\”:\”商圈\”}}”

ad <- getCoordinate(‘厦门大学’, formatted = TRUE)

names(ad) <- NULL

# 绘制地图

# 自己修改了一些参数,并将修改后的package挂在github上,所以我选择从github上安装ggmap包。

# install_github(“fibears/ggmap”)

library(ggmap)

p <- getBaiduMap(“厦门市思明区”,zoom = 12)

## Map from URL : http://api.map.baidu.com/staticimage?width=400&height=400¢er=118.13453488213,24.468728076403&zoom=12&scale=2

ggmap(p) +

geom_point(aes(x=ad[1], y =ad[2]))

厦门大学地图
当当当,奇迹发生了——厦门大学位于海中央!这是因为谷歌地图和百度地图经纬度坐标存在一定的偏差, 而getBaiduMap()软件包的作者利用了ggmap()包中坐标转换的思想,这导致最终绘制出来 的图形不准确。因此,我们还是考虑转入谷歌阵营。

谷歌地图

首先介绍一个概念:火星坐标系统

火星坐标系统是一种国家保密插件,也叫做加密插件或者加偏或者SM模组,其实就是对真实坐标系统进行人为的加偏处理,按照特殊的算法,将真实的坐标加密成虚假的坐标,而这个加偏并不是线性的加偏,所以各地的偏移情况都会有所不同。而加密后的坐标也常被人称为火星坐标系统。

所有的电子地图、导航设备,都需要加入国家保密插件。第一步,地图公司测绘地图,测绘完成后,送到国家测绘局,将真实坐标的电子地图,加密成“火星坐标”,这样的地图才是可以出版和发布的,然后才可以让GPS公司处理。第二步,所有的GPS公司,只要需要汽车导航的,需要用到导航电子地图的,都需要在软件中加入国家保密算法,将COM口读出来的真实的坐标信号,加密转换成国家要求的保密的坐标。这样,GPS导航仪和导航电子地图就可以完全匹配,GPS也就可以正常工作了。

由于谷歌地图被GFW屏蔽了,所以想调用其API需要翻墙。

主要有以下几个步骤:

安装SSLedge

在RStudio中更改proxy

首先,我们先简单认识下http和https:

http是普通超文本协议,其信息室明文传送,而https就是安全超文本传输协议,需要证书和提供安全连接,https是嵌套了SSL加密的http连接,其内容会由SSL先加密,然后再传送。

为了更方便地使用网络,我将只使用https代理,对于Http类型的网站使用直接连接的方式。

# 查看信息

Sys.getenv()

# 两种方式设置proxy

# 利用Sys.setenv()

Sys.setenv(https_proxy=”https://user:password@ip:port”)

# 修改.Renviron 文档

接下来我们来看看如何调用谷歌地图的API来绘图。

# 可以直接在cran中下载package

# install_github(“fibears/ggmap”) # 自己修改了部分链接代码,所以我选择从github下载

# library(ggmap)

setwd(“~/Desktop/dataset/others”)

# 获取坐标及地图数据

ad1 <- as.numeric(geocode(“福建省厦门市思明南路422”,source = “google”))

## Information from URL : https://maps.googleapis.com/maps/api/geocode/json?address=%E7%A6%8F%E5%BB%BA%E7%9C%81%E5%8E%A6%E9%97%A8%E5%B8%82%E6%80%9D%E6%98%8E%E5%8D%97%E8%B7%AF422&sensor=false

xmu <- get_map(“厦门市思明区”,zoom = 13, maptype = “roadmap”)

## Map from URL : https://maps.googleapis.com/maps/api/staticmap?center=%E5%8E%A6%E9%97%A8%E5%B8%82%E6%80%9D%E6%98%8E%E5%8C%BA&zoom=13&size=640×640&scale=2&maptype=roadmap&language=en-EN&sensor=false

## Information from URL : https://maps.googleapis.com/maps/api/geocode/json?address=%E5%8E%A6%E9%97%A8%E5%B8%82%E6%80%9D%E6%98%8E%E5%8C%BA&sensor=false

ggmap(xmu, extent = “normal”) +

geom_point(aes(x=ad1[1], y =ad1[2]))

厦门大学地图
需要注意的是,利用geocode函数检索经纬度数据时,最好选择使用道路数据,这样可以提高检索的准确率。

最后引用肖凯大神博客中的一个案例:本例是从地震信息网获取最近一周的地震数据,得到其经纬度,然后以散点形式绘制在google地图上,同时也显示地震发生的密度估计。

# 加载扩展包

# install.packages(“animation”)

# install.packages(“XML”)

library(ggmap)

library(animation)

library(XML)

# 从网页上抓取数据,并进行清理

webpage <-‘http://data.earthquake.cn/datashare/globeEarthquake_csn.html’

tables <- readHTMLTable(webpage,stringsAsFactors = FALSE)

raw <- tables[[6]]

data <- raw[-1,c(‘V1′,’V3′,’V4’)]

names(data) <- c(‘date’,’lan’,’lon’)

data$lan <- as.numeric(data$lan)

data$lon <- as.numeric(data$lon)

data$date <- as.Date(data$date, “%Y-%m-%d”)

# 用ggmap包从google读取地图数据,并将之前的数据标注在地图上。

ggmap(get_googlemap(center = ‘china’, zoom=4,maptype=’terrain’),extent=’device’) +

geom_point(data=data,aes(x=lon,y=lan),colour = ‘red’,alpha=0.7) +

stat_density2d(aes(x=lon,y=lan,fill=..level..,alpha=..level..),

size=2,bins=4,data=data,geom=’polygon’)+

theme(legend.position = “none”)

## Map from URL : https://maps.googleapis.com/maps/api/staticmap?center=china&zoom=4&size=640×640&scale=2&maptype=terrain&sensor=false

## Information from URL : https://maps.googleapis.com/maps/api/geocode/json?address=china&sensor=false

## Warning: Removed 47 rows containing non-finite values (stat_density2d).

## Warning: Removed 47 rows containing missing values (geom_point).

End.