R for map (3上):ggmap
在上一篇中,对地理信息数据采用ggplot2包来实现主题地图的描绘。ggplot2作为R的图形系统,其最鲜明的特点在于其分层语法,即把图像元素一层层叠加在基础画布之上。事实上,一张主题地图就相当把地图作为画布,而把基于地理的信息表现在地图上。如果作为基础画布的地图和ggplot2的分层语法结合起来,那么就能更高效绘制主题地图。这个结合的工作就是由ggmap包来实现的。
ggmap包是基于ggplot2的图层语法构建的R包,它结合了来自Google Maps,OpenStreet Map,Stamen Maps和CloudMade Maps的静态地图信息来绘制主题地图。而且,ggmap中提供了一些应用函数以供使用者访问Google Geocoding,Distance Matrix和Directions 这几个 API。
1.图形的分层语法和ggmap包的基本功能
(1)分层语法(对ggplot2熟悉的这一段就忽略吧)
图形的分层语法认为每张图都可以包含五个成分:
一个带有映射(mapping)的默认数据集;
一个或多个图层,每个包含有几何对象(geom),统计变换(stat)和和带有映射的数据集;
对每个映射的标度(scale);
坐标系;
分面(facet)。
ggplot2就是这分层语法的杰出运用。以ggplot2为基础的ggmap包自然也有这些部分,只不过是固定在图形成分上的:x aesthetics 对应到经度,y aesthetics对应到维度,而坐标系固定于墨卡托投影。
(2)ggmap的基本功能
ggmap画地图的基本思路是下载地图作为ggplot2的基础画布,然后在其上加上数据,统计或者模型的分层。
下载地图并把图形做成画图格式的函数是get_map()。
绘图的函数是:qmplot(),单个命令行完成整个图形,参考ggplot2的qplot;
ggmap,以及整合了get_map和ggmap的qmap,参考ggplot2的ggplot。
(3)get_map()和geocode()
get_map函数整合了get_googlemap, get_openstreetmap, get_stamenmap,
和get_cloudmademap函数,能从这四种地图中下载数据,为了ggmap作图返回一个
分类的格栅对象(raster object)。
get_map函数最重要的参数是location(默认取值为德克萨斯州的休斯敦市),用来指定地图中心的经纬度,它伴随有参数zoom。zoom取值为3到20,用来指定地图中心所在区域扩展的大小, 其中3是大陆级别,20是建筑级别,一般城市级别是12。
作为中心的坐标并不一定事先为使用者所知,所以location参数也可以接受字符串,包括地址、邮编和专有名称,然后把它传递给geocode函数,由这个函数来决定中心的经纬度坐标。
比如:
> library(ggmap)
> bnu<-"BeiJing Normal University"
> geocode(bnu)
lon lat
1 116.3656 39.9622
先挂张图,明天再写
qmap(bnu, zoom = 14)
ggmap包是基于ggplot2的图层语法构建的R包,它结合了来自Google Maps,OpenStreet Map,Stamen Maps和CloudMade Maps的静态地图信息来绘制主题地图。而且,ggmap中提供了一些应用函数以供使用者访问Google Geocoding,Distance Matrix和Directions 这几个 API。
1.图形的分层语法和ggmap包的基本功能
(1)分层语法(对ggplot2熟悉的这一段就忽略吧)
图形的分层语法认为每张图都可以包含五个成分:
一个带有映射(mapping)的默认数据集;
一个或多个图层,每个包含有几何对象(geom),统计变换(stat)和和带有映射的数据集;
对每个映射的标度(scale);
坐标系;
分面(facet)。
ggplot2就是这分层语法的杰出运用。以ggplot2为基础的ggmap包自然也有这些部分,只不过是固定在图形成分上的:x aesthetics 对应到经度,y aesthetics对应到维度,而坐标系固定于墨卡托投影。
(2)ggmap的基本功能
ggmap画地图的基本思路是下载地图作为ggplot2的基础画布,然后在其上加上数据,统计或者模型的分层。
下载地图并把图形做成画图格式的函数是get_map()。
绘图的函数是:qmplot(),单个命令行完成整个图形,参考ggplot2的qplot;
ggmap,以及整合了get_map和ggmap的qmap,参考ggplot2的ggplot。
(3)get_map()和geocode()
get_map函数整合了get_googlemap, get_openstreetmap, get_stamenmap,
和get_cloudmademap函数,能从这四种地图中下载数据,为了ggmap作图返回一个
分类的格栅对象(raster object)。
get_map函数最重要的参数是location(默认取值为德克萨斯州的休斯敦市),用来指定地图中心的经纬度,它伴随有参数zoom。zoom取值为3到20,用来指定地图中心所在区域扩展的大小, 其中3是大陆级别,20是建筑级别,一般城市级别是12。
作为中心的坐标并不一定事先为使用者所知,所以location参数也可以接受字符串,包括地址、邮编和专有名称,然后把它传递给geocode函数,由这个函数来决定中心的经纬度坐标。
比如:
> library(ggmap)
> bnu<-"BeiJing Normal University"
> geocode(bnu)
lon lat
1 116.3656 39.9622
先挂张图,明天再写
qmap(bnu, zoom = 14)
bnu,取自google地图 |
船长好,为什么我用ggmap包的函数geocode()时一直报错:InternetOpenUrl failed: '无法与服务器建立连接',是需要翻墙么?
船长好,请问有没有研究过中文地址的问题,现在我遇到的问题是 中文简体和繁体地址的返回状态不一样;能在Google map上找到的地址在geocode中只返回了很粗的一个精度,例如“桃園縣觀音鄉崙坪村142號”只返回到了桃园县。 感觉是encoding的问题,Google map是用UTF-8吧?我的R code也是存的utf-8,然并卵。不知道船长有没有类似经验,多谢。 BTW, 船长也是BNUer?
是需要翻墙的,可以使用翻墙软件。
需要翻墙
需要翻墙
太久没登录 刚恍惚看见了答复提醒 进来却没有~~
> 我来回应