Changeset 11745 in josm for trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
- Timestamp:
- 2017-03-19T01:16:39+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/layer/geoimage/ImageEntry.java
r11620 r11745 9 9 10 10 import org.openstreetmap.josm.Main; 11 import org.openstreetmap.josm.data.SystemOfMeasurement;12 11 import org.openstreetmap.josm.data.coor.CachedLatLon; 13 12 import org.openstreetmap.josm.data.coor.LatLon; … … 432 431 433 432 Metadata metadata; 434 Directory dirExif;435 GpsDirectory dirGps;436 433 437 434 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); 438 445 return; 439 446 } … … 442 449 // of person having time that couldn't be parsed, but valid GPS info 443 450 try { 444 setExifTime(ExifReader.readTime( file));451 setExifTime(ExifReader.readTime(metadata)); 445 452 } catch (RuntimeException ex) { 446 453 Main.warn(ex); … … 448 455 } 449 456 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); 460 459 461 460 try { … … 474 473 } 475 474 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 476 485 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); 505 487 setExifCoor(latlon); 506 488 setPos(getExifCoor()); 507 508 489 } catch (MetadataException | IndexOutOfBoundsException ex) { // (other exceptions, e.g. #5271) 509 490 Main.error("Error reading EXIF from file: " + ex); … … 513 494 514 495 try { 515 Double direction = ExifReader.readDirection(dirGps);496 final Double direction = ExifReader.readDirection(dirGps); 516 497 if (direction != null) { 517 498 setExifImgDir(direction);
Note:
See TracChangeset
for help on using the changeset viewer.