주소 데이터를 지도에 표시하고 싶다구요! (지오코딩)

주소 데이터를 지도에 쫙 표시하는 쉬운 방법이 있습니다. 이를 위해서는 주소를 좌표로 변환해야 하는데요. 이를 전문 용어로 지오코드(Geocode) 또는 지오코딩(Geocoding)이라고 합니다.

예를 들어 다음처럼 엑셀로 정리된 주소 데이터가 있습니다.

이 데이터를 아래처럼 엑셀에서 CSV라는 파일로 변환합니다. (2024년 7월 20일을 기준으로 CSV로 변환하지 않고 엑셀 파일을 그대로 사용할 수 있어요!) CSV로 변환되면 엑셀이 설치되어 있지 않아도 텍스트 편집기에서 쉽게 보고 편집도 할 수 있어요. 참고로 여기서 소개하는 지오코딩은 매일 매일 무료로 최대 10,000개의 주소를 좌표로 변환해서 다운로드 받을 수 있으니깐 무료로 사용하기 위해서는 이점을 염두해서 CSV 파일을 만드는 것이 좋아요. 물론 10,000개 이상도 가능한 방법이 있는데 유료로 가능하고 다른 회사의 서비스에 비해 매우 저렴해요.

이제 주소 데이터 준비는 완료! 간단하죠? 다음으로 웹브라우저에서 지오서비스웹(https://www.geoservice.co.kr)에 접속합니다.

아직 가입이 안되어 있다면 샤샤삭 가입하시면 됩니다. 그리고 로그인해서 앞서 준비한 CSV 파일을 업로드 해야 합니다. 아래처럼 3단계로 업로드할 수 있는 창을 표시할 수 있어요.

위처럼 진행하면 데이터를 업로드할 수 있는 창이 다음처럼 나타나요.

이 창에서 CSV 파일을 선택하거나 드레그앤드랍해서 업로드할 수 있어요. 위의 모습은 이미 해당 CSV 파일을 업로드하기 위해 선택한 결과구요. 이렇게 되었다면 추가 버튼을 클릭해서 업로드 합니다. 업로드가 완료되면 아카이브에 업로드한 항목이 나타나요.

이제 이 데이터를 지도에 표시하기 위해 좌표로 변환해 볼께요. 아카이브 창을 닫고 메인메뉴에서 “주소를 좌표로 변환”을 찾아 실행합니다.

그럼 지오코딩 창이 표시되는데, 여기서 아래처럼 변환할 데이터 파일을 선택합니다.

그럼, 선택된 데이터 파일의 내용이 아래처럼 지오코딩 창에 표시되요.

컬럼명(필드명)을 영문으로 해야 하는데 한글로 하면 위에서처럼 자동으로 영문으로 변경되니까 CSV 파일을 만들 때 처음부터 영문으로 지정하면 좋아요. 자! 여기서 중요해요. 주소 값을 가진 필드명을 정확히 지정해야 합니다. 위의 경우는 field2가 주소값을 가지고 있으니 아래처럼 “주소 필드”에 field2를 선택하면 되요.

주소 필드를 지정하면 지정된 필드의 데이터를 보여주고 정말 맞는지 물어보니깐, 잘보고 확인하세요. 이제 정말 모든 준비가 끝났어요! 좌표로 변환하기 위해서 아래 화면의 버튼을 클릭하면 변환이 시작되요!

변환이 완료되면 다음처럼 그 결과가 표시되요.

변환할 주소 건수가 약 25,900개 정도 되는데 소요 시간이 2분 19초 걸렸네요. 변환된 데이터를 다운로드 받기 위해서는 아카이브에 업로드해야 하니 위의 화면에서 “예” 버튼을 클릭합니다. 그러면 결과 데이터를 압축하고 다음처럼 아카이브에 업로드할 수 있는 창이 떠요.

“제목”에 원하는 내용을 입력하면 되고 “추가” 버튼을 클릭하면 아카이브에 입력된 제목으로 업로드가 되요. 여기서 다시 아카이브를 클릭해서 아카이브를 살펴보면 다음과 같아요. 보시면 업로드된 결과 파일이 보입니다.

업로드된 결과 파일은 레이어로 추가해서 바로 지도에서 살펴볼 수도 있고 파일을 다운로드 받을 수도 있어요. 아래처럼 결과 파일 항목을 클릭해서 레이어로 추가할지 다운로드 받을지 선택할 수 있어요.

다운로드 받으면 다운로드 폴더에 파일이 저장되는데, 결과 파일의 변환 좌표가 10,000개 이하일 때는 무료로 받을 수 있어요. 여기서는 다운로드 받지 않고 “레이어로 추가하기”를 선택하면 레이어 이름을 원하는 내용으로 입력하고 진행하면 다음처럼 지도에 레이어로 추가되요.

지도에 표시된 포인트를 클릭하면 위의 화면처럼 상세 정보가 팝업으로 표시되어 해당 위치에 대한 정보를 바로 확인할 수 있어요.

그럼 이상으로 지오서비스웹을 이용한 지오코딩 사용기를 알아보았습니다. 많이 이용해 주세요~!

지오서비스웹의 경위도 좌표를 주소(지번주소, 도로명주소)로 변환

먼저 해당 기능은 v1.2.5입니다. 지오서비스웹에 로그인할 때 버전이 다르다면 Shift 키와 함께 우측 상단의 업데이트 버튼을 클릭해 웹브라우저의 캐쉬를 삭제하시기 바랍니다.

지도를 클릭하면 클릭된 지점의 경위도 좌표를 지번주소 또는 도로명주소로 표시해 줍니다. 도로명주소는 건물에 대해서 할당되어 있으므로 클릭한 지점에 건물이 없을 수 있습니다. 그럴때는 가장 가까운 건물에 대한 도로명주소와 함께 떨어진 거리를 제공해 줍니다.

여러개의 좌표를 CSV 데이터에 저장해 한번에 변환할 수 있습니다. 아래는 그에 대한 변환 결과입니다.

지적도는 그 특성상 연속되어 있으므로 좌표에 대해 떨어진 거리가 대부분 0입니다. 그와 다르게 도로명주소는 0과 같거나 큽니다. 이런 거리에 대한 결과를 이용해 좌표에 대해 변환된 주소 결과를 좀 더 의미 있게 활용할 수 있습니다.

지오서비스웹(GEOSERVICE-WEB)으로 만든 통계 지도

지오서비스웹으로 만들 수 있는 통계지도입니다. 입력 데이터는 서울시 행정구역도와 인구 데이터입니다.

먼저 색상 단계 구분도입니다. 서울시 행정구역도에 포함되는 포인트 인구 데이터를 집계해서 얻은 결과입니다.

다음은 핵사곤 영역을 이용한 색상 단계 구분도인데요. 핵사곤 영역은 서울시 행정구역도를 이용해 지오서비스웹의 핵사곤 생성 기능을 이용해 만들었습니다.

다음은 밀도도입니다.

지오서비스웹은 웹에서 누구나 사용할 수 있는 서비스이며 자세한 내용은 아래의 URL을 참조하시기 바랍니다.

지오서비스웹(GEOSERVICE-WEB)

잘못된 지오메트리 고치기

GIS 시스템을 개발하거나 이용할때 고객으로부터 제공받은 SHP 공간 데이터를 사용하게 되는데.. 가끔씩 제공받는 SHP 데이터의 지오메트리의 정점이 잘못 구성된 경우가 있습니다. 지오메트리가 잘못될 경우 공간 연산 기능에 대한 결과가 잘못되거나 실행 중에 시스템이 멈춰버립니다. 아예 시스템이 멈춰버리면 다행인데 에러 없이 잘못된 결과를 사용자에게 제공하는 것이 더 큰 문제입니다.

잘못된 지오메트를 가진 SHP 데이터는 의외로 상당히 많습니다. 국가에서 제공하는 공간 데이터 중 상당수가 잘못된 지오메트리를 포함하고 있습니다. 흔히 알려진 잘못된 지오메트리의 경우는 다음과 같습니다.

  • Incorrect ring ordering (잘못된 링 순서) : 폴리곤이 위상학적으로 간단하지만 링이 정상적이지 않은 경우(바깥 링: 시계방향, 안쪽 링: 반 시계 방향)
  • Incorrect segment orientation (잘못된 세그먼트 방향) :각각의 세그먼트간의 일관성이 없는 경우, 시작세그먼트는 i이고 종점 세그먼트는 i+1의 값을 갖는다.
  • Self intersections (자기 교차) : 폴리곤이 다른 부분 또는 자신과 겹치거나 중첩되는 경우
  • Unclosed rings (닫히지 않은 링) : 링의 마지막 세그먼트가 시작 세그먼트와 만나지 않은 경우
  • Empty parts (비어있는 부분) : 지오메트리가 multiple 파트인데 그 중 하나가 비어있는 경우
  • Duplicate vertex (꼭지점 중복) : 지오메트리에 동일한 좌표를 가진 두 개 이상의 순차적인 꼭지점이 있는 경우
  • Discontinuous parts (불연속 부분) : 지오메트리 파트 중 하나가 연결되어 있지 않거나 불연속으로 구성 되어있는 경우

이런 잘못된 지오메트리를 웹에서 간단하게 고칠 수 있는 기능을 GeoService-Web에서 제공합니다. 아래의 화면은 지적도가 포함하고 있는 지오메트리를 검수해서 잘못된 지오메트리를 고치는 기능입니다.

앞서 말씀 드렸듯 처음 SHP 파일을 받게 되면 잘못된 지오메트리를 포함하고 있는 데이터인지 반드시 확인 하셔야 합니다. 이런 확인을 위해 별도의 프로그램을 설치할 필요 없이 웹에서 바로 실행해 그 결과를 얻을 수 있는 GeoService-Web의 “잘못된 지오메트리 고치기” 기능을 사용해 보시기 바랍니다. 웹에서 한번의 가입 만으로 사용하실 수 있습니다.

GeoService-Web은 아래의 링크를 통해 확인하실 수 있습니다.

지오서비스웹(GEOSERVICE-WEB)