GMT

복합방식의 그리드 파일 생성 [nearneighbor]

작성자
heukchoo
작성일
2021-01-17 20:23
조회
365
 

surface 는 보간을 통한 고해상도 그리드 파일 생성이 가능하지만 공백 영역도 거짓 정보로 보간하는 문제가 있다.

xyz2grd 는 공백 영역을 그대로 유지하지만 보간을 하지 않아 기존 데이터의 해상도를 넘을 수 없다.

위 두가지 툴의 장점을 섞은 것이 nearneighbor 툴이다.

 




nearest neighbor 알고리즘


nearneighbor 툴은 nearest neighbor 알고리즘을 사용하며 이를 이해해야 효과적으로 사용할 수 있다.





 
각 격자선의 교차점을 노드(node)라 하며, 노드를 중심으로하는 반지름 R의 원을 설정한다.

노드에서 원 내에 위치한 각 값들의 거리를 계산하여 거리에 따른 가중 평균값을 노드의 값으로 취한다.
(당연히 거리가 가까울 수록 가중치가 높다.)

이 과정을 각 격자별로 수행하여 노드값(격자별 값)을 생성한다.
만일 원 내부에 값이 없으면 노드값은 NaN 이다.

만일 기존 데이터 해상도가 1m(분) 이고 해상도 0.1m의 그리드 파일을 생성하려면, 격자 간격은 0.1m로 설정하고 원의 반지름을 1m 이상으로 설정하면 된다.

nearneighbor는 위 과정을 통해 넓은 공백영역은 공백으로 유지하고 자잘한 공백들은 보간으로 메울 수 있다.

 




Synopsis

gmt nearneighbor [ table ] -Gout_grdfile -Iincrement -Nsectors[/min_sectors-Rregion -Ssearch_radius[unit] [ -Eempty ] [ -V[level] ] [ -W ] [ -bibinary ] [ -dinodata ] [ -eregexp ] [ -fflags ] [ -hheaders ] [ -iflags ] [ -nflags ] [ -r ] [ -:[i|o] ]

 
필수옵션은 -G, -I, -R, -S 이며, -G, -I, -R 은 surface와 동일하므로 설명을 생략한다.

-S 옵션은 원의 반지름을 설정한다.
'-S10m' 와 같이 반지름 크기와 거리단위를 설정한다. 분(m), 킬로미터(k)를 주로 사용한다.
주의할 것은 단위를 설정하지 않거나 특정 단위를 설정할 경우 실행이 되지 않는다.(버그인듯)

 
gmt nearneighbor data.txt -Gdata.grd -R128/129/35/36 -I0.2m -S1m gmt nearneighbor data.txt -Gdata.grd -R128/129/35/36 -I0.2m -S2m
 

위 그림은 격자 간격을 0.2m 으로 설정하고, 원 반경을 1m과 2m으로 각각 설정한 경우이다.

기존 데이터가 약 1m 해상도로서 일부 노드에서는 주변 1m 반경내에 데이터가 없는 경우가 발생하여 왼쪽 그림과 같이 자잘한 공백 구간이 발생한다.
(이해를 위해 간략히 설명하였으며 실제로는 원 내부에 데이터가 있다. -N 옵션을 보라)

오른쪽 그림은 원 반경을 2m로 넓혀서 자잘한 공백 구간을 보간하였다.
xyz2grd 보다는 해상도가 상향되었으며, 가운데 넓은 공백 영역은 그대로 유지하고 있음을 주목하자.

또한, 원 반경 2m는 보간이 되었지만 1m에 비해 해상도가 떨어졌음에도 주목하자.
즉, 원 반경이 작을 수록 해상도는 높아진다.(보간의 정밀도가 높아진다.)

 
-N 옵션은 nearneighbor의 보간방법을 보다 세밀하게 설정한다.

-N 옵션이 주어지지 않은 경우 nearneighbor는 원을 기본 4등분하여(아마도 피자 조각 형태로) 각 조각(또는 섹터) 모두에게 데이터가 한 개 이상 있는 경우에만 노드값을 산출한다.
(한 조각이라도 데이터가 없으면 NaN 값을 지정한다.)

위의 예제에서 원 반경을 1m로 설정한 경우, 실제로는 원 내에 데이터가 어느정도 포함되어 있다.
그러나 4개 섹터 중 데이터가 없는 섹터가 한개라도 존재하여 NaN으로 설정되고 자잘한 공백이 발생한다.
그렇다면 이러한 조건을 조정한다면 해상도가 높은 원 반경 1m으로도 자잘한 공백을 보간할 수 있을 것이다.

-N 옵션은 총 섹터의 수와 데이터가 있어야하는 최소 섹터 수를 설정한다.
'-N8/2' 에서 8은 총 섹터 수이다. 즉 원을 8조각으로 구분한다. 2는 데이터가 있어야 하는 최소 섹터 수이다.
즉, 8개 섹터 중 2개의 섹터에만 데이터가 있어도 노드값을 산출한다.

-N 옵션을 지정하지 않을 경우 '-N4/4' 가 기본값으로 주어진다.
즉, 4개의 섹터 모두 데이터가 한개라도 있어야 한다.

위의 예제를 수정하여 -N 옵션을 어떻게 적용할 수 있는지 확인해 보자.

 
gmt nearneighbor data.txt -Gdata.grd -R128/129/35/36 -I0.2m -S1m -N8/3 gmt surface data.txt -Gdata.grd -R128/129/35/36 -I0.2m -T0.35
 

위의 왼쪽 그림은 앞선 예제의 격자 0.2m, 원 반경 1m에서 -N 옵션을 지정한 경우이다.

8개 섹터 중 3개 섹터라도 데이터가 있으면 노드값을 산출하기 때문에 자잘한 공백은 보간이 되었고 원 반경을 1m으로 설정하여 해상도도 우측의 surface와 유사함을 보여준다.

가운데 큰 공백영역을 거짓 정보로 보간한 surface 보다 훨씬 좋은 결과가 나왔다.


-W 옵션은 입력 데이터에 4번째 열을 가중치로 한 xyzw 포맷을 읽어 가중치를 적용할 수 있게한다.
 

그리드 파일을 생성하는 surface, xyz2grd, nearneighbor 툴들은 각각 장단점을 가지고 있다.

여러가지 데이터들을 처리해보면서 적절한 방식을 사용해보길 권장한다.

 
전체 0