Zufälliges, aber glaubwürdiges digitales Höhenmodell erstellen? [geschlossen]


32

Gibt es eine Möglichkeit, programmgesteuert oder auf andere Weise ein DEM zu generieren, das zur weiteren räumlichen Analyse in ArcGIS Desktop eingespeist wird?

Möglicherweise muss dies in kleinere inkrementelle Schritte unterteilt werden:

  1. Erstellen Sie ein Raster
  2. Füllen Sie das Raster mit Werten, bei denen: 0 > value < maxElevation
  3. Nachbarzellen: (x1-x2) < maxSlope

4
Die Site @Igor weist Sie auf die Notwendigkeit hin, diese Frage zu klären. Es konzentriert sich auf "synthetisches Terrain", anscheinend um Hintergründe für Spiele und ähnliches zu schaffen. Die meisten dieser Techniken scheinen sich nicht auf die Neuerstellung tatsächlicher DEMs zu konzentrieren: "Realistisch" liegt im Auge des Betrachters und hat keinen wissenschaftlichen Inhalt. In Ihrer Frage schlägt "weitere räumliche Analyse" vor, dass Sie Ihre synthetischen DEMs benötigen, um bestimmte Merkmale einer Klasse tatsächlicher DEMs zu reproduzieren. Wenn ja, welche Funktionen müssen Sie dann erfassen?
whuber

Die erste Verbindung von @Aragon ist gebrochen, aber es sollte darauf hinweisen dies . Nicht genügend Credits, um seine Antwort zu kommentieren.
Matthieu

Werfen Sie auch einen Blick auf diese .
Rodrigo

Antworten:



16

Sie können Fraktale für diese verwenden: Künstliche DEMs mit Fraktalen erstellt.

Die obere Zeile wurde mit der fraktalen Dimension d = 2.0005 (links: Höhenkarte, rechts: Aspektkarte), die untere Zeile mit der fraktalen Dimension d = 2.90 (links: Höhenkarte, rechts: Aspektkarte) erzeugt. Ich habe r.surf.fractal von GRASS GIS verwendet. Dann exportieren Sie einfach das künstliche DEM mit r.out.gdal (oder der GUI) nach GeoTIFF.


Das sieht wirklich interessant aus. Können Sie einige Details zu Ihrer Verwendung hinzufügen r.surf.fractal?
Simbamangu

Den für die obigen Bilder verwendeten Befehl finden Sie hier: grass.osgeo.org/grass70/manuals/r.surf.fractal.html#example
markusN

8

Sie können auch ein Skript verwenden, das einen zufälligen Teil eines vorhandenen realen DEM übernimmt.


Außerdem müsste am Ende eine Art Füllung angebracht werden, um die Mosaikränder der zufälligen Teile zu nivellieren.
26.


5

Hier ist eine R-Lösung, die einen Gaußschen Kern verwendet, um einem zufälligen Raster eine Autokorrelation hinzuzufügen. Obwohl ich sagen muss, dass die von @markusN vorgeschlagene Funktion GRASS r.surf.fractal der beste Ansatz ist.

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

Sie können versuchen, Perlin-Rauschen zu verwenden, um ein zufälliges fraktales Terrain zu erstellen. Diese Antwort auf Stackoverflow erklärt, wie Sie in Python beginnen können. Der Trick wäre, in einen sehr kleinen Bereich des verrauschten Gitters hineinzuzoomen, damit es nicht zu unregelmäßig aussieht.


3

libnoise gibt dir was du willst. Sie müssen es wahrscheinlich bis zu einem gewissen Grad anpassen. Überprüfen Sie das Beispiel 'Komplexe Planetenoberfläche'.

libnoise ist eine portable C ++ - Bibliothek, mit der kohärentes Rauschen erzeugt wird, eine Art sich sanft änderndes Rauschen. libnoise kann Perlin-Rauschen, geriffeltes multifraktales Rauschen und andere Arten von kohärentem Rauschen erzeugen.

Kohärentes Rauschen wird häufig von Grafikprogrammierern verwendet, um natürlich aussehende Texturen, planetares Terrain und andere Dinge zu erzeugen. Die oben gezeigte Bergszene wurde in Terragen mit einer von libnoise erzeugten Geländedatei gerendert. Sie können auch einige andere Beispiele für die Funktionsweise von libnoise anzeigen.

In libnoise werden kohärente Rauschgeneratoren in Klassen eingekapselt, die als Rauschmodule bezeichnet werden. Es gibt viele verschiedene Arten von Rauschmodulen. Einige Rauschmodule können die Ausgänge anderer Rauschmodule auf verschiedene Arten kombinieren oder modifizieren. Sie können diese Module zusammenfügen, um ein sehr komplexes kohärentes Rauschen zu erzeugen.


3

Dieser Code kann verwendet werden, um ein "Hill Slope" -DM mit nahezu beliebig vielen Zeilen und Spalten zu erstellen:

# 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)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.