![](/img/trans.png)
[英]Android - Compute distance of map every zoom level like Gmaps scale bar
[英]Scale custom marker on map based on zoom level
通过执行以下操作,我在地图上绘制了一个简单的圆:
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
try {
boolean success = mMap.setMapStyle(MapStyleOptions.loadRawResourceStyle(getContext(), R.raw.style_json));
if (!success) {
Log.e("MapsActivityRaw", "Style parsing failed.");
}
} catch (Resources.NotFoundException e) {
Log.e("MapsActivityRaw", "Can't find style.", e);
}
final LatLng myLatlng = new LatLng(-33.999564, 18.516763);
mMap.moveCamera(CameraUpdateFactory.newLatLng(myLatlng));
mMap.animateCamera( CameraUpdateFactory.zoomTo( 11.0f ) );
mMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
public void onMapLoaded() {
bar.setVisibility(View.GONE);
drawCircle(myLatlng);
}
});
}
private void drawCircle(LatLng point){
CircleOptions circleOptions = new CircleOptions();
circleOptions.center(point);
circleOptions.radius(500);
circleOptions.strokeColor(Color.BLACK);
circleOptions.fillColor(0x30ff0000);
circleOptions.strokeWidth(2);
mMap.addCircle(circleOptions);
}
效果很好,按预期在地图上画了一个圆。
问题是当我放大和缩小时,圆圈的大小会增加/减小。
我的问题:
我正在寻找一种在放大和缩小时保持圆圈大小不变的方法。
也..
我不想使用标记聚类。
本质上,您需要做的是定义屏幕的圆半径比例。
在此示例中,它始终是宽度的10%。
在此前提下,然后计算屏幕经度之间的距离,然后将该距离除以所需的比例(半径)。
我怀疑您会根据方向需要不同的比例。
此代码段绘制了一个半径为屏幕宽度10%的圆,然后侦听相机移动(包括缩放)以根据新的经度边界调整半径。
Circle c;
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
mMap.getUiSettings().setZoomControlsEnabled(true);
LatLng p = new LatLng(39.171755, -86.510632);
LatLngBounds llb = mMap.getProjection().getVisibleRegion().latLngBounds;
LatLng ne = llb.northeast;
LatLng sw = llb.southwest;
double d = SphericalUtil.computeDistanceBetween(ne,new LatLng(ne.latitude,sw.longitude));
double r = (d/10);
c = mMap.addCircle(new CircleOptions().center(p).radius(r).strokeColor(Color.BLUE));
mMap.setOnCameraMoveListener(new GoogleMap.OnCameraMoveListener() {
@Override
public void onCameraMove() {
LatLngBounds llb = mMap.getProjection().getVisibleRegion().latLngBounds;
LatLng ne = llb.northeast;
LatLng sw = llb.southwest;
double d = SphericalUtil.computeDistanceBetween(ne,new LatLng(ne.latitude,sw.longitude));
double r = (d/10);
c.setRadius(r);
}
});
}
另请注意,圆圈不是标记-标题需要更新(将来可能会帮助搜索者。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.