0

我想在Google map使用Flutter. 我正在使用颤振包google_maps_flutter: 0.5.32,目前该包不提供实现该功能。

4

1 回答 1

1

我能够找到解决方案。目前我已经在 Android 中实现了它,但还没有在 IOS 中实现。

一旦我弄清楚了,它实际上是相当简单的。但是首先需要进行一些基础工作。

首先,我methodChannel为我的应用创建了一个。在该方法通道中,我传递了一个 XML 字符串,其中包含一个或多个groundOverlays. 这包括 GPS 坐标的基础知识、我的 JPG 文件位置。

其次,我创建了一个名为的类MapOverlays,它是一个静态类,包含一个名为MapOverlay. 这只是我一次实际进行多个叠加的一种方式。

在 Android Studio 中执行此操作,您可以在其中打开 Flutter 项目中的 Android 文件夹。如果您创建了一个methodChannel并特别运行它以进行调试,您应该知道如何执行此操作。

这些类是在以下位置创建的:

google_maps_flutter/java/io.flutter.plugins.googlemaps

完成此操作后,我可以通过方法通道接收 XML 字符串,并将其传递给MapOverlays解析 XML 代码并创建项目数组的构造函数MapOverlay

完成此基础工作后,在创建时在 Google 地图上显示叠加层就很简单了。

我必须将以下代码复制/粘贴到GoogleMapController.java课程中。它位于方法的最后onMapReady()

请参阅底部的最后说明!

    ArrayList<MapOverlays.MapOverlay> mapOverlays =  MapOverlays.getMapOverlays();
    
        for (MapOverlays.MapOverlay mo: mapOverlays) {
          if (mo.getVisible()) {
            LatLng southWest = new LatLng(mo.getSouth(), mo.getWest());
            LatLng northEast = new LatLng(mo.getNorth(), mo.getEast());
            LatLngBounds bounds = new LatLngBounds(southWest, northEast);
            Bitmap bitmap = BitmapFactory.decodeFile(mo.getImageLocation());
            GroundOverlayOptions mapOptions = new GroundOverlayOptions().image(BitmapDescriptorFactory.fromBitmap(bitmap));
            mapOptions.positionFromBounds(bounds);
            mapOptions.bearing(mo.getBearing()*-1);
            mapOptions.transparency(mo.getTransparency());
    
            GroundOverlay groundOverlay = this.googleMap.addGroundOverlay(mapOptions);
          }
      }

最后说明:我知道这是一种黑客行为。但是我需要这个功能并且不想编写自己的 Flutter Google Map。flutter_map我查看了一个看起来非常有前途的传单(插件),并且OverlayImage一旦我发现这是可行的项目,就实现了一个微不足道的项目。但是,flutter_map不支持轴承/旋转。我用 Google 地球创建了许多groundOverlays,它们都应用了一些旋转。没有这个,地图没有对齐flutter_map,我不知道如何修改代码来进行旋转。所以这是一个表演停止者。

我真的很惊讶flutter_google_maps不支持地面覆盖。为 Android 添加这种支持将非常简单。我希望iOS也能如此。

我最后的评论是您正在修改从 Flutter 插件缓存的 Google 代码。任何时候升级flutter_google_maps(或通过其他方法清除),您都需要重新应用这些更改。

但是,就目前而言,我能够为迫切需要的功能找到一种解决方法。

我断断续续地寻找了几个月的解决方案。所以也许这也会对其他人有所帮助。

于 2021-11-24T01:58:25.017 回答