如何在Flutter中限制GoogleMap的范围?

rqenqsqc  于 2022-12-14  发布在  Flutter
关注(0)|答案(4)|浏览(323)

我正在使用google_maps_flutter包,我需要限制Map的可滚动区域到一个特定的区域。我有西南和东北角,但我不知道如何做到这一点。
我已经尝试了下面的代码,但它不工作.
uniCampusSW和uniCampusNE都是LatLng。

_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,
                ),
              ),
            ),

这是我得到的错误

/扑动(12525):在构建TheMap(dirty,state:_Map状态#a8840):I/扑动(12525):“软件包:google_maps_flutter/源代码/位置. dart”:失败的Assert:第68行第16项:I/扑动(12525):“西南.纬度〈=东北.纬度”:不正确。

谢谢

c3frrgcw

c3frrgcw1#

朋友们好!
零安全解
请注意错误:“西南.纬度〈=东北.纬度”:不是真的。
根据文档,链接如下:
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),
),
vaqhlq81

vaqhlq812#

我在这件事上太傻了。
我在UniCampusNE和SW的Latlngs中的Lats是错误的。就这么简单。我发布的代码是正确的。
您必须确保西南纬度小于东北纬度(更左侧)。

sxissh06

sxissh063#

试试这个:

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

}

slhcrj9b

slhcrj9b4#

基于此issue自动计算Map界限

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!));
  }

相关问题