Ticket #24517: 24517.patch

File 24517.patch, 7.5 KB (added by StephaneP, 6 months ago)
  • src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java b/src/org/openstreetmap/josm/gui/layer/geoimage/CorrelateGpxWithImages.java
    index 67c00a8735..d6c9b0b07b 100644
    a b public class CorrelateGpxWithImages extends AbstractAction implements ExpertMode  
    551551
    552552        JLabel labelPosition = new JLabel(tr("Override position for: "));
    553553
    554         int numAll = yLayer.getSortedImgList(true, true).size();
    555         int numExif = numAll - yLayer.getSortedImgList(false, true).size();
    556         int numTagged = numAll - yLayer.getSortedImgList(true, false).size();
     554        int numAll = yLayer.getSortedImgList(true, true, imgTimeSource).size();
     555        int numExif = numAll - yLayer.getSortedImgList(false, true, imgTimeSource).size();
     556        int numTagged = numAll - yLayer.getSortedImgList(true, false, imgTimeSource).size();
    557557
    558558        cbExifImg = new JCheckBox(tr("Images with geo location in exif data ({0}/{1})", numExif, numAll));
    559559        cbExifImg.setEnabled(numExif != 0);
    public class CorrelateGpxWithImages extends AbstractAction implements ExpertMode  
    828828            // So reset all images.
    829829            yLayer.discardTmp();
    830830
     831            //Get how many images are present in the layer
     832            int totalImg = yLayer.getImages().size();
     833           
    831834            // Construct a list of images that have a date, and sort them on the date.
    832835            List<ImageEntry> dateImgLst = getSortedImgList();
    833836            // Create a temporary copy for each image
    public class CorrelateGpxWithImages extends AbstractAction implements ExpertMode  
    846849
    847850            return trn("<html>Matched <b>{0}</b> of <b>{1}</b> photo to GPX track.</html>",
    848851                    "<html>Matched <b>{0}</b> of <b>{1}</b> photos to GPX track.</html>",
    849                     dateImgLst.size(), lastNumMatched, dateImgLst.size());
     852                    totalImg, lastNumMatched, totalImg);
    850853        }
    851854    }
    852855
    public class CorrelateGpxWithImages extends AbstractAction implements ExpertMode  
    10031006    }
    10041007
    10051008    private List<ImageEntry> getSortedImgList() {
    1006         return yLayer.getSortedImgList(cbExifImg.isSelected(), cbTaggedImg.isSelected());
     1009        return yLayer.getSortedImgList(cbExifImg.isSelected(), cbTaggedImg.isSelected(), imgTimeSource);
    10071010    }
    10081011
    10091012    private static GpxDataWrapper selectedGPX(boolean complain) {
  • src/org/openstreetmap/josm/gui/layer/geoimage/EditImagesSequenceAction.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/EditImagesSequenceAction.java b/src/org/openstreetmap/josm/gui/layer/geoimage/EditImagesSequenceAction.java
    index 6d84ef2310..7f4dfa593b 100644
    a b public class EditImagesSequenceAction extends JosmAction {  
    7979            // So reset all images.
    8080            yLayer.discardTmp();
    8181            // Construct a list of images that have a date, and sort them on the date.
    82             List<ImageEntry> dateImgLst = yLayer.getSortedImgList(true, true);
     82            List<ImageEntry> dateImgLst = yLayer.getSortedImgList(true, true, TimeSource.EXIFCAMTIME);
    8383            // Create a temporary copy for each image
    8484            dateImgLst.forEach(ie -> ie.createTmp().unflagNewGpsData());
    8585            GpxImageCorrelation.matchGpxTrack(dateImgLst, yLayer.getFauxGpxData(),
  • src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java

    diff --git a/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java b/src/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayer.java
    index da00f78db7..ce29dd6444 100644
    a b import org.openstreetmap.josm.data.ImageData.ImageDataUpdateListener;  
    4747import org.openstreetmap.josm.data.gpx.GpxData;
    4848import org.openstreetmap.josm.data.gpx.GpxImageEntry;
    4949import org.openstreetmap.josm.data.gpx.GpxTrack;
     50import org.openstreetmap.josm.data.gpx.TimeSource;
    5051import org.openstreetmap.josm.data.imagery.street_level.IImageEntry;
    5152import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
    5253import org.openstreetmap.josm.data.preferences.NamedColorProperty;
    public class GeoImageLayer extends AbstractModifiableLayer implements  
    977978     * Default setting is to return untagged images, but may be overwritten.
    978979     * @param exif also returns images with exif-gps info
    979980     * @param tagged also returns tagged images
     981     * @param gpsTime use GPS Time if true, instead of Camera RTC Time
    980982     * @return matching images
     983     * @since xxx gpsTime was added
    981984     */
    982     List<ImageEntry> getSortedImgList(boolean exif, boolean tagged) {
     985    List<ImageEntry> getSortedImgList(boolean exif, boolean tagged, TimeSource timeSource) {
    983986        return data.getImages().stream()
    984                 .filter(GpxImageEntry::hasExifTime)
     987                .filter(timeSource == TimeSource.EXIFGPSTIME ? GpxImageEntry::hasExifGpsTime : GpxImageEntry::hasExifTime)
    985988                .filter(e -> e.getExifCoor() == null || exif)
    986989                .filter(e -> tagged || !e.isTagged() || e.getExifCoor() != null)
    987                 .sorted(Comparator.comparing(ImageEntry::getExifInstant))
     990                .sorted(timeSource == TimeSource.EXIFGPSTIME
     991                    ? Comparator.comparing(ImageEntry::getExifGpsInstant)
     992                    : Comparator.comparing(ImageEntry::getExifInstant))
    988993                .collect(toList());
    989994    }
    990995}
  • test/unit/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayerTest.java

    diff --git a/test/unit/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayerTest.java b/test/unit/org/openstreetmap/josm/gui/layer/geoimage/GeoImageLayerTest.java
    index 549de9c44b..454fbf46a4 100644
    a b  
    22package org.openstreetmap.josm.gui.layer.geoimage;
    33
    44import static org.junit.jupiter.api.Assertions.assertThrows;
     5import static org.junit.jupiter.api.Assertions.assertEquals;
    56
     7import java.util.Arrays;
    68import java.util.Collections;
    79
    810import org.junit.jupiter.api.AfterEach;
    911import org.junit.jupiter.api.Test;
     12import org.openstreetmap.josm.data.gpx.TimeSource;
    1013import org.openstreetmap.josm.data.osm.DataSet;
    1114import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    1215import org.openstreetmap.josm.testutils.annotations.BasicPreferences;
    1316import org.openstreetmap.josm.testutils.annotations.Main;
    1417import org.openstreetmap.josm.testutils.annotations.ThreadSync;
     18import org.openstreetmap.josm.tools.date.DateUtils;
    1519
    1620/**
    1721 * Unit tests of {@link GeoImageLayer} class.
    class GeoImageLayerTest {  
    4145        OsmDataLayer osmDataLayer = new OsmDataLayer(new DataSet(), "", null);
    4246        assertThrows(IllegalArgumentException.class, () -> geoImageLayer.mergeFrom(osmDataLayer));
    4347    }
     48
     49    /**
     50     * Test that {@link GeoImageLayer#getSortedImgList} filters images without ExifGpsTime
     51     */
     52    @Test
     53    void testMissingGPSTimeStamp() {
     54        ImageEntry i1, i2;
     55        i1 = new ImageEntry();
     56        i1.setExifGpsTime(DateUtils.parseInstant("2016:01:03 12:00:00"));
     57        i2 = new ImageEntry();
     58        i2.setExifTime(DateUtils.parseInstant("2016:01:03 12:00:01"));
     59
     60        GeoImageLayer geoGpsImageLayer = new GeoImageLayer(Arrays.asList(i1, i2), null);
     61        assertEquals(1, geoGpsImageLayer.getSortedImgList(false, false, TimeSource.EXIFGPSTIME).size());
     62    }
     63
    4464}