问题描述
我正在用ggspatial在UTM投影中绘制地图。该地图以正确的投影方式绘制,但轴标签仍为纬度。我想在轴上显示UTM坐标。
必填输出: map of Germany with UTM coordinates in kilometers shown on x and y axes
示例代码:
require(tidyverse); require(magrittr); require(raster); require(rworldmap); require(ggspatial)
targetcrs = "+proj=utm +datum=WGS84 +no_defs +zone=32 +units=km"
countriesLow %>% subset(ADMIN == 'Germany') %>% spTransform(targetcrs) -> de
de %>% extent %>% as('SpatialPolygons') -> bbox
crs(bbox) <- targetcrs
ggplot() + coord_sf(crs=targetcrs) + layer_spatial(de) + layer_spatial(bbox,fill=NA) -> p
print(p)
结果输出: map of Germany in UTM projection,but with grid lines and axis labels in lat-lon degrees
从边界框显示为带有直边的矩形这一事实中,您可以轻松地看到,空间对象已绘制在预期的投影中。
调用ggplot时,控制台上会显示一条警告:
Coordinate system already present. Adding new coordinate system,which will replace the existing one.
但是,当我检查ggplot对象时,没有crs信息:
> p$coordinates$crs
NULL
上面的“必需的输出”是用spplot生成的:
spplot(de[,1],sp.layout=list('sp.lines',bbox),scales=list(draw=T))
但是,还有其他一些原因不使用graphics :: plot,sp :: spplot或其他替代方法,除非确实无法通过ggspatial解决这个看似简单的问题。
我尝试阅读ggspatial文档,该文档指出图CRS由coord_sf设置或默认为第一个layer_spatial的CRS,但这不是正在发生的情况。我曾试着四处寻找解决方案,但茫然无措。
一种可能的方法是使用自定义标签和分隔符为x和y创建自定义比例,然后取消网格线,或者使用批注_spatial_hline()和vline创建它们。但是,我希望有一个简单的解决方法。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)