我的地图上有2个标记。如何将相机对准两者而不仅仅是将相机移动到其中一个?

时间:2016-09-28 13:30:00

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

我已在我的应用中实施了Google地图,并在其上添加了2个标记。

以下是:

LatLng mainUserLocation = new LatLng(Double.valueOf(currentLt), Double.valueOf(currentLn));
mMap.addMarker(new MarkerOptions().position(mainUserLocation).title("You"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(mainUserLocation))
mMap.animateCamera(CameraUpdateFactory.zoomTo(20), 2000, null);

LatLng otherPlayersLocation = new LatLng(currentLtAU, currentLnAU);
mMap.addMarker(new MarkerOptions().position(otherPlayersLocation).title(nameAU));

问题是相机正在变焦并聚焦在一个标记上而另一个标记已经消失了!

我想让两个标记或所有标记保持在视线中。怎么做到这一点?

请告诉我。

2 个答案:

答案 0 :(得分:2)

所以这个问题已经得到解答 here ,并且没有提到它会违反良好的社区道德。

  

不过,在这里,我会尝试在你的背景下分解它。那么你   更好地了解您需要采取的步骤。

LatLng mainUserLocation = new LatLng(Double.valueOf(currentLt), Double.valueOf(currentLn));

LatLng otherPlayersLocation = new LatLng(currentLtAU, currentLnAU);

    public void showMap() {

        mMap.clear();
        //Create your Markers List
        List<Marker> markersList = new ArrayList<Marker>();
        Marker youMarker = mMap.addMarker(new MarkerOptions().position(mainUserLocation).title("You"));
        Marker playerMarker = mMap.addMarker(new MarkerOptions().position(otherPlayersLocation).title(nameAU));

        //Add them to your list
        markersList.add(youMarker);
        markersList.add(playerMarker);


//get the latLngbuilder from the marker list
        builder = new LatLngBounds.Builder();
        for (Marker m : markersList) {
            builder.include(m.getPosition());
        }

//Bounds padding here
        int padding = 50;

        //Create bounds here
        LatLngBounds bounds = builder.build();

//Create camera with bounds
        cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);

//Check map is loaded
        mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
            @Override
            public void onMapLoaded() {
                //animate camera here
                mMap.animateCamera(cu);

            }
        });


}

因此,在您的代码中,您需要设置这样的方法,只需调用 showMap()

希望此信息有所帮助。

答案 1 :(得分:0)

第一种方式

您应该使用CameraUpdate类(可能)执行所有程序化地图移动。

为此,首先计算所有标记的边界,如下所示:

LatLngBounds.Builder builder = new LatLngBounds.Builder();
for each (Marker m : markers) {
    builder.include(m.getPosition());
}

LatLngBounds bounds = builder.build();

然后使用工厂获取移动描述对象:CameraUpdateFactory:

int padding = 0; // offset from edges of the map in pixels
CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding);

最后移动地图:

googleMap.moveCamera(cu);

或者如果你想要动画:

googleMap.animateCamera(cu);

另一种方式

查找所有latlongs的平均值,即

double avg_Lat = 23.521252;
double avg_Lng = 72.521252;

然后创建一个新的Latlng对象并分配它

LatLng latLng = null;
latLng = new LatLng(avg_Lat, avg_Lng);

map.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 12));

它将包括所有latlngs