Rasgele fakat inandırıcı dijital yükseklik modeli üretiliyor mu? [kapalı]


32

Daha fazla mekansal analiz için ArcGIS Masaüstüne beslenecek bir program veya başka şekilde bir DEM oluşturmanın bir yolu var mı?

Belki de bunun daha küçük artımlı adımlara ayrılması gerekir:

  1. Izgara oluştur
  2. Izgarayı aşağıdaki değerlerle doldurun: 0 > value < maxElevation
  3. Komşu hücreler: (x1-x2) < maxSlope

4
@Igor sitesi, bu soruyu açıklığa kavuşturmanız gerektiğini belirtti. Görünüşe göre oyunlar ve benzerleri için arka planlar oluşturmak için "sentetik araziler" üzerinde duruluyor. Bu tekniklerin çoğu gerçek DEM'leri yeniden yaratmaya odaklanmış gibi görünmüyor : “gerçekçi” herhangi bir bilimsel içeriğe sahip olmak yerine, bakanın gözünde. Sorunuzda "daha fazla mekansal analiz", bazı gerçek DEM sınıflarının belirli özelliklerini yeniden üretmek için sentetik DEM'lere ihtiyacınız olduğunu ortaya koymaktadır. Eğer öyleyse, sadece hangi özellikleri yakalamak için ihtiyacınız var?
whuber

@Aragon ilk bağlantı bozuk, ancak işaret etmelidir bu . Cevabı hakkında yorum yapmak için yeterli kredi yok.
Matthieu

Ayrıca bir göz atın bu .
Rodrigo,

Yanıtlar:



16

Bunun için fraktalları kullanabilirsiniz: Fraktallarla oluşturulan yapay DEM'ler.

Fraktal boyut d = 2.0005 (sol: yükseklik haritası, sağ: görünüş haritası), fraktal boyut d = 2.90 olan alt satır (sol: yükseklik haritası, sağ: görünüş haritası) ile oluşturulmuştur. GRASS GIS'ten r.surf.fractal'ı kullandım . Sonra yapay DEM'i GeoTIFF'e r.out.gdal (veya GUI) ile dışa aktarın.


Bu gerçekten ilginç görünüyor - kullanım şeklinize dair bazı özellikler ekleyebilir misiniz r.surf.fractal?
Simbamangu

Yukarıdaki resimler için kullanılan komutu burada bulabilirsiniz: grass.osgeo.org/grass70/manuals/r.surf.fractal.html#example
markusN

8

Ayrıca, mevcut bir gerçek DEM'in rastgele parçasını alan bir senaryoya sahip olmayı da düşünebilirsiniz.


Artı, rastgele parçaların mozaik kenarlarını delmek için sonunda bir çeşit dolguya ihtiyaç duyacaktı.
najuste


5

Rasgele bir rasterine otomatik korelasyon eklemek için Gauss Kernel'i kullanan bir R çözümü. Yine de, @ markusN tarafından önerilen GRASS r.surf.fractal fonksiyonunun en iyi yaklaşım gibi göründüğünü söylemeliyim.

require(raster)

# Create 100x100 random raster with a Z range of 500-1500
r <- raster(ncols=100, nrows=100, xmn=0)
  r[] <- runif(ncell(r), min=500, max=1500)  

# Gaussian Kernel Function
GaussianKernel <- function(sigma=s, n=d) {
          m <- matrix(nc=n, nr=n)
            col <- rep(1:n, n)
            row <- rep(1:n, each=n)
          x <- col - ceiling(n/2)
          y <- row - ceiling(n/2)
         m[cbind(row, col)] <- 1/(2*pi*sigma^2) * exp(-(x^2+y^2)/(2*sigma^2))
        m / sum(m)
       }

# Create autocorrelated raster using 9x9 Gaussian Kernel with a sigma of 1
r.sim <- focal(r, w=GaussianKernel(sigma=1, n=9))

# Plot results
par(mfcol=c(1,2))
  plot(r, main="Random Raster")
  plot(r.sim, main="Autocorrelated Random Raster sigma=1, n=9")

4

Bazı rastgele fraktal arazi oluşturmak için Perlin sesini kullanmayı deneyebilirsiniz . Stackoverflow'taki bu cevap Python'a başlamanın bir yolunu açıklıyor. İşin hilesi değil çok gürültülü ızgaranın çok küçük bir alanı yakınlaştırmak olacaktır çok düzensiz görünümlü.


3

libnoise size ne istediğinizi verir. Büyük olasılıkla bir dereceye kadar özelleştirmek zorunda kalacaksınız. 'Karmaşık gezegensel yüzey' örneğini kontrol edin.

libnoise, tutarlı bir şekilde değişen bir tür gürültü olan tutarlı bir gürültü üretmek için kullanılan taşınabilir bir C ++ kütüphanesidir. Libnoise, Perlin gürültüsü, dağılmış çok çekirdekli gürültü ve diğer tutarlı gürültü türlerini üretebilir.

Tutarlı gürültü genellikle grafik programcılar tarafından doğal görünümlü dokular, gezegensel arazi ve diğer şeyler üretmek için kullanılır. Yukarıda gösterilen dağ manzarası, libnoise tarafından üretilen bir arazi dosyasıyla Terragen'de gösterildi. Ayrıca, kütüphanenin yapabileceği diğer bazı örnekleri de görüntüleyebilirsiniz.

Libnoise, tutarlı gürültü jeneratörleri, gürültü modülleri adı verilen sınıflarda kapsüllenir. Çok çeşitli gürültü modülleri vardır. Bazı gürültü modülleri, diğer gürültü modüllerinin çıkışlarını çeşitli şekillerde birleştirebilir veya değiştirebilir; Çok karmaşık bir tutarlı gürültü oluşturmak için bu modülleri birleştirebilirsiniz.


3

Bu kod, hemen hemen herhangi bir sayıda satır ve sütundan oluşan bir "Tepe eğimi" DEM oluşturmak için kullanılabilir:

# Building a fake hillslope
# hisllop is 5 rows by 6 columns

x <- seq(-15, 15, by=0.01)
z <- 1/(1+1.5^-x)
plot(z)

z <- 150 - (1-z)*5
plot(z)

# Doing it by hand - DELETE if needed - JUST HERE AS AN EXAMPLE!!!
elev <- c(mean(z[0:500]), mean(z[501:1000]), mean(z[1001:1500]), mean(z[1501:2000]), mean(z[2001:2500]),mean(z[2501:3000]))
plot(elev, type="l")


# doing it by loop
bins <- 6      # could also be considered the length or the hillslope - AKa the number of columns
elev1 <- numeric(bins)


for(i in 0:(bins-1))
{
  begin <- floor( (0 + (length(z)/bins)*i) )
  print(begin)
  end <- floor( ( (length(z)/bins) * (i+1) ) )
  print(end)
  print(mean(z[begin:end]))
  elev1[i+1] <- mean(z[begin:end])  

}

plot(elev1, type="l")


# Making the hillslope wide - AKA creating identical rows
width <- 5

# creating empty matric
hillslope <- matrix(0, nrow=bins, ncol=width)

#overwriting the matrix with the elevation column
system.time(
  { 
    for(i in 1:width) 
      hillslope[,i] <- elev1; 
    hillslope <- as.data.frame(hillslope) 
    }
  )



# applying random error grid
error <- rnorm((width*bins), mean = 0, sd = 0.25)
error.matrix <- as.matrix(error, nrow=bins )



random.hillslope <- as.matrix(hillslope + error.matrix)
image(random.hillslope)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.