1

プロジェクトmapviewballonでライブラリ名 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));
            }

  }
4

2 に答える 2

1

これを実現するには、ズームにまたがる必要があります。次のようにコードを更新しました(デバッグできないため、エラーが発生する可能性があります)。

int minLat=Integer.MAX_VALUE;
int maxLat=Integer.MIN_VALUE;
int minLng=Integer.MAX_VALUE;
int maxLng=Integer.MIN_VALUE;

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);

           maxLat = Math.max((int) (Latitude*1.0E6), maxLat);
           minLat = Math.min((int) (Latitude*1.0E6), minLat);
           maxLng = Math.max((int) (Longitude*1.0E6), maxLng);
           minLng = Math.min((int) (Longitude*1.0E6), minLng);
       }

                    }
if (thisState == null) {

      final MapController mc = mapView.getController();
      mc.zoomToSpan(Math.abs(maxLat-minLat), Math.abs(maxLng-minLng));
      mc.animateTo(new GeoPoint((minLat+maxLat)/2,(minLng+maxLng)/2));

 } 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));
            }

  }

zoomToSpan()注:マーカーに合わせてより広い範囲を取得するために、またはanimateTo()関数(+0.001や+ radiusなど)でマーカーの固定値または半径を追加できます(これはパディングとして機能します)。

于 2012-10-10T07:28:15.413 に答える
1

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();
于 2012-10-10T07:34:38.440 に答える