수치지형도의 정보를 사용하고 싶은 경우 부득이하게 NGI파일을 shp형태로 변환해야한다. 이 쪽 전문가가 아니라 잘 모르지만 NGI파일은 아주 오래전 국뽕이 적당히 들어가서 만들어진(?) 비표준 파일이다. 캐드에 가까운 형태의 모습인 듯 하다. 

 

아무튼, 이 NGI파일을 shp파일로 변환하는 방법은 검색하면 많이 나온다. 이 글을 보시는 분들은 이미 아실건데, 간단히 설명하면 다음과 같다.

 

1. 국토지리정보원 자료실 > 프로그램 중에서 "수치지도활용소프트웨어" 라는 프로그램을 받는다. 

시간이 오래 지나면 홈페이지의 구조가 바뀌어 링크가 깨지겠지만, 당분간은 살아있을테니 링크는 아래에 걸어둔다.

https://www.ngii.go.kr/kor/contents/view.do?sq=484&board_code=contents_data&search=eyJzcmNoS2V5IjoiQUJDRSIsInNyY2hWYWx1ZSI6IiIsImJvYXJkX2NvZGUiOiJjb250ZW50c19kYXRhIiwiY3VycmVudFBhZ2UiOiIxIiwibGlzdFR5cGUiOiJnYWxsZXkiLCJzcSI6IiIsInNyY2hUZXJtIjoiRSJ9¤tPage=1&srchKey=ABCE&listType=galley&srchTerm=E&srchValue=

 

수치지도 활용 S/W 업데이트 공개

 수치지도 활용 S/W 업데이트 공개 (2011.8.22 업데이트) 수치지도 포맷변환 및 좌표변환 기능을 제공하는 S/W를 공개합니다.   ㅇ 포맷변환 : dxf &

www.ngii.go.kr

 

자 이놈을 받아서 설치하고 실행을 해준다. 윈도우10에서도 아직까지 잘 돌아간다. 

 

2. 변환을 위해 위의 메뉴에서 "포맷 변환" > "다중 포맷 변환" 으로 간다. 그럼 작은 창이 뜨는데, 여기서 추가 버튼을 누르고 원하는 ngi파일을 ctrl + A 로 모두 선택해서 "열기"를 눌러준다. 진짜 열리는건 아니고 그냥 선택만 되는거다. 

 

이 때 조그만 창 위쪽에 있는 변환타입을 본인의 상황에 맞게 잘 골라주자. 여기서는 shp(수치지도)를 선택한다.

ngi파일을 불러온 모습

이 다음에 우측에 있는 변경 버튼을 누르면 된다.

 

3. 변환 속도가 진짜 환장하게 느리다는걸 알게 될것이다. CPU점유율도 그리 높지 않은데 상당히 느리고 가끔씩 중간에 오류가 나면 이후의 파일들은 모두 변환이 되지 않는다. 이 변환속도를 높이는 방법을 우연히 알아냈는데, 항상 되는건지는 잘 모르겠다. 

 

실제로 변환을 걸어놓고 작업관리자를 보면 윈도우의 멀웨어 디텍터가 엄청나게 cpu를 잡아먹으며 열일하는걸 볼 수 있다. 이놈이 잠시 일을 못하도록 "실시간 보호" 기능을 꺼주자.

 

windows 보안 > 바이러스 및 위협 방지 에 가서 "바이러스 및 위협 방지 설정" 제목 아래에 있는 "설정관리"에 가자. 여기서 실시간 보호를 꺼준다. 

 

 

이제 다시 파일을 변환해보자. 이전보다 몇 배는 빨라졌기를!

 QGIS에서도 쉽게 tiff로 된 raster files을 병합할 수 있다.

 

그런데 어떤 오류로 병합이 되지 않는 경우가 있는데, 이 경우 아래의 방법을 따라하면 빠르고 쉽게 tiff 파일들을 하나의 파일로 병합할 수 있다. 이 때 주의할 점은 tiff 파일들의 좌표계가 모두 같아야 한다는 것. 좌표계가 다르면 엉뚱하게 하나로 병합된다. 따라서 좌표계가 같은 파일들을 묶어서 병합하거나 이전에 tiff 파일들의 좌표계를 맞추어주어야 한다. 

 

출처는 여기: 

https://dominoc925.blogspot.com/2015/11/mosaic-large-number-of-geotiff-images.html

 

Mosaic a large number of GeoTiff images using GDAL

GDAL's gdalwarp function can be used to combine geo-referenced images into a large mosaic file. For a few files, it is relatively straightfo...

dominoc925.blogspot.com

 

간단히 포인트만 적자면, 

 

1. tiff 파일 이름이 쭉 적혀있는 리스트를 만든다. tiff 파일들이 모여있는 폴더에 가서 아래처럼 입력한다.

C:> dir /o/b *.tif > list.txt

 

2. gdalwarp을 이용해서 병합

gdalwarp -multi -wm 1000 --optfile list.txt output.tif

3. 병합된 tif 파일을 QGIS에서 확인

여러 데이터들을 선택적으로 그려야 할 때(특히 체크박스가 있는 경우), 그래프 그리는 함수를 여러번 반복하는게 효과적일 수 있습니다. 그런데 그래프의 요소들을 선택하고 여러번 그리면 맨 처음으로 들어간 data에 대해서만 그림이 그려집니다.


즉. data1으로 scatter plot을 그린 뒤에 data2로 다시 scatter plot을 그리면 data1으로부터 그려진 plot만 있다는 뜻이죠.


이유는 코드 속에 숨어있었다... 

1
2
3
4
5
 svg.selectAll(".dot")
      .data(data)
    .enter().append("circle")
      .attr("class""dot")
      .attr("r"3.5)
cs


예제(http://bl.ocks.org/mbostock/3887118)에 나온대로 위의 코드는 circle 요소를 data에 맞게 만들어준다. 그런데 이걸 여러번 반복하면서 data(data_n)와 같이 data를 넣어주면 문제가 생긴다. 그러니까... 안그려준다. 그래서 구글신께 아뢰니 아래의 답을 주셨다.

(http://stackoverflow.com/questions/26459963/nodes-not-appearing-for-second-line-in-d3-js)


이유인 즉슨, 이미 selectAll()로 선택된 애들에 data가 들어가있어서 data() 메서드를 불러봐야 소용이 없다는 것이다. 자세한건 위의 링크를 타고 가보시길... (영어로 써져있지만 결국 이 내용이다.) 그래서 아래와 같이 하면 잘 된단다.


1
2
3
4
5
 svg.selectAll(".dot.second")
     .data(data)
    .enter().append("circle")
    .attr("class""dot")
    .attr("r"3.5)
cs


만약 for문으로 돌려가면서 여러번 만들어야 한다면 아래처럼 만들어도 잘 된다. 물론 css class는 dot 하나만 필요하다. 


1
2
3
4
5
 svg.selectAll(".dot_"+cnt)
     .data(data)
    .enter().append("circle")
    .attr("class""dot")
    .attr("r"3.5)
cs


+ Recent posts