Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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
Android mapviewballoon-如何在添加多个标记时设置缩放_Android_Google Maps - Fatal编程技术网

Android mapviewballoon-如何在添加多个标记时设置缩放

Android mapviewballoon-如何在添加多个标记时设置缩放,android,google-maps,Android,Google Maps,我在项目中使用了库名称mapviewballoon 当我在地图的不同位置设置20、30或更多的管脚时,它会缩放到中心的最后一个管脚,我想要的是缩放级别能够在地图视图中显示所有管脚 我如何解决这个问题,或者计算正确的缩放,目前我给出了14 做以下事情: OverlayItem overlayItem = null; GeoPoint point = null; for (int i = 0; i < nearbyObjMapList.size(); i++) { if (!ne

我在项目中使用了库名称mapviewballoon

当我在地图的不同位置设置20、30或更多的管脚时,它会缩放到中心的最后一个管脚,我想要的是缩放级别能够在地图视图中显示所有管脚

我如何解决这个问题,或者计算正确的缩放,目前我给出了14

做以下事情:

OverlayItem overlayItem = null;
GeoPoint point = null;
for (int i = 0; i < nearbyObjMapList.size(); i++) {
       if (!nearbyObjMapList.get(i).latitude.equals("0") && !nearbyObjMapList.get(i).longitude.equals("0")) {
           Latitude = Float.parseFloat(nearbyObjMapList.get(i).latitude);
           Longitude = Float.parseFloat(nearbyObjMapList.get(i).longitude);
           point = new GeoPoint((int)(Latitude*1E6),(int)(Longitude*1E6));
           overlayItem = new OverlayItem(point, nearbyObjMapList.get(i).venue_name,                            "");
           itemizedOverlay.addOverlay(overlayItem);
       }

                    }
if (thisState == null) {

      final MapController mc = mapView.getController();
      mc.animateTo(point);
      mc.setZoom(14);

 } else {

      // example restoring focused state of overlays
      int focused;
      focused = thisState.getInt("focused_1", -1);
      if (focused >= 0) {
                itemizedOverlay.setFocus(itemizedOverlay.getItem(focused));
          }
      focused = thisState.getInt("focused_2", -1);
           if (focused >= 0) {
                 temizedOverlay2.setFocus(itemizedOverlay2.getItem(focused));
            }

  }
OverlayItem OverlayItem=null;
地球点=零;
for(int i=0;i=0){
setFocus(itemizedOverlay.getItem(focused));
}
focused=thisState.getInt(“focused_2”,-1);
如果(聚焦>=0){
temizedOverlay2.setFocus(itemizedOverlay2.getItem(focused));
}
}

为了实现这一点,您需要跨越缩放范围,我更新了您的代码,如下所示(由于无法调试,代码可能会出错):

int minLat=Integer.MAX\u值;
int maxLat=整数.MIN_值;
int minLng=Integer.MAX_值;
int maxLng=整数.MIN_值;
OverlayItem OverlayItem=null;
地球点=零;
for(int i=0;i=0){
setFocus(itemizedOverlay.getItem(focused));
}
focused=thisState.getInt(“focused_2”,-1);
如果(聚焦>=0){
temizedOverlay2.setFocus(itemizedOverlay2.getItem(focused));
}
}
注意:您可以在
zoomToSpan()
animateTo()
函数(如+0.001或+radius)中添加额外的固定值或标记半径,以获得更大的范围以适合您的标记(这将用作填充)。

不要使用setZoom(),当需要指向多个管脚时,最好使用zoomToSpan。在for循环之后添加以下代码,这对我来说非常适合

                   if(nearbyObjMapList.length!=0)
                   {
                    mapOverlays.add(itemizedoverlay);
                    // showing all overlay items
                    itemizedoverlay.populateNow();
                   // Adjusting the zoom level so that you can see all the markers on map
                    mv.getController().zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));
                    // Showing the center of the map
                    mc.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLong + minLong)/2 ));
                   }
                   mv.postInvalidate();
                   if(nearbyObjMapList.length!=0)
                   {
                    mapOverlays.add(itemizedoverlay);
                    // showing all overlay items
                    itemizedoverlay.populateNow();
                   // Adjusting the zoom level so that you can see all the markers on map
                    mv.getController().zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));
                    // Showing the center of the map
                    mc.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLong + minLong)/2 ));
                   }
                   mv.postInvalidate();