1

RGL の 3D 環境でフラット マップをプロットしようとしています。これにより、データと必要な出力画像の両方の側面に最適な投影のためにマップをカスタム ズーム/チルトできるようになるはずです。このスレッドでは、を使用して画像をプロットrgl.surface()するプロセスについて説明します。しかし、この方法が OSM やその他の地図オブジェクトに適応できるかどうかは明らかではありません。あなたが持っているかもしれないどんなアイデアにもとても感謝しています.

これが出発点であり、失敗する理由はError in is.matrix(z) : 'z' is missing. z座標にゼロを挿入する方法はありますか?

require(rgl)
open3d()               # R crashes if this is done later(?)
#Sys.setenv(NOAWT=1)   # fix an {OSM} X11 issue in Mac
require(OpenStreetMap)
require(ggplot2)

lat <- c(53, 50); lon <- c(-5, 1)
map <- openmap(c(lat[1],lon[1]),c(lat[2],lon[2]), 5, 'osm')
map <- openproj(map)
rgl.surface(map)
4

1 に答える 1

8

高さのゼロの行列を作成し、col=引数を使用しsurface3dて画像の色を設定する必要があります。

オブジェクトからすべての次元と順序、およびそれらすべてを取得するのmapは面倒なので、これを行う関数を次に示します。

map3d <- function(map,...){
  if(length(map$tiles)!=1){
    stop("multiple tiles not implemented")
  }

  nx = map$tiles[[1]]$xres
  ny = map$tiles[[1]]$yres

  xmin = map$tiles[[1]]$bbox$p1[1]
  xmax = map$tiles[[1]]$bbox$p2[1]
  ymin = map$tiles[[1]]$bbox$p1[2]
  ymax = map$tiles[[1]]$bbox$p2[2]

  xc = seq(xmin,xmax,len=ny)
  yc = seq(ymin,ymax,len=nx)
  colours = matrix(map$tiles[[1]]$colorData,ny,nx)
  m = matrix(0,ny,nx)
  surface3d(xc,yc,m,col=colours,...)

}

これにより、次のことがわかります。

光沢のある地図

ここで、返されたマップに 1 つのタイルがある場合にのみ機能することに注意してください。ただし、原則はそこにあります。

また、座標の位置合わせが正確であるとは完全に確信していません。座標はピクセルの中心または画像の端である可能性があるため、どこかに +1 が欠落している可能性があります。そして、それが灰色の境界線に当てはまるかどうかはわかりません。

于 2013-04-26T09:18:01.330 に答える