2011-09-13 3 views
4

현재 Google 정적지도 이미지를 사용 중이며 특정 확대/축소 수준의 눈금을 계산하는 방법을 알아 보려고합니다. Google지도에서 메르카토르 투영법을 사용한다는 것을 알고 있습니다. 내가 만든 응용 프로그램은 Google에서 위성지도 이미지를 가져오고 사용자는 그 위에 다각형을 그립니다. 실제 단위로이 다각형의 면적을 계산해야합니다. 어떤 제안 ???Google 정적지도의 확대/축소 비율을 계산하는 방법 이미지

답변

0

Google Maps Documentation에서 언급 한 바와 같이 :

기본 메르카토르 Google지도 타일은 256 X 256 픽셀이기 때문입니다.
줌 레벨마다지도에 2 n 타일이 있습니다.

확대/축소 수준 2에서지도의 모든 방향의 픽셀은 = 256 * 2² = 1024px입니다.

줌 0, 지구가 ~ 40,000km의 경계를 가지고 있음을 고려하여, 모든 픽셀 ~ = 40,000km/256 = 156.25 km 줌 9에서
, 픽셀이 131,072 : 1 x 1 픽셀 = 40,000km/131072 = 0.305 km ... 등등. 우리가 400 픽셀 = 1km를 원하는 경우에

, 우리는 가능한, 그래서 가장 가까운 근사치를 선택해야 = 1 x 1 픽셀 크기를 1km/400 I 줌 = 15 얻어진 x 1 픽셀 = 0.00478 및 확대 = 16을 준 시도

= 0.0025km 나 x 1 픽셀 = 0.00238km

이 확대 = 16을 사용한다는 것을 의미, 당신은 적도 선에서 0.955km마다 400 픽셀 이됩니다 만에 x는을 조정합니다.

위도로 북쪽이나 남쪽으로 가면 주변이 항상 작아 지므로 거리가 변경됩니다. 그리고 물론 그것은 구의 투영이 까다 롭기 때문에 y 축의 상관 관계를 변경합니다.
당신이 기능으로 정확한 거리를 계산하려면 their documentation 구글에서 제공하는 하나를 사용한다 :

// Describe the Gall-Peters projection used by these tiles. 
    gallPetersMapType.projection = { 
    fromLatLngToPoint: function(latLng) { 
     var latRadians = latLng.lat() * Math.PI/180; 
     return new google.maps.Point(
      GALL_PETERS_RANGE_X * (0.5 + latLng.lng()/360), 
      GALL_PETERS_RANGE_Y * (0.5 - 0.5 * Math.sin(latRadians))); 
    }, 
    fromPointToLatLng: function(point, noWrap) { 
     var x = point.x/GALL_PETERS_RANGE_X; 
     var y = Math.max(0, Math.min(1, point.y/GALL_PETERS_RANGE_Y)); 

     return new google.maps.LatLng(
      Math.asin(1 - 2 * y) * 180/Math.PI, 
      -180 + 360 * x, 
      noWrap); 
    } 
    }; 
관련 문제