我想在Google map
使用Flutter
. 我正在使用颤振包google_maps_flutter: 0.5.32
,目前该包不提供实现该功能。
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 地球创建了许多groundOverlay
s,它们都应用了一些旋转。没有这个,地图没有对齐flutter_map
,我不知道如何修改代码来进行旋转。所以这是一个表演停止者。
我真的很惊讶flutter_google_maps
不支持地面覆盖。为 Android 添加这种支持将非常简单。我希望iOS也能如此。
我最后的评论是您正在修改从 Flutter 插件缓存的 Google 代码。任何时候升级flutter_google_maps
(或通过其他方法清除),您都需要重新应用这些更改。
但是,就目前而言,我能够为迫切需要的功能找到一种解决方法。
我断断续续地寻找了几个月的解决方案。所以也许这也会对其他人有所帮助。