在地图上绘制坐标
Posted
技术标签:
【中文标题】在地图上绘制坐标【英文标题】:Plot coordinates on map 【发布时间】:2014-06-01 13:48:08 【问题描述】:我正在尝试使用 R 绘制我的坐标。我已经尝试关注不同的帖子 (R: Plot grouped coordinates on world map;Plotting coordinates of multiple points at google map in R),但我的数据并没有取得多大成功。
我正在尝试用我的 gps 坐标作为彩色点(每个区域都有特定的颜色)来实现世界的平面地图:
area lat long
Agullhas -38,31 40,96
Polar -57,59 76,51
Tasmanian -39,47 108,93
library(RgoogleMaps)
lat <- c(-38.31, -35.50) #define our map's ylim
lon <- c(40.96,37.50) #define our map's xlim
center = c(mean(lat), mean(lon)) #tell what point to center on
zoom <- 2 #zoom: 1 = furthest out (entire globe), larger numbers = closer in
terrmap <- GetMap(center=center, zoom=zoom, maptype= "satallite", destfile = "satallite.png")
问题是现在我不知道如何添加我的积分,我希望每个区域都使用一种颜色。
有人可以帮我继续前进吗?
我尝试过的另一个选项是:
library(maps)
library(mapdata)
library(maptools)
map(database= "world", ylim=c(-38.31, -35.5), xlim=c(40.96, 37.5), col="grey80", fill=TRUE, projection="gilbert", orientation= c(90,0,225))
lon <- c(-38.31, -35.5) #fake longitude vector
lat <- c(40.96, 37.5) #fake latitude vector
coord <- mapproject(lon, lat, proj="gilbert", orientation=c(90, 0, 225)) #convert points to projected lat/long
points(coord, pch=20, cex=1.2, col="red") #plot converted points
但是坐标在错误的位置结束,我不知道为什么
希望有人能帮忙
【问题讨论】:
收到此错误,因此这些点不会显示在来自 URL 的地图地图中:maps.googleapis.com/maps/api/… Google Maps API 服务条款:developers.google.com/maps/terms“我错过了什么吗? today is working :) 现在唯一的问题是,如果我使用 2 的缩放修改缩放以适应同一图中的所有点,卫星地图就会消失,我只看到一个灰色的图经纬度。 mapgilbert 我不知道为什么,因为某些原因你不能使用缩放级别 1 和 2。也许 this question & answers 会给你一个可能的解决方案。 【参考方案1】:另一个选项是使用leaflet package(建议here)。与 Google 地图不同,它不需要任何 API 密钥。
install.packages(c("leaflet", "sp"))
library(sp)
library(leaflet)
df <- data.frame(longitude = runif(10, -97.365268, -97.356546),
latitude = runif(10, 32.706071, 32.712210))
coordinates(df) <- ~longitude+latitude
leaflet(df) %>% addMarkers() %>% addTiles()
【讨论】:
如何将变量添加到标记中?即与人口相关的标记大小。 用addCircleMarkers(radius = population)
代替addMarkers()
作为described in the manual【参考方案2】:
根据用户的要求,这是一个仅使用 Rgooglemaps 的解决方案。
# get map (from askers OP, except changed map type = "Satallite" to type = "Satellite")
library(RgoogleMaps)
lat <- c(-38.31, -35.50) #define our map's ylim
lon <- c(40.96,37.50) #define our map's xlim
center = c(mean(lat), mean(lon)) #tell what point to center on
zoom <- 2 #zoom: 1 = furthest out (entire globe), larger numbers = closer in
terrmap <- GetMap(center=center, zoom=zoom, type= "satellite", destfile = "satellite.png")
# plot points and save image
lat <- c(-38.31, -57.59, -39.47)
lon <- c(40.96, 76.51, 108.93)
png('map.png')
PlotOnStaticMap(terrmap, lat = lat, lon = lon, pch = 20, col = c('red', 'blue', 'green'))
dev.off()
【讨论】:
【参考方案3】:作为RgoogleMaps
的替代方案,您还可以将ggplot2
与ggmap
结合使用。
使用此代码:
# loading the required packages
library(ggplot2)
library(ggmap)
# creating a sample data.frame with your lat/lon points
lon <- c(-38.31,-35.5)
lat <- c(40.96, 37.5)
df <- as.data.frame(cbind(lon,lat))
# getting the map
mapgilbert <- get_map(location = c(lon = mean(df$lon), lat = mean(df$lat)), zoom = 4,
maptype = "satellite", scale = 2)
# plotting the map with some points on it
ggmap(mapgilbert) +
geom_point(data = df, aes(x = lon, y = lat, fill = "red", alpha = 0.8), size = 5, shape = 21) +
guides(fill=FALSE, alpha=FALSE, size=FALSE)
你会得到这个结果:
【讨论】:
我不确定我的 R 版本是否有问题我不断收到此错误:download.file 中的错误(url,destfile = destfile,quiet = !messaging,mode = "wb") :不可能打开 URL 'maps.googleapis.com/maps/api/…' 另外:警告消息:在 download.file(url, destfile = destfile, quiet = !messaging, mode = "wb") :不可能打开:状态 HTTP '403 Forbidden' 你能告诉我怎么了???我正在使用相同的命令... 也许您可以在帖子中包含sessionInfo()
的结果?我正在使用带有ggplot2 0.9.3.1
和ggmap 2.3
的R 3.0.2(和RStudio)
R 版本 2.15.3 (2013-03-01) 平台:x86_64-apple-darwin9.8.0/x86_64(64 位)
@Jaap 看起来很棒!不幸的是不再适用于 ggmap 2.6(错误:GeomRasterAnn 是用不兼容的 ggproto 版本构建的。请重新安装提供此扩展的软件包。)
谷歌地图需要 API 密钥【参考方案4】:
另一种选择是plotGoogleMaps
包,它允许在导航器中进行绘图,允许放大和缩小等。然后您可以制作图片的屏幕截图以保存它(尽管请记住谷歌地图在法律上应该用于互联网)。
library("plotGoogleMaps")
lat <- c(-38.31, -35.50) #define our map's ylim
lon <- c(40.96,37.50) #define our map's xlim
# make your coordinates a data frame
coords <- as.data.frame(cbind(lon=lon,lat=lat))
# make it a spatial object by defining its coordinates in a reference system
coordinates(coords) <- ~lat+lon
# you also need a reference system, the following should be a fine default
proj4string(coords) <- CRS("+init=epsg:4326")
# Note: it is a short for:
CRS("+init=epsg:4326")
> CRS arguments:
> +init=epsg:4326 +proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0
# then just plot
a <- plotGoogleMaps(coords)
# here `a <-` avoids that you get flooded by the html version of what you plot
你得到:
【讨论】:
坐标(coords)以上是关于在地图上绘制坐标的主要内容,如果未能解决你的问题,请参考以下文章