gpt4 book ai didi

光栅图像似乎使用 R 的传单进行了移动

转载 作者:行者123 更新时间:2023-12-01 13:48:40 25 4
gpt4 key购买 nike

我想使用 R 中的传单包绘制一些空间数据,但是生成的光栅图像与引用网格相比似乎发生了偏移。我怀疑 map 投影问题,但我不是该主题的专家,因此我们将不胜感激。

这是绘制 map 的最小代码:

library(leaflet)
library(sp)
library(raster)

set.seed(111)

# create dummy data -rectangular grid with random values
m = 10
n = 10
x = seq(45,48,length.out = m)
y = seq(15,18,length.out = n)
X = matrix(rep(x, each = n), nrow = n)
Y = matrix(rep(y, m), nrow = n)

# collector dataframe
points = data.frame(value = rnorm(n*m), lng = c(Y), lat = c(X))

## create raster grid
s = SpatialPixelsDataFrame(points[,c('lng', 'lat')], data = points)
# set WGS84 projection
crs(s) = sp::CRS("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

r = raster(s)

# add coloring
pal = colorNumeric(c("#0C2C84", "#f7f7f7", "#F98009"), points$value,
na.color = "transparent")

## plot map
leaflet() %>% addProviderTiles("CartoDB.Positron") %>%
addRasterImage(r, colors = pal, opacity = 0.6)

这会生成这张 map ,乍一看没问题: enter image description here

如果将网格添加到此 map :

## grid
dx = diff(x)[1]/2
dy = diff(y)[1]/2

rect_lng = sapply(points$lng, function(t) c(t-dx, t+dx))
rect_lat = sapply(points$lat, function(t) c(t-dy, t+dy))

leaflet() %>% addProviderTiles("CartoDB.Positron") %>%
addRectangles(
lng1=rect_lng[1,], lat1=rect_lat[1,],
lng2=rect_lng[2,], lat2=rect_lat[2,],
fillColor = "transparent",
weight = 1
) %>%
addRasterImage(r, colors = pal, opacity = 0.6)

map 看起来像这样:

enter image description here

这里我们可以看到网格不匹配。 enter image description here

这种不匹配的原因是什么?怎么可能被淘汰?我尝试了各种预测都是徒劳的。唯一可行的是使用 addRectangle 而不是 addRasterImage,但这需要更多的计算并减慢过程,因此我想避免。请注意,在上面的示例中,addRectangle 仅用于引用,在最终代码中我不想使用它。

对于具有更多单元格(网格)的 map ,不匹配非常大,可能大于单个单元格的大小。

在此先感谢您的帮助。

编辑

问题可能与椭球投影和球体投影的投影问题有关,见最后一个问题here :

to convert between WGS84 and mercator on the sphere there will be substantial shifts in the Y mercator coordinates. This is because internally cs2cs is having to adjust the lat/long coordinates from being on the sphere to being on the WGS84 datum which has a quite differently shaped ellipsoid.

但是,我无法使用推荐的“技巧”解决问题:+nadgrids=@null

最佳答案

传单 R 包的作者在这里。在我看来,当源栅格的像素相对于屏幕上呈现的像素数而言非常少时,我编写的栅格图层渲染器开始漂移。您可以通过对栅格进行以下修改来看到这一点:

r1 <- r
nrow(r1) <- 600
ncol(r1) <- 600
r <- resample(r, r1, method = "ngb")

我会看看是否可以改进渲染方面的问题,但与此同时,像这样的重新采样可能是最简单的解决方法,尽管不可否认它并不优雅。

关于光栅图像似乎使用 R 的传单进行了移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33742107/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com