2016-09-22 4 views
0

ズームレベルに応じて半径をメートルまたはkm単位で計算したいと考えています。ズームレベル別に半径を変更

は、私は、この式見つけた - 私は、ピクセルあたりの概算メートル与える: google map API zoom range How to get center of map for v2 android maps?

:また https://groups.google.com/forum/#!topic/google-maps-js-api-v3/hDRO4oHVSeM

を、これらのリンクは、私が正確に達成しようとしていたものを理解する上で私を支援します

これは実装です:

double calculateScale(float zoomLevel, LatLng centerPos){ 
    double meters_per_pixel = 156543.03392 * Math.cos(centerPos.latitude * Math.PI/180)/Math.pow(2, zoomLevel); 

    return meters_per_pixel; 
} 

これは私がズームレベルを聞く方法です変更:ユーザーがズームレベルを変更するたびに今

 _map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
     @Override 
     public void onCameraIdle() { 
      Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Current Zoom : " + _map.getCameraPosition().zoom); 
      Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Center Lat : " + _map.getCameraPosition().target.latitude + 
        ", Center Long : " + _map.getCameraPosition().target.longitude); 
     }} 

、私は...マップビュー内に表示できる最大半径が何であるかを判断したい

あなたは次のスニペットを使用することができます

答えて

1

_map.setOnCameraIdleListener(new GoogleMap.OnCameraIdleListener() { 
    @Override 
    public void onCameraIdle() { 
     Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Current Zoom : " + _map.getCameraPosition().zoom); 
     Log.d(Consts.TAGS.FRAG_MAIN_MAP,"Center Lat : " + _map.getCameraPosition().target.latitude + 
       ", Center Long : " + _map.getCameraPosition().target.longitude); 

     float zoom = _map.getCameraPosition().zoom; 
     LatLng position = _map.getCameraPosition().target; 
     double maxRadius = calculateScale(zoom, position) * mapViewDiagonal()/2; 
    } 
} 

private mapViewDiagonal() { 
    return Math.sqrt(_map.getWidth() * _map.getWidth() + _map.getHeight() * _map.getHeight()); 
} 
+0

この回答は、私のユースケースに合った方法で最大半径を計算する方法を示しました(私は_mapの代わりにマップコンテナレイアウトを使用しました)。 – lionheart

+0

申し訳ありませんが、あまりにも詳細を使用します。主なポイントは、対角線の半分を取得することでした、そして、それはmaxRadiusになります。 :)あなたがこの点を得てうれしい。 –

関連する問題