我正在为我的 map 设置多个标记
我可以静态设置缩放级别和中心
但我想要的是将所有标记居中并缩放级别以填充所有可见标记
我可以使用接收 MapSpan 的 Gmaps.MoveToRegion 方法。问题是,我不知道如何计算显示所有标记所需的 MapSpan。
我正在使用 Xamarin.Forms.Maps 和 Xam.Plugin.MapExtend.Abstractions
提前致谢!
请您参考如下方法:
首先你需要在你的android项目中添加自定义 map 渲染,它会继承MapRenderer, GoogleMap.IInfoWindowAdapter
public class MyMapRenderer : MapRenderer, GoogleMap.IInfoWindowAdapter
我添加了 2 个私有(private)字段
private GoogleMap _map;
private LatLngBounds.Builder _builder;
在构造函数中初始化你的_builder:
public MyMapRenderer(Context context) : base(context)
{
_builder = new LatLngBounds.Builder();
}
当覆盖 OnMapReady 方法时,将 GoogleMap 属性设置为:
protected override void OnMapReady(GoogleMap map)
{
base.OnMapReady(map);
NativeMap.InfoWindowClick += OnInfoWindowClick;
NativeMap.SetInfoWindowAdapter(this);
if (_map == null)
{
_map = map;
}
}
并且您需要覆盖 CreateMarker 方法以便更改缩放级别
protected override MarkerOptions CreateMarker(Pin pin)
{
var p = (THHPin)pin;
var marker = new MarkerOptions();
LatLng position = new LatLng(pin.Position.Latitude, pin.Position.Longitude);
marker.SetPosition(position);
marker.SetTitle(pin.Label);
marker.SetSnippet(pin.Address);
_builder.Include(position);
LatLngBounds bounds = _builder.Build();
CameraUpdate cu = CameraUpdateFactory.NewLatLngBounds(bounds, 20);
_map.MoveCamera(cu);
return marker;
}
