Unact / yandex_mapkit

Flutter implementation of YandexMapkit
MIT License
133 stars 149 forks source link

Некорректное отображение ClusterizedPlacemarkCollection #255

Closed nikolasduda closed 2 years ago

nikolasduda commented 2 years ago

Я пытаюсь добиться отображения двух кластеров. В одном точки города Санкт-Петербург, в другом точки Москвы. Что хочу получить: при отрисовке карты отображение двух кластеров без приближения (каждый кластер для своего города). Что происходит: при отрисовке карты не всегда показываются все кластеры, когда то только один кластер, либо в Москве либо в Питере, реже показываются все. Приближая в город, где не отображается кластер при некотором зуме начинают отображаться точки. Также при Hot Reload на странице, где открыта карта, кластер, который не отображается, появляется. Возможно я неправильно использую кластеры. Но такого поведения, как на видео явно не должно быть. Прикладываю код и видео. Спасибо

https://user-images.githubusercontent.com/42511187/177558090-27c1c860-2f6a-4238-9b07-537032e9520e.mp4

YandexMap(
                mapObjects: widget.points
                    .map( 
                      (points) => ClusterizedPlacemarkCollection(
                        mapId: MapObjectId(points.hashCode.toString()),
                        radius: 30,
                        minZoom: 15,
                        onClusterAdded: (self, cluster) async {
                          return cluster.copyWith(
                            appearance: cluster.appearance.copyWith(
                              opacity: 1,
                              icon: PlacemarkIcon.single(
                                PlacemarkIconStyle(
                                  image: BitmapDescriptor.fromAssetImage(
                                    Assets.components.clinicPin.path,
                                  ),
                                  scale: 2,
                                  anchor: const Offset(0.5, 1),
                                ),
                              ),
                            ),
                          );
                        },
                        placemarks: points
                            .map(
                              (point) => PlacemarkMapObject(
                                mapId: MapObjectId(
                                  point.hashCode.toString(),
                                ),
                                point: Point(
                                  latitude: point.x,
                                  longitude: point.y,
                                ),
                                opacity: 1,
                                icon: PlacemarkIcon.single(
                                  PlacemarkIconStyle(
                                    image: BitmapDescriptor.fromAssetImage(
                                      Assets.components.clinicPin.path,
                                    ),
                                    scale: 2,
                                    anchor: const Offset(0.5, 1),
                                  ),
                                ),
                              ),
                            )
                            .toList(),
                      ),
                    )
                    .toList(),
                onMapCreated: (YandexMapController controller) async {
                  _controller = controller;
                  final visibleRegion = await controller.getVisibleRegion();

                  //TODO: rewrite this hack
                  if (visibleRegion.topLeft == visibleRegion.bottomRight) {
                    return;
                  }

                  // _updateCamera(widget.points, showAnimation: false);
                },
              ),
tologonkudaiberdiuulu commented 2 years ago

Я думаю это тоже относится к багу #250. Просто объекты не обновляются

DCrow commented 2 years ago

Добрый день!

Сейчас должно быть исправлено в мастере.

nikolasduda commented 2 years ago

Не поправлено. На видео продемонстрировал что происходит сейчас. Показываются то оба кластера, то один, то другой, то вообще ни одного. Хотя точки имеются. При хот релоад на карте все кластеры появляются. На данный момент 2 точки в Питере и 2 в Москве. В то же время, если в Москве 1 точка а в Питере 2 или наоборот, то все отображается корректно

Как я могу помочь в решении данного бага? Какие данные предоставить?

https://user-images.githubusercontent.com/42511187/180489052-bd1727a8-bd87-4756-8749-3506f2cffaf7.mp4

DCrow commented 2 years ago

Без полноценного примера я не могу сказать в чем ошибка. На основе первого коммента, какие ошибки нашел те исправил, вполне возможно ваша ошибка уже является ошибкой нативной либы, в таком случае только разработчики нативной либы могут ее исправить.

Еще, более внимательно посмотрев видео, не используется ли в вашем приложении YandexMap, где логотип "Yandex Maps" передвинут налево?

nikolasduda commented 2 years ago

Логотип "YandexMaps" я сам наложил слева виджетом Stack, ибо на некоторых устройствах не отображается логотип.

nikolasduda commented 1 year ago

https://user-images.githubusercontent.com/42511187/208179301-38d05a3d-c4ec-42d8-b195-87b827dd8354.mp4 https://user-images.githubusercontent.com/42511187/208179357-1fe62184-8d74-4470-953d-79fb18c3a212.mp4

Прикладываю 2 примера, в первом видео не отображается кластер справа, Точки для воспроизведения: 59.737858, 30.425585 59.737858, 30.325585 55.755409, 37.611769 56.639436, 47.916254 56.630718, 47.892080

На втором видео не отображаются кластер в Санкт-Петербурге и в Йошкар-Оле Точки следующие 59.737858, 30.425585 59.737858, 30.325585 56.639436, 47.916254 56.630718, 47.892080

StrelkovIvan commented 1 year ago

Аналогичная проблема. Некоторые кластеры просто не отображаются.

Выяснил, что такая проблема возникает при кастомной иконке Placemark. Если параметр icon в placemark не задан, то cluster работает нормально