Wednesday, January 4, 2012

Membuat perspektif 3D peta menggunakan R

Yang diperlukan :
- Tabel berisi titik koordinat lokasi (X,Y) dan ketinggian (Z).
- Program R
- paket library akima dan rgl untuk R. Apabila belum terpasang kita gunakan, dalam konsol R
install.packages(akima)kita memerlukan fungsi interp() untuk melakukan interpolasi titik dan
install.packages(rgl)untuk tampilan 3D:plot3d(), persp3d() dll.

Terlebih dahulu kita load  paket2 tersebut
library(akima); library(rgl)

Kemudian, tabel yang kita impor sebaiknya dalam format teks .csv dengan demikian dapat kita baca menggunakan read.csv
dataxyz <- read.csv("tabel koordinat ketinggian")

untuk plotting point 3D bisa langsung kita gunakan
plot3d(x=dataxyz$x,y=dataxyz$y,z=dataxyz$z)
aspect3d(1,1,0.2) #untuk mengubah aspek proporsi sumbu x,y,z di sini saya atur proporsi sumbu z 20% dari aslinya.

Untuk perspektif 3D terlebih dahulu kita interpolasikan titik yang kita punya agar dapat membentuk sebuah surface.
datasurface <- interp(x=dataxyz$x,y=dataxyz$y,z=dataxyz$z) #apabila menemui error karena duplikasi sumbu z kita bisa meggunakan parameter alternatif duplicate="mean" atau "median".

kemudian untuk menampilkan menggunakan
with(datasurface,persp3d(x=dataxyz$x,y=dataxyz$y,z=dataxyz$z,col="gray")) #saya menggunakan warna abu2, sedangkan untuk draping tekstur atau warna klasifikasi masih mencari2 caranya.
aspect3d(1,1,0.2) #untuk mengatur aspect ratio, di sini sumbu z dibuat hanya 0.2 dari aslinya.

Alternatif untuk pengelolaan data ketinggian tanpa tergantung dari lintang dan bujurnya dengan melakukan transformasi. Data ketinggian yang tadinya merupakan matriks 1 dimensi diubah mejadi 2 dimensi.  Caranya dengan melakukan interpolasi sama seperti di atas:
datasurface <- interp(x=dataxyz$x,y=dataxyz$y,z=dataxyz$z)
kemudian menjadikan datasurface$z menjadi sumbu z :
z <- datasurface$z
dan untuk sumbu x dan y menggunakan :
x <- 10 * (1:nrow(z))
y <- 10 * (1:ncol(z))


untuk tampilan tetap menggunakan persp3d()
persp3d(x,y,z)

Dengan menggunakan persp3d kita bisa melakukan rotate dan zoom (saya belum menemukan cara untuk panning) menggunakan mouse.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home