这个老错误是否仍未解决,或者是否有合理的解决方法?
一些城市:
require(ggplot2)
require(ggmap)
require(sf)
cities = sf::read_sf('{
"type": "FeatureCollection",
"name": "cities",
"crs": {
"type": "name",
"properties": {
"name": "urn:ogc:def:crs:OGC:1.3:CRS84"
}
},
"features": [{
"type": "Feature",
"properties": {
"city": "London"
},
"geometry": {
"type": "Point",
"coordinates": [-0.13, 51.51]
}
},
{
"type": "Feature",
"properties": {
"city": "Rome"
},
"geometry": {
"type": "Point",
"coordinates": [12.48, 41.89]
}
},
{
"type": "Feature",
"properties": {
"city": "Stockholm"
},
"geometry": {
"type": "Point",
"coordinates": [18.07, 59.33]
}
},
{
"type": "Feature",
"properties": {
"city": "Istanbul"
},
"geometry": {
"type": "Point",
"coordinates": [28.96, 41.01]
}
}
]
}
')
还有一个 ggmap 底图:
bb = c(left = -11, bottom = 35, right = 42, top = 65)
europe = ggmap::get_stamenmap(bbox = bb, maptype = 'toner-lite', zoom = 3)
ggmap(europe) +
geom_sf(data = cities, inherit.aes = FALSE, col = 'red', size = 3)
我认为问题在于
ggmap
使用坐标对象CoordMap
来决定栅格像素的放置位置。通过切换到coord_sf
(添加geom_sf
图层时会发生这种情况),您将导致栅格不对齐。如果提取点的坐标,您可以简单地将它们叠加为一层geom_point
:如果您希望能够绘制更复杂的
sf
对象,那么我会远离ggmap
并使用maptiles
: