Ignore:
Timestamp:
2017-03-19T01:16:39+01:00 (7 years ago)
Author:
Don-vip
Message:

fix #14536 - Improved ExifReader.readTime(), Refactored ImageEntry.extractExif() (patch by holgermappt)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java

    r11620 r11745  
    99
    1010import org.openstreetmap.josm.Main;
    11 import org.openstreetmap.josm.data.SystemOfMeasurement;
    1211import org.openstreetmap.josm.data.coor.CachedLatLon;
    1312import org.openstreetmap.josm.data.coor.LatLon;
     
    432431
    433432        Metadata metadata;
    434         Directory dirExif;
    435         GpsDirectory dirGps;
    436433
    437434        if (file == null) {
     435            return;
     436        }
     437
     438        try {
     439            metadata = JpegMetadataReader.readMetadata(file);
     440        } catch (CompoundException | IOException ex) {
     441            Main.error(ex);
     442            setExifTime(null);
     443            setExifCoor(null);
     444            setPos(null);
    438445            return;
    439446        }
     
    442449        // of person having time that couldn't be parsed, but valid GPS info
    443450        try {
    444             setExifTime(ExifReader.readTime(file));
     451            setExifTime(ExifReader.readTime(metadata));
    445452        } catch (RuntimeException ex) {
    446453            Main.warn(ex);
     
    448455        }
    449456
    450         try {
    451             metadata = JpegMetadataReader.readMetadata(file);
    452             dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
    453             dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
    454         } catch (CompoundException | IOException ex) {
    455             Main.warn(ex);
    456             setExifCoor(null);
    457             setPos(null);
    458             return;
    459         }
     457        final Directory dirExif = metadata.getFirstDirectoryOfType(ExifIFD0Directory.class);
     458        final GpsDirectory dirGps = metadata.getFirstDirectoryOfType(GpsDirectory.class);
    460459
    461460        try {
     
    474473        }
    475474
     475        final Double speed = ExifReader.readSpeed(dirGps);
     476        if (speed != null) {
     477            setSpeed(speed);
     478        }
     479
     480        final Double ele = ExifReader.readElevation(dirGps);
     481        if (ele != null) {
     482            setElevation(ele);
     483        }
     484
    476485        try {
    477             double speed = dirGps.getDouble(GpsDirectory.TAG_SPEED);
    478             String speedRef = dirGps.getString(GpsDirectory.TAG_SPEED_REF);
    479             if ("M".equalsIgnoreCase(speedRef)) {
    480                 // miles per hour
    481                 speed *= SystemOfMeasurement.IMPERIAL.bValue / 1000;
    482             } else if ("N".equalsIgnoreCase(speedRef)) {
    483                 // knots == nautical miles per hour
    484                 speed *= SystemOfMeasurement.NAUTICAL_MILE.bValue / 1000;
    485             }
    486             // default is K (km/h)
    487             setSpeed(speed);
    488         } catch (MetadataException ex) {
    489             Main.debug(ex);
    490         }
    491 
    492         try {
    493             double ele = dirGps.getDouble(GpsDirectory.TAG_ALTITUDE);
    494             int d = dirGps.getInt(GpsDirectory.TAG_ALTITUDE_REF);
    495             if (d == 1) {
    496                 ele *= -1;
    497             }
    498             setElevation(ele);
    499         } catch (MetadataException ex) {
    500             Main.debug(ex);
    501         }
    502 
    503         try {
    504             LatLon latlon = ExifReader.readLatLon(dirGps);
     486            final LatLon latlon = ExifReader.readLatLon(dirGps);
    505487            setExifCoor(latlon);
    506488            setPos(getExifCoor());
    507 
    508489        } catch (MetadataException | IndexOutOfBoundsException ex) { // (other exceptions, e.g. #5271)
    509490            Main.error("Error reading EXIF from file: " + ex);
     
    513494
    514495        try {
    515             Double direction = ExifReader.readDirection(dirGps);
     496            final Double direction = ExifReader.readDirection(dirGps);
    516497            if (direction != null) {
    517498                setExifImgDir(direction);
Note: See TracChangeset for help on using the changeset viewer.