将投影坐标用于ggspatial图中的轴标签和网格线?

问题描述

我正在用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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...