繁体   English   中英

根据缩放级别在地图上缩放自定义标记

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM