+ /**
+ * Generate a url for Open Street Map
+ * @param inTrackInfo track information
+ * @return URL
+ */
+ private static String generateOpenStreetMapUrl(TrackInfo inTrackInfo)
+ {
+ // Check if any data to display
+ if (inTrackInfo == null || inTrackInfo.getTrack() == null || inTrackInfo.getTrack().getNumPoints() < 1)
+ {
+ return null;
+ }
+ DoubleRange latRange = inTrackInfo.getTrack().getLatRange();
+ DoubleRange lonRange = inTrackInfo.getTrack().getLonRange();
+ // Build basic url using min and max lat and long
+ String url = "http://openstreetmap.org/?minlat=" + FIVE_DP.format(latRange.getMinimum())
+ + "&maxlat=" + FIVE_DP.format(latRange.getMaximum())
+ + "&minlon=" + FIVE_DP.format(lonRange.getMinimum()) + "&maxlon=" + FIVE_DP.format(lonRange.getMaximum());
+ DataPoint currPoint = inTrackInfo.getCurrentPoint();
+ // Add selected point, if any (no way to add point name?)
+ if (currPoint != null) {
+ url = url + "&mlat=" + FIVE_DP.format(currPoint.getLatitude().getDouble())
+ + "&mlon=" + FIVE_DP.format(currPoint.getLongitude().getDouble());
+ }
+ return url;
+ }
+
+ /**
+ * Generate a URL which only needs the current point
+ * This is just a helper method to simplify the calls to the service-specific methods
+ * @param inSource service to call
+ * @param inTrackInfo track info
+ * @return URL if available, or null
+ */
+ private static String generateUrlForPoint(WebService inService, TrackInfo inTrackInfo)
+ {
+ if (inTrackInfo == null || inTrackInfo.getTrack() == null || inTrackInfo.getTrack().getNumPoints() < 1)
+ {
+ return null;
+ }
+ // Need a current point
+ DataPoint currPoint = inTrackInfo.getCurrentPoint();
+ if (currPoint == null)
+ {
+ return null;
+ }
+ switch (inService)
+ {
+ case MAP_SOURCE_PEAKFINDER:
+ return generatePeakfinderUrl(currPoint);
+ case MAP_SOURCE_GEOHACK:
+ return generateGeohackUrl(currPoint);
+ default:
+ return null;
+ }
+ }
+
+
+ /**
+ * Generate a url for PeakFinder
+ * @param inPoint current point, not null
+ * @return URL
+ */
+ private static String generatePeakfinderUrl(DataPoint inPoint)
+ {
+ return "http://peakfinder.org/?lat=" + FIVE_DP.format(inPoint.getLatitude().getDouble())
+ + "&lng=" + FIVE_DP.format(inPoint.getLongitude().getDouble());
+ }
+
+ /**
+ * Generate a url for Geohack
+ * @param inPoint current point, not null
+ * @return URL
+ */
+ private static String generateGeohackUrl(DataPoint inPoint)
+ {
+ return "https://tools.wmflabs.org/geohack/geohack.php?params=" + FIVE_DP.format(inPoint.getLatitude().getDouble())
+ + "_N_" + FIVE_DP.format(inPoint.getLongitude().getDouble()) + "_E";
+ // TODO: Could use absolute values and S, W but this seems to work
+ }
+
+
+ /**