Ignore:
Timestamp:
2019-07-07T01:56:46+02:00 (5 years ago)
Author:
Don-vip
Message:

see #17848 - update to metadata-extractor 2.12.0

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/com/drew/metadata/exif/GpsDescriptor.java

    r13061 r15217  
    11/*
    2  * Copyright 2002-2017 Drew Noakes
     2 * Copyright 2002-2019 Drew Noakes and contributors
    33 *
    44 *    Licensed under the Apache License, Version 2.0 (the "License");
     
    5959            case TAG_MEASURE_MODE:
    6060                return getGpsMeasureModeDescription();
     61            case TAG_DOP:
     62                return getGpsDopDescription();
    6163            case TAG_SPEED_REF:
    6264                return getGpsSpeedRefDescription();
     65            case TAG_SPEED:
     66                return getGpsSpeedDescription();
    6367            case TAG_TRACK_REF:
    6468            case TAG_IMG_DIRECTION_REF:
     
    6973            case TAG_DEST_BEARING:
    7074                return getGpsDirectionDescription(tagType);
     75            case TAG_DEST_LATITUDE:
     76                return getGpsDestLatitudeDescription();
     77            case TAG_DEST_LONGITUDE:
     78                return getGpsDestLongitudeDescription();
    7179            case TAG_DEST_DISTANCE_REF:
    7280                return getGpsDestinationReferenceDescription();
     81            case TAG_DEST_DISTANCE:
     82                return getGpsDestDistanceDescription();
    7383            case TAG_TIME_STAMP:
    7484                return getGpsTimeStampDescription();
     
    7989                // three rational numbers -- displayed in HH"MM"SS.ss
    8090                return getGpsLatitudeDescription();
     91            case TAG_PROCESSING_METHOD:
     92                return getGpsProcessingMethodDescription();
     93            case TAG_AREA_INFORMATION:
     94                return getGpsAreaInformationDescription();
    8195            case TAG_DIFFERENTIAL:
    8296                return getGpsDifferentialDescription();
     97            case TAG_H_POSITIONING_ERROR:
     98                return getGpsHPositioningErrorDescription();
    8399            default:
    84100                return super.getDescription(tagType);
     
    121137
    122138    @Nullable
     139    public String getGpsDestLatitudeDescription()
     140    {
     141        Rational[] latitudes = _directory.getRationalArray(TAG_DEST_LATITUDE);
     142        String latitudeRef = _directory.getString(TAG_DEST_LATITUDE_REF);
     143
     144        if (latitudes == null || latitudes.length != 3 || latitudeRef == null)
     145            return null;
     146
     147        Double lat = GeoLocation.degreesMinutesSecondsToDecimal(
     148            latitudes[0], latitudes[1], latitudes[2], latitudeRef.equalsIgnoreCase("S"));
     149
     150        return lat == null ? null : GeoLocation.decimalToDegreesMinutesSecondsString(lat);
     151    }
     152
     153    @Nullable
     154    public String getGpsDestLongitudeDescription()
     155    {
     156        Rational[] longitudes = _directory.getRationalArray(TAG_LONGITUDE);
     157        String longitudeRef = _directory.getString(TAG_LONGITUDE_REF);
     158
     159        if (longitudes == null || longitudes.length != 3 || longitudeRef == null)
     160            return null;
     161
     162        Double lon = GeoLocation.degreesMinutesSecondsToDecimal(
     163            longitudes[0], longitudes[1], longitudes[2], longitudeRef.equalsIgnoreCase("W"));
     164
     165        return lon == null ? null : GeoLocation.decimalToDegreesMinutesSecondsString(lon);
     166    }
     167
     168    @Nullable
    123169    public String getGpsDestinationReferenceDescription()
    124170    {
     
    139185
    140186    @Nullable
     187    public String getGpsDestDistanceDescription()
     188    {
     189        final Rational value = _directory.getRational(TAG_DEST_DISTANCE);
     190        if (value == null)
     191            return null;
     192        final String unit = getGpsDestinationReferenceDescription();
     193        return String.format("%s %s",
     194            new DecimalFormat("0.##").format(value.doubleValue()),
     195            unit == null ? "unit" : unit.toLowerCase());
     196    }
     197
     198    @Nullable
    141199    public String getGpsDirectionDescription(int tagType)
    142200    {
     
    166224
    167225    @Nullable
     226    public String getGpsDopDescription()
     227    {
     228        final Rational value = _directory.getRational(TAG_DOP);
     229        return value == null ? null : new DecimalFormat("0.##").format(value.doubleValue());
     230    }
     231
     232    @Nullable
    168233    public String getGpsSpeedRefDescription()
    169234    {
     
    173238        String gpsSpeedRef = value.trim();
    174239        if ("K".equalsIgnoreCase(gpsSpeedRef)) {
    175             return "kph";
     240            return "km/h";
    176241        } else if ("M".equalsIgnoreCase(gpsSpeedRef)) {
    177242            return "mph";
     
    181246            return "Unknown (" + gpsSpeedRef + ")";
    182247        }
     248    }
     249
     250    @Nullable
     251    public String getGpsSpeedDescription()
     252    {
     253        final Rational value = _directory.getRational(TAG_SPEED);
     254        if (value == null)
     255            return null;
     256        final String unit = getGpsSpeedRefDescription();
     257        return String.format("%s %s",
     258            new DecimalFormat("0.##").format(value.doubleValue()),
     259            unit == null ? "unit" : unit.toLowerCase());
    183260    }
    184261
     
    225302    {
    226303        final Rational value = _directory.getRational(TAG_ALTITUDE);
    227         return value == null ? null : value.intValue() + " metres";
     304        return value == null ? null : new DecimalFormat("0.##").format(value.doubleValue()) + " metres";
     305    }
     306
     307    @Nullable
     308    public String getGpsProcessingMethodDescription()
     309    {
     310        return getEncodedTextDescription(TAG_PROCESSING_METHOD);
     311    }
     312
     313    @Nullable
     314    public String getGpsAreaInformationDescription()
     315    {
     316        return getEncodedTextDescription(TAG_AREA_INFORMATION);
    228317    }
    229318
     
    232321    {
    233322        return getIndexedDescription(TAG_DIFFERENTIAL, "No Correction", "Differential Corrected");
     323    }
     324
     325    @Nullable
     326    public String getGpsHPositioningErrorDescription()
     327    {
     328        final Rational value = _directory.getRational(TAG_H_POSITIONING_ERROR);
     329        return value == null ? null : new DecimalFormat("0.##").format(value.doubleValue()) + " metres";
    234330    }
    235331
Note: See TracChangeset for help on using the changeset viewer.