将CameraPosition设置为我的位置,但也显示其他标记

时间:2016-04-13 10:55:10

标签: android google-maps

我正在设计一款应该在地图上显示多个标记的Android应用。我可以轻松地做到这一点。我的问题是我需要在我的位置周围显示所有标记,而CameraPosition需要集中在我的位置。我可以轻松地分别对它们进行操作,但我需要的是将它们展示在一起,我在地图中间的位置以及我所在位置周围的标记。 任何想法我怎么能实现这一目标?提前谢谢!

2 个答案:

答案 0 :(得分:2)

将缩放设置为更高级别,以便缩小并查看当前位置周围的更多地图。

CameraPosition cameraPosition = new CameraPosition.Builder()
                                .target(yourLatLng).zoom(12).build();
googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));

答案 1 :(得分:2)

您需要的功能是将所有选定的标记保留在地图上,并且它应该一次可见。你必须将所有这些点保持在可见区域,并且myLlocation(你当前的位置)始终位于屏幕的中心。

  • 首先将myLocation保存在latlng变量中,将所有其他latlng保留在LatLng的另一个ArrayList内的边界内。还要定义一些变量来跟踪操作。

    LatLng myLocation=null;
    ArrayList<LatLng> latlngs = null; // the arraylist of other latlng;
    boolean are_all_inside_viewport = false;
    float current_zoom = googleMap.getCameraPosition().zoom;
    //initialise these variables myLocation and latlngs;
    
  • 然后将相机设置为 myLocation ,它将放置在地图的中心。 在这里放置一个低缩放级别

    CameraPosition cameraPosition = new CameraPosition.Builder()
                .target(myLocation)
                .zoom(14)
                .build();
    
    googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
    
  • 现在检查它们位于谷歌地图视图端口的ArrayList中的每个latlng。如果他们在里面然后它的确定。如果没有,则降低地图的缩放级别并再次为相机设置动画。

    while (!are_all_inside_viewport) {
            are_all_inside_viewport = true;
            for (LatLng latLng : latlngs) {
                if (!bounds.contains(latLng)) {
                    are_all_inside_viewport = false;
                    break;
                }
            }
    
            bounds = googleMap_local.getProjection().getVisibleRegion().latLngBounds;
    
            cameraPosition = new CameraPosition.Builder()
                    .target(myLocation)
                    .zoom(current_zoom - 1)
                    .build();
            googleMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
        }
    

    这将继续检查ArrayList中的每个latlng,直到所有latlng都在视口内。

希望这个答案可以帮到你。