#google-maps #flutter #dart #google-maps-flutter
#google-карты #флаттер #дротик #google-карты-флаттер
Вопрос:
Я хотел бы отобразить изображение в режиме наложения в заданных широтах при Google map
использовании Flutter
. Я использую пакет flutter google_maps_flutter: 0.5.32
, в настоящее время пакет не предоставляет для реализации этой функции .
Комментарии:
1. Пожалуйста, поделитесь тем, что вы уже пробовали.
2. Я не смог реализовать эту функцию, я видел ту же реализацию функции с использованием javascript в developers.google.com/maps/documentation/javascript/… можно ли включить эту функцию в flutter
3. В
google_maps_flutter
пакете есть запрос функции для поддержки функции наложения грунта. Вы можете проверить это здесь: github.com/flutter/flutter/issues/264794. Я нашел github.com/bytestreme/plugins это одно из решений для наложения земли для Android flutter.
5. Вы когда-нибудь находили решение для этого? Я знаю, что есть запрос функции, который все еще открыт для google_maps_flutter, но я хотел посмотреть, нашли ли вы какие-либо обходные пути?
Ответ №1:
Я смог найти решение этой проблемы. На данный момент я реализовал это в Android, но еще не для IOS.
На самом деле это было довольно просто, как только я понял это. Но сначала нужно было выполнить небольшую наземную работу.
Сначала я создал methodChannel
для своего приложения. В этом канале метода я передал строку XML, которая содержит один или несколько groundOverlays
. Это включает в себя основы координат GPS, местоположение файла моего JPG.
Во-вторых, я создал класс с именем MapOverlays
, который является статическим классом и содержит список класса с именем MapOverlay
. Для меня это просто способ сделать несколько наложений одновременно.
Сделайте это из Android Studio, где вы открываете папку Android в проекте Flutter. Вы должны знать, как это сделать, если вы создали 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);
}
}
Заключительное замечание: я знаю, что это своего рода взлом. Но мне нужна была эта функция, и я не хотел писать свою собственную флаттерную карту Google. Я посмотрел на брошюру ( flutter_map
плагин), которая выглядела действительно многообещающей, и реализовал OverlayImage
элемент, который был тривиальным, как только я понял, что это элемент, который будет работать. Однако, flutter_map
не поддерживает подшипник / вращение. У меня есть много groundOverlay
карт, которые я создал с помощью Google Планета Земля, и все они имеют некоторое вращение. Без этого карты не выстраивались в линию flutter_map
, и я не мог понять, как изменить код для поворота. Итак, это была остановка показа.
Я действительно удивлен, что flutter_google_maps
не поддерживает наземные наложения. Было бы довольно тривиально добавить эту поддержку для Android. Я надеюсь, что iOS тоже будет.
Мой последний комментарий заключается в том, что вы изменяете код Google, который кэшируется из плагина Flutter. Каждый раз, когда вы обновляете flutter_google_maps
(или очищаете каким-либо другим способом), вам нужно будет повторно применить эти изменения.
Но на данный момент я могу найти обходной путь для крайне необходимой функции.
Я искал решение в течение нескольких месяцев. Так что, возможно, это также поможет кому-то еще.
Комментарии:
1. Можете ли вы предоставить суть вашего кода реализации?