수치지형도의 정보를 사용하고 싶은 경우 부득이하게 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


우분투에서 시스템 온도를 체크하는 편한 방법이 있었습니다. apt-get에서 lm-sensors 를 설치 후에 다음과 같이 입력합니다.


sudo sensors-detect

이후에 시스템의 센서들을 검색한다는군요. yes가 하도 많아서 일일히 입력하느라 혼났는데... 엔터를 눌러도 된답니다. 아무튼 yes를 계속 입력하면서 센서를 모두 찾아줍니다. 센서를 모두 찾았으면, 다음을 입력하라는군요.


sudo service module-init-tools restart


시스템의 온도를 측정하기 위한 서비스인가 봅니다. 아무튼 서비스를 재실행하고 sensors 라고 입력하면 CPU 및 시스템 이곳저곳의 온도들이 출력됩니다.


출처는 아래~


http://ioriy2k.pe.kr/archives/5442

Ubuntu에서 latex를 설치하는 방법. 무척 쉽다. 게다가 APS에서 제공하는 revtex4-1 패키지 역시 apt-get으로 설치가 가능하다. 그러니 애쓰지 말고 다음의 라이브러리를 apt-get 으로 설치하자


1. Texlive 설치하기

 Latex를 사용하기 위해 처음 설치해야 하는 패키지


2. texlive-publishers 설치하기

 APS에서 제공하는 revtex4-1 을 사용하기 위한 패키지. APS에서 다운로드 받아 README를 읽어봤는데 복사해야 할 곳의 디렉터리가 요상하다. 아마도 apt-get 을 이용하여 latex를 설치하면서 경로가 달라진듯 싶다.

아무튼 이 publishers 패키지를 설치하면 revtex4-1을 사용할 수 있다.


근데 여기까지 해보면... textcase.sty 가 없다고 에러를 뱉어준다. 그래서 검색해보니, 


3. texlive-latex-extra 설치

이것까지 설치하면 아무 에러없이 revtex4-1를 사용할 수 있다. 

우분투에서 pip로 numpy, scipy 그리고 matplotlib를 설치하는 여러 방법중 pip 를 통한 설치가 있다. apt-get 으로 저장소에서 직접 받아와서 설치해도 된다.


Ubuntu 12.04 LTS의 경우, 다음의 라이브러리들을 미리 설치해두어야 한다. 설치는 apt-get 을 이용.


1. Numpy

 - python-dev 


2. Scipy

 - gfortran (fortran compiler)

 - libatlas-base-dev (설치하면 blas 관련 패키지들도 같이 설치되는듯...) 

   --- http://stackoverflow.com/questions/8961340/blas-and-lapack-libraries-required-for-compiling


3. Matplotlib (이게 고난의 연속이었다.)

 - libfreetype6-dev

 - libpng

 - libjpeg8-dev

 - libpng-dev

   --- http://stackoverflow.com/questions/9829175/pip-install-matplotlib-error-with-virtualenv


특히 Matplotlib의 경우 에러 메세지만 보면 어떤 것이 필요한지 알기 힘든 경우가 많았다. freetype 에러인 경우엔 libfreetype6 관련 패키지를 설치해야 하고, png.h 부근의 에러는 libpng-dev 를 설치해야만 넘어간다.


C/C++ 프로그램을 컴파일할 때 최적화 옵션을 주어 속도 향상을 꾀하는 경우가 보통이다. 그런데 잘 살펴보니 gcc와 icc (인텔 컴파일러)에서 기본으로 사용하는 최적화 옵션이 달랐다.


GCC: 기본 최적화 옵션 -> 없음. 우리가 지정해주어야 한다.

ICC: 기본 최적화 옵션 -> O2. 


컴파일 옵션(O1, O2, O3)은 미리 최적화 방법을 만들어 놓은 일종의 프리셋이다. 일반적으로 연구에서 굳이 최적화 옵션을 살펴볼 필요는 없겠지만, O2와 O3의 차이점 정도가 궁금하여 찾아봤다.


'-O' 또는 '-O1'의 경우, 만들어지는 오브젝트, 또는 실행 파일을 가능한 작게 하면서, 컴파일 시간이 오래걸리지 않는 범위에서 최적화를 수행합니다.

'-O2'의 경우, 만들어지는 코드가 가능한 빠르게 수행되도록 하지만, 코드의 크기가 너무 커지지 않도록 하는 범위에서 최적화를 수행합니다.

'-Os'의 경우, '-O2'에서 제공하는 모든 최적화 기능을 다 쓰지만, 코드의 크기를 증가시키는 최적화 기능은 빼고 나서 최적화를 수행합니다.



위 설명의 출처는 KLDP위키 (https://wiki.kldp.org/wiki.php/GccOptimizationOptions) 이다. O2와 O3 모두 코드의 실행 속도가 빠르게 되도록 최적화해주는데 차이가 조금 있다고 한다. 웹에서 조금 찾아보면 O3의 경우 O2보다 반드시 빠르리란 보장도 없으며, 가끔 잘못된 결과를 가져올 수 있다고 한다. 


자세한 것은 모르겠으나, gcc/g++로 컴파일 할 때 최적화 옵션으로 -O2를 반드시 주는걸 잊지 말자.

물론 icc/icpc에선 기본이니까 안줘도 그만이지만.


옵션 주는 방법: gcc prog.c -o prog.out -O2 

C언어로 파일을 읽을 때 fsacnf로 읽을 경우, 마지막에 읽은 값이 두번 나오는 경우가 있다. 다음과 같이 코드를 짰을 경우에 그렇다.


while(!feof(fp)){

 fsacnf(fp, "%s", &var_char);

}


이 경우 feof가 파일의 끝(EOF)을 만나자마자 이를 인지하지 못하기 때문에 발생하는 문제(?)라고 한다. 자세히는 모르겠으나, 해결 방법은 다음과 같이 fscanf의 return 값이 EOF인지 판단하는 것이다.


while( EOF!=fscanf(fp, "%s", &var_char))

   printf("%s", var_char);


출처는 https://kldp.org/node/35102 

우분투에서 웹 서비스를 위한 서버 설정 관련 유용한 링크들


Apache, PHP, MySQL 등의 설치 (apt-get 이용)

http://luckyyowu.tistory.com/105 



Apache에서 홈 디렉토리 위치 변경하기

http://proletariat.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC%EC%97%90%EC%84%9C-%EC%95%84%ED%8C%8C%EC%B9%98-%ED%99%88-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0-How-to-change-apache-home-directory-in-Ubuntu

1. size가 0인 파일(empty file) 검색하기

 find . -size 0 


2. 최근에 만들어진 파일부터 살펴보기

ls -lArt | tail -20


(계속 업데이트중...)

+ Recent posts