我使用的是google_maps_flutter包,我需要将地图的可滚动区域限制为特定区域。我有西南角和东北角,但我不知道怎么做。
我已经尝试了下面的代码,但它不起作用。
uniCampusSW和uniCampusNE都是LatLngs。
_userLocation == null // If user location has not been found
? Center(
// Display Progress Indicator
child: CircularProgressIndicator(
backgroundColor: UniColors.primaryColour[500],
),
)
: GoogleMap(
// Show Campus Map
onMapCreated: _onMapCreated,
initialCameraPosition: // required parameter that sets the starting camera position. Camera position describes which part of the world you want the map to point at.
CameraPosition(
target: _userLocation, zoom: defaultZoom, tilt: 0.0),
scrollGesturesEnabled: true,
tiltGesturesEnabled: true,
trafficEnabled: false,
compassEnabled: true,
rotateGesturesEnabled: true,
myLocationEnabled: true,
mapType: _currentMapType,
zoomGesturesEnabled: true,
cameraTargetBounds: new CameraTargetBounds(
new LatLngBounds(
northeast: UniCampusNE,
southwest: UniCampusSW,
),
),
),
这是我得到的错误
/flutter(12525(:在构建TheMap时抛出了以下断言(dirty,state:_TheMapState#a8840(:I/flutter(12525%(:"package:google_maps_flutter/src/location.dart":断言失败:线68位置16:I/flutter(12525(:'西南纬度<东北纬度:不正确
感谢
朋友们好!
零安全解决方案
请注意错误:"西南纬度<=东北纬度:不正确。
根据文件,链接如下:
https://pub.dev/documentation/google_maps_flutter_platform_interface/2.1.2/google_maps_flutter_platform_interface/LatLngBounds-class.html
有必要检查这些值不是静态的,因为西南纬度必须小于或等于东北纬度,东北经度必须小于或相等西南经度。
LatLng? UniCampusNE;
LatLng? UniCampusSW;
var nLat, nLon, sLat, sLon;
if (UniCampusSW!.latitude <= UniCampusNE!.latitude) {
sLat = UniCampusSW.latitude;
nLat = UniCampusNE.latitude;
}else{
sLat = UniCampusNE.latitude;
nLat = UniCampusSW.latitude;
}
if (UniCampusSW.longitude <= UniCampusNE.longitude) {
sLon = UniCampusSW.longitude;
nLon = UniCampusNE.longitude;
}else{
sLon = UniCampusNE.longitude;
nLon = UniCampusSW.longitude;
}
在cameraTargetBounds中:您可以使用您创建的变量:
cameraTargetBounds: CameraTargetBounds(
LatLngBounds(
northeast: LatLng(nLat, nLon),
southwest: LatLng(sLat, sLon),
),
我用这个太愚蠢了。
我在UniCampusNE和SW的LatLngs中的Lats是错误的。就这么简单。我发布的代码是正确的。
你必须确保西南纬度小于东北纬度。
试试这个:
void _onMapCreated(GoogleMapController controller) {
_controller.complete(controller);
Future.delayed(
Duration(milliseconds: 200),
() => controller.animateCamera(CameraUpdate.newLatLngBounds(
northeast,southwest,
1)));
}
基于此问题自动计算地图边界
LatLngBounds boundsFromLatLngList(List<LatLng> list) {
double? x0, x1, y0, y1;
for (LatLng latLng in list) {
if (x0 == null || x1 == null || y0 == null || y1 == 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!));
}