是否可能为与地图缩放级别无关的地面覆盖设置尺寸?

5

我在我的GoogleMap上有一个GroundOverlay,我希望当我放大/缩小地图时,它的尺寸不会改变,就像默认地图上的markers一样始终保持它们的尺寸。我已经尝试使用GroundOverlay.setDimensions()的两种形式,但是图像仍然会在缩放时调整大小。这是我的代码:

 Bitmap btm = BitmapFactory.decodeResource(getResources(), R.drawable.map_arrow);
 BitmapDescriptor arrow = BitmapDescriptorFactory.fromBitmap(btm);
 float w = btm.getWidth();
 float h = btm.getHeight();

if (groundOverlay != null) groundOverlay.remove();
 groundOverlay = mMap.addGroundOverlay(new GroundOverlayOptions()
            .image(arrow).position(meLoc, w,h).bearing(bearAngle));
 groundOverlay.setDimensions(1000);

我也在寻找相同的问题。你能解决了吗? - user2234
@Sneha 我记不得了,这是一个非常旧的项目,我已经没有它了,抱歉。 - AlexAndro
2个回答

1
我有同样的问题。如果你想放置一张图片,你可以使用Google地图API提供的默认标记。你可以将自定义图片设置为标记图标,大小将保持不变。
private final List<BitmapDescriptor> mImages = new ArrayList<BitmapDescriptor>();
mImages.add(BitmapDescriptorFactory.fromResource(R.drawable.YOUR_IMAGE));
Marker marker = map.addMarker(new MarkerOptions().icon(mImages.get(0)));

这个示例展示了如何从图像列表的元素中设置标记的图标。希望它能帮到你。

我知道如何放置自定义标记。这是关于另一件事情,一个具有特定行为的“GroundOverlay”。 - AlexAndro
那么告诉我,你的GroundOverlay的“特定行为”是什么,因为它不能被标记替换? - David Hajas
1
zOrder是一个起点。您无法设置标记的zIndex。 - Nublodeveloper
@Nublodeveloper,可以的。zIndex对MarkerOptions提供了支持。 - Simon

1
你已经确定了覆盖层的宽度和高度,并根据缩放级别将其放置在地图上。这对于该缩放级别看起来很好,对吗?现在,您可以计算半径并获取地图屏幕的米数。因为地图背景覆盖层的宽度和高度值是以米为单位的。我们必须使用米而不是缩放级别或其他任何东西。也许有人可以找到更好的解决方案,但我尝试了太多种方法,最终得出了这个解决方案,它非常有效。
    float zoomLevel=mMap.getCameraPosition().zoom;
    //calculate meters*********************         
    myBounds = mMap.getProjection().getVisibleRegion().latLngBounds;
    myCenter=  mMap.getCameraPosition().target;
    if (myCenter.latitude==0 || myCenter.longitude==0) {
        myCenter=new LatLng(myLocation.getLatitude(),myLocation.getLongitude());
    }

    LatLng ne = myBounds.northeast;

    // r = radius of the earth in statute miles
    double r = 3963.0;  

    // Convert lat or lng from decimal degrees into radians (divide by 57.2958)
    double lat1 = myCenter.latitude / 57.2958; 
    double lon1 = myCenter.longitude / 57.2958;
    final double lat2 = ne.latitude / 57.2958;
    final double lon2 = ne.longitude / 57.2958;

    // distance = circle radius from center to Northeast corner of bounds
    double dis = r * Math.acos(Math.sin(lat1) * Math.sin(lat2) + 
      Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1));

    //1 Meter = 0.000621371192237334 Miles
    double meters_calc=dis/0.000621371192237334;

    float factor=1;  
    if (zoomLevel==15) {  // my default zoom level yours can be different
        metersoverlay=meters_calc;  // global variable metersoverlay set
    }
    else { // if my zoom level change then I have to calculate dimension scale factor
        factor=(float) (meters_calc/metersoverlay); 
    }

    //******************************* now we are ready to set dimension of background overlay
    float dimensions=1000*factor; 
    loadingGroundOverlayBg.setDimensions(dimensions);

我希望它对大家都有效 :)


谢谢您的回复,我会试着使用您的解决方案。同时,我用了类似的实现 mMap.setOnCameraChangeListener,但有时候会出现一些问题。 - AlexAndro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接