본문 바로가기
GIS

좌표 정의 및 좌표계

by 드로니뚜벅이 2023. 4. 5.

좌표계(Coordinate Reference System, CRS)란?

공간상에 객체의 위치를 표현하기 위한 방법입니다.

 

지오이드와 타원체

지도제작을 하기 위해서는 지구를 일정한 기준 하에 두어야 합니다. 하지만 지구는 완전한 구(球)가 아니라 적도 반지름이 극 반지름보다 약간 긴 일그러진 타원체이며, 지표면은 그 형상이 매우 불규칙하여 어떤 일정한 규칙에 따른 임의 점의 위치표시가 사실상 불가능합니다.
따라서 일정한 규칙에 따라 위치를 표현하기 위해서는 새로운 지구의 수학적 형상을 필요로 하는데, 측지학에서 정립한 각종 작업의 기준이 되는 이 새로운 지구의 수학적 모델을 지오이드(Geoid)라 합니다. 이는 중력방향에 직각인 등중력포텐셜면(작용하는 중력이 모든 곳에서 일정한 잠재력을 갖는 면) 중 평균해수면에 일치하는 것으로, 해양에서는 평균해수면과 일치하고 육상에서는 땅속을 통과하게 됩니다.

측지학적 관점에서의 지구의 형상

위 그림에서 실제 지구를 덮고 있는 지형의 모양을 지표면이라고 합니다. 이 지표면은 산, 계곡, 강, 평야 등등이 지역에 따라 울퉁불퉁한 형태로 다르게 구성되어 있습니다. 지표면보다 조금 나은 방법으로 평균 해수면을 토대로 다시 지구를 그린 것을 지오이드라 합니다.

유럽 우주국에서 2011년 3월 31일 공개한 지오이드

하지만 지오이드 또한 매우 복잡한 형태를 띄고 있어 위치를 표시하기 위해서는 복잡한 계산과정을 거쳐야 합니다. 이를 해결하고자 측지학에서는 지오이드와 가장 유사한 지구의 기하학적 형상을 편평한 회전타원체로 재정의하여 사용하고 있으며, 이를 지구타원체(Earth Ellipsoid)라고 합니다.
지구타원체는 장반경과 편평률로 정의되는데, 부정형한 전 지구를 하나의 타원체로 오차없이 표현하는것은 불가능하기 때문에 각 나라에서는 해당 지역의 지오이드면에 적합한 지구타원체를 정의하여 그 지역의 준거타원체(Reference Ellipsoid)로 이용하고 있습니다.

Airy(1830): 영국, Everest(1830): 인도
Bessel(1841): 한국/일본/동남아
Clarke(1866): 북미/캐나다/필리핀, Clarke(1880): 아프리카/프랑스
Hayford(1924): 남미/서유럽
Krasovsky(1940): 러시아
WGS72(1972)/WGS84(1980): 미국방성/NASA

이렇게 각 나라마다 다른 준거타원체를 사용해도 자국의 측지측량 및 지도제작에는 아무런 문제가 되지 않지만, 인공위성과 같이 전 세계를 대상으로 하는 부문에서는 변환 없이 사용이 불가능하다는 문제가 생기게 되어 전체지구에 가장 적합한 지구타원체를 결정하는 것이 필요하게 되었습니다. 이러한 필요에 의해 결정된 것을 국제표준타원체라 부르고 있으며 GRS80 타원체, WGS84 타원체가 있습니다.

표준타원체와 준거타원체

타원체가 정해지게 되면 해당 지역에 가장 적합하도록 타원체의 위치 기준을 정하게 되는데, 이를 데이텀(Datum, 측지계)이라 하며, 타원체의 종류, 좌표체계의 기준점과 방향 등을 정의하게 됩니다. 흔히 말하는 세계측지계란 국제표준타원체를 사용하여 타원체의 중심을 지구의 질량중심과 동일하게 정의하여 사용하는 것을 말합니다.
우리나라는 측량법을 개정하여 2003년 1월부터 2009년 12월 31일까지 세계측지계(KGD2002)와 한국측지계(동경데이텀)를 병행 사용하였으며, 2010년 1월 1일부터는 공공측량 성과물에 세계측지계 사용을 의무화하였습니다.

지구 중심 데이텀(WGS 84)과 국지 데이텀(NAD 27)

지도의 좌표체계 차이는 어떤 타원체를 사용하며, 어디에 기준점을 두는지에서부터 출발한다고 할 수 있습니다.
우리나라는 '한국측지계2002(KGD2002)에 따라 세계기준계인 ITRF2000 지구중심좌표계를 따르고 타원체로는 GRS80 타원체를 적용하여 경위도를 계산한다.'고할 수 있습니다.
※ Ellipsoid와 Spheroid 모두 회전타원체에 해당하나, 통상적으로 Ellipsoid는 지구의 형상과 가장 유사한 기준이 되는 표준타원체를 지칭하며, Spheroid는 회전타원체 전체를 지칭하는 포괄적인 의미로 사용됩니다.(ArcGIS에서는 Spheroid로 사용됨)

 

한국측지계2002(ITRF2000) 및 세계측지계

우리나라는 일본에 의해 지배당하던 시절 그들이 구축해 놓은 동경좌표계(Bessel 타원체)를 한반도에 연결해 기준점을 설치하고 지도를 제작했습니다. 우리 손으로 만든 지형도라도 일제가 만든 기준점 체계와 성과관리 체계를 그대로 사용해 제작한 것이라 일제의 잔재를 청산하지 못했다고 할 수 있습니다. 이는 단순하게 일제의 잔재라는 문제만이 아니라 세계화 시대의 국가간에 실시되는 측위나 측량에서도 통일된 기준으로 사용할 수 없다는 문제도 내포되어 있었습니다.
이는 세계 여러나라에서도 나타나는 문제점이며, 이미 각국은 독자적으로 구축했던 경위도 좌표체계를 세계측지계로 변경했거나 변경을 서두르고 있습니다.
이에 우리나라도 국토지리정보원이 2001년 측량법을 개정하고, 기존의 지형도 상에 세계측지좌표를 표기한 신판 지형도를 보급하고 있으며, 이제까지 사용해온 동경측지계는 공식적으로는 더이상 사용하지 않습니다.
우리나라는 2002년 1월 1일 종래의 동경측지계를 버리고 세계측지계에 근거해 한국측지계 2002(KGD2002·Korea Geodetic Datum 2002 -> ITRF2000 좌표계와 같아 일반적으로 ITRF2000좌표계로 불림)를 구축했습니다. 이 측지계의 경도와 위도는 GRS80 타원체와 ITRF2000 데이텀 사용해서 나타내고 있으며, KGD2002 성과의 수평위치는 VLBI나 GPS를 이용한 경위도 원점 또는 위성측지기준점을 기준으로 전국의 삼각점을 새롭게 조정 계산했습니다. 여기에서 표고는 종전과 같은 인천만의 평균해면을 기준으로 합니다.

동경 측지계에서 세계측지계로 전환하게 되면 우선 측량과 지도제작 등에 영향을 미치게 됩니다. 우리나라의 측지원점인 경위도 원점(국토지리정보원 구내)의 경우 위도는 +10초, 경도는 -8초 정도 차이가 생기고, 위치상의 거리로는 인천이 360m, 울릉도가 385m, 홍도가 380m, 부산이 약 400m, 최남단 마라도가 400m 차이가 발생합니다. 지역에 따라 다소 차이는 있겠지만, 대체적으로 동경측지계에서 남동쪽 방향으로 300~400m의 어긋남이 발생한다고 볼 수 있습니다.
우리나라를 비롯해 여러 나라가 공통적으로 사용하고 있는 세계측지계인 ITRF(International Terrestrial Reference Frame)는 국제지구기준좌표계입니다. 이 좌표계는 지구의 회전운동의 감시나 좌표계의 유지 등을 목적으로 국제지구회전관측사업(IERS)이라는 학술기관이 구축한 세계측지계입니다. 이 좌표계를 사용해 구한 지구중심좌표를 경위도로 변환할 때 추천하고 있는 회전타원체가 GRS80(Geodetic Reference System 1980)입니다. 이 GRS80은 1970년 국제측지학협회(IAG)와 국제측지학지구물리학연합(IUGG)이 채택한 것으로, 현재 지구의 형상을 가장 잘 나타낸 타원체로 널리 이용되고 있습니다. 이 타원체는WGS-84 타원체와는지구 장반경의 값은 같고 단반경의 값이 약 0.1mm 정도만 차이가 나 거의 동일한 것으로 취급하고 있습니다.
개념적으로 세계측지계라 하면 하나여야 맞겠지만, 지금까지는 나라별로 채용하는 시기나 구축에 있어 그 방법이나 구현하는 정확도가 달라 세계 공통의 측지계라는 것은 존재하지 않는다고 볼 수 있습니다. 구축기법에 따른 대표적인 세계측지계는 WGS계, ITRF계, PZ계 등 세 종류가 있습니다.
세계측지계의 대명사처럼 사용되고 있던 WGS-84(World Geodetic System 84)도 직역하면 세계측지계가 되지만, 이는 1960년에 미국 국방성 지도국이 구축해 그 뒤 몇 차례 개정된 것으로, 선박이나 항공기의 항행용으로 사용되고, 원래 군사목적으로 개발된 GPS는 이 체계로 운용되고 있습니다. 우리나라의 경우도 군사지도나 국립해양조사원이 제작하는 해도에는 WGS-84를 사용하고 있습니다.
PZ계는 러시아가 군사 목적으로 구축 유지관리하고 러시아판 GPS인 GLONASS에 이용되고 있는 좌표계입니다.

 

투영도법

타원체는 삼차원 좌표나 경위도 좌표등으로 위치를 나타내게 됩니다. 하지만 이는 타원체상에서의 3차원 좌표(곡면)이므로 우리가 보는 2차원(평면) 지도상의 좌표와는 다릅니다. 이 타원체상의 3차원 좌표를 평면으로 나타내기 위해 또 다시 투영이라는 과정을 거치게 됩니다. 이 투영 과정에서 또 다시 여러 지도체계로 세분화 됩니다.
Bessel 좌표계를 사용하는 경우 주로 TM도법으로 투영하며, WGS84좌표계를 사용하는 경우 주로 UTM도법을 사용하여 투영합니다. 여기서 주의해야 할 점은 Bessel 타원체를 기준으로 UTM 투영이 가능하며, 반대로 WGS84 타원체도 TM투영이 가능하다는 점입니다. UTM도 TM과 같은 방법으로 투영계산을 거치지만 그 상수만 다를 뿐이기 때문입니다.
현재 우리나라는 TM도법과 UTM 도법을 모두 사용하고 있습니다. 그래서 TM과 UTM을 간략히 비교를 하면...

 

TM(Transverse Mercator - 횡단원통등각투영법

우리나라의 경우 평면직각 좌표계인 TM(Transverse Meractor) 좌표계를 국가기본도의 기본체계로 하고 있으며, 군사지도 및 단일원점을 사용하는 일부 부처에서 부분적으로 UTM(Universal Transverse Mercator) 좌표계를 사용하고 있습니다.
국가기본도의 경우 GRS80타원체를 기본타원체로 적용하고 있고, 좌표의 수평 기준원점은 경도 방향의 위치에 따라 125도, 127도, 129도, 131도 경도선을 기준으로 서부, 중부, 동부, 동해원점의 4가지를 혼용하고 있습니다.
고도 기준원점의 경우 검조장에서 다년간 조석 관측한 결과를 평균조정한 평균해수면(MSL, Mean sea level)을 사용하고 있는데, 이 평균해수면은 일종의 가상면으로 수준 측량에 직접 사용할 수 없으므로 그 위치를 지상에 연결하여 영구 표석을 설치한 후 수준원점(OBM, Original bench mark)으로 삼고 이것으로부터 전국의 주요 국도를 따라 수준망을 형성하였습니다. 현재 사용하고 있는 우리나라의 수준원점은 인하공업전문대학 교정 내에 설치되어 있으며, 인천만의 평균 해면상으로부터 26.6871m 위에 존재합니다. 아래표에서 우리나라 국가기본 좌표체계에 대한 구성요소들을 정리하여 나타내었습니다.

좌표계 TM (Transverse Mercator)
지구타원체 GRS 1980
Datum TRF 2000
수평기준원점 서부원점 경도 경도: 동경 125도 00초, 위도: 북위 38도 00초
중부원점 경도 경도: 동경 127도 00초, 위도: 북위 38도 00초
동부원점 경도 경도: 동경 129도 00초, 위도: 북위 38도 00초
수준기준원점 인하공업전문대학 내 설치 (해발 26.6871미터)
X 방향 가상 좌표 200,000미터
Y 방향 가상 좌표 500,000미터

 

UTM 좌표계 (Universe Transverse Mercator)

기본적으로 TM과 같은 방법으로 투영계산을 거치지만 그 상수가 다를 뿐입니다.
UTM 좌표계는 횡단 Mercator 투영법을 사용하는 좌표계 중의 하나로서 전 세계를 경도 6° 간격의 영역으로 나누고, 이들 각각의 영역에 대해 별도의 원점과 축을 지정하여 좌표를 Meter 단위로 나타내는 것입니다. 이들 UTM Zone 번호는 서경 180°를 기준으로 경도 6°간격씩 동쪽으로 이동하며 순차적으로 증가합니다. 경도의 0°인 지점은 영국 런던에 위치한 그리니치 천문대(Royal Observatory, Greenwich)가 기준이 됩니다.
UTM 좌표계에서 기준 원점의 위치는 각 UTM Zone의 중심경도선과 적도가 만나는 위치이며, 이 점을 기준으로 경도 방향을 X축, 위도 방향을 Y축으로 설정합니다. 우리나라의 경우 52번째 Zone에 위치하며, 이 지역의 기준 원점인 경도 129°, 위도 0°를 UTM 좌표계의 원점으로 사용합니다. (아래 그림에서 52S 구역에 속하는 걸 확인할 수 있습니다)
UTM 좌표계와 같이 Meter 단위의 좌표를 사용하는 경우 기준원점의 위치에 따라 음의 부호를 갖는 좌표가 나타나게 되는데 일반적으로 이러한 현상을 없애기 위해 각 축의 방향으로 가상의 좌표를 더해 주게 됩니다. UTM 좌표계의 경우 X축으로 500,000m의 값을 더하여 실제 좌표를 나타내며, Y축 방향으로는 남반구의 경우에 한해 10,000,000m의 값을 더해 주게 됩니다.

UTM Zone

※ 참고. 우리나라 사용 좌표계의 종류 및 기본정보
우리나라는 대부분 투영원점을 비슷하게(동경 127도, 북위 38도) 설정하여 지도를 제작하기 때문에 아래의 가산수치를 알고 있으면 좌표계의 종류를 예측해 볼 수 있습니다.
예를들어, Bessel TM(중부원점) 도면을 하나 가지고 있다고 가정하면, 좌표계를 알 수 없는 도면과의 거리를 통해 아래와 같이 예측이 가능합니다.

  • Bessel TM(동부원점) 좌표계 : 서측 약 200km 지점 위치(경도2도 차이)
  • Bessel TM(서부원점) 좌표계 : 동측 약 200km 지점 위치(경도2도 차이)
  • Bessel TM(KATEC) 좌표계 : 동측 약 100km 지점, 북측 약 100km 지점 위치(경도1도 차이, 동측 200km 가산, 북측 100km 가산)
  • Bessel UTM(K) 좌표계 : 동측 약 800km 지점, 북측 약 1,500km 지점 위치(동측 800km 가산, 북측 1,500km 가산)
  • GRS80 TM(중부원점) 좌표계 : 남동측 약 300~400m 지점 위치(준거타원체의 차이에 따른 거리) 등등...

좌표계 및 측량 기법과 관련해서는 그 역사(?)와 굉장히 심오하고도 어려운 내용들이 많이 있습니다. 하지만 어려운건 모두 배제하고 우리가 공간데이터를 분석하면서 알아두면 될 내용 3가지 정도만 간략하게 배워보겠습니다.

  • 어떤 좌표계가 있는지?
  • 어떻게 좌표를 정의하는지?
  • 어떻게 좌표를 변환하는지?

좌표계 종류

좌표계는 크게 지리좌표계(경도와 위도)와 투영좌표계(미터)로 나누어진다.

 

지리좌표계

지리좌표계란, 지구상에 위치를 좌표로 표현하기 위해 3차원의 구면을 이용하는 좌표계를 의미한다. 한 지점은 경도(longitude)와 위도(latitude)로 표현되며 이 단위는 도(degree)로 표시된다. 본초자오선과 적도면을 기준으로 경도, 위도를 결정하고 고도 정보를 통해 3차원으로 나타낼 수도 있습니다.

위 그림과 같이 사실 지구는 원이 아니라 타원체인데, 3차원의 지구를 좌표로 표현하기 위해서 지오이드(geoid)라는 방법론도 제안되었으나, 복잡성을 배제하기 위해 결과적으로는 평평한 타원체로 정의가 되어 있고 이를 지구 타원체(Earth Ellipsoid)라고 한다.

이 타원체의 중심점(datumn)을 기반으로 측량을 하고 좌표를 통해 표현하게 되는데, 세계적으로 통일성을 유지하기 위해 국제 표준 타원체인 GRS80과 WGS84가 제시되었다. (하지만 위 두 좌표 모두 지구의 중심을 타원체의 원점으로 정의해 차이가 없이 사용된다.)

위 좌표계가 바로 우리가 흔히 알고 있는 기본 위경도 좌표로 경도(x)와 위도(y)를 갖고 있는 데이터라면 WGS84좌표라고 생각하면 된다.

 

WGS 좌표계

1960년대 이전에는 각 나라마다 다른 준거 타원체를 사용하고 있었습니다. 그 당시에는 전 세계를 커버할 수 있는 기준 좌표계의 필요성이 크지 않았고 전 지구의 좌표를 통합하여 처리할 수 있는 컴퓨터 시스템도 없었습니다.

하지만, 군사적인 목적에서 전 지구를 하나의 좌표계로 표현해야 하는 필요성이 증대되면서 나온 좌표계가 WGS 좌표계입니다.

1950년대 말 미국방성에서 발표한 전세계 통일 좌표계가 WGS1690입니다. 1960년대 사용한 타원체를 WGS1960타원체라하고 합니다. 이후 더욱 정밀한 중력자료 및 천문 측량자료를 이용하여 지속적으로 좌표계를 발전시켜 나갔습니다. (WGS1966, WGS1972, WGS1974, WGS 1984)

WGS84 좌표계는 지구중심좌표계인데 이것은 지구 타원체의 중심을 원점으로 하고 X, Y, Z 방향의 축을 따라 좌표계를 결정하게 됩니다. WGS84 좌표계의 원점은 지구의 질량 중심이며, Z축은 지구의 회전축 방향과 평행하고 WGS84 타원체의 회전축입니다.

또한 X축은 WGS 기준자오면과 적도면과의 교차선이고, Y축은 X축으로부터 적도면을 따라 동쪽으로 90도 회전한 방향을 나타냅니다. WGS84 좌표계는 전지구를 대상으로 하는 것이기 때문에 각 나라의 기준좌표계와 일치하지 않습니다.

 

투영좌표계 (평면좌표계)

투영좌표계란, 위 3차원 위경도 좌표(지리좌표계)를 2차원 평면 상으로 나타내기 위해 투영(projection)이라는 과정을 거치게 되는데 이 투영된 좌표미터(m) 단위를 가지며 투영좌표계라고 합니다. 즉, 투영좌표계는 타원의 모양을 그대로 쓰기에는 불편하기 때문에 이를 평면에 투영해서 xy 좌표계처럼 읽어내는 방식입니다. 3차원에 위치한 객체를 2차원에 투영하게 되면 왜곡이 발생할 수 있기 때문에 왜곡을 최소화하기 위해 지역에 따라 다양한 투영법을 사용합니다. 우리나라 정부(행정안전부)에서 제공하는 공간의 모양 데이터는 UTM 투영법을 쓴 UTM-K(EPSG:5178) 좌표계로 제공합니다. 경위도는 각도이고, 투영좌표계는 거리를 나타내며 일반적으로 네덜란드 지도학자인 헤르하르뒤스 메르카토르(H. Mercator)가 고안한 메르카도르 투영법(Transverse Mercator)이라는 원통투영방식을 많이 사용합니다.


이 투영방법에 따라서도 여러가지 체계로 분류가 되는데, 크게 2가지로 분류합니다.

  • TM(Transverse Meractor) : 횡단원통등각투영법
  • UTM(Universal Transcerse Mercator)

두 투영방법은 같은 계산법을 거치지만 상수가 다를 뿐입니다. 우리나라의 경우 TM좌표계를 기반으로 국가 기본도를 제작하고 있으며, UTM은 군사지도나 단일원점을 사용하는 일부 부처에서 부분적으로 사용합니다.

정리하자면

지리좌표계 : 위경도 좌표계, 3차원, WGS84
투영좌표계 : 미터 좌표계, 2차원, TM또는 UTM

 

EPSG 코드

좌표계를 찾아보면서 위에서 언급한 TM, UTM, WGS, GRS와 같은 명칭 뿐아니라 EPSG(European Petroleum Survey Group)로 표기한 명칭도 볼 수가 있습니다.
EPSG는 이렇게 다양한 전세계 좌표계에 대한 고유한 명칭입니다.

지구를 표현할때,

  • 어떤 타원체(WGS84, GRS80)?
  • 어디를 중심으로(지리좌표계)?
  • 어떻게 변환(투영법, TM, UTM)?

할거냐에 따라서 다양한 좌표계가 생겨나기 때문에, 이를 EPSG라는 표준 고유 코드를 만들어둔 것입니다. 예를 들면, 아래와 같이 각기 다른 좌표계 생성 방식에 따라 구분이 필요하기 때문입니다.

  • 지리좌표계 : WGS84 => EPSG4326
  • 투영좌표계 : GRS80타원체를 UTM-K로 투영한 좌표계 => EPSG5179

특히 위경도 좌표의 경우에 같은 좌표계지만 WGS84, GRS80, EPSG4326와 같이 표현되면서 혼동할 수가 있다. 따라서 고유 코드인 EPSG코드를 알아두면 헷갈리지 않고 좌표계를 활용할 수 있다.

각 좌표에 대한 코드별 문자열들은 여기에 자세하게 정리가 되어 있습니다.

# 위경도 좌표(기본)
epsg4326 = from_string("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

# TM좌표(미터)
# 국가공간정보포털(용도지역, 건물통합정보, 토지이용, 연속지적도 등)
epsg5174 = from_string("+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43")

# 도로명주소 데이터(전자지도, 배경지도)
epsg5179 = from_string("+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")

# 카카오맵(다음지도)
epsg5181 = from_string("+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs")
epsg5181_qgis = from_string("+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs") # qgis 좌표, 보정좌표값 존재

# 산림청(산림입지토양도), 한국교원대학교(초중고 학교 위치 및 학군)
epsg5186 = from_string("+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs")

 

좌표계의 정의

이제 좌표계의 종류에 대해 알아봤으니, 본격적으로 Python을 활용해서 공간데이터의 좌표계를 어떻게 정의하는지 알아보자.
예제 데이터와 기본 셋팅은 이전 포스팅을 참고하자.

import pandas as pd
import geopandas as gpd
from shapely.geometry import Point, Polygon, LineString

seoul_area = gpd.GeoDataFrame.from_file('data/LARD_ADM_SECT_SGG_11.shp', encoding='cp949')
pt_119 = pd.read_csv('data/서울시 안전센터관할 위치정보 (좌표계_ WGS1984).csv', encoding='cp949', dtype=str)
pt_119['경도'] = pt_119['경도'].astype(float)
pt_119['위도'] = pt_119['위도'].astype(float)
pt_119['geometry'] = pt_119.apply(lambda row : Point([row['경도'], row['위도']]), axis=1)
pt_119 = gpd.GeoDataFrame(pt_119, geometry='geometry')

 

crs

Geopandas는 shapely(공간객체 담당)와 fiona(좌표담당)를 같이 활용합니다. 좌표계는 fiona.crs의 from_string을 통해 생성할 수 있습니다.

from fiona.crs import from_string
epsg4326 = from_string("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")

먼저 지리좌표계인 EPSG4326(WGS84)좌표계를 생성했습니다. function에 들어갈 문자열은 위에 설명했던 EPSG코드 링크에 나와있는 것을 복사해서 사용하면 됩니다. 또한 앞서 불러온 공간데이터의 좌표계를 확인할때는 .crs메소드를 통해 해당 geodataframe의 좌표계를 확인할 수 있습니다.

print(seoul_area.crs)
print(pt_119.crs)

---
{'init': 'epsg:5179'}
None

서울시 법정동경계(seoul_area)는 좌표계가 이미 정의되어 있는 shp파일을 불러왔으므로 정의된 좌표계를 확인할 수 있고, 소방서 위치(pt_119)는 위경도 컬럼만 존재하던 csv를 공간객체로 직접 만들어서 아직 좌표계가 없습니다.

pt_119.crs = epsg4326
print(pt_119.crs)

---
{'proj': 'longlat', 'ellps': 'WGS84', 'datum': 'WGS84', 'no_defs': True}

이제 좌표계가 정의됐음을 확인할 수 있습니다!

위경도 좌표계는 일반적으로 EPSG4326(WGS84) 좌표계를 적용하면 되지만, 위 서울특별시 법정동 경계(seoul_area)와 같이 투영좌표계(TM)는 사이트나 제공기관에서 어떤 좌표계를 사용해 생성된 공간 데이터인지를 정확하게 인지하고, 그에 맞게 적용해줘야 합니다.

init을 통해 내장된 좌표계를 사용할 수도 있지만, fiona를 활용해 문자열을 직접 적용해 주는 것이 정확합니다.

 

좌표계 변환

두 데이터의 좌표계를 모두 정의했으니, 이제 공간분석이 가능하도록 하나의 좌표로 통일해야 하는데 이때 변환이 필요합니다. 일반적으로 공간분석은 도(degree)단위가 아닌 미터(meter)단위로 작업을 하기 때문에, 투영좌표계(TM)로 통일시켜주는 게 좋습니다.

 

to_crs

좌표 변환은 to_crs함수로 할 수 있으며, 기존 좌표가 정의되어 있어야만 가능합니다. EPSG5179로 변환해 보겠습니다.
좌표를 먼저 생성하고,

epsg5179 = from_string("+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs")

# 변환
pt_119 = pt_119.to_crs(epsg5179)
pt_119["geometry"].head()

---
0     POINT (944285.707763575 1947726.390537433)
1    POINT (964384.6573976473 1956833.993247274)
2    POINT (957313.2935830182 1943279.262784532)
3     POINT (952138.2406865631 1947752.94696052)
4     POINT (954174.228813116 1949633.598265431)
Name: geometry, dtype: object

Geometry를 확인해 보면 위경도(127…., 37….)의 단위가 미터단위로 변경된 것을 확인할 수 있습니다.

 

기타

다양한 공간데이터를 사용할 때, 원래 어떤 좌표계가 무엇인지 정확하게 제시가 안되어 있는 경우도 많고 제공기관마다 다른 좌표계를 사용하기 때문에 자주쓰는 것들을 정리해 보았습니다.

EPSG code 좌표 종류 데이터명 제공기관
3857
투영좌표계(TM) 구글지도, 빙(Bing)지도, Yahoo지도 구글, 마아크로소프트, 야후
3857
투영좌표계(TM) OSM(OpenStreetMap) 웹에서 TMS(Tile Map Service) 업체 대부분
3857
투영좌표계(TM) 네이버지도 v5 네이버
3857
투영좌표계(TM) VWorld 공간정보산업진흥원(국토교통부)
4326 지리좌표계 Google Earth, OSM Database 좌표가 도(degree) 단위라면 모두 
5174 투영좌표계(TM) 용도지역 국가공간정보포털
5174 투영좌표계(TM) GIS건물통합정보 국가공간정보포털
5174 투영좌표계(TM) 토지이용 국가공간정보포털
5174 투영좌표계(TM) 연속지적도 국가공간정보포털
5174 투영좌표계(TM) 용도지역 국가공간정보포털
5174 투영좌표계(TM) 지방행정인허가 행정안전부
5178 투영좌표계(TM) 도로명주소 전자지도 도로명주소, UTM-K(Bessel)
5178 투영좌표계(TM) 도로명주소 배경지도 도로명주소
5179 투영좌표계(TM) 네이버지도 v3 네이버, UTM-K(GRS80)
5179
투영좌표계(TM) NGII지도 국토지리정보원
5181 투영좌표계(TM) 카카오맵(다음지도) 카카오
5186 투영좌표계(TM) 산림입지토양도 산림청
5186 투영좌표계(TM) 초중고등학교 학군경계 한국교원대학교
KOTI-KATEC KATEC 국가교통DB 한국교통연구원(KOTI)

기본적으로 제공기관이 같다면 좌표계도 동일한 경우가 대다수입니다.

 

타원체와 투영방식에 따른 구분

좌표가 정확히 안맞는 문제

위 방법처럼 정확하게 좌표를 정의하고, 동일하게 변환해주었음에도 딱 안맞는 경우가 생깁니다. 경험적으로 알게 된 사실이지만 통일해야 할 좌표계 중 EPSG5174, 5186, KOTI-KATEC(그냥 안맞으면 한번 적용해 보세요)가 존재하는 경우, 단순하게 좌표변환만 실시하게 되면 약 30m정도의 이격이 발생합니다.

epsg5181_qgis = from_string("+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs")

이럴 때 위 좌표계로 통일시켜주면 정확히 맞습니다.
위는 QGIS에서 제공하는 EPSG5181좌표계로 정식 좌표 문자열과 달리 +towgs84=0,0,0,0,0,0,0가 추가되어 있습니다. 정확한 이유는 아직 잘 모르지만 해당 좌표계로 통일시켜주면 맞습니다.

 

EPSG:4326과 EPSG:900913은 다르다?

EPSG:4326은 WGS84를 나타내고, EPSG:900913은 WGS84 Web Mercator를 나타냅니다. 둘의 차이는 EPSG:4326은 지구를 타원체(Ellipsoi)로 다루고 EPSG:900913은 구(Sphere)로 다룹니다. EPSG:900913은 투영된 좌표계로 지도를 평평한 평면으로 다루기 때문에 지형지물이 실제와 조금 다른 위치에 표시될 수 있습니다. 좌표값도 4326은 십진 도(디그리)값(-180~180, -90~90)을 가지지만 90013은 메트릭 값(-20037508.34~20037508.34)을 가집니다.

 

참고사이트