Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的地图上有两个记号笔。如何将相机对焦于两者,而不只是将相机移到其中一个?_Java_Android_Google Maps_Google Maps Api 3_Google Maps Markers - Fatal编程技术网

Java 我的地图上有两个记号笔。如何将相机对焦于两者,而不只是将相机移到其中一个?

Java 我的地图上有两个记号笔。如何将相机对焦于两者,而不只是将相机移到其中一个?,java,android,google-maps,google-maps-api-3,google-maps-markers,Java,Android,Google Maps,Google Maps Api 3,Google Maps Markers,我已经在我的应用程序中实现了谷歌地图,并在上面添加了2个标记 以下是方法: LatLng mainUserLocation = new LatLng(Double.valueOf(currentLt), Double.valueOf(currentLn)); mMap.addMarker(new MarkerOptions().position(mainUserLocation).title("You")); mMap.moveCamera(CameraUpdateFactory.newLatL

我已经在我的应用程序中实现了谷歌地图,并在上面添加了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));
问题是相机正在变焦并聚焦在一个标记上,而另一个标记正在消失

我希望两个标记或所有标记都保持在视线范围内。如何做到这一点


请让我知道。

第一条路

您应该使用CameraUpdate类来执行(可能)所有编程贴图移动

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

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

LatLngBounds bounds = builder.build();
然后使用factory: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

,因此这个问题已经得到了回答,不提及它将违反良好的社区道德。

不过,在这里,我将尝试在您的上下文中对其进行分解。所以你 更好地理解你需要采取的步骤

LatLng main用户位置=新的LatLng(Double.valueOf(currentLt),Double.valueOf(currentLn));
LatLng OtherPlayerLocation=新LatLng(当前LTAU,当前LNAU);
公共void showMap(){
mMap.clear();
//创建标记列表
列表标记列表=新的ArrayList();
Marker youMarker=mMap.addMarker(新MarkerOptions().position(mainUserLocation.title(“您”));
Marker playerMarker=mMap.addMarker(新的MarkerOptions().position(otherplayerLocation).title(nameAU));
//将它们添加到您的列表中
markersList.add(youMarker);
markersList.add(playerMarker);
//从标记列表中获取latLngbuilder
builder=new LatLngBounds.builder();
用于(标记m:标记列表){
builder.include(m.getPosition());
}
//这里有边距
int=50;
//在这里创建边界
LatLngBounds bounds=builder.build();
//创建具有边界的摄影机
cu=CameraUpdateFactory.newLatLngBounds(边界、填充);
//检查地图是否已加载
setOnMapLoadedCallback(新的GoogleMap.OnMapLoadedCallback(){
@凌驾
加载时的公共无效(){
//在这里设置相机动画
mMap.animateCamera(cu);
}
});
}
因此,在代码中需要设置这样的方法,只需调用showMap()


希望这些信息有帮助。

回答得很好。关键是你必须选择包含两个标记的边界。@MohitTrivedi请更简要地解释第一种方法。。。我无法理解它!:/@如果您想参考其他问题的答案,请使用MohitTrivedi。请在当前上下文中提及问题或尝试修改答案。这比不那么周到的复制粘贴更有用。因为这可能会让提问的人感到困惑,如果他不知道你刚才写了什么。@nishant Dubey它不是复制的答案仔细看我已经建议了2个答案,它已经被清除提到了可能的重复
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);

            }
        });


}