Java tutorial
/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package it.inserpio.mapillary.gopro.importer; import java.io.File; import java.io.IOException; import java.text.ParseException; import java.util.List; import org.apache.commons.imaging.ImageReadException; import org.apache.commons.imaging.ImageWriteException; import org.springframework.oxm.XmlMappingException; import org.springframework.util.Assert; import it.inserpio.mapillary.gopro.importer.exif.EXIFPropertyWriter; import it.inserpio.mapillary.gopro.importer.matcher.Image2GeoMatcher; import it.inserpio.mapillary.gopro.importer.matcher.exception.CoordinatesNotFoundException; import it.inserpio.mapillary.gopro.importer.parser.GPXParser; import it.inserpio.mapillary.gopro.importer.parser.bean.Coordinates; import it.inserpio.mapillary.gopro.importer.parser.bean.GPXDateTimePoint; import it.inserpio.mapillary.gopro.importer.parser.bikematepro.parser.impl.BikeMateProGPXParser; import it.inserpio.mapillary.gopro.importer.parser.exception.GPXParsingException; import it.inserpio.mapillary.gopro.importer.upload.UploadToMapillary; /** * @author Lorenzo Speranzoni * @since May 4, 2014 */ public class GoProTimeLapseShotsMapillaryImporter { public static final void main(String[] args) { try { Assert.isTrue(args.length == 2, "\n\nYou need to provide 2 arguments:\n\n[1] GPX absolute file name;\n[2] Absolute directory name containing GoPro Time-Lapse Shots.\n\n"); uploadToMapillary(args[0], args[1]); System.exit(0); } catch (Exception e) { e.printStackTrace(); System.exit(-1); } } /** * @param bikeMateProGPXFileName * @param goProImagesDirectoryName * @throws ParseException * @throws IOException * @throws GPXParsingException * @throws XmlMappingException * @throws CoordinatesNotFoundException * @throws ImageReadException * @throws ImageWriteException */ public static void uploadToMapillary(String bikeMateProGPXFileName, String goProImagesDirectoryName) throws XmlMappingException, GPXParsingException, IOException, ParseException, ImageReadException, CoordinatesNotFoundException, ImageWriteException { // Get Date-Time Points from GPX file // ------------------------------------------------------------------------------------------ GPXParser gpxParser = new BikeMateProGPXParser(); List<GPXDateTimePoint> gpxDateTimePoints = gpxParser.parse(new File(bikeMateProGPXFileName)); File goProImagesDirectory = new File(goProImagesDirectoryName); Assert.isTrue(goProImagesDirectory.isDirectory()); File destinationDirectory = new File( goProImagesDirectory.getParent() + File.separator + "uploadable-images"); if (!destinationDirectory.exists()) { destinationDirectory.mkdir(); } File[] imageFiles = goProImagesDirectory.listFiles(); // It sets gps coordinates for every GoPro time-lapse shot and upload to Mapillary // ------------------------------------------------------------------------------------------ for (int imageIndex = 0; imageIndex < imageFiles.length; imageIndex++) { File imageFile = imageFiles[imageIndex]; System.out.println("Managing image " + imageFile); Coordinates coordinates = Image2GeoMatcher.findCoordinatesByImageOriginalDateTime(imageFile, gpxDateTimePoints, 0); File modifiedImageFile = new File(destinationDirectory, imageFile.getName()); EXIFPropertyWriter.setExifGPSTag(imageFile, modifiedImageFile, coordinates); UploadToMapillary.upload(modifiedImageFile, "", "", ""); // TODO upload not yet implemented } } }