谷歌地图地面覆盖颤动



我想使用FlutterGoogle map上的给定lat-log位置以叠加方式显示图像。我使用的是flutter包google_maps_flutter: 0.5.32,目前该包没有提供实现该功能。

我能够找到一个解决方案。目前我已经在安卓系统中实现了它,但还没有在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项的数组。

一旦完成了这些基础工作,在创建覆盖图时在谷歌地图上显示覆盖图就变得微不足道了。

我必须将以下代码复制/粘贴到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谷歌地图。我看了一份传单(flutter_map插件(,它看起来很有前途,并实现了一个OverlayImage项目,一旦我发现这是一个可以工作的项目,它就变得微不足道了。但是,flutter_map不支持轴承/旋转。我用谷歌地球创建了许多groundOverlay,它们都应用了一些旋转。如果没有这一点,映射就无法在flutter_map上排列,我也不知道如何修改代码以进行轮换。所以这是一个节目的终结者。

我真的很惊讶flutter_google_maps不支持地面覆盖。在Android中添加这种支持将是非常琐碎的。我希望iOS也一样。

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

但是,就目前而言,我能够为一个急需的功能找到一个变通方法。

我断断续续地找了几个月的解决方案。因此,也许这也会帮助其他人。

相关内容

  • 没有找到相关文章

最新更新