liodali / osm_flutter

OpenStreetMap plugin for flutter
https://pub.dev/packages/flutter_osm_plugin
MIT License
229 stars 95 forks source link

Markers | when adding markers with different icon types at the same time, markers take only one icon type #541

Open Djakh opened 2 months ago

Djakh commented 2 months ago

The first problem is that the controller can't add a list of icons, which is fine, but it creates chaos when adding markers with different icon types.

liodali commented 2 months ago

can you shows us example to identify the issue

Djakh commented 2 months ago

yep here you go: void addDifferentIconTypeMarkers() { _mapController.addMarker( GeoPoint(latitude: 41.2995, longitude: 69.2401), markerIcon: const MarkerIcon(icon: Icon(Icons.car_crash)), );

_mapController.addMarker(
  GeoPoint(latitude: 61.5240, longitude: 105.3188),
  markerIcon: const MarkerIcon(icon: Icon(Icons.fire_truck)),
);
_mapController.addMarker(
  GeoPoint(latitude: 40.0974, longitude: 65.3525),
  markerIcon: const MarkerIcon(icon: Icon(Icons.mark_email_read)),
);

_mapController.addMarker(
  GeoPoint(latitude: 55.3781, longitude: 3.4360),
  markerIcon: const MarkerIcon(icon: Icon(Icons.fire_extinguisher)),
);

} initialize the map controller and just run it, you will see the problem

Djakh commented 2 months ago

i gave 4 different icons for 4 markers, but all markers will be created with the last icon which is fire_extinguisher

liodali commented 2 months ago

you need to add await before addMarker because we render the icon and then we send them to map engine as drawable or image for ios side or web i will add api to add multiple markers

Djakh commented 2 months ago

yes, now I'm adding a wait, but I have an average of 800-1000 markers on the map, and waiting for each marker is very slow, it's time-consuming and inconvenient, so it would be great if there was an option to add all the markers at the same time with different types of icons , this will really improve performance.

liodali commented 2 months ago

is those markers all of them has it own icon ? maybe you can show them by boundingbox if the markers is in bounds add it if not remove it

Djakh commented 2 months ago

there is only 4 type of icons, but about 200 markers have one type of icon, 300 markers another and so on, boundingbox it seems interesting thing, could you give simple example how can i use it in my case?

liodali commented 2 months ago

better use staticPoints i will give you example later on sorry

Djakh commented 2 months ago

it is okey, take your time.

Djakh commented 2 months ago

I've been stuck with this problem for about a week, it's okay if I wait a little longer.

liodali commented 2 months ago

you can use our mixin OSMMixinObserver and call onRegionChanged the use Region object that has BoundingBox and we have method called inBoundingBox i will add api in that to check list of geopoint and return only the points that are in boudingbox and as for now use staticPoints in OSMFlutter to define your group of markers like this


 staticPoints: [
          StaticPositionGeoPoint(
            "marker1",
            const MarkerIcon(
              icon: Icon(
               icon1,
                color: Colors.green,
                size: 32,
              ),
            ),
            [
             /// here put GeoPoint if already there
            ],
          ),
       StaticPositionGeoPoint(
            "marker2",
            const MarkerIcon(
              icon: Icon(
               icon2,
                color: Colors.green,
                size: 32,
              ),
            ),
            [
             /// here put GeoPoint if already there
            ],
          ),

Then use the mapController to set points as in the example below


 await controller.setStaticPosition(
      [
        //GeoPoint
      ],
      "marker1",
    );