2011-09-13 18 views
4

現在Google Staticマップ画像を使用していますが、特定のズームレベルの縮尺を計算する方法を知りたいと思います。私は、Google MapsがMercator Projectionsを使用していることを知っています。私が作っているアプリケーションはGoogleからの衛星地図画像を取得し、ユーザーはその上にポリゴンを描画します。実世界単位でこのポリゴンの面積を計算する必要があります。助言がありますか??? Google Maps Documentationで述べたようにGoogle Staticマップの縮尺比を計算する方法画像

答えて

0

基本メルカトルGoogleマップのタイルは256×256ピクセルですので。
ズームレベルごとに、2 nのタイルがあります。

ズームレベル2では、マップのどの方向のピクセルも= 256 *2²= 1024pxという意味です。

ズーム0で、地球が〜4万キロの周囲を持っていることを考慮すると、すべてのピクセル〜=4万キロ/ 256 = 156.25キロズーム9時
、ピクセルです131072:1pxの=4万キロ/ 131072 = 0.305 km ...などです。

我々は400ピクセル= 1キロをしたい場合は、私たちは、可能な最も近い近似を選択する必要があります:1pxの= 1キロ/ 400 = 0.0025キロ

私は15 =ズームを試してみましたが、1ピクセル= 0.00478とズームを得た= 16与えました私は1ピクセル= 0.00238キロ

あなたがズーム= 16を使用する必要があることを意味し、あなたは赤道線に0.955キロごとに400ピクセルを持つことになりますし、唯一のためxがを調整します。

緯度が北または南になるにつれて、周長は毎回小さくなり、距離が変わります。もちろん、球の投影が難しいので、y軸の相関関係も変更されます。
あなたは機能と正確な距離を計算したい場合は、their documentationにGoogleが提供するいずれかを使用する必要があります

// 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); 
    } 
    }; 
関連する問題