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

2023-12-23

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

这是绘制地图的最小代码:

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)

This produces this map, which is ok at first sight: enter image description here

如果在此地图上添加网格:

## 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)

地图看起来像这样:

Here we can see that the grids are not matching. enter image description here

这种不匹配的原因是什么?怎么可能消除呢?我尝试了各种预测,但没有成功。唯一有效的就是使用addRectangle代替addRasterImage,但这需要更多的计算并减慢进程,因此我想避免。请注意,在上面的示例中addRectangle仅用于参考,在最终代码中我不想使用它。

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

预先感谢您的任何帮助。

EDIT

该问题可能与椭球体和球体投影之间的投影问题有关,请参阅最后一个问题here http://proj.maptools.org/faq.html:

要在球体上的 WGS84 和墨卡托之间进行转换,将会有 Y 墨卡托坐标发生重大变化。这是因为 在内部,cs2cs 必须调整纬度/经度坐标 位于球体上到位于 WGS84 基准上,该基准具有相当大的 不同形状的椭球体。

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


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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • 未解析的外部符号 LNK2019

    首先 我知道这个问题遍布整个网站 但我几乎浏览了所有问题 似乎无法找出问题所在 这是 VS 2012 中的 谢谢 Socket h pragma once include
  • 将一个片段替换为活动组内的另一个片段

    我在小组活动中有一个片段 我想用另一个片段替换它 FragmentTransaction ft getActivity getFragmentManager beginTransaction SectionDescriptionFragme
  • 如何在 C# 中以编程方式生成按键事件?

    如何以编程方式创建一个模拟键盘上按键的事件 该问题标记为 WPF 但到目前为止的答案是特定的 WinForms 和 Win32 要在 WPF 中执行此操作 只需构造一个 KeyEventArgs 并在目标上调用 RaiseEvent 即可
  • gcc 中的 -ffreestand 选项是什么?

    What is ffreestanding在海湾合作委员会 它是干什么用的 我遇到了以下情况 gcc ffreestanding m32 c kernel c o kernel o 并且不明白 这到底是什么意思 A freestanding
  • 如何找出 SQL Server 中哪些表访问最多或使用最频繁

    我目前的情况是 我需要找出哪些表被频繁使用 或者在给定的一段时间内我们的应用程序中使用的次数 假设从某个开始日期到结束日期 我想在这里获得的详细信息是表名及其被访问的次数 例如 tableName No Of Access Table5 1
  • 如何在 MVVM WPF 应用程序中取消窗口关闭

    单击 取消 按钮 或右上角的 X 或 Esc 后如何取消从特定表单退出 WPF
  • FlashDevelop Haxe (Flash) 调试器

    FlashDevelop中有Haxe的调试器吗 FlashDevelop 现在附带一个运行良好的 Haxe 调试器 仅限 Flash 目标
  • 是否可以在 Web 浏览器上运行与 SDL+OpenGL 代码绑定的 C++?

    我的客户希望她的网站有一个渲染 3D 的应用程序 浅 3D 的东西 我们在 3D 世界中只绘制平面正方形 但网络编程不是我的专长 所以我正在寻找可以从网络浏览器运行 C 程序的东西 但我想 如果是这样的话 那么客户端必须先下载程序 而这不是
  • 根据用户选择禁用单选按钮

    我有 2 组单选按钮 每组有 4 个选项 这 4 个选项在两个类别中都是相同的 我不想允许在两个类别中进行相同的选择 例如 如果在第一类别中选择选项 1 则用户现在只能从第二类别中的选项 2 3 4 中进行选择 这个问题之前已经被问过 但似
  • 从设置禁用权限并返回到我们的应用程序后崩溃

    当当前 Activity 跳转到系统设置页面禁用权限然后再次切换当前 Activity 时 应用程序崩溃 第 1 步 打开应用程序并授予所有必要的权限 第 2 步 单击 主页 按钮 因此应用程序处于后台 第 3 步 在 设置 中手动更改权限
  • “电子邮件不能为空”使用用户名或电子邮件设计

    我正在关注这个操作方法如何 允许用户使用用户名或电子邮件地址登录 https github com plataformatec devise wiki How To Allow users to sign in using their us
  • 如何使用 ASP.NET MVC + SignalR 强制服务器不断发送事件数据?

    ExportClient班级有OnTickRecieved事件 这可以帮助我接收一些数据 来自市场的出价 我想要的只是在浏览器中的图表上实时接收这些数据 当我按下GoUI 端的按钮 它调用Go 控制器中的方法 然后什么也没有发生 这是合乎逻
  • 棘手的指针问题

    我在过去的关于 c 中指针的考试问题上遇到了麻烦 这是我从这个链接找到的 http www cl cam ac uk teaching exams pastpapers y2007p3q4 pdf http www cl cam ac uk
  • Task.ContinueWith() 父任务不等待子任务完成[重复]

    这个问题在这里已经有答案了 自从我了解Task在嵌套任务的上下文中 我真的不明白 为什么在第二次打印之前进行第三次打印 尽管我已经用过Task WaitAll t 它打印3rd之前一行2nd line Code public static
  • 修改 LESS 变量的 alpha 不透明度

    使用 LESS 我知道我可以更改颜色变量的饱和度或色调 看起来像这样 background lighten blue 20 不过 我想改变颜色的 alpha 不透明度 最好是这样的 background alpha blue 20 有没有一
  • SQL:如何将视图与表连接?

    UPDATED 我正在使用 MySQL 语句创建视图 如果编辑寄出的图书超过 50 本书 我需要显示他们的名字 姓氏和城市 我的三张表是 create table editors ed id char 11 ed lname varchar
  • 禁用 VS Code 中的特定编译器警告

    我想知道如何抑制 VS Code 中的特定编译器警告对于整个项目 我见过这个问题 是否可以禁用特定的编译器警告 https stackoverflow com questions 22536518 is it possible to dis
  • 如何使用 CultureInfo 格式化已弃用的货币?

    在 dotnet 中 以特定于文化的方式格式化货币的推荐方法是 据我所知 using System Globalization var info CultureInfo GetCultureInfo en GB return string
  • 节点组的位置在 SCNNode.runAction 开始时重置

    我有一些代码 当点击屏幕时 它会围绕 x 轴旋转多个 SCNNode 如下所示 func handleTap gestureRecognize UIGestureRecognizer let sceneView self view as S
  • 光栅图像似乎使用 R 的传单进行了移动

    我想使用 R 中的 leaflet 包绘制一些空间数据 但是生成的光栅图像与参考网格相比似乎发生了偏移 我怀疑地图投影问题 但我不是该主题的专家 因此任何帮助将不胜感激 这是绘制地图的最小代码 library leaflet library