根据当前位置android缩放标记位置

时间:2014-05-20 10:25:58

标签: java android google-maps google-maps-api-3

我在Android中使用谷歌地图。我很难调整缩放级别。

我在地图中心有一个标记,我使用mapController.setCenter(current_location)设置;

我有10个或更多的标记在地图上显示不同的颜色。

预期结果:此人的当前位置应始终位于中心位置,我必须调整缩放级别,以便绿色标记显示在屏幕上(当前位置标记位于中央)。

我尝试了什么:

int greenlat =(int)(AppCoordinates.getInstance()。latitudelist.get(0)* 1E6);             int greenlong =(int)(AppCoordinates.getInstance()。longitudelist.get(0)* 1E6);             int currentlat =(int)(AppCoordinates.getInstance()。getCurrentLatitude()* 1E6);             int currentlong =(int)(AppCoordinates.getInstance()。getCurrentLongitude()* 1E6);

        DisplayMetrics metrics = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(metrics);

        mapController.zoomToSpan((int) (Math.abs(greenlat - currentlat) * 1), (int)(Math.abs(greenlong - currentlong) * 1));// to have some padding on the edges.
        mapController.animateTo(new GeoPoint((greenlat + currentlat), (greenlong + currentlong)/2));

我可以在屏幕上显示标记,但我希望屏幕中心显示屏幕。

1 个答案:

答案 0 :(得分:1)

我的想法是操纵LatLngBounds,因为它代表了所有包含的标记,可以在地图上的对齐矩形中查看。因此,我们只需要识别所有使当前位置都在地图中心查看的点。

  1. 将所有标记放入边界。
  2. 将相机移动到当前位置作为中心点。
  3. 获取当前地图所有角落的4个位置,并将其放在边界中的点列表中。
  4. 这是我的样本:

    LatLngBounds.Builder builder = new LatLngBounds.Builder();
    Marker myLocation = mMap.addMarker(new MarkerOptions()
            .position(new LatLng(2.6,101.5))
            .title("My-Current-Location"));
    
    
    Marker addMarker1 = mMap.addMarker(new MarkerOptions()
                .position(new LatLng(2.6,101))
                .title("Hello world-1"));
    
    Marker addMarker2 = mMap.addMarker(new MarkerOptions()
                .position(new LatLng(2.7,101))
                .title("Hello world-2"));
    
    Marker addMarker3 = mMap.addMarker(new MarkerOptions()
                .position(new LatLng(3.7,105))
                .title("Hello world-3"));
    
    builder.include(myLocation.getPosition());
    builder.include(addMarker1.getPosition());
    builder.include(addMarker2.getPosition());
    builder.include(addMarker3.getPosition());
    
    //haha enough to use for loop for all your markers
    
    int padding = 100; // offset from edges of the map in pixels
    
    CameraUpdate cameraUpdate =CameraUpdateFactory.newLatLngBounds(builder.build(), padding);
    mMap.moveCamera(cameraUpdate);
    mMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation.getPosition()));
    
    LatLng nrLatLng = mMap.getProjection().getVisibleRegion().nearRight;
    LatLng frLatLng = mMap.getProjection().getVisibleRegion().farRight;
    LatLng nlLatLng = mMap.getProjection().getVisibleRegion().nearLeft;
    LatLng flLatLng = mMap.getProjection().getVisibleRegion().farLeft;
    
    builder.include(nrLatLng);
    builder.include(frLatLng);
    builder.include(nlLatLng);
    builder.include(flLatLng);
    
    cameraUpdate =CameraUpdateFactory.newLatLngBounds(builder.build(), padding);
    mMap.animateCamera(cameraUpdate);