是否有可能设置尺寸为groundOverlay独立于地图缩放级别?有可能、缩放、尺寸为、级别

2023-09-07 01:48:40 作者:有些爱永远只是演戏

我有一个 GroundOverlay 我的 GoogleMap的,我想,当我放大它的尺寸不改变/出在地图上。精确喜欢默认的地图标记始终保持自己的尺寸。我曾试图与这两种形式的 GroundOverlay.setDimensions(),但图像依然在调整变焦。这是我的code:

 位图BTM = BitmapFactory.de codeResource(getResources(),R.drawable.map_arrow);
 BitmapDesc​​riptor箭头= BitmapDesc​​riptorFactory.fromBitmap(BTM);
 浮瓦特= btm.getWidth();
 浮动H = btm.getHeight();

如果(groundOverlay!= NULL)groundOverlay.remove();
 groundOverlay = mMap.addGroundOverlay(新GroundOverlayOptions()
            在图像配(箭头).position(meLoc,W,H).bearing(bearAngle));
 groundOverlay.setDimensions(1000);
 

解决方案

你有你的宽度和覆盖的heigth,并根据您的缩放级别把它在地图上。这似乎很好的缩放级别。对?现在,你可以计算半径,让您的地图画面的米。由于地图背景覆盖宽度和高度值是米。我们必须去米未缩放级别或其他任何东西。也许有人可以找到一个更好的解决办法,但我已经尝试过很多方法,并结束了这个解决方案,它工作得很好。

 浮动当zoomLevel = = mMap.getCameraPosition()变焦。
    //计算米*********************
    myBounds = mMap.getProjection()getVisibleRegion()的LatLngBounds。;
    myCenter = mMap.getCameraPosition()的目标。
    如果(myCenter.latitude == 0 || myCenter.longitude == 0){
        myCenter =新经纬度(myLocation.getLatitude(),myLocation.getLongitude());
    }

    经纬度NE = myBounds.northeast;

    // R =在法定英里半径的地球
    双R = 3963.0;

    //转换纬度或经度十进制度为弧度(除以57.2958)
    双LAT1 = myCenter.latitude / 57.2958;
    双lon1 = myCenter.longitude / 57.2958;
    最终双LAT2 = ne.latitude / 57.2958;
    最终双lon2 = ne.longitude / 57.2958;

    //距离=圆从中心到界外东北角半径
    双DIS = R * Math.acos(Math.sin(LAT1)* Math.sin(LAT2)+
      Math.cos(LAT1)* Math.cos(LAT2)* Math.cos(lon2  -  lon1));

    // 1米= 0.000621371192237334万里
    双meters_calc = DIS / 0.000621371192237334;

    浮动系数= 1;
    如果(当zoomLevel = == 15){//我的默认缩放级别你可以是不同的
        metersoverlay = meters_calc; //全局变量metersoverlay集
    }
    其他{//如果我的缩放级别的变化,然后我要计算的尺寸比例因子
        系数=(浮点)(meters_calc / metersoverlay);
    }

    // **************现在我们就可以设置背景叠加尺寸
    浮动尺寸= 1000 *因素;
    loadingGroundOverlayBg.setDimensions(尺寸);
 

我希望它适用于所有的你:)

怎么在表格里把字尽可能的放大

I have a GroundOverlay on my GoogleMap and I want that its dimensions to not change when I zoom in/out on map. Exact like default map markers that always keep their dimensions. I have tried with both forms of the GroundOverlay.setDimensions() but the image is still resize on zoom. Here is my code:

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

解决方案

you have your width and heigth of overlay and placed it on the map according to your zoom level. It seems good for that zoom level. Right? Now you can calculate radius and get meters of your map screen. Because map background overlay width and height values are meters. We have to go with meter not zoom level or anything else. Maybe someone can find a better solution but I have tried too many ways, and end up with this solution and it worked very well.

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

I hope it works for all of you :)