gpt4 book ai didi

java - 根据缩放级别在 map 上缩放自定义标记

转载 作者:太空宇宙 更新时间:2023-11-04 10:30:38 25 4
gpt4 key购买 nike

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

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

}

效果非常好,按照预期在 map 上绘制了一个圆圈。

previewImage

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

<小时/>

我的问题:

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

还有..

我不想使用标记聚类。

最佳答案

本质上,您需要做的是定义圆半径占屏幕的比例。

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

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

我怀疑您会根据方向需要不同的比例。

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


}

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

关于java - 根据缩放级别在 map 上缩放自定义标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50042879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com