Ann*_*ill 3 google-maps dart hybrid-mobile-app flutter
我正在使用此包创建一个带有 flutter 的应用程序:https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter
我从服务器获取位置列表,我必须在地图上放置标记。我面临的问题是放置在地图上的所有标记都必须在地图上可见。位置列表是随机的,所以我无法假设它们是否都在一个城市,或者是否分布在整个星球上。我怎样才能让所有标记都在视野中?
尝试下面的代码。它正在处理数百个标记。
// Set<Marker> _markers = Set();
@override
Widget build(BuildContext context) {
return GoogleMap(
mapType: MapType.hybrid,
myLocationEnabled: true,
initialCameraPosition: CameraPosition(
target: LatLng(_bloc.location.latitude, _bloc.location.longitude),
zoom: 3),
markers: _markers,
onMapCreated: (GoogleMapController controller) {
_controller.complete(controller);
Future.delayed(
Duration(milliseconds: 200),
() => controller.animateCamera(CameraUpdate.newLatLngBounds(
MapUtils.boundsFromLatLngList(
_markers.map((loc) => loc.position).toList()),
1)));
},
);
}
Run Code Online (Sandbox Code Playgroud)
map_utils.dart
import 'package:google_maps_flutter/google_maps_flutter.dart';
class MapUtils {
static LatLngBounds boundsFromLatLngList(List<LatLng> list) {
double x0, x1, y0, y1;
for (LatLng latLng in list) {
if (x0 == null) {
x0 = x1 = latLng.latitude;
y0 = y1 = latLng.longitude;
} else {
if (latLng.latitude > x1) x1 = latLng.latitude;
if (latLng.latitude < x0) x0 = latLng.latitude;
if (latLng.longitude > y1) y1 = latLng.longitude;
if (latLng.longitude < y0) y0 = latLng.longitude;
}
}
return LatLngBounds(northeast: LatLng(x1, y1), southwest: LatLng(x0, y0));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |