【问题标题】:Scale custom marker on map based on zoom level根据缩放级别在地图上缩放自定义标记
【发布时间】:2018-10-07 03:31:31
【问题描述】:

我正在通过执行以下操作在我的地图上绘制一个简单的圆圈:

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

}

这很完美,一个圆圈按预期绘制到地图上。

问题是当我放大和缩小时,圆圈的大小会增加/减少。


我的问题:

我正在寻找一种在放大和缩小时保持圆圈大小相同的方法。

还有..

我不想使用标记聚类。

【问题讨论】:

    标签: java android google-maps google-maps-markers


    【解决方案1】:

    基本上你需要做的是定义圆半径在屏幕的比例。

    在本例中,它始终是宽度的 10%。

    鉴于此,然后计算屏幕经度之间的距离,并将该距离除以所需的比例(半径)。

    我怀疑你会想要不同的比例,具体取决于方向。

    此代码 sn-p 绘制一个半径为屏幕宽度 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);
            }
        });
    
    
    }
    

    另请注意,圆圈不是标记 - 标题需要更新(可能对未来的搜索者有所帮助。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-14
      • 1970-01-01
      • 2017-02-23
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 2011-10-26
      相关资源
      最近更新 更多