ランダムだが信頼できるデジタル標高モデルを生成しますか?[閉まっている]


32

プログラムやその他の方法でDEMを生成して、さらに空間分析するためにArcGIS Desktopにフィードする方法はありますか?

おそらく、これは小さな増分ステップに分割する必要があります。

  1. グリッドを生成する
  2. グリッドに値を入力します: 0 > value < maxElevation
  3. 隣接セル: (x1-x2) < maxSlope

4
@Igorサイトでは、この質問を明確にする必要があることを示唆しています。ゲームなどの背景を作成するために、明らかに「合成地形」に焦点を当てています。これらの手法のほとんどは、実際の DEMの再作成に焦点を当てているようには見えません。「現実的」は、科学的な内容を持つのではなく、見る人の目にあります。あなたの質問では、「さらなる空間分析」は、実際のDEMのいくつかのクラスの特定の特性を再現するために合成DEMが必要であることを示唆しています。その場合、どの機能をキャプチャする必要がありますか?
whuber

@Aragonからの最初のリンクは壊れていますが、これを指している必要があります。彼の答えにコメントするのに十分なクレジットがありません。
マチュー

また見取り、これを
ロドリゴ

回答:



16

これにはフラクタルを使用できますフラクタルで作成された人工DEM

上段はフラクタル次元d = 2.0005(左:標高マップ、右:アスペクトマップ)で生成され、下段はフラクタル次元d = 2.90(左:標高マップ、右:アスペクトマップ)で生成されました。GRASS GISのr.surf.fractalを使用しました。次に、r.out.gdal(またはGUI)を使用してGeoTIFFに人工DEMをエクスポートするだけです。


これは本当に面白そうです-使用方法のいくつかの詳細を追加できますr.surf.fractalか?
シンバマング14

上記の画像に使用されるコマンドは、grass.osgeo.org
grass70

8

また、既存の実際のDEMのランダムな部分を取るスクリプトを用意することも検討できます。


さらに、ランダムな部分のモザイクエッジを無効化するには、最後に何らかのフィッタリングが必要になります。
najuste12年


5

ガウスカーネルを使用してランダムラスタに自己相関を追加するRソリューションを次に示します。しかし、@ markusNによって提案されたGRASS r.surf.fractal関数が最良のアプローチのように思えます。

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


3

libnoiseはあなたが欲しいものを提供します。おそらくある程度カスタマイズする必要があります。「複雑な惑星表面」の例を確認してください。

libnoiseは、スムーズに変化するノイズの一種であるコヒーレントノイズを生成するために使用されるポータブルC ++ライブラリです。libnoiseは、Perlinノイズ、リッジ付きマルチフラクタルノイズ、およびその他のタイプのコヒーレントノイズを生成できます。

コヒーレントノイズは、多くの場合、グラフィックプログラマーが自然なテクスチャ、惑星の地形などを生成するために使用します。上記の山のシーンは、Terragenでlibnoiseによって生成された地形ファイルでレンダリングされました。libnoiseでできることの他の例を表示することもできます。

libnoiseでは、コヒーレントノイズジェネレーターは、ノイズモジュールと呼ばれるクラスにカプセル化されます。ノイズモジュールにはさまざまな種類があります。一部のノイズモジュールは、他のノイズモジュールの出力をさまざまな方法で結合または変更できます。これらのモジュールを結合して、非常に複雑なコヒーレントノイズを生成できます。


3

このコードを使用して、ほぼ任意の数の行と列の「ヒルスロープ」DEMを作成できます。

# 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)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.