diff --git a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/DownloadListener.java b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/DownloadListener.java index 61f490d..d2a1819 100644 --- a/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/DownloadListener.java +++ b/src/main/java/org/openstreetmap/josm/plugins/mapwithai/backend/DownloadListener.java @@ -4,10 +4,12 @@ package org.openstreetmap.josm.plugins.mapwithai.backend; import java.lang.ref.WeakReference; import java.util.Collection; import java.util.HashSet; +import java.util.List; import java.util.Objects; import java.util.stream.Collectors; import org.openstreetmap.josm.data.Bounds; +import org.openstreetmap.josm.data.DataSource; import org.openstreetmap.josm.data.osm.DataSet; import org.openstreetmap.josm.data.osm.DataSourceChangeEvent; import org.openstreetmap.josm.data.osm.DataSourceListener; @@ -23,6 +25,7 @@ import org.openstreetmap.josm.tools.Destroyable; public final class DownloadListener implements DataSourceListener, Destroyable { final WeakReference ds; + private static final double BBOX_SIMILARITY_DEGREES = 0.001; private static final Collection LISTENERS = new HashSet<>(); public DownloadListener(DataSet dataSet) { @@ -43,6 +46,9 @@ public final class DownloadListener implements DataSourceListener, Destroyable { if (layer.downloadContinuous()) { MapWithAIDataUtils.getMapWithAIData(layer, event.getAdded().stream().map(ev -> ev.bounds) .map(Bounds::toBBox).collect(Collectors.toList())); + List bounds = DataSource.getDataSourceBounds(event.getSource().getDataSources()); + bounds.removeIf(a -> layer.getDataSet().getDataSourceBounds().stream().map(Bounds::toBBox) + .anyMatch(b -> b.bboxIsFunctionallyEqual(a.toBBox(), BBOX_SIMILARITY_DEGREES))); } } }