gpt4 book ai didi

android - 是否可以将尺寸设置为独立于 map 缩放级别的 groundOverlay?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:00 28 4
gpt4 key购买 nike

我的 GoogleMap 上有一个 GroundOverlay,我希望它的尺寸​​在我放大/缩小 map 时不会改变。与始终保持其尺寸的默认 map 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);

最佳答案

您拥有覆盖层的宽度和高度,并根据您的缩放级别将其放置在 map 上。对于那个缩放级别来说似乎不错。正确的?现在您可以计算半径并获取 map 屏幕的米数。因为 map 背景叠加的宽高值都是米。我们必须使用仪表而不是缩放级别或其他任何东西。也许有人可以找到更好的解决方案,但我尝试了太多方法,最终得到了这个解决方案并且效果很好。

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

希望对大家有用:)

关于android - 是否可以将尺寸设置为独立于 map 缩放级别的 groundOverlay?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15381358/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com