绘制具有高度图值的点数据

Plotting point data with value as heightmap

我有 latlng 坐标的点数据。在每个点,都有一个特定的值,范围在 0 到 100 之间。我想使用 rgl 包将其绘制为高度图。这是一个例子,如果找到 here

library(rgl)
data(volcano)
z <- 2 * volcano # Exaggerate the relief
x <- 10 * (1:nrow(z)) # 10 meter spacing (S to N)
y <- 10 * (1:ncol(z)) # 10 meter spacing (E to W)
zlim <- range(z)
zlen <- zlim[2] - zlim[1] + 1
colorlut <- terrain.colors(zlen,alpha=0) # height color lookup table
col <- colorlut[ z-zlim[1]+1 ] # assign colors to heights for each point
open3d()
rgl.surface(x, y, z, color=col, alpha=0.75, back="lines")

但是,我不明白。这是我第一次使用 rgl 并且不太了解这里提供的数据类型 (volcano)。 我看过它但我不明白...

1:nrow(z)1:ncol(z) 中有什么?!为什么是这样的间距? rgl.surface() 函数需要什么输入数据? 当我的数据只有三个列 latlng 和一个 value 时,我将如何使用代码。我试图替换

z <- myData$value
x <- myData$lat
y <- myData$lng

那没用。

看起来 z 必须是包含您的值的矩阵。它包含值的相对位置([1,1] = 200 将是您的 3d 图的角之一,它包含值 200。您的点的位置包含在 z 以及你的观点的价值。

> z[1:5,1:5]
     [,1] [,2] [,3] [,4] [,5]
[1,]  200  200  202  202  202
[2,]  202  202  204  204  204
[3,]  204  204  206  206  206
[4,]  206  206  208  208  208
[5,]  208  208  210  210  210

xy 基本上是 x 轴和 y 轴的比例。在这种情况下,它希望每个值都均匀地相距 10 米,这就是我们进行 10 米间距调整的原因。如果您遇到点之间的距离不是 10 米的情况,您可以通过调整这些 x 和 y 值来显示点到点的相对距离。

如果将行更改为 x <- 5 * (1:nrow(z)) # 5 meter spacing (S to N) 您会看到所有点的位置仍然正确,但是通过告诉函数每个值之间的距离更小,您将其中一个轴靠得更近。

在你的情况下,我会确保 myData$value 是一个矩阵,如果不是,请尝试使用 long/lat 对其进行排序。希望这有帮助。

您找到的示例已有 6 年以上的历史。使用 surface3dpersp3d 会得到更好的结果;他们的帮助页面中有示例。 surface3d 的设置与 xyz 相同,然后使用

绘制它们
surface3d(x, y, z, color = col, back = "lines")

想法是在 x 中发送网格上点的 x 坐标,在 y 中发送 y 坐标,在 z 中发送 z 坐标。您可以将它们作为矩阵(所有三个形状相同),或者将 xy 作为向量,如果坐标在整个网格上相同。

示例使用

x <- 10 * (1:nrow(z))

用值 (10, 20, 30, ...) 填充 x,每行一个条目 z