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

时间:2018-04-26 12:22:02

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

我在地图上绘制了一个简单的圆圈:

@EJB
private EventFacade eventFacade; // Normal stateless bean 

GraphQLSchema guestSchema = new GraphQLSchemaGenerator()
            .withOperationsFromSingleton(eventFacade)
            .withValueMapperFactory(new JacksonValueMapperFactory())
            .withDefaults()
            .generate();

GraphQL graphQL = GraphQL.newGraphQL(guestSchema).build();

这完美无缺,按照预期将圆圈绘制到地图上。

previewImage

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

我的问题:

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

还..

我不想使用标记聚类。

1 个答案:

答案 0 :(得分:0)

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

在此示例中,它始终为宽度的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);
        }
    });


}

另请注意,圆圈不是标记 - 标题需要更新(可能会在将来帮助搜索者。)