지도 및 타일 좌표

Android용 Maps SDK에서는 다음 좌표계를 사용합니다.

  • 전 세계에서 고유하게 한 지점을 참조하는 위도 및 경도 값. (Google은 세계 측지 시스템 WGS84 표준을 사용)
  • 지도의 한 지점을 고유하게 참조하는 세계 좌표.
  • 특정 확대/축소 수준에서 지도의 특정 픽셀을 참조하는 픽셀 좌표.
  • 특정 확대/축소 수준에서 지도의 특정 타일을 참조하는 타일 좌표.

세계 좌표

API는 세계의 한 위치를 지도상의 위치로 변환해야 할 때마다 먼저 위도와 경도 값을 세계 좌표로 변환합니다. 변환에는 메르카토르 투영법이 사용됩니다.

픽셀 좌표를 계산하기 쉽도록(아래 참조), 확대/축소 수준이 0인 지도를 기본 타일 크기의 단일 타일이라고 가정합니다. 그런 다음 확대/축소 수준 0의 픽셀 좌표에 대한 세계 좌표를 정의하고, 메르카토르 투영법을 사용하여 위도 및 경도를 이 기본 타일의 픽셀 위치로 변환합니다. 해당 세계 좌표는 지도 투영의 원점에서 특정 위치까지 측정한 부동 소수점 값입니다. 이 값은 부동 소수점이므로, 현재 표시되는 지도 이미지의 해상도보다 훨씬 더 정확할 수 있습니다. 즉, 세계 좌표는 현재 확대/축소 수준과 무관합니다.

Google 지도에서 세계 좌표는 메르카토르 투영의 원점(경도 180도와 위도 약 85도에 있는 지도의 북서쪽 모서리)에서 측정되어 동쪽(오른쪽)을 향해 x 방향으로 증가하고 남쪽(아래쪽)을 향해 y 방향으로 증가합니다. 기본적인 메르카토르 Google 지도 타일은 256x256픽셀이므로 사용 가능한 세계 좌표 공간은 {0-256}, {0-256}입니다.

참고로 메르카토르 투영법은 경도로는 너비가 한정되어 있지만 위도로는 높이에 제한이 없습니다. Google에서는 메르카토르 투영법을 활용하여 약 +/-85도로 기본 지도 이미지를 잘라 결과로 표시되는 지도 모양을 정사각형으로 만듭니다. 이런 방식으로 타일 선택에 더 쉬운 로직을 적용하게 됩니다. 예를 들어 극점에서 매우 가까운 곳에 좌표를 그리면, 기본 지도의 사용 가능한 좌표 공간 바깥에 세계 좌표가 생성될 수 있습니다.

픽셀 좌표

픽셀 좌표는 특정 확대/축소 수준에서 지도의 특정 픽셀을 참조하는 반면, 세계 좌표는 지정된 투영에서의 절대 위치를 나타냅니다. 픽셀 좌표는 다음 공식으로 계산됩니다.

pixelCoordinate = worldCoordinate * 2zoomLevel

위 방정식에서 확대/축소 수준이 증가할 때마다 xy 방향으로 두 배씩 커집니다. 그러므로 확대/축소 수준이 한 단계 높아지면 이전 수준보다 해상도가 4배 증가합니다. 예를 들어 확대/축소 수준이 1이면 지도는 256x256 픽셀 타일 4개, 즉 512x512의 픽셀 공간으로 구성됩니다. 확대/축소 수준 19에서 지도의 xy 픽셀은 각각 0~256 * 219 값으로 참조될 수 있습니다.

세계 좌표는 지도의 타일 크기에 기반하므로, 픽셀 좌표의 정수 부분을 보면 현재 확대/축소 수준에서 해당 장소의 정확한 픽셀을 알아낼 수 있습니다. 확대/축소 수준이 0일 경우 픽셀 좌표는 세계 좌표와 같습니다.

이제 각 확대/축소 수준에서 지도에 위치를 정확히 나타내는 방법을 알게 되었습니다. Android용 Maps SDK는 지도의 확대/축소 수준 중심(LatLng 값)과 포함된 DOM 요소의 크기를 고려하여 표시 영역을 생성하고 이 경계 상자를 픽셀 좌표로 변환합니다. 그런 다음 API가 특정 픽셀 경계 내에 있는 모든 지도 타일을 논리적으로 판별합니다. 이러한 각 지도 타일은 지도 이미지의 표시를 매우 단순화하는 타일 좌표를 사용하여 참조됩니다.

타일 좌표

높은 확대/축소 수준에서는 API가 모든 지도 이미지를 한 번에 로드할 수 없습니다. 대신 각 확대/축소 수준의 이미지를 지도 타일 집합으로 분할합니다. 이 타일 집합은 애플리케이션이 이해하는 순서대로 논리적으로 정렬됩니다. 지도에서 새 위치나 새 확대/축소 수준으로 스크롤하면 API가 픽셀 좌표를 사용하여 어느 타일이 필요한지 알아내고 해당 값을 검색할 타일 집합으로 변환합니다. 이 타일 좌표는 구성표를 사용하여 할당되므로 주어진 지점에서 어느 타일이 이미지를 포함하는지 논리적으로 판별하기 쉬워집니다.

Google 지도의 타일은 픽셀과 동일한 원점에서부터 번호가 매겨집니다. Google에서 구현한 메르카토르 투영법의 경우 원점 타일은 항상 지도의 북서쪽 모서리에 있으며, x 값은 서쪽에서 동쪽으로 갈수록 증가하고 y 값은 북쪽에서 남쪽으로 갈수록 증가합니다. 타일의 색인은 해당 원점에서부터 x,y 좌표를 사용하여 생성됩니다. 예를 들어 확대/축소 수준 2에서 지구가 16개의 타일로 나뉘면 각 타일은 다음과 같이 고유한 x,y 쌍으로 참조될 수 있습니다.

타일 크기(256)로 픽셀 좌표를 나누고 그 결과값에서 정수 부분을 가져오면 현재 확대/축소 수준의 타일 좌표를 부수적으로 얻게 됩니다.

다음 예에는 일리노이주 시카고의 좌표(위도/경도 값, 세계 좌표, 픽셀 좌표, 타일 좌표)가 표시되어 있습니다. 확대/축소 컨트롤을 사용하여 다양한 확대/축소 수준의 좌표 값을 확인하세요.

좌표가 계산된 방식을 보려면 코드를 확인하세요.