3

我正在使用 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(脏,状态:_TheMapState#a8840)时引发了以下断言:I/flutter(12525):'package:google_maps_flutter/src/location.dart':断言失败:第 68 行 pos 16: I/flutter (12525): 'southwest.latitude <= northeast.latitude': 不正确。

谢谢

4

3 回答 3

1

大家好!

具有零安全性的解决方案

请注意错误:'southwest.latitude <= northeast.latitude': 不正确。

根据文档,链接如下:

https://pub.dev/documentation/google_maps_flutter_platform_interface/2.1.2/google_maps_flutter_platform_interface/LatLngBounds-class.html

需要检查这些值是否不是静态的,因为swestern.latitude必须小于或等于northwest.latitude,并且eastern.longitude必须小于或等于southouth.longitude。

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),
),
于 2021-10-05T14:25:59.500 回答
0

尝试这个:

void _onMapCreated(GoogleMapController controller) {
_controller.complete(controller);
Future.delayed(
    Duration(milliseconds: 200),
    () => controller.animateCamera(CameraUpdate.newLatLngBounds(
        northeast,southwest,
        1)));

}

于 2021-02-28T13:13:47.010 回答
0

我对这个很愚蠢。

我在 UniCampusNE 和 SW 的 LatLngs 中的 Lat 是错误的。就那么简单。我发布的代码是正确的。

您必须确保西南纬度小于(更左)东北纬度。

于 2019-11-05T16:35:16.033 回答