我的GroundOverlay
上有一个GoogleMap
我希望我在地图上放大/缩小时尺寸不会改变。完全像默认地图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);
答案 0 :(得分: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);
我希望它适用于所有人:)
答案 1 :(得分:1)
我有同样的问题。如果要放置图像,可以使用Google maps 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)));
此示例显示如何从图像列表的元素设置标记的图标。希望它有所帮助。