From 38b7bcd15f4258b5ce40a3f16477420d9ba56646 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Sat, 5 Oct 2019 22:52:00 +0900 Subject: [PATCH] get location from videos --- .../aves/channelhandlers/MetadataHandler.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MetadataHandler.java b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MetadataHandler.java index f68c57b37..e1a3144ce 100644 --- a/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MetadataHandler.java +++ b/android/app/src/main/java/deckers/thibault/aves/channelhandlers/MetadataHandler.java @@ -28,6 +28,8 @@ import java.io.InputStream; import java.util.HashMap; import java.util.Map; import java.util.TimeZone; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import deckers.thibault.aves.utils.Constants; import deckers.thibault.aves.utils.MetadataHelper; @@ -39,6 +41,7 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler { private static final String XMP_DC_SCHEMA_NS = "http://purl.org/dc/elements/1.1/"; private static final String XMP_SUBJECT_PROP_NAME = "dc:subject"; + private static final Pattern videoLocationPattern = Pattern.compile("([+-][.0-9]+)([+-][.0-9]+)/?"); private Context context; @@ -197,6 +200,7 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler { retriever.setDataSource(path); String dateString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DATE); String rotationString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_ROTATION); + String locationString = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_LOCATION); retriever.release(); if (dateString != null) { @@ -209,6 +213,25 @@ public class MetadataHandler implements MethodChannel.MethodCallHandler { if (rotationString != null) { metadataMap.put("videoRotation", Integer.parseInt(rotationString)); } + if (locationString != null) { + Matcher locationMatcher = videoLocationPattern.matcher(locationString); + if (locationMatcher.find() && locationMatcher.groupCount() == 2) { + String latitudeString = locationMatcher.group(1); + String longitudeString = locationMatcher.group(2); + if (latitudeString != null && longitudeString != null) { + try { + double latitude = Double.parseDouble(latitudeString); + double longitude = Double.parseDouble(longitudeString); + if (latitude != 0 && longitude != 0) { + metadataMap.put("latitude", latitude); + metadataMap.put("longitude", longitude); + } + } catch (NumberFormatException ex) { + // ignore + } + } + } + } } catch (Exception e) { result.error("getCatalogMetadata-exception", "failed to get video metadata for path=" + path, e); }