추가 공간 분석을 위해 ArcGIS Desktop에 공급 될 프로그래밍 방식 또는 기타 방식으로 DEM을 생성하는 방법이 있습니까?
아마도 이것은 더 작은 증분 단계로 나눌 필요가 있습니다.
- 그리드 생성
- 다음과 같은 값으로 그리드를 채우십시오.
0 > value < maxElevation
- 인접 셀 :
(x1-x2) < maxSlope
추가 공간 분석을 위해 ArcGIS Desktop에 공급 될 프로그래밍 방식 또는 기타 방식으로 DEM을 생성하는 방법이 있습니까?
아마도 이것은 더 작은 증분 단계로 나눌 필요가 있습니다.
0 > value < maxElevation
(x1-x2) < maxSlope
답변:
좋은 정보가 필요하면이 페이지를 보거나 읽으십시오. 두 번째 링크는 랜덤 디지털 엘레 비틴 모델의 방법을 보여줍니다.
이를 위해 프랙탈을 사용할 수 있습니다 .
상단 차원은 프랙탈 차원 d = 2.0005 (왼쪽 : 고도 맵, 오른쪽 : 종횡비 맵)로, 하단 행은 프랙탈 차원 d = 2.90 (왼쪽 : 고도 맵, 오른쪽 : 종횡비 맵)으로 생성되었습니다. GRASS GIS의 r.surf.fractal 을 사용 했습니다 . 그런 다음 r.out.gdal (또는 GUI)을 사용하여 인공 DEM을 GeoTIFF로 내 보냅니다.
r.surf.fractal
있습니까?
다음은 vterrain.org의 지형 생성 알고리즘 및 소프트웨어에 대한 유용한 리소스입니다. http://vterrain.org/Elevation/Artificial/
다음은 가우스 커널을 사용하여 임의 래스터에 자기 상관을 추가하는 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")
Perlin 노이즈 를 사용하여 임의의 프랙탈 지형을 만들 수 있습니다. Stackoverflow에 대한이 답변 은 Python을 시작할 수있는 방법을 설명합니다. 트릭은 시끄러운 격자의 매우 작은 영역을 확대하여 너무 불규칙하게 보이지 않도록하는 것 입니다.
libnoise 는 원하는 것을 제공합니다. 당신은 어느 정도 그것을 사용자 정의해야 할 것입니다. '복잡한 행성 표면'예를 확인하십시오.
libnoise는 휴대용 C ++ 라이브러리로, 매끄럽게 변화하는 노이즈의 한 유형 인 코 히어 런트 노이즈를 생성하는 데 사용됩니다. libnoise는 Perlin 노이즈, 리지드 다 프랙탈 노이즈 및 기타 유형의 코 히어 런트 노이즈를 생성 할 수 있습니다.
코 히어 런트 노이즈는 종종 그래픽 프로그래머가 자연스럽게 보이는 텍스처, 행성 지형 등을 생성하는 데 사용됩니다. 위에 표시된 산악 장면은 libnoise에 의해 생성 된 지형 파일과 함께 Terragen에서 렌더링되었습니다. libnoise가 수행 할 수있는 다른 예를 볼 수도 있습니다.
libnoise에서 코 히어 런트 노이즈 생성기는 노이즈 모듈이라는 클래스로 캡슐화됩니다. 다양한 유형의 노이즈 모듈이 있습니다. 일부 노이즈 모듈은 다양한 방식으로 다른 노이즈 모듈의 출력을 결합하거나 수정할 수 있습니다. 이 모듈들을 결합하여 매우 복잡한 간섭 잡음을 생성 할 수 있습니다.
이 코드는 행과 열의 개수에 따라 "Hill slope"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)