import tim.prune.function.settings.SetPathsFunction;
import tim.prune.function.sew.SewTrackSegmentsFunction;
import tim.prune.function.sew.SplitSegmentsFunction;
-import tim.prune.function.srtm.DownloadSrtmFunction;
import tim.prune.function.srtm.LookupSrtmFunction;
import tim.prune.function.weather.GetWeatherForecastFunction;
import tim.prune.load.AudioLoader;
public static GenericFunction FUNCTION_DELETE_BY_DATE = null;
public static SingleNumericParameterFunction FUNCTION_INTERPOLATE = null;
public static GenericFunction FUNCTION_LOOKUP_SRTM = null;
- public static GenericFunction FUNCTION_DOWNLOAD_SRTM = null;
public static GenericFunction FUNCTION_NEARBY_WIKIPEDIA = null;
public static GenericFunction FUNCTION_SEARCH_WIKIPEDIA = null;
public static GenericFunction FUNCTION_SEARCH_OSMPOIS = null;
FUNCTION_DELETE_BY_DATE = new DeleteByDateFunction(inApp);
FUNCTION_INTERPOLATE = new InterpolateFunction(inApp);
FUNCTION_LOOKUP_SRTM = new LookupSrtmFunction(inApp);
- FUNCTION_DOWNLOAD_SRTM = new DownloadSrtmFunction(inApp);
FUNCTION_NEARBY_WIKIPEDIA = new GetWikipediaFunction(inApp);
FUNCTION_SEARCH_WIKIPEDIA = new SearchWikipediaNames(inApp);
FUNCTION_SEARCH_OSMPOIS = new SearchOsmPoisFunction(inApp);
public class GpsPrune
{
/** Version number of application, used in about screen and for version check */
- public static final String VERSION_NUMBER = "20";
+ public static final String VERSION_NUMBER = "20.1";
/** Build number, just used for about screen */
- public static final String BUILD_NUMBER = "378";
+ public static final String BUILD_NUMBER = "382";
/** Static reference to App object */
private static App APP = null;
public static final String KEY_WAYPOINT_ICON_SIZE = "prune.waypointiconsize";
/** Id of selected timezone */
public static final String KEY_TIMEZONE_ID = "prune.timezoneid";
+ /** Last used latlon range */
+ public static final String KEY_LATLON_RANGE = "prune.latlonrange";
/** Initialise the default properties */
props.put(KEY_GPS_DEVICE, "usb:");
props.put(KEY_GPS_FORMAT, "garmin");
props.put(KEY_POVRAY_FONT, "crystal.ttf"); // alternative: DejaVuSans-Bold.ttf
- props.put(KEY_SHOW_MAP, "0"); // hide by default
+ props.put(KEY_SHOW_MAP, "1"); // show by default
props.put(KEY_EXIFTOOL_PATH, "exiftool");
props.put(KEY_GNUPLOT_PATH, "gnuplot");
props.put(KEY_GPSBABEL_PATH, "gpsbabel");
props.put(KEY_IMPORT_FILE_FORMAT, "-1"); // no file format selected
props.put(KEY_KMZ_IMAGE_SIZE, "240");
props.put(KEY_ANTIALIAS, "1"); // antialias on by default
- props.put(KEY_AUTOSAVE_SETTINGS, "0"); // autosave false by default
+ props.put(KEY_AUTOSAVE_SETTINGS, "1"); // autosave by default
props.put(KEY_UNITSET_KEY, "unitset.kilometres"); // metric by default
props.put(KEY_COORD_DISPLAY_FORMAT, "0"); // original
props.put(KEY_HEIGHT_EXAGGERATION, "100"); // 100%, no exaggeration
public static final Field WAYPT_NAME = new Field("fieldname.waypointname", true);
public static final Field WAYPT_TYPE = new Field("fieldname.waypointtype", true);
public static final Field DESCRIPTION = new Field("fieldname.description", true);
+ public static final Field COMMENT = new Field("fieldname.comment", true);
public static final Field NEW_SEGMENT = new Field("fieldname.newsegment", true);
public static final Field SPEED = new Field("fieldname.speed", true);
*/
public String getName()
{
- if (_labelKey != null)
+ if (_labelKey != null) {
return I18nManager.getText(_labelKey);
+ }
return _customLabel;
}
new JLabel(" Gy\u00F6rgy, HooAU, Sergey, P\u00E9ter, serhijdubyk, Peter, Cristian,"),
1, 6);
addToGridBagPanel(creditsPanel, gridBag, constraints,
- new JLabel(" Roman, Erkki"),
+ new JLabel(" Roman, Erkki, Carlos, Tche333"),
1, 7);
addToGridBagPanel(creditsPanel, gridBag, constraints,
new JLabel(I18nManager.getText("dialog.about.credits.translations") + " : "),
import java.awt.event.KeyEvent;
import java.io.File;
+import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
+import javax.swing.border.EtchedBorder;
import tim.prune.App;
import tim.prune.DataSubscriber;
private Component makeContents()
{
JPanel dialogPanel = new JPanel();
+ dialogPanel.setBorder(BorderFactory.createCompoundBorder(
+ BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), BorderFactory.createEmptyBorder(4, 4, 4, 4))
+ );
dialogPanel.setLayout(new BorderLayout(0, 5));
// top panel
JPanel topPanel = new JPanel();
addTextPair(result, "fieldname.description", point.getFieldValue(Field.DESCRIPTION));
+ addTextPair(result, "fieldname.comment", point.getFieldValue(Field.COMMENT));
+
addTextPair(result, "fieldname.waypointtype", point.getFieldValue(Field.WAYPT_TYPE));
// Speed can come from either timestamps and distances, or speed values in data
import tim.prune.GenericFunction;
import tim.prune.I18nManager;
import tim.prune.config.Config;
+import tim.prune.data.DoubleRange;
+import tim.prune.data.Track;
/**
* Class to provide the function to save the config settings
+ currBounds.width + "x" + currBounds.height;
Config.setConfigString(Config.KEY_WINDOW_BOUNDS, windowBounds);
+ final String latlonString = createLatLonStringForConfig();
+ if (latlonString != null)
+ {
+ Config.setConfigString(Config.KEY_LATLON_RANGE, latlonString);
+ }
+
FileOutputStream outStream = null;
try
{
// Remember where it was saved to
Config.setConfigFile(inSaveFile);
}
+
+ /**
+ * @return semicolon-separated string containing the four values, or null
+ */
+ private String createLatLonStringForConfig()
+ {
+ Track track = _app.getTrackInfo().getTrack();
+ if (track.getNumPoints() >= 2)
+ {
+ final DoubleRange latRange = track.getLatRange();
+ final DoubleRange lonRange = track.getLonRange();
+ if (latRange.getRange() > 0.0 && lonRange.getRange() > 0.0)
+ {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(Double.toString(latRange.getMinimum()));
+ buffer.append(';');
+ buffer.append(Double.toString(latRange.getMaximum()));
+ buffer.append(';');
+ buffer.append(Double.toString(lonRange.getMinimum()));
+ buffer.append(';');
+ buffer.append(Double.toString(lonRange.getMaximum()));
+ return buffer.toString();
+ }
+ }
+ return null;
+ }
}
private JButton _okButton = null;
private static final String STYLEKEY_NIMBUS = "javax.swing.plaf.nimbus.NimbusLookAndFeel";
+ private static final String STYLEKEY_GTK = "com.sun.java.swing.plaf.gtk.GTKLookAndFeel";
/**
windowStylePanel.add(new JLabel(I18nManager.getText("dialog.displaysettings.windowstyle")));
windowStylePanel.add(Box.createHorizontalStrut(10));
ButtonGroup styleGroup = new ButtonGroup();
- final String[] styleKeys = {"default", "nimbus"};
- _windowStyleRadios = new JRadioButton[2];
- for (int i=0; i<2; i++)
+ final String[] styleKeys = {"default", "nimbus", "gtk"};
+ _windowStyleRadios = new JRadioButton[3];
+ for (int i=0; i<3; i++)
{
_windowStyleRadios[i] = new JRadioButton(
I18nManager.getText("dialog.displaysettings.windowstyle." + styleKeys[i]));
styleGroup.add(_windowStyleRadios[i]);
- windowStylePanel.add(_windowStyleRadios[i]);
+ if (i != 2 || platformHasPlaf(STYLEKEY_GTK))
+ {
+ windowStylePanel.add(_windowStyleRadios[i]);
+ }
}
midPanel.add(windowStylePanel);
mainPanel.add(midPanel, BorderLayout.CENTER);
return mainPanel;
}
+ /**
+ * @return true if the specified style name is available on this platform
+ */
+ private static boolean platformHasPlaf(String styleName)
+ {
+ for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels())
+ {
+ if (info.getClassName().equals(styleName)) {
+ return true;
+ }
+ }
+ return false;
+ }
/**
* Show window
{
selectedRadio = 1;
}
+ else if (inValue != null && inValue.equals(STYLEKEY_GTK) && _windowStyleRadios[2] != null)
+ {
+ selectedRadio = 2;
+ }
_windowStyleRadios[selectedRadio].setSelected(true);
}
return 1; // default is medium
}
+ /**
+ * @return the style string according to the selected radio button
+ */
+ private String getSelectedStyleString()
+ {
+ if (_windowStyleRadios[1].isSelected()) {
+ return STYLEKEY_NIMBUS;
+ }
+ if (_windowStyleRadios[2] != null && _windowStyleRadios[2].isSelected()) {
+ return STYLEKEY_GTK;
+ }
+ return null;
+ }
+
/**
* Save settings and close
*/
Config.setConfigBoolean(Config.KEY_ANTIALIAS, _antialiasCheckbox.isSelected());
Config.setConfigInt(Config.KEY_WAYPOINT_ICONS, _wpIconCombobox.getSelectedIndex());
Config.setConfigInt(Config.KEY_WAYPOINT_ICON_SIZE, getSelectedIconSize());
- final String styleString = (_windowStyleRadios[1].isSelected() ? STYLEKEY_NIMBUS : null);
- Config.setConfigString(Config.KEY_WINDOW_STYLE, styleString);
+ Config.setConfigString(Config.KEY_WINDOW_STYLE, getSelectedStyleString());
// refresh display
UpdateMessageBroker.informSubscribers(DataSubscriber.MAPSERVER_CHANGED);
_dialog.dispose();
+++ /dev/null
-package tim.prune.function.srtm;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.net.URLConnection;
-import java.util.ArrayList;
-
-import javax.swing.JOptionPane;
-
-import tim.prune.App;
-import tim.prune.GenericFunction;
-import tim.prune.GpsPrune;
-import tim.prune.I18nManager;
-import tim.prune.config.Config;
-import tim.prune.data.DoubleRange;
-import tim.prune.gui.ProgressDialog;
-
-/**
- * Class to provide a download function for the Space Shuttle's SRTM data files.
- * HGT files are downloaded into memory via HTTP and stored in the map cache.
- */
-public class DownloadSrtmFunction extends GenericFunction implements Runnable
-{
- /** Progress dialog */
- private ProgressDialog _progress = null;
- /** Flag to check whether this function is currently running or not */
- private boolean _running = false;
-
-
- /**
- * Constructor
- * @param inApp App object
- */
- public DownloadSrtmFunction(App inApp) {
- super(inApp);
- }
-
- /** @return name key */
- public String getNameKey() {
- return "function.downloadsrtm";
- }
-
- /**
- * Begin the download
- */
- public void begin()
- {
- _running = true;
- if (_progress == null) {
- _progress = new ProgressDialog(_parentFrame, getNameKey());
- }
- _progress.show();
- // start new thread for time-consuming part
- new Thread(this).start();
- }
-
- /**
- * Run method using separate thread
- */
- public void run()
- {
- // Compile list of tiles to get
- ArrayList<SrtmTile> tileList = new ArrayList<SrtmTile>();
-
- // First, loop to see which tiles are needed
- DoubleRange lonRange = _app.getTrackInfo().getTrack().getLonRange();
- DoubleRange latRange = _app.getTrackInfo().getTrack().getLatRange();
- final int minLon = (int) Math.floor(lonRange.getMinimum());
- final int maxLon = (int) Math.floor(lonRange.getMaximum());
- final int minLat = (int) Math.floor(latRange.getMinimum());
- final int maxLat = (int) Math.floor(latRange.getMaximum());
-
- for (int lon=minLon; lon<= maxLon; lon++)
- {
- for (int lat=minLat; lat <= maxLat; lat++)
- {
- SrtmTile tile = new SrtmTile(lat, lon);
- boolean alreadyGot = false;
- for (int t = 0; t < tileList.size(); t++)
- {
- if (tileList.get(t).equals(tile)) {
- alreadyGot = true;
- }
- }
- if (!alreadyGot) {tileList.add(tile);}
- }
- }
-
- downloadTiles(tileList);
- // Finished
- _running = false;
- }
-
-
- /**
- * Download the tiles of SRTM data
- * @param inTileList list of tiles to get
- */
- private void downloadTiles(ArrayList<SrtmTile> inTileList)
- {
- // Update progress bar
- if (_progress != null)
- {
- _progress.setMaximum(inTileList.size());
- _progress.setValue(0);
- }
-
- String errorMessage = null;
-
- // Check the cache is ok
- final String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE);
- if (diskCachePath != null)
- {
- File srtmDir = new File(diskCachePath, "srtm");
- if (!srtmDir.exists() && !srtmDir.mkdir()) {
- // can't create the srtm directory
- errorMessage = I18nManager.getText("error.downloadsrtm.nocache");
- }
- }
- else {
- // no cache set up
- errorMessage = I18nManager.getText("error.downloadsrtm.nocache");
- }
-
- // Get urls for each tile
- URL[] urls = TileFinder.getUrls(inTileList);
- int numDownloaded = 0;
- for (int t=0; t<inTileList.size() && !_progress.isCancelled(); t++)
- {
- if (urls[t] != null)
- {
- // Define streams
- FileOutputStream outStream = null;
- InputStream inStream = null;
- try
- {
- // Set progress
- _progress.setValue(t);
- // See if we've already got this tile or not
- File outputFile = getFileToWrite(urls[t]);
- if (outputFile != null)
- {
- // System.out.println("Download: Need to download: " + urls[t]);
- outStream = new FileOutputStream(outputFile);
- URLConnection conn = urls[t].openConnection();
- conn.setRequestProperty("User-Agent", "GpsPrune v" + GpsPrune.VERSION_NUMBER);
- inStream = conn.getInputStream();
- // Copy all the bytes to the file
- int c;
- while ((c = inStream.read()) != -1)
- {
- outStream.write(c);
- }
-
- numDownloaded++;
- }
- // else System.out.println("Don't need to download: " + urls[t].getFile());
- }
- catch (IOException ioe) {errorMessage = ioe.getClass().getName() + " - " + ioe.getMessage();
- }
- // Make sure streams are closed
- try {inStream.close();} catch (Exception e) {}
- try {outStream.close();} catch (Exception e) {}
- }
- }
-
- _progress.dispose();
- if (_progress.isCancelled()) {
- return;
- }
-
- if (errorMessage != null) {
- _app.showErrorMessageNoLookup(getNameKey(), errorMessage);
- }
- else if (numDownloaded == 1)
- {
- JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm.1", numDownloaded),
- I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE);
- }
- else if (numDownloaded > 1)
- {
- JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm", numDownloaded),
- I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE);
- }
- else if (inTileList.size() > 0) {
- _app.showErrorMessage(getNameKey(), "confirm.downloadsrtm.none");
- }
- }
-
- /**
- * See whether the SRTM file is already available locally
- * @param inUrl URL for online resource
- * @return file object to write to, or null if already there
- */
- private static File getFileToWrite(URL inUrl)
- {
- String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE);
- if (diskCachePath != null)
- {
- File srtmDir = new File(diskCachePath, "srtm");
- if (srtmDir.exists() && srtmDir.isDirectory() && srtmDir.canRead())
- {
- File srtmFile = new File(srtmDir, new File(inUrl.getFile()).getName());
- if (!srtmFile.exists() || !srtmFile.canRead() || srtmFile.length() <= 400) {
- return srtmFile;
- }
- }
- }
- return null;
- }
-
- /**
- * @return true if a thread is currently running
- */
- public boolean isRunning()
- {
- return _running;
- }
-}
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
-import java.util.ArrayList;
+import java.util.HashSet;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
private boolean _normalTrack = true;
/** Flag set when any tiles had to be downloaded (rather than just loaded locally) */
private boolean _hadToDownload = false;
+ /** Count the number of tiles downloaded and cached */
+ private int _numCached = 0;
/** Flag to check whether this function is currently running or not */
private boolean _running = false;
*/
public void run()
{
- // Compile list of tiles to get
- ArrayList<SrtmTile> tileList = new ArrayList<SrtmTile>();
boolean hasZeroAltitudePoints = false;
boolean hasNonZeroAltitudePoints = false;
// First, loop to see what kind of points we have
}
// Now loop again to extract the required tiles
+ HashSet<SrtmTile> tileSet = new HashSet<SrtmTile>();
for (int i = 0; i < _track.getNumPoints(); i++)
{
// Consider points which don't have altitudes or have zero values
if (!_track.getPoint(i).hasAltitude()
|| (overwriteZeros && _track.getPoint(i).getAltitude().getValue() == 0))
{
- SrtmTile tile = new SrtmTile(_track.getPoint(i));
- boolean alreadyGot = false;
- for (int t = 0; t < tileList.size(); t++)
- {
- if (tileList.get(t).equals(tile)) {
- alreadyGot = true;
- }
- }
- if (!alreadyGot) {tileList.add(tile);}
+ tileSet.add(new SrtmTile(_track.getPoint(i)));
}
}
- lookupValues(tileList, overwriteZeros);
+ lookupValues(tileSet, overwriteZeros);
// Finished
_running = false;
// Show tip if lots of online lookups were necessary
if (_hadToDownload) {
_app.showTip(TipManager.Tip_DownloadSrtm);
}
+ else if (_numCached > 0) {
+ showConfirmMessage(_numCached);
+ }
}
/**
* Lookup the values from SRTM data
- * @param inTileList list of tiles to get
+ * @param inTileSet set of tiles to get
* @param inOverwriteZeros true to overwrite zero altitude values
*/
- private void lookupValues(ArrayList<SrtmTile> inTileList, boolean inOverwriteZeros)
+ private void lookupValues(HashSet<SrtmTile> inTileSet, boolean inOverwriteZeros)
{
UndoLookupSrtm undo = new UndoLookupSrtm(_app.getTrackInfo());
int numAltitudesFound = 0;
+ TileFinder tileFinder = new TileFinder();
+ String errorMessage = null;
+ final int numTiles = inTileSet.size();
+
// Update progress bar
if (_progress != null)
{
- _progress.setMaximum(inTileList.size());
+ _progress.setMaximum(numTiles);
_progress.setValue(0);
}
- String errorMessage = null;
- // Get urls for each tile
- URL[] urls = TileFinder.getUrls(inTileList);
- for (int t=0; t<inTileList.size() && !_progress.isCancelled() && urls != null; t++)
+ int currentTileIndex = 0;
+ _numCached = 0;
+ for (SrtmTile tile : inTileSet)
{
- if (urls[t] != null)
+ URL url = tileFinder.getUrl(tile);
+ if (url != null)
{
- SrtmTile tile = inTileList.get(t);
try
{
// Set progress
- _progress.setValue(t);
+ _progress.setValue(currentTileIndex++);
final int ARRLENGTH = 1201 * 1201;
int[] heights = new int[ARRLENGTH];
// Open zipinputstream on url and check size
- ZipInputStream inStream = getStreamToHgtFile(urls[t]);
+ ZipInputStream inStream = getStreamToSrtmData(url);
boolean entryOk = false;
if (inStream != null)
{
else if (errorMessage != null) {
_app.showErrorMessageNoLookup(getNameKey(), errorMessage);
}
- else if (inTileList.size() > 0) {
+ else if (numTiles > 0) {
_app.showErrorMessage(getNameKey(), "error.lookupsrtm.nonefound");
}
else {
* @param inUrl URL for online resource
* @return ZipInputStream either on the local file or on the downloaded zip file
*/
- private ZipInputStream getStreamToHgtFile(URL inUrl)
+ private ZipInputStream getStreamToSrtmData(URL inUrl)
+ throws IOException
+ {
+ ZipInputStream localData = null;
+ try {
+ localData = getStreamToLocalHgtFile(inUrl);
+ }
+ catch (IOException ioe) {
+ localData = null;
+ }
+ if (localData != null)
+ {
+ return localData;
+ }
+ // try to download to cache
+ TileDownloader cacher = new TileDownloader();
+ TileDownloader.Result result = cacher.downloadTile(inUrl);
+ System.out.println("Result: " + result);
+ if (result == TileDownloader.Result.DOWNLOADED)
+ {
+ _numCached++;
+ return getStreamToLocalHgtFile(inUrl);
+ }
+ // If we don't have a cache, we may be able to download it temporarily
+ if (result != TileDownloader.Result.DOWNLOAD_FAILED)
+ {
+ _hadToDownload = true;
+ return new ZipInputStream(inUrl.openStream());
+ }
+ // everything failed
+ return null;
+ }
+
+ /**
+ * Get the SRTM file from the local cache, if available
+ * @param inUrl URL for online resource
+ * @return ZipInputStream on the local file or null if not there
+ */
+ private ZipInputStream getStreamToLocalHgtFile(URL inUrl)
throws IOException
{
String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE);
}
}
}
- // System.out.println("Lookup: Trying online: " + inUrl.toString());
- _hadToDownload = true;
- // MAYBE: Only download if we're in online mode?
- return new ZipInputStream(inUrl.openStream());
+ return null;
}
/**
{
return _running;
}
+
+ private void showConfirmMessage(int numDownloaded)
+ {
+ if (numDownloaded == 1)
+ {
+ JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm.1", numDownloaded),
+ I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE);
+ }
+ else if (numDownloaded > 1)
+ {
+ JOptionPane.showMessageDialog(_parentFrame, I18nManager.getTextWithNumber("confirm.downloadsrtm", numDownloaded),
+ I18nManager.getText(getNameKey()), JOptionPane.INFORMATION_MESSAGE);
+ }
+ }
}
_longitude = inLongitude;
}
+ @Override
+ public int hashCode()
+ {
+ return _latitude * 1000 + _longitude;
+ }
+
/**
* Check for equality
* @param inOther other tile object
* @return true if both represent same tile
*/
- public boolean equals(SrtmTile inOther)
+ @Override
+ public boolean equals(Object inOther)
{
- return (_latitude == inOther._latitude) && (_longitude == inOther._longitude);
+ if (inOther == null || inOther.getClass() != getClass()) {
+ return false;
+ }
+ SrtmTile otherTile = (SrtmTile) inOther;
+ return (_latitude == otherTile._latitude) && (_longitude == otherTile._longitude);
}
/** @return latitude as int */
--- /dev/null
+package tim.prune.function.srtm;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.net.URLConnection;
+
+import tim.prune.GpsPrune;
+import tim.prune.config.Config;
+
+/**
+ * Class to provide a download function for the Space Shuttle's SRTM data files.
+ * HGT files are downloaded into memory via HTTP and stored in the map cache.
+ */
+public class TileDownloader
+{
+ /** Possible results of the download */
+ public enum Result {DOWNLOADED, NOTHING_TO_DO, DOWNLOAD_FAILED, CACHE_FAILED};
+
+ /**
+ * Download a single tile of SRTM data
+ * @param inUrl remote URL to get
+ */
+ public Result downloadTile(URL inUrl)
+ {
+ if (inUrl == null) {
+ return Result.NOTHING_TO_DO;
+ }
+
+ // Check the cache is ok
+ final String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE);
+ if (diskCachePath != null)
+ {
+ File srtmDir = new File(diskCachePath, "srtm");
+ if (srtmDir.exists() && !srtmDir.isDirectory()) {
+ // exists but isn't a directory - can't be used
+ return Result.CACHE_FAILED;
+ }
+ if (!srtmDir.exists() && !srtmDir.mkdir()) {
+ // can't create the srtm directory
+ return Result.CACHE_FAILED;
+ }
+ }
+ else {
+ // no cache set up
+ return Result.CACHE_FAILED;
+ }
+
+ // Define streams
+ FileOutputStream outStream = null;
+ InputStream inStream = null;
+ Result result = Result.NOTHING_TO_DO;
+ try
+ {
+ // See if we've already got this tile or not
+ File outputFile = getFileToWrite(inUrl);
+ if (outputFile != null)
+ {
+ System.out.println("Download: Need to download: " + inUrl);
+ outStream = new FileOutputStream(outputFile);
+ URLConnection conn = inUrl.openConnection();
+ conn.setRequestProperty("User-Agent", "GpsPrune v" + GpsPrune.VERSION_NUMBER);
+ inStream = conn.getInputStream();
+ // Copy all the bytes to the file
+ int c;
+ while ((c = inStream.read()) != -1)
+ {
+ outStream.write(c);
+ }
+ result = Result.DOWNLOADED;
+ }
+ }
+ catch (IOException ioe) {
+ System.err.println(ioe.getClass().getName() + " - " + ioe.getMessage());
+ result = Result.DOWNLOAD_FAILED;
+ }
+ // Make sure streams are closed
+ try {inStream.close();} catch (Exception e) {}
+ try {outStream.close();} catch (Exception e) {}
+
+ return result;
+ }
+
+ /**
+ * See whether the SRTM file is already available locally
+ * @param inUrl URL for online resource
+ * @return file object to write to, or null if already there
+ */
+ private static File getFileToWrite(URL inUrl)
+ {
+ String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE);
+ if (diskCachePath != null)
+ {
+ File srtmDir = new File(diskCachePath, "srtm");
+ if (srtmDir.exists() && srtmDir.isDirectory() && srtmDir.canRead())
+ {
+ File srtmFile = new File(srtmDir, new File(inUrl.getFile()).getName());
+ if (!srtmFile.exists() || !srtmFile.canRead() || srtmFile.length() <= 400) {
+ return srtmFile;
+ }
+ }
+ }
+ return null;
+ }
+}
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
-import java.util.ArrayList;
/**
* Class to get the URLs of the SRTM tiles
* using the srtmtiles.dat file
*/
-public abstract class TileFinder
+public class TileFinder
{
+ /** tile data loaded from file */
+ private byte[] _tileData = null;
+
/** URL prefix for all tiles */
private static final String URL_PREFIX = "https://dds.cr.usgs.gov/srtm/version2_1/SRTM3/";
/** Directory names for each continent */
* @param inTiles list of Tiles to get
* @return array of URLs
*/
- public static URL[] getUrls(ArrayList<SrtmTile> inTiles)
+ public URL getUrl(SrtmTile inTile)
{
- if (inTiles == null || inTiles.size() < 1) {return null;}
- URL[] urls = new URL[inTiles.size()];
- // Read dat file into array
- byte[] lookup = readDatFile();
- if (lookup == null)
- {
- System.err.println("Build error: resource srtmtiles.dat missing!");
- return null;
- }
- for (int t=0; t<inTiles.size(); t++)
+ if (inTile == null) {return null;}
+ if (_tileData == null)
{
- SrtmTile tile = inTiles.get(t);
- // Get byte from lookup array
- int idx = (tile.getLatitude() + 59)*360 + (tile.getLongitude() + 180);
- try
+ _tileData = readDatFile();
+ if (_tileData == null)
{
- int dir = lookup[idx];
- if (dir > 0) {
- try {
- urls[t] = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + tile.getTileName());
- } catch (MalformedURLException e) {} // ignore error, url stays null
- }
- } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null
+ System.err.println("Build error: resource srtmtiles.dat missing!");
+ return null;
+ }
}
- return urls;
+
+ URL url = null;
+ // Get byte from lookup array
+ int idx = (inTile.getLatitude() + 59)*360 + (inTile.getLongitude() + 180);
+ try
+ {
+ int dir = _tileData[idx];
+ if (dir > 0) {
+ try {
+ url = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + inTile.getTileName());
+ } catch (MalformedURLException e) {} // ignore error, url stays null
+ }
+ } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null
+
+ return url;
}
/**
if (inNumSecs < 86400L) return "" + (inNumSecs / 60 / 60) + I18nManager.getText("display.range.time.hours")
+ " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins");
if (inNumSecs < 432000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days")
- + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours");
+ + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours")
+ + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins");
if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days");
return "big";
}
private JMenuItem _routingGraphHopperItem = null;
private JMenuItem _chartItem = null;
private JMenuItem _lookupSrtmItem = null;
- private JMenuItem _downloadSrtmItem = null;
private JMenuItem _nearbyWikipediaItem = null;
private JMenuItem _nearbyOsmPoiItem = null;
private JMenuItem _showPeakfinderItem = null;
// SRTM
_lookupSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_SRTM, false);
onlineMenu.add(_lookupSrtmItem);
- _downloadSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_DOWNLOAD_SRTM, false);
- onlineMenu.add(_downloadSrtmItem);
onlineMenu.addSeparator();
// browser submenu
_downloadOsmItem.setEnabled(hasData);
_getWeatherItem.setEnabled(hasData);
_findWaypointItem.setEnabled(hasData && _track.hasWaypoints());
- // have we got a cache?
- _downloadSrtmItem.setEnabled(hasData && Config.getConfigString(Config.KEY_DISK_CACHE) != null);
// have we got any timestamps?
_deleteByDateItem.setEnabled(hasData && _track.hasData(Field.TIMESTAMP));
}
else
{
+ rfl.verifyAll();
// Rebuild menus
_recentFileMenu.removeAll();
for (int i=0; i<rfl.getSize(); i++)
--- /dev/null
+package tim.prune.gui.map;
+
+/**
+ * Exception thrown to indicate a failure to cache map tiles
+ */
+public class CacheFailure extends Exception
+{
+}
private static int NUMBER_ACTIVE_THREADS = 0;
/** Flag to remember whether any server connection is possible */
private static boolean CONNECTION_ACTIVE = true;
+ /** Flag to remember whether we have already tried to create the base path */
+ private static boolean TRIED_TO_CREATE_BASEPATH = false;
/**
* @param inBasePath base path to disk cache
* @param inTilePath relative path to this tile
* @param inObserver observer to inform when load complete
+ * @throws CacheFailure if tile could not be saved
*/
- public static void saveTile(URL inUrl, String inBasePath, String inTilePath, ImageObserver inObserver)
+ public static void saveTile(URL inUrl, String inBasePath, String inTilePath, ImageObserver inObserver) throws CacheFailure
{
if (inBasePath == null || inTilePath == null) {return;}
// save file if possible
File basePath = new File(inBasePath);
- if (!basePath.exists() || !basePath.isDirectory() || !basePath.canWrite())
+ if (!checkBasePath(basePath))
{
// Can't write to base path
- return;
+ throw new CacheFailure();
}
File tileFile = new File(basePath, inTilePath);
}
}
+ /**
+ * Check the given base path, and try (once) to create it if necessary
+ * @return true if base path can be written to
+ */
+ private static boolean checkBasePath(File inBasePath)
+ {
+ if (!inBasePath.exists() && !TRIED_TO_CREATE_BASEPATH)
+ {
+ TRIED_TO_CREATE_BASEPATH = true;
+ System.out.println("Base path '" + inBasePath.getAbsolutePath() + "' does not exist, trying to create");
+ return inBasePath.mkdirs();
+ }
+ return inBasePath.exists() && inBasePath.isDirectory() && inBasePath.canWrite();
+ }
+
/**
* Start downloading the configured tile
*/
{
success = true;
}
+ else if (_file.delete() && tempFile.renameTo(_file))
+ {
+ success = true;
+ }
else
{
- // File couldn't be moved - delete both to be sure
System.out.println("Failed to rename temp file: " + tempFile.getAbsolutePath());
tempFile.delete();
- _file.delete();
}
}
/** coordinates of popup menu */
private int _popupMenuX = -1, _popupMenuY = -1;
/** Flag to prevent showing too often the error message about loading maps */
- private boolean _shownOsmErrorAlready = false;
+ private boolean _shownMapLoadErrorAlready = false;
/** Current drawing mode */
private int _drawMode = MODE_DEFAULT;
/** Current waypoint icon definition */
*/
private void zoomToFit()
{
- _latRange = _track.getLatRange();
- _lonRange = _track.getLonRange();
+ if (_track.getNumPoints() > 0)
+ {
+ _latRange = _track.getLatRange();
+ _lonRange = _track.getLonRange();
+ }
+ if (_latRange == null || _lonRange == null
+ || !_latRange.hasData() || !_lonRange.hasData())
+ {
+ setDefaultLatLonRange();
+ }
_xRange = new DoubleRange(MapUtils.getXFromLongitude(_lonRange.getMinimum()),
MapUtils.getXFromLongitude(_lonRange.getMaximum()));
_yRange = new DoubleRange(MapUtils.getYFromLatitude(_latRange.getMinimum()),
getWidth(), getHeight());
}
+ /**
+ * Track data is empty, so find a default area on the map to show
+ */
+ private void setDefaultLatLonRange()
+ {
+ String storedRange = Config.getConfigString(Config.KEY_LATLON_RANGE);
+ // Parse it into four latlon values
+ try
+ {
+ String[] values = storedRange.split(";");
+ if (values.length == 4)
+ {
+ final double lat1 = Double.valueOf(values[0]);
+ final double lat2 = Double.valueOf(values[1]);
+ if (lat1 >= -90.0 && lat1 <= 90.0 && lat2 >= -90.0 && lat2 <= 90.0 && lat1 != lat2)
+ {
+ _latRange = new DoubleRange(lat1, lat2);
+ final double lon1 = Double.valueOf(values[2]);
+ final double lon2 = Double.valueOf(values[3]);
+ if (lon1 >= -180.0 && lon1 <= 180.0 && lon2 >= -180.0 && lon2 <= 180.0 && lon1 != lon2)
+ {
+ _lonRange = new DoubleRange(lon1, lon2);
+ return;
+ }
+ }
+ }
+ }
+ catch (Exception e) {}
+ _latRange = new DoubleRange(45.8, 47.9);
+ _lonRange = new DoubleRange(5.9, 10.6);
+ }
/**
* Paint method
if (_mapImage != null && (_mapImage.getWidth() != getWidth() || _mapImage.getHeight() != getHeight())) {
_mapImage = null;
}
- if (_track.getNumPoints() > 0)
+ final boolean showMap = Config.getConfigBoolean(Config.KEY_SHOW_MAP);
+ final boolean showSomething = _track.getNumPoints() > 0 || showMap;
+ if (showSomething)
{
// Check for autopan if enabled / necessary
if (_autopanCheckBox.isSelected())
_prevSelectedPoint = selectedPoint;
}
+ // Recognise empty map position, if no data has been loaded
+ if (_mapPosition.isEmpty())
+ {
+ // Set to some default area
+ zoomToFit();
+ _recalculate = true;
+ }
+
// Draw the map contents if necessary
if (_mapImage == null || _recalculate)
{
inG.drawString(I18nManager.getText("display.nodata"), 50, getHeight()/2);
_scaleBar.updateScale(-1, 0);
}
+ // enable or disable panels
+ _topPanel.setVisible(showSomething);
+ _sidePanel.setVisible(showSomething);
// Draw slider etc on top
paintChildren(inG);
}
}
// reset error message
- if (!showMap) {_shownOsmErrorAlready = false;}
+ if (!showMap) {_shownMapLoadErrorAlready = false;}
_recalculate = false;
// Only get map tiles if selected
if (showMap)
synchronized(this)
{
// Show message if loading failed (but not too many times)
- if (!inIsOk && !_shownOsmErrorAlready && _mapCheckBox.isSelected())
+ if (!inIsOk && !_shownMapLoadErrorAlready && _mapCheckBox.isSelected())
{
- _shownOsmErrorAlready = true;
+ _shownMapLoadErrorAlready = true;
// use separate thread to show message about failing to load osm images
new Thread(new Runnable() {
public void run() {
}
}
+ /**
+ * Inform that a cache failure occurred
+ */
+ public void reportCacheFailure()
+ {
+ // Cache can't be used, so disable it - user will be reminded to set it up by the tips
+ Config.setConfigString(Config.KEY_DISK_CACHE, null);
+ }
+
/**
* Zoom out, if not already at minimum zoom
*/
*/
public void mouseClicked(MouseEvent inE)
{
- if (_track != null && _track.getNumPoints() > 0)
+ final boolean showMap = Config.getConfigBoolean(Config.KEY_SHOW_MAP);
+ final boolean hasPoints = _track != null && _track.getNumPoints() > 0;
+ if (showMap || hasPoints)
{
// select point if it's a left-click
if (!inE.isMetaDown())
{
if (inE.getClickCount() == 1)
{
- // single click
- if (_drawMode == MODE_DEFAULT)
+ // single left click
+ if (_drawMode == MODE_DEFAULT && hasPoints)
{
int pointIndex = _clickedPoint;
if (pointIndex == INDEX_UNKNOWN)
}
}
repaint();
- // enable or disable components
- boolean hasData = _track.getNumPoints() > 0;
- _topPanel.setVisible(hasData);
- _sidePanel.setVisible(hasData);
// grab focus for the key presses
this.requestFocus();
}
private int _zoom = 12;
/** Factor to zoom by, 2 to the power of zoom */
private int _zoomFactor = 1 << _zoom;
+ /** Flag to mark if this position has ever been set */
+ private boolean _empty = true;
/** Maximum zoom level */
private static final int MAX_ZOOM = 21;
}
}
if (requiredZoom < 2) requiredZoom = 2;
+ else if (requiredZoom > 18) requiredZoom = 18;
// Set position
setZoom(requiredZoom);
_xPosition = transformToPixels((inMinX + inMaxX) / 2.0);
_yPosition = transformToPixels((inMinY + inMaxY) / 2.0);
+ _empty = false;
}
/**
{
_zoom = inZoom;
_zoomFactor = 1 << _zoom;
+ _empty = false;
}
/**
// Set position
_xPosition = (_xPosition - inWidth/2 + (inMinX + inMaxX) / 2) * multFactor;
_yPosition = (_yPosition - inHeight/2 + (inMinY + inMaxY) / 2) * multFactor;
+ _empty = false;
}
/**
_xPosition += inDeltaX;
_yPosition += inDeltaY;
}
+
+ /**
+ * @return true if this position has never been set
+ */
+ public boolean isEmpty()
+ {
+ return _empty;
+ }
}
}
}
catch (MalformedURLException urle) {} // ignore
+ catch (CacheFailure cf) {
+ _consumer.reportCacheFailure();
+ }
}
return tileImage;
}
{
/** Let the consumer know that the tiles have been updated */
public void tilesUpdated(boolean inIsOk);
+
+ /** Let the consume know that a cache failure occurred */
+ public void reportCacheFailure();
}
function.splitsegments=Verdeel baan in segmente
function.sewsegments=Naai baan segmente aanmekaar
function.lookupsrtm=Kry hoogtes vanaf SRTM
-function.downloadsrtm=Laai SRTM te\u00ebls af
function.getwikipedia=Kry nabye Wikipedia artikels
function.searchwikipedianames=Soek Wikiepdia volgens naam
function.searchopencachingde=Soek OpenCaching.de
confirm.lookupsrtm=%d hoogte waardes gevind
confirm.downloadsrtm=%d leers afgelaai na data stoor
confirm.downloadsrtm.1=%d leer afgelaai na data stoor
-confirm.downloadsrtm.none=Geen leers afgelaai, hulle was alreeds in the data stoor
confirm.deletefieldvalues=Veld waardes verwyder
confirm.audioload=Klank leers bygevoeg
confirm.correlateaudios.single=klankgreep was gekorreleer
menu.view=Golygu
menu.settings=Dewisiadau
menu.help=Cymorth
+# Popup menu for map
+menu.map.zoomin=Chwyddo i mewn
+menu.map.zoomout=Chwyddo allan
# Alt keys for menus
altkey.menu.file=F
function.exportimage=Cadw llun
function.charts=Siartiau
function.distances=Pellterau
+function.viewfulldetails=Manylion
function.help=Cymorth
function.about=Ynghylych GpsPrune
details.lists.audio=Awdio
# Field names
+fieldname.latitude=Lledred
+fieldname.longitude=Hydred
+fieldname.coordinates=Cyfesurynnau
fieldname.waypointname=Enw
+fieldname.distance=Pellter
+fieldname.comment=Sylw
# How to combine conditions, such as filters
logic.and=a
url.googlemaps=maps.google.co.uk
wikipedia.lang=cy
openweathermap.lang=en
-
function.splitsegments=Rozd\u011blit stopu na \u010d\u00e1sti
function.sewsegments=Spojit \u010d\u00e1sti stopy
function.lookupsrtm=Na\u010d\u00edst nadm. v\u00fd\u0161ku ze SRTM
-function.downloadsrtm=St\u00e1hnout dla\u017edice ze SRTM
function.getwikipedia=Hledat na Wikipedii podle vzd\u00e1lenosti
function.searchwikipedianames=Hledat na Wikipedii podle jm\u00e9na
function.searchopencachingde=Hledat na OpenCaching.de
confirm.lookupsrtm=Nalezeno %d v\u00fd\u0161kov\u00fdch hodnot
confirm.downloadsrtm=Do cache bylo sta\u017eeno %d soubor\u016f
confirm.downloadsrtm.1=Do cache bylo sta\u017eeno %d soubor\u016f
-confirm.downloadsrtm.none=\u017d\u00e1dn\u00fd soubor nebylo t\u0159eba stahovat, v\u0161e u\u017e je v cachi.
confirm.deletefieldvalues=Hodnoty pole smaz\u00e1ny
confirm.audioload=Audionahr\u00e1vky p\u0159id\u00e1ny
confirm.correlateaudios.single=Audionahr\u00e1vka slad\u011bna
tip.title=Tip
tip.useamapcache=Kdy\u017e nastav\u00edte odkl\u00e1dac\u00ed prostor na disku \u010dili cache (Nastaven\u00ed -> Ulo\u017eit mapy na disk),\nzrychl\u00ed se zobrazov\u00e1n\u00ed a zmen\u0161\u00ed se mno\u017estv\u00ed p\u0159en\u00e1\u0161en\u00fdch dat.
tip.learntimeparams=V\u00fdsledky budou p\u0159esn\u011bj\u0161\u00ed, kdy\u017e na na\u010dten\u00e9 stopy pou\u017eijete funkci\nAnal\u00fdza stopy pro odhad \u010dasu.
-tip.downloadsrtm=Na\u010d\u00edt\u00e1n\u00ed nadmo\u0159sk\u00fdch v\u00fd\u0161ek bude rychlej\u0161\u00ed, pokud st\u00e1hnete dla\u017edice do cache pomoc\u00ed\nOnline -> St\u00e1hnout dla\u017edice ze SRTM.
+tip.downloadsrtm=Na\u010d\u00edt\u00e1n\u00ed nadmo\u0159sk\u00fdch v\u00fd\u0161ek bude rychlej\u0161\u00ed,\npokud st\u00e1hnete dla\u017edice do cache.
tip.usesrtmfor3d=Tato stopa neobsahuje informaci o nadmo\u0159sk\u00e9 v\u00fd\u0161ce.\nPro na\u010dten\u00ed p\u0159ibli\u017en\u00fdch nadmo\u0159sk\u00fdch v\u00fd\u0161ek pot\u0159ebn\u00fdch\nna trojrozm\u011brn\u00e9 zobrazen\u00ed m\u016f\u017eete pou\u017e\u00edt funkce SRTM.
tip.manuallycorrelateone=Kdy\u017e ru\u010dn\u011b slad\u00edte aspo\u0148 jednu fotografii, \u010dasov\u00fd posun bude vypo\u010d\u00edtat za v\u00e1s.
function.sewsegments=Trackabschnitte zusammenf\u00fcgen
function.createmarkerwaypoints=Wegpunkte im bestimmten Abstand kreieren
function.lookupsrtm=H\u00f6hendaten von SRTM nachschlagen
-function.downloadsrtm=SRTM Dateien herunterladen
function.getwikipedia=Wikipediaartikel in der N\u00e4he nachschlagen
function.searchwikipedianames=Wikipedia nach Namen durchsuchen
function.searchosmpois=OpenStreetMap nach Punkten durchsuchen
confirm.lookupsrtm=Es wurden %d H\u00f6henwerte gefunden
confirm.downloadsrtm=Es wurden %d Dateien heruntergeladen
confirm.downloadsrtm.1=Es wurde %d Datei heruntergeladen
-confirm.downloadsrtm.none=Keine Dateien heruntergeladen, alle waren schon gespeichert.
confirm.deletefieldvalues=Feldwerte gel\u00f6scht
confirm.audioload=Audiodateien geladen
confirm.correlateaudios.single=Audio wurde korreliert
tip.title=Tipp
tip.useamapcache=Mit lokal-gespeicherten Kartenkacheln (Einstellungen -> Karten auf Festplatte speichern)\nk\u00f6nnen Sie die Darstellung beschleunigen und Netzwerkverkehr reduzieren.
tip.learntimeparams=Wenn Sie Track -> Zeitparameter erlernen mit Ihren Tracks benutzen\ndann werden die berechneten Werte genauer.
-tip.downloadsrtm=Sie k\u00f6nnen diese Funktion beschleunigen indem Sie\nOnline -> SRTM Dateien herunterladen aufrufen\num die Daten lokal zu speichern.
+tip.downloadsrtm=Sie k\u00f6nnen diese Funktion beschleunigen indem Sie\ndie SRTM Daten lokal im Kartenspeicher speichern.
tip.usesrtmfor3d=Dieser Track hat keine H\u00f6heninformation.\nSie k\u00f6nnen die SRTM Funktionen verwenden, um\nH\u00f6henwerte abzusch\u00e4tzen.
tip.manuallycorrelateone=Mit mindestens einem manuell verbundenen Element kann die Zeitdifferenz automatisch berechnet werden.
function.sewsegments=Tracksegm\u00e4nte z\u00e4mef\u00fcge
function.createmarkerwaypoints=Waypoints inem bestimmten Abstand kreiere
function.lookupsrtm=H\u00f6hendate vonem SRTM hole
-function.downloadsrtm=SRTM Files abalade
function.getwikipedia=Im Wikipedia in dr N\u00f6chi naaluege
function.searchwikipedianames=Wikipedia nachem Namen durasueche
function.searchosmpois=OpenStreetMap na P\u00fcnkt durasueche
confirm.lookupsrtm=Es sin %d H\u00f6henwerte gfunde
confirm.downloadsrtm=Es sin %d Files abeglade
confirm.downloadsrtm.1=Sisch %d File abeglade
-confirm.downloadsrtm.none=Kei Files abeglade, die sin alli scho da gsi.
confirm.deletefieldvalues=Feldw\u00e4rte gl\u00f6scht worde
confirm.audioload=Audiofiles glade worde
confirm.media.removed=entf\u00e4rnt
tip.title=Tipp
tip.useamapcache=Mit lokali Kartekachle (Iistellige -> Karten uufem Disk speichere)\nk\u00f6nnet Sie d Darstellig bschleunige und Netzwerkverkehr reduziere.
tip.learntimeparams=Wenn Sie Track -> Ziitparameter erlerne mit Ihren Tracks benutze\ndann werdet d ber\u00e4chneti Werte gnauer.
-tip.downloadsrtm=Sie k\u00f6nnet d Funktion beschleunige indem Sie\nOnline -> SRTM Files abalade uufrufe\num d Date lokal z'speichere.
+tip.downloadsrtm=Sie k\u00f6nnet d Funktion beschluunige\nindem Sie Kartekachle lokal speichere\nund d H\u00f6chidate au d\u00f6t speichere.
tip.usesrtmfor3d=Dere Track h\u00e4t kei H\u00f6chiinformation.\nSie k\u00f6nnet d SRTM Funktione verw\u00e4nde, um\nH\u00f6chiwerte abz'sch\u00e4tze.
tip.manuallycorrelateone=Mit mindeschtens einem verbundenen Elem\u00e4nt chann die Ziitdiffer\u00e4nz automatisch ber\u00e4chnet werd\u00e4.
function.sewsegments=Sew track segments together
function.createmarkerwaypoints=Create marker waypoints
function.lookupsrtm=Get altitudes from SRTM
-function.downloadsrtm=Download SRTM tiles
function.getwikipedia=Get nearby Wikipedia articles
function.searchwikipedianames=Search Wikipedia by name
function.searchosmpois=Get nearby OSM points
dialog.displaysettings.windowstyle=Window style (requires restart)
dialog.displaysettings.windowstyle.default=Default
dialog.displaysettings.windowstyle.nimbus=Nimbus
+dialog.displaysettings.windowstyle.gtk=GTK
dialog.downloadosm.desc=Confirm to download the raw OSM data for the specified area:
dialog.searchwikipedianames.search=Search for:
dialog.weather.location=Location
confirm.lookupsrtm=Found %d altitude values
confirm.downloadsrtm=Downloaded %d files to the cache
confirm.downloadsrtm.1=Downloaded %d file to the cache
-confirm.downloadsrtm.none=No files downloaded, they were already in the cache
confirm.deletefieldvalues=Field values deleted
confirm.audioload=Audio files added
confirm.correlateaudios.single=audio was correlated
tip.title=Tip
tip.useamapcache=By setting up a disk cache (Settings -> Save maps to disk)\nyou can speed up the display and reduce network traffic.
tip.learntimeparams=The results will be more accurate if you use\nTrack -> Learn time estimation parameters\non your recorded tracks.
-tip.downloadsrtm=You can speed this up by calling\nOnline -> Download SRTM tiles\nto save the data in your map cache.
+tip.downloadsrtm=You can speed this up by setting up a disk cache\nto save the SRTM data locally.
tip.usesrtmfor3d=This track doesn't have altitudes.\nYou can use the SRTM functions to get approximate\naltitudes for the 3d view.
tip.manuallycorrelateone=By manually connecting at least one item, the time offset can be calculated for you.
menu.track.undo=Deshacer
menu.track.clearundo=Despejar la lista de deshacer
menu.track.markrectangle=Marcar puntos dentro de un rect\u00e1ngulo
-function.deletemarked=Eliminar puntos marcados
menu.range=Rango
menu.range.all=Seleccionar todo
menu.range.none=No seleccionar nada
menu.view.browser.mapquest=Mapquest
menu.view.browser.yahoo=Mapas Yahoo
menu.view.browser.bing=Mapas Bing
+menu.view.browser.inlinemap=Mapa en l\u00ednea
+menu.view.browser.graphhopper=GraphHopper
menu.settings=Preferencias
menu.settings.onlinemode=Cargar mapas de Internet
-dialog.displaysettings.antialias=Usar antialiasing
menu.settings.autosave=Auto Guardar
menu.help=Ayuda
function.exportimage=Exportar imagen
function.editwaypointname=Editar nombre de waypoint
function.compress=Comprimir track
+function.deletemarked=Eliminar puntos marcados
function.marklifts=Marcar telef\u00e9ricos
function.deleterange=Eliminar rango
function.croptrack=Truncar track
function.convertnamestotimes=Convertir los nombres de los "waypoints" a tiempo
function.deletefieldvalues=Borrar valores del campo
function.findwaypoint=Buscar waypoint
-function.pastecoordinates=Insertar nuevas coordenadas
+function.pastecoordinates=Insertar coordenadas de un nuevo punto
+function.pastecoordinatelist=Ingrese lista de coordenadas
+function.enterpluscode=Insertar c\u00f3digo plus
function.charts=Diagramas
function.show3d=Mostrar en 3-D
function.distances=Distancias
function.selectsegment=Seleccionar segmento actual
function.splitsegments=Segmentar el track
function.sewsegments=Ensamblar los segmentos
+function.createmarkerwaypoints=Crear waypoints marcadores
function.lookupsrtm=Obtener altitudes de SRTM
-function.downloadsrtm=Descargar datos de SRTM
function.getwikipedia=Obtener art\u00edculos de Wikipedia cercanos
function.searchwikipedianames=Buscar en Wikipedia por nombre
function.searchosmpois=Buscar en OSM cercanos
function.mapillary=Buscar en Mapillary
function.downloadosm=Descargar datos OSM del \u00e1rea
function.duplicatepoint=Duplicar punto
+function.projectpoint=Proyectar punto
function.setcolours=Establecer color
+function.setdisplaysettings=Establecer opciones para la visualizaci\u00f3n
function.setlanguage=Establecer lenguaje
function.connecttopoint=Conectar con punto
function.disconnectfrompoint=Desconectar de punto
function.managetilecache=Administrar cache de mapas
function.getweatherforecast=Obtener pron\u00f3stico del tiempo
function.setaltitudetolerance=Establecer la tolerancia de altitud
+function.selecttimezone=Seleccionar la zona horaria
## Dialogs
dialog.exit.confirm.title=Salir de GpsPrune
dialog.exportgpx.encoding=Codificaci\u00f3n
dialog.exportgpx.encoding.system=Sistema
dialog.exportgpx.encoding.utf8=UTF-8
-dialog.3d.useterrain=Terreno
-dialog.3d.terraingridsize=Dimensi\u00f3n de la cuadr\u00edcula
-dialog.exportpov.cannotmakebaseimage=Fallo al guardar la imagen
-dialog.exportpov.baseimage=Imagen de mapa
dialog.exportpov.text=Introduca los par\u00e1metros para exportar
dialog.exportpov.font=Fuente
dialog.exportpov.camerax=C\u00e1mara X
dialog.baseimage.incomplete=Imagen incompleta
dialog.baseimage.tiles=Recuadros
dialog.baseimage.size=Tama\u00f1o de la imagen
+dialog.exportimage.noimagepossible=Las im\u00e1genes de mapas deben ser guardadas para poder usarlas para una exportaci\u00f3n.
dialog.exportimage.drawtrack=Dibujar track
dialog.exportimage.drawtrackpoints=Dibujar puntos del track
dialog.exportimage.textscalepercent=Agrandamiento del texto (%)
dialog.estimatetime.results=Resultados
dialog.estimatetime.results.estimatedtime=Duraci\u00f3n estimada
dialog.estimatetime.results.actualtime=Duraci\u00f3n real
+dialog.estimatetime.error.nodistance=Las estimaciones de tiempo necesitan puntos de v\u00eda conectados, para dar una distancia
dialog.estimatetime.error.noaltitudes=Los rangos seleccionados no contienen altitudes
+dialog.learnestimationparams.intro=Estos son los par\u00e1metros calculados a partir del track
dialog.learnestimationparams.averageerror=Error medio
+dialog.learnestimationparams.combine=Estos par\u00e1metros se pueden combinar con los valores actuales
dialog.learnestimationparams.combinedresults=Resultados combinados
dialog.learnestimationparams.weight.100pccurrent=Mantener datos actuales
dialog.learnestimationparams.weight.current=actuales
dialog.correlate.audioselect.intro=Seleccione uno de estos audios correlacionados para usarlo como margen temporal.
dialog.correlate.select.audioname=Nombre del audio
dialog.correlate.select.audiolater=Audio m\u00e1s adelante
-dialog.rearrangephotos.desc=Seleccionar el destino y orden de los puntos de las fotos
dialog.rearrangewaypoints.desc=Seleccionar el destino y orden de los waypoints
+dialog.rearrangephotos.desc=Seleccionar el destino y orden de los puntos de las fotos
dialog.rearrange.tostart=Mover al comienzo
dialog.rearrange.toend=Mover al final
dialog.rearrange.tonearest=Mover al punto m\u00e1s pr\u00f3ximo
dialog.pastecoordinates.desc=Ingresar o pegar las coordenadas aqu\u00ed
dialog.pastecoordinates.coords=Coordenadas
dialog.pastecoordinates.nothingfound=Por favor verificar las coordenadas e intentar nuevamente
+dialog.pastecoordinatelist.desc=Introducir las coordenadas de los nuevos puntos con un punto por l\u00ednea
+dialog.pluscode.desc=Introduzca o pegue el c\u00f3digo plus aqu\u00ed
+dialog.pluscode.code=C\u00f3digo plus
+dialog.pluscode.nothingfound=Por favor, compruebe el c\u00f3digo e int\u00e9ntelo de nuevo
dialog.help.help=Por favor, ver\n https://gpsprune.activityworkshop.net/\npara m\u00e1s informaci\u00f3n y gu\u00edas del usuario.
dialog.about.version=Versi\u00f3n
dialog.about.build=Construcci\u00f3n
dialog.deletefieldvalues.intro=Seleccionar el campo a eliminar para el rango actual
dialog.deletefieldvalues.nofields=No hay campos a eliminar para el rango actual
dialog.displaysettings.linewidth=Anchura de las l\u00edneas para los recorridos (1-4)
+dialog.displaysettings.antialias=Usar antialiasing
dialog.displaysettings.waypointicons=Iconos de los waypoints
+dialog.displaysettings.wpicon.default=Por defecto
+dialog.displaysettings.wpicon.ringpt=Marcador redondeado
dialog.displaysettings.wpicon.plectrum=Plectro
dialog.displaysettings.wpicon.ring=Anillo
+dialog.displaysettings.wpicon.pin=Chincheta
dialog.displaysettings.size.small=Peque\u00f1os
dialog.displaysettings.size.medium=Medianos
dialog.displaysettings.size.large=Grandes
+dialog.displaysettings.windowstyle=Estilo de la ventana
+dialog.displaysettings.windowstyle.default=Por defecto
+dialog.displaysettings.windowstyle.nimbus=Nimbus
+dialog.displaysettings.windowstyle.gtk=GTK
dialog.downloadosm.desc=Confirmar la descarga de datos en bruto de OSM para el \u00e1rea especificada.
dialog.searchwikipedianames.search=Buscar:
dialog.weather.location=Localidad
dialog.weather.wind=Viento
dialog.weather.temp=Temp
dialog.weather.humidity=Humedad
+dialog.weather.creditnotice=Estos datos est\u00e1n disponibles en openweathermap.org. Su sitio web tiene m\u00e1s detalles.
+dialog.deletebydate.onlyonedate=Todos los puntos se registraron en la misma fecha.
+dialog.deletebydate.intro=Para cada fecha del track, puede elegir entre borrar o mantener los puntos
dialog.deletebydate.nodate=Sin marcas de tiempo
dialog.deletebydate.column.keep=Mantener
dialog.deletebydate.column.delete=Eliminar
dialog.setaltitudetolerance.text.metres=Limite (en metros) por debajo de cual peque\u00f1as subidas o bajadas ser\u00e1n ignoradas
dialog.setaltitudetolerance.text.feet=Limite (en pies) por debajo de cual peque\u00f1as subidas o bajadas ser\u00e1n ignoradas
+dialog.settimezone.intro=Aqu\u00ed se puede seleccionar la zona horaria para mostrar las marcas de tiempo de los puntos
dialog.settimezone.system=Zona horaria del sistema
+dialog.settimezone.custom=Usar la siguiente zona horaria:
+dialog.settimezone.list.toomany=Demasiados por elegir
+dialog.settimezone.selectedzone=Zona horaria seleccionada
+dialog.settimezone.offsetfromutc=Compensaci\u00f3n respecto a UTC
dialog.autoplay.duration=Duraci\u00f3n (seg)
dialog.autoplay.usetimestamps=Usar informaci\u00f3n de tiempo
dialog.autoplay.rewind=Rebobinar
dialog.autoplay.pause=Pausar
dialog.autoplay.play=Jugar
+dialog.markers.halves=Puntos medios
+dialog.markers.half.distance=Media distancia
+dialog.markers.half.climb=Mitad de cuesta
+dialog.markers.half.descent=Mitad de descenso
+dialog.projectpoint.desc=Introduzca la direcci\u00f3n y la distancia para proyectar este punto
+dialog.projectpoint.bearing=Azimut (grados desde el Norte)
## 3d window
dialog.3d.title=GpsPrune vista 3-D
## Tips, shown just once when appropriate
tip.title=Sugerencia
+tip.useamapcache=Configurando una cach\u00e9 de disco (Preferencias -> Guardar mapas en disco)\npuede acelerar la visualizaci\u00f3n y reducir el tr\u00e1fico de la red.
+tip.learntimeparams=Los resultados ser\u00e1n m\u00e1s precisos si utiliza\nTrack -> Aprender par\u00e1metros de estimaci\u00f3n de tiempo\nen sus pistas grabadas.
+tip.downloadsrtm=Puede acelerar esto si guarda los datos en su cach\u00e9 de mapas.
+tip.usesrtmfor3d=Esta pista no tiene altitudes.\nPuede utilizar las funciones del SRTM\npara obtener altitudes aproximadas para la vista 3d.
tip.manuallycorrelateone=Correlacionando al menos una foto manualmente, el margen de tiempo se calcula autom\u00e1ticamente.
## Buttons
fieldname.speed=Velocidad
fieldname.verticalspeed=Velocidad vertical
fieldname.description=Descripci\u00f3n
+fieldname.comment=Comentario
fieldname.mediafilename=Archivo
## Measurement units
error.load.unknownxml=Formato xml no reconocido:
error.load.noxmlinzip=No se encuentra ning\u00fan archivo xml en el archivo zip
error.load.othererror=Fallo al cargar datos:
+error.load.nopointsintext=No se encuentra ninguna informaci\u00f3n de coordenadas
error.jpegload.dialogtitle=Error cargando fotos
error.jpegload.nofilesfound=No se encuentra ning\u00fan archivo
error.jpegload.nojpegsfound=No se encuentra ning\u00fan archivo jpeg
error.cache.notthere=No se encontr\u00f3 la carpeta del cache de recuadros
error.cache.empty=La carpeta del cache de recuadros esta vac\u00edo
error.cache.cannotdelete=No se pudieron borrar recuadros
+error.learnestimationparams.failed=No puede aprender los par\u00e1metros de esta pista.\nIntente cargar m\u00e1s pistas.
error.tracksplit.nosplit=Imposible segmentar el track
error.downloadsrtm.nocache=Imposible guardar los archivos.\nPor favor, compruebe el cache.
error.sewsegments.nothingdone=Imposible ensamblar los segmentos.\nEl track tiene ahora %d segmentos.
-
-dialog.exportimage.noimagepossible=Las im\u00e1genes de mapas deben ser guardadas para poder usarlas para una exportaci\u00f3n.
-dialog.estimatetime.error.nodistance=Las estimaciones de tiempo necesitan puntos de v\u00eda conectados, para dar una distancia
-dialog.learnestimationparams.intro=Estos son los par\u00e1metros calculados a partir del track
-dialog.learnestimationparams.combine=Estos par\u00e1metros se pueden combinar con los valores actuales
-dialog.weather.creditnotice=Estos datos est\u00e1n disponibles en openweathermap.org. Su sitio web tiene m\u00e1s detalles.
-dialog.deletebydate.onlyonedate=Todos los puntos se registraron en la misma fecha.
-dialog.deletebydate.intro=Para cada fecha del track, puede elegir entre borrar o mantener los puntos
-confirm.downloadsrtm.none=No se descargaron archivos, ya estaban en la cache
-tip.useamapcache=Configurando una cach\u00e9 de disco (Preferencias -> Guardar mapas en disco)\npuede acelerar la visualizaci\u00f3n y reducir el tr\u00e1fico de la red.
-tip.learntimeparams=Los resultados ser\u00e1n m\u00e1s precisos si utiliza\nTrack -> Aprender par\u00e1metros de estimaci\u00f3n de tiempo\nen sus pistas grabadas.
-tip.downloadsrtm=Puede acelerar esto si llama a\nOnline -> Descargar datos de SRTM\npara guardar los datos en su cach\u00e9 de mapas.
-tip.usesrtmfor3d=Esta pista no tiene altitudes.\nPuede utilizar las funciones del SRTM\npara obtener altitudes aproximadas para la vista 3d.
-error.learnestimationparams.failed=No puede aprender los par\u00e1metros de esta pista.\nIntente cargar m\u00e1s pistas.
-function.enterpluscode=Insertar c\u00f3digo plus
-function.projectpoint=Proyectar punto
-dialog.pastecoordinatelist.desc=Introducir las coordenadas de los nuevos puntos con un punto por l\u00ednea
-dialog.pluscode.desc=Introduzca o pegue el c\u00f3digo plus aqu\u00ed
-dialog.pluscode.code=C\u00f3digo plus
-dialog.pluscode.nothingfound=Por favor, compruebe el c\u00f3digo e int\u00e9ntelo de nuevo
-dialog.displaysettings.windowstyle=Estilo de la ventana
-dialog.projectpoint.desc=Introduzca la direcci\u00f3n y la distancia para proyectar este punto
-dialog.projectpoint.bearing=Azimut (grados desde el Norte)
-fieldname.comment=Comentario
-dialog.settimezone.selectedzone=Zona horaria seleccionada
-function.selecttimezone=Seleccionar la zona horaria
function.sewsegments=Yhdist\u00e4 reittilohkot
function.createmarkerwaypoints=Luo merkityt kohdepisteet
function.lookupsrtm=Lue korkeysk\u00e4yr\u00e4t SRTM:st\u00e4
-function.downloadsrtm=Lataa SRTM-palat
function.getwikipedia=Hae likeiset Wikipedia-artikkelit
function.searchwikipedianames=Etsi nimell\u00e4 Wikipedia:sta...
function.searchosmpois=Etsi l\u00e4heiset OSM-pisteet
confirm.lookupsrtm=L\u00f6ytyi %d korkeusarvoa
confirm.downloadsrtm=Ladattu %d tiedostoa v\u00e4limuistiin
confirm.downloadsrtm.1=Ladattu %d tiedosto v\u00e4limuistiin
-confirm.downloadsrtm.none=Tiedostoja ei ladattu, koska ne olivat jo v\u00e4limuistissa
confirm.deletefieldvalues=Kentt\u00e4arvot poistettu
confirm.audioload=\u00c4\u00e4nitiedostot lis\u00e4tty
confirm.correlateaudios.single=\u00e4\u00e4ni oli korreloitu
tip.title=Vihje
tip.useamapcache=Jos tallennutat karttapalat v\u00e4limuistina toimivaan hakemistoon levylle\n Valikko: Asetukset -> Talleta kartat hakemistoon,\nn\u00e4yt\u00f6n toiminta nopeutuu ja verkkoliikenne v\u00e4hentyy.
tip.learntimeparams=Tuloset voivat olla tarkempia, jos suoritutat toiminnon\n Valikko: Reitti -> Opi aika-arvion parametrit\ntallentamillesi reiteille.
-tip.downloadsrtm=Voit nopeututtaa t\u00e4t\u00e4 suorituttamalla toiminnon\n Valikko: Online -> Lataa SRTM-palat\nkarttojen v\u00e4limuistihakemistoon.
tip.usesrtmfor3d=T\u00e4ss\u00e4 reitiss\u00e4 ei ole korkeustietoja.\nVoit k\u00e4ytt\u00e4\u00e4 SRTM-toimintoja saadaksesi likim\u00e4\u00e4r\u00e4iset\nkorkeusarvot 3D-n\u00e4kym\u00e4\u00e4 varten.
tip.manuallycorrelateone=Jos korjaat v\u00e4hint\u00e4\u00e4n yhden kohteen aikatiedot, ohjelma voi laskea aikapoikkeamat puolestasi.
function.exportimage=Exporter une image
function.editwaypointname=\u00c9diter le nom du point
function.compress=Compresser la trace
+function.marklifts=Marquer les remont\u00e9es m\u00e9caniques
function.deleterange=Supprimer l'\u00e9tendue
function.croptrack=Recadrer l'\u00e9tendue
function.interpolate=Interpoler les points
function.selectsegment=S\u00e9lectionner le segment courant
function.splitsegments=S\u00e9pare les segments
function.sewsegments=R\u00e9unis les segments
+function.createmarkerwaypoints=Cr\u00e9ation de points de rep\u00e8re
function.lookupsrtm=R\u00e9cup\u00e9rer les altitudes depuis SRTM
-function.downloadsrtm=T\u00e9l\u00e9charger les donn\u00e9es SRTM
function.getwikipedia=Obtenir les articles de Wikip\u00e9dia \u00e0 proximit\u00e9
function.searchwikipedianames=Rechercher dans Wikip\u00e9dia par nom
-function.searchosmpois=Rechercher dans OSM \u00e0 proximit\u00e9
+function.searchosmpois=Rechercher de marques OSM \u00e0 proximit\u00e9
function.searchopencachingde=Rechercher dans OpenCaching.de
function.mapillary=Rechercher dans Mapillary
function.downloadosm=T\u00e9l\u00e9charger les donn\u00e9es OSM de la zone
function.duplicatepoint=Dupliquer le point
function.setcolours=Choisir les couleurs
-function.setdisplaysettings=Pr\u00e9f\u00e9rences graphiques
+function.setdisplaysettings=Pr\u00e9f\u00e9rences d'affichage
function.setlanguage=Choisir la langue
function.connecttopoint=Relier au point
function.disconnectfrompoint=D\u00e9tacher du point
dialog.about.summarytext2=Distribu\u00e9 sous license Gnu GPL pour un usage et une am\u00e9lioration libres, ouverts et mondiaux.<br>La copie, la redistribution et la modification sont autoris\u00e9es et encourag\u00e9es<br>selon les conditions d\u00e9taill\u00e9es dans le fichier <code>license.txt</code> inclus.
dialog.about.summarytext3=Consultez la page <code style="font-weight:bold">https://activityworkshop.net/</code> pour plus de d\u00e9tails et des manuels utilisateur.
dialog.about.languages=Langues disponibles
-dialog.about.translatedby=Texte en fran\u00e7ais par Petrovsk, theYinYeti, R\u00e9mi et jmr.
+dialog.about.translatedby=Texte en fran\u00e7ais par Petrovsk, theYinYeti, R\u00e9mi, jmr et Tche333.
dialog.about.systeminfo=Info Syst\u00e8me
dialog.about.systeminfo.os=Syst\u00e8me d'exploitation
dialog.about.systeminfo.java=Java Runtime
confirm.lookupsrtm=Trouv\u00e9 %d valeurs d'altitude
confirm.downloadsrtm=%d fichiers ont \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9s
confirm.downloadsrtm.1=%d fichier a \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9
-confirm.downloadsrtm.none=Pas de fichiers ont \u00e9t\u00e9 t\u00e9l\u00e9charg\u00e9s, ils sont d\u00e9j\u00e0 l\u00e0
confirm.deletefieldvalues=Valeurs effac\u00e9es
confirm.audioload=Fichiers audio ajout\u00e9s
confirm.correlateaudios.single=fichier audio a \u00e9t\u00e9 corr\u00e9l\u00e9
tip.title=Astuce
tip.useamapcache=By setting up a disk cache (Pr\u00e9f\u00e9rences -> Enregistrer les cartes sur le disque)\nyou can speed up the display and reduce network traffic.
tip.learntimeparams=The results will be more accurate if you use\nTrace -> Apprentissage de l'estimation\non your recorded tracks.
-tip.downloadsrtm=You can speed this up by calling\nEn ligne -> T\u00e9l\u00e9charger les donn\u00e9es SRTM\nto save the data in your map cache.
tip.manuallycorrelateone=En corr\u00e9lant manuellement au moins une photo, le d\u00e9calage de temps peut \u00eatre calcul\u00e9 pour vous.
# Buttons
menu.view.browser.mapquest=Mapquest
menu.view.browser.yahoo=Yahoo! Maps
menu.view.browser.bing=Bing Maps
+menu.view.browser.inlinemap=Inlinemap.net
+menu.view.browser.graphhopper=GraphHopper
menu.settings=Be\u00e1ll\u00edt\u00e1sok
menu.settings.onlinemode=T\u00e9rk\u00e9pek bet\u00f6lt\u00e9se internetr\u0151l
menu.settings.autosave=Be\u00e1ll\u00edt\u00e1sok automatikus ment\u00e9se kil\u00e9p\u00e9skor
shortcut.menu.track.undo=Z
shortcut.menu.track.compress=C
shortcut.menu.range.all=A
+shortcut.menu.point.edit=E
shortcut.menu.help.help=H
# Functions
function.deletefieldvalues=Mez\u0151 \u00e9rt\u00e9keinek t\u00f6rl\u00e9se
function.findwaypoint=\u00datpont keres\u00e9se
function.pastecoordinates=\u00daj koordin\u00e1t\u00e1k megad\u00e1sa
+function.pastecoordinatelist=Adja meg a koordin\u00e1t\u00e1k list\u00e1j\u00e1t
+function.enterpluscode=Pluszk\u00f3d megad\u00e1sa
function.charts=Diagramok
function.show3d=3D n\u00e9zet
function.distances=T\u00e1vols\u00e1gok
+function.viewfulldetails=\u00d6sszes r\u00e9szlet
function.estimatetime=Becs\u00fclt id\u0151
function.learnestimationparams=Id\u0151becsl\u00e9s tanul\u00e1s\u00e1nak param\u00e9terei
function.autoplay=Nyomvonal lej\u00e1tsz\u00e1sa
function.mapillary=F\u00e9nyk\u00e9pek keres\u00e9se Mapillary-n
function.downloadosm=OSM adatok let\u00f6lt\u00e9se a ter\u00fcletr\u0151l
function.duplicatepoint=Pont kett\u0151z\u00e9se
+function.projectpoint=Pont vet\u00edt\u00e9se
function.setcolours=Sz\u00ednek be\u00e1ll\u00edt\u00e1sa
function.setdisplaysettings=Megjelen\u00edt\u00e9s be\u00e1ll\u00edt\u00e1sa
function.setlanguage=Nyelv be\u00e1ll\u00edt\u00e1sa
dialog.pastecoordinates.desc=Adja meg vagy illessze be a koordin\u00e1t\u00e1kat ide
dialog.pastecoordinates.coords=Koordin\u00e1t\u00e1k
dialog.pastecoordinates.nothingfound=Ellen\u0151rizze a koordin\u00e1t\u00e1kat, \u00e9s pr\u00f3b\u00e1lja \u00fajra
+dialog.pastecoordinatelist.desc=Adja meg az \u00faj pontok koordin\u00e1t\u00e1it, soronk\u00e9nt egy pont\u00e9t
+dialog.pluscode.desc=Adja meg, vagy m\u00e1soja ide a pluszk\u00f3dot
+dialog.pluscode.code=Pluszk\u00f3d
+dialog.pluscode.nothingfound=Ellen\u0151rizze a k\u00f3dot, vagy pr\u00f3b\u00e1lja \u00fajra
dialog.help.help=Tov\u00e1bbi inform\u00e1ci\u00f3k\u00e9rt \u00e9s kezel\u00e9si \u00fatmutat\u00f3\u00e9rt l\u00e1sd a \n https://gpsprune.activityworkshop.net/\nwebhelyet.
dialog.about.version=Verzi\u00f3
dialog.about.build=Build
dialog.displaysettings.size.small=Kicsi
dialog.displaysettings.size.medium=K\u00f6zepes
dialog.displaysettings.size.large=Nagy
+dialog.displaysettings.windowstyle=Ablak st\u00edlus (\u00fajraind\u00edt\u00e1st ig\u00e9nyel)
+dialog.displaysettings.windowstyle.default=Alap\u00e9rtelmezett
+dialog.displaysettings.windowstyle.nimbus=Nimbus
+dialog.displaysettings.windowstyle.gtk=GTK
dialog.downloadosm.desc=Nyers OSM adatok let\u00f6lt\u00e9s\u00e9nek meger\u0151s\u00edt\u00e9se a megadott ter\u00fcletre:
dialog.searchwikipedianames.search=Keres\u00e9s erre:
dialog.weather.location=Helysz\u00edn
dialog.settimezone.system=Rendszer id\u0151z\u00f3na haszn\u00e1lata
dialog.settimezone.custom=Az al\u00e1bbi id\u0151z\u00f3na haszn\u00e1lata
dialog.settimezone.list.toomany=T\u00fal sok lehet\u0151s\u00e9g
+dialog.settimezone.selectedzone=Kiv\u00e1lasztott id\u0151z\u00f3na
+dialog.settimezone.offsetfromutc=Elt\u00e9r\u00e9s az UTC-t\u0151l
dialog.autoplay.duration=Id\u0151tartam (mp)
dialog.autoplay.usetimestamps=Nyompontok id\u0151b\u00e9lyege alapj\u00e1n
dialog.autoplay.rewind=Vissza az elej\u00e9re
dialog.autoplay.pause=Sz\u00fcnet
dialog.autoplay.play=Lej\u00e1tsz\u00e1s
+dialog.markers.halves=F\u00e9l\u00fat pontok
+dialog.markers.half.distance=F\u00e9lt\u00e1v
+dialog.markers.half.climb=F\u00e9l\u00fat a m\u00e1sz\u00e1sban
+dialog.markers.half.descent=F\u00e9l\u00fat az ereszked\u00e9sben
+dialog.projectpoint.desc=A pont vet\u00edt\u00e9s\u00e9hez adjon meg egy ir\u00e1nyt \u00e9s t\u00e1vols\u00e1got
+dialog.projectpoint.bearing=Ir\u00e1nysz\u00f6g (fok \u00e9szakt\u00f3l)
# 3d window
dialog.3d.title=GpsPrune 3D n\u00e9zet
# Field names
fieldname.latitude=Sz\u00e9less\u00e9g
fieldname.longitude=Hossz\u00fas\u00e1g
+fieldname.coordinates=Koordin\u00e1t\u00e1k
fieldname.altitude=Magass\u00e1g
fieldname.timestamp=Id\u0151
fieldname.time=Id\u0151
fieldname.speed=Sebess\u00e9g
fieldname.verticalspeed=F\u00fcgg\u0151leges sebess\u00e9g
fieldname.description=Le\u00edr\u00e1s
+fieldname.comment=Megjegyz\u00e9s
fieldname.mediafilename=F\u00e1jln\u00e9v
# Measurement units
error.load.unknownxml=Ismeretlen xml form\u00e1tum:
error.load.noxmlinzip=Nem tal\u00e1lhat\u00f3 xml f\u00e1jl a zip f\u00e1jlon bel\u00fcl
error.load.othererror=Hiba a f\u00e1jl olvas\u00e1sa sor\u00e1n:
+error.load.nopointsintext=Nincs benne koordin\u00e1ta inform\u00e1ci\u00f3
error.jpegload.dialogtitle=Hiba a k\u00e9pek bet\u00f6lt\u00e9sekor
error.jpegload.nofilesfound=Nem tal\u00e1lhat\u00f3 f\u00e1jl
error.jpegload.nojpegsfound=Nem tal\u00e1lhat\u00f3 jpeg f\u00e1jl
function.sewsegments=Riorganizza segmenti insieme
function.createmarkerwaypoints=Crea marcatori
function.lookupsrtm=Ottieni quote da SRTM
-function.downloadsrtm=Scarica file da SRTM
function.getwikipedia=Ottieni i punti Wikipedia nelle vicinanze
function.searchwikipedianames=Cerca il nome in Wikipedia
function.searchosmpois=Ottieni i punti OSM nelle vicinanze
confirm.lookupsrtm=Trovato %d valori di quota
confirm.downloadsrtm=Scarica %d file nella cache
confirm.downloadsrtm.1=Scarica %d file nella cache
-confirm.downloadsrtm.none=Nessun file scaricato, erano gi\u00e0 presenti nella cache
confirm.deletefieldvalues=Valori del campo cancellati
confirm.audioload=Ripresa audio aggiunta
confirm.correlateaudios.single=la ripresa audio era correlata
tip.title=Consiglio
tip.useamapcache=Usando una cache della mappa (Preferenze -> Salva mappe su disco)\npuoi accelerare la visualizzazione e ridurre il traffico.
tip.learntimeparams=I risultati saranno pi\u00f9 precisi usando\nTraccia -> Apprendi parametri di stima\ncon le tue tracce.
-tip.downloadsrtm=Puoi accelerare questa funzione usando\nOnline -> Scarica file da SRTM\nper salvare i dati nella cache.
+tip.downloadsrtm=Puoi accelerare questa funzione salvare i dati nella cache.
tip.usesrtmfor3d=La traccia non include informazioni sull'altitudine.\nPuoi utilizzare la funzione SRTM per ottenere le altitudini\nper la visione 3D.
tip.manuallycorrelateone=Con il collegamento manuale di almeno una foto, lo scarto di orario viene calcolato per te
function.sewsegments=Voeg segmenten samen
function.createmarkerwaypoints=aak waypoints voor markering
function.lookupsrtm=Hoogtes van SRTM ophalen
-function.downloadsrtm=Downloaden SRTM tegels
function.getwikipedia=Wikipedia artikelen uit de buurt ophalen
function.searchwikipedianames=Wikipedia zoeken op naam
function.searchosmpois=Haal nabije OSM punten op
confirm.lookupsrtm=Gevonden %d hoote waarden
confirm.downloadsrtm=Er zijn %d bestanden gedownload nar de cache
confirm.downloadsrtm.1=Er zijn %d bestanden gedownload nar de cache
-confirm.downloadsrtm.none=Geen bestanden gedownload, waren al aanwezig in de cache.
confirm.deletefieldvalues=Veldwaarden gewist
confirm.audioload=Audiobestanden toegevoegd
confirm.correlateaudios.single=audiobestand gecorreleerd
tip.title=Tip
tip.useamapcache=Door het instellen van een schijfcache (Instellingen -> Kaart opslaan op schijf)\nkan je de afbeeldsnelheid verbeteren en het netwerkverkeer verminderen.
tip.learntimeparams=De resultaten zullen nauwkeuriger zijn als je \nRoute -> Parameters voor geschatte tijd\ngebruikt op je opgenomen routes.
-tip.downloadsrtm=Je kan dit versnellen door hier\nOnline -> Download SRTM tegels\nde data in je kaartcache op te slaan.
+tip.downloadsrtm=Je kan dit versnellen door de data in je kaartcache op te slaan.
tip.usesrtmfor3d=Deze route heeft geen hoogten.\nJe kan de SRTM functies gebruiken om een geschatte hoogte\nop te halen voor het 3d beeld.
tip.manuallycorrelateone=Door handmatig een foto te koppelen kan het tijdsverschil voor u berekend worden.
menu.file.recentfiles=Nyeste filer
menu.file.save=Lagre som tekst
menu.file.exit=Avslutt
-menu.online=
-menu.track=
menu.track.undo=Angre
menu.track.clearundo=Nullstill angreliste
menu.track.markrectangle=Marker punkter i rektangel
# Alt keys for menus
altkey.menu.file=F
-altkey.menu.online=
altkey.menu.track=S
altkey.menu.range=I
altkey.menu.point=P
# Ctrl shortcuts for menu items
shortcut.menu.file.open=\u00c5
-shortcut.menu.file.load=
shortcut.menu.file.save=L
shortcut.menu.track.undo=g
shortcut.menu.track.compress=K
function.exportkml=Eksporter KML
function.exportgpx=Eksporter GPX
function.exportpov=Eksporter POV
-function.exportimage=
function.editwaypointname=Endre waypoint-navn
function.compress=Komprimer spor
function.deleterange=Fjern valgt intervall
function.croptrack=Beskj\u00e6r sporet
function.interpolate=Interpoler punkter
-function.deletebydate=
function.addtimeoffset=Legg til tidsinkrement
function.addaltitudeoffset=Legg til h\u00f8ideinkrement
-function.rearrangewaypoints=
function.convertnamestotimes=Les waypoint-navn som tidspunkter
function.deletefieldvalues=Slett feltets verdier
function.findwaypoint=Finn waypoint
function.show3d=3-D visning
function.distances=Avstander
function.viewfulldetails=Vis alle detaljer
-function.estimatetime=
-function.learnestimationparams=
function.setmapbg=Velg grunnlagskart
function.setpaths=Angi plassering av programmer
-function.selectsegment=
-function.splitsegments=
-function.sewsegments=
function.lookupsrtm=Hent h\u00f8yde fra SRTM
-function.downloadsrtm=
function.getwikipedia=Vis Wikipedia info for omegn
function.searchwikipedianames=S\u00f8k Wikipedia
-function.searchopencachingde=
function.downloadosm=Last ned OSM data for omr\u00e5det
function.duplicatepoint=Dupliser punkt
function.setcolours=Velg farger
function.sewsegments=Po\u0142\u0105cz fragmenty
function.createmarkerwaypoints=Stw\u00f3rz markery podzia\u0142u
function.lookupsrtm=Pobierz wysoko\u015bci z SRTM
-function.downloadsrtm=Zapisz dane z SRTM
function.getwikipedia=Szukaj w Wikipedii o okolicy
function.searchwikipedianames=Szukaj nazwy w Wikipedii
function.searchopencachingde=Szukaj w OpenCaching.de
confirm.lookupsrtm=Znaleziono %d warto\u015bci wysoko\u015bci
confirm.downloadsrtm=Pobrano %d plik\u00f3w do kesza
confirm.downloadsrtm.1=Pobrano %d plik do kesza
-confirm.downloadsrtm.none=Nie pobrano \u017cadnych plik\u00f3w, wszystkie by\u0142y ju\u017c w keszu
confirm.deletefieldvalues=Warto\u015bci p\u00f3l usuni\u0119to
confirm.audioload=dodano pliki audio
confirm.correlateaudios.single=audio zosta\u0142o po\u0142\u0105czone
tip.title=Porada
tip.useamapcache=Konfiguruj\u0105c kesz dyskowy (Ustawienia -> Zapisz mapy na dysk)\nprzyspieszasz wy\u015bwietlanie i ograniczasz ruch sieciowy
tip.learntimeparams=Resultat b\u0119dzie dok\u0142adniejszy je\u015bli u\u017cyjesz
-tip.downloadsrtm=Mo\u017cesz przyspieszy\u0107 operacj\u0119 wywo\u0142uj\u0105c polecenie
+tip.downloadsrtm=Mo\u017cesz przyspieszy\u0107 operacj\u0119 konfiguruj\u0105c kesz dyskowy
tip.usesrtmfor3d=\u015acie\u017cka nie zawiera danych o wysoko\u015bciach\nMo\u017cesz u\u017cy\u0107 funkcji SRTM by pobrac przybli\u017cone dane\no wysko\u015bciach w trybie widoku 3D.
tip.manuallycorrelateone=Gdy powi\u0105\u017cesz r\u0119cznie przynajmniej jedno zdj\u0119cie, r\u00f3\u017cnica czasowa zostanie policzona automatycznie.
# Field names
fieldname.latitude=Szeroko\u015b\u0107
fieldname.longitude=D\u0142ugo\u015b\u0107
+fieldname.coordinates=Wsp\u00f3\u0142rz\u0119dne
fieldname.altitude=Wysoko\u015b\u0107
fieldname.timestamp=Czas
fieldname.time=Czas
fieldname.speed=Pr\u0119dko\u015b\u0107
fieldname.verticalspeed=Pr\u0119dko\u015b\u0107 pionowa
fieldname.description=Opis
+fieldname.comment=Komentarz
fieldname.mediafilename=Nazwa pliku
# Measurement units
function.splitsegments=Dividir rota em segmentos
function.sewsegments=Reunir segmentos em rota
function.lookupsrtm=Obter altitudes a partir do SRTM
-function.downloadsrtm=Baixar arquivos SRTM
function.getwikipedia=Obter artigos da Wikip\u00e9dia das redondezas
function.searchwikipedianames=Procurar na Wikip\u00e9dia por nome
function.searchopencachingde=Procurar na OpenCaching.de
confirm.lookupsrtm=Encontrado %d valores de altitude
confirm.downloadsrtm=%d arquivos baixados para a cache
confirm.downloadsrtm.1=%d arquivo baixados para a cache
-confirm.downloadsrtm.none=Nenhum arquivo baixado, pois j\u00e1 est\u00e3o na cache.
confirm.deletefieldvalues=Valores do campo removidos
confirm.audioload=Arquivos de \u00e1udio adicionados
confirm.correlateaudios.single=\u00e1udio foi correlacionado
tip.title=Dica
tip.useamapcache=Configurando a cache de disco (Configura\u00e7\u00f5es -> Salvar mapas para disco)\nvoc\u00ea pode acelerar a exibi\u00e7\u00e3o e reduzir o tr\u00e1fego de rede.
tip.learntimeparams=Os resultados ser\u00e3o mais precisos se voc\u00ea usar\nRota -> Aprender os par\u00e2metros para estimativa de tempo\nde suas rotas gravadas.
-tip.downloadsrtm=Voc\u00ea pode acelerar chamando\nOnline -> Baixar ladrilhos SRTM\npara obter as altitudes\naproximadas para a vis\u00e3o 3D.
tip.usesrtmfor3d=Esta rota n\u00e3o possui altitudes.\nVoc\u00ea pode usar as fun\u00e7\u00f5es SRTM para obter as altitudes\naproximadas para a vis\u00e3o 3D.
tip.manuallycorrelateone=Correlacionando pelo menos uma foto manualmente, a diferen\u00e7a de tempo pode ser calculada para voc\u00ea.
menu.settings=Set\u0103ri
menu.settings.onlinemode=\u00cencarc\u0103 h\u0103r\u021bi
dialog.displaysettings.antialias=Folose\u0219te antialiasing
+dialog.displaysettings.wpicon.plectrum=Plectru
+dialog.displaysettings.wpicon.ring=Inel
+dialog.displaysettings.size.small=Mic
+dialog.displaysettings.size.medium=Mediu
+dialog.displaysettings.size.large=Mare
+dialog.displaysettings.windowstyle=Stilul ferestrei (este necesar\u0103 o repornire)
menu.settings.autosave=Salveaz\u0103 set\u0103rile automat la ie\u0219ire
menu.help=Ajutor
function.deletefieldvalues=\u0218terge valorile c\u00e2mpurilor
function.findwaypoint=G\u0103se\u0219te waypoint
function.pastecoordinates=Introdu coordonate noi
+function.pastecoordinatelist=Introdu o list\u0103 de coordonate
function.charts=Grafice
function.show3d=Vizualizare 3D
function.distances=Distan\u0163e
function.splitsegments=Divizeaz\u0103 traseul \u00een segmente
function.sewsegments=Combin\u0103 segmentele traseului
function.lookupsrtm=Descarc\u0103 date SRTM \u00een cache
-function.downloadsrtm=Descarc\u0103 date SRTM
function.getwikipedia=Caut\u0103 articole Wikipedia din proximitate
function.searchwikipedianames=Caut\u0103 Wikipedia dup\u0103 nume
function.searchopencachingde=Caut\u0103 OpenCaching.de
function.managetilecache=Administreaz\u0103 imaginile salvate
function.getweatherforecast=Prognoz\u0103 meteo
function.setaltitudetolerance=Alege toleran\u021ba varia\u021biei altitudinii
+function.selecttimezone=Selecta\u021Bi fusul orar
# Dialogs
dialog.exit.confirm.title=Ie\u015fire din programul GpsPrune
confirm.lookupsrtm=Au fost g\u0103site %d valori de altitudine
confirm.downloadsrtm=S-au desc\u0103rcat %d fi\u015fiere
confirm.downloadsrtm.1=S-au desc\u0103rcat %d fi\u015fier
-confirm.downloadsrtm.none=Niciun fi\u0219ier nu a fost desc\u0103rcat, ele erau deja prezente \u00een cache
confirm.deletefieldvalues=Valorile c\u00e2mpurilor au fost \u0219terse
confirm.audioload=Fi\u0219iere audio au fost ad\u0103ugate
confirm.correlateaudios.single=clipul audio a fost corelat
tip.title=Indiciu
tip.useamapcache=Prin configurarea unui cache pe disc (Set\u0103ri -> Salvare h\u0103r\u021bi)\npute\u021bi \u00eembun\u0103t\u0103\u021bi viteza de afi\u0219are \u0219i reduce traficul de re\u021bea
tip.learntimeparams=Rezultatele vor fi mai corecte dac\u0103 folosi\u021bi\nTraseu -> \u00cenva\u021b\u0103 parametri pentru estim\u0103ri de timp\npe traseele deja \u00eenregistrate.
-tip.downloadsrtm=Pute\u021bi \u00eembun\u0103t\u0103\u021bi viteza prin folosirea\nInternet -> Descarc\u0103 date SRTM
tip.usesrtmfor3d=Acest traseu nu are valori de altitudine.\nPute\u021bi folosi func\u021biile SRTM pentru a aproxima altitudinile \u00een vederea 3D.
tip.manuallycorrelateone=Decalajul de timp poate fi calculat dac\u0103 cel pu\u021bin un element e conectat.
# Field names
fieldname.latitude=Latitudine
fieldname.longitude=Longitudine
+fieldname.coordinates=Coordonate
fieldname.altitude=Altitudine
fieldname.timestamp=Timp
fieldname.time=Timp
fieldname.speed=Vitez\u0103
fieldname.verticalspeed=Vitez\u0103 vertical\u0103
fieldname.description=Descriere
+fieldname.comment=Comentariu
fieldname.mediafilename=Fi\u0219ier
# Measurement units
function.sewsegments=\u0421\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u044b \u0442\u0440\u0435\u043a\u0430 \u0432\u043e\u0435\u0434\u0438\u043d\u043e
function.createmarkerwaypoints=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u043f\u0443\u0442\u0435\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a
function.lookupsrtm=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u044b\u0441\u043e\u0442\u0443 \u0438\u0437 SRTM
-function.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c SRTM-\u0442\u0430\u0439\u043b\u044b
function.getwikipedia=\u0421\u0442\u0430\u0442\u044c\u044f \u043e \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432 \u0412\u0438\u043a\u0438
function.searchwikipedianames=\u041f\u043e\u0438\u0441\u043a \u0441\u0442\u0430\u0442\u0435\u0439 \u0432 \u0412\u0438\u043a\u0438 \u043f\u043e \u0438\u043c\u0435\u043d\u0438
function.searchosmpois=\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0435 \u0442\u043e\u0447\u043a\u0438 OSM
dialog.pastecoordinates.nothingfound=\u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0435 \u0440\u0430\u0437
dialog.pastecoordinatelist.desc=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u0442\u043e\u0447\u0435\u043a \u043f\u043e \u043e\u0434\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0435 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0439
dialog.pluscode.desc=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u043b\u044e\u0441-\u043a\u043e\u0434 \u0437\u0434\u0435\u0441\u044c
+dialog.pluscode.code=\u041f\u043b\u044e\u0441-\u043a\u043e\u0434
dialog.pluscode.nothingfound=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u0434 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0435\u0449\u0451 \u0440\u0430\u0437
dialog.help.help=\u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443\nhttps://gpsprune.activityworkshop.net/
dialog.about.version=\u0412\u0435\u0440\u0441\u0438\u044f
confirm.lookupsrtm=\u041d\u0430\u0439\u0434\u0435\u043d\u043e %d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0441\u043e\u0442\u044b
confirm.downloadsrtm=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u044d\u0448
confirm.downloadsrtm.1=\u0417\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043e %d \u0444\u0430\u0439\u043b\u043e\u0432 \u0432 \u043a\u044d\u0448
-confirm.downloadsrtm.none=\u0412\u0441\u0435 \u0444\u0430\u0439\u043b\u044b \u0443\u0436\u0435 \u0432 \u043a\u044d\u0448\u0435
confirm.deletefieldvalues=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u044f \u0443\u0434\u0430\u043b\u0435\u043d\u044b
confirm.audioload=\u0424\u0430\u0439\u043b\u044b \u0437\u0432\u0443\u043a\u043e\u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b
confirm.correlateaudios.single=\u0417\u0432\u0443\u043a\u043e\u0437\u0430\u043f\u0438\u0441\u044c \u0431\u044b\u043b\u0430 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430
tip.title=\u0421\u043e\u0432\u0435\u0442
tip.useamapcache=\u041f\u0443\u0442\u0435\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u044d\u0448\u0430 \u0434\u0438\u0441\u043a\u0430 (\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 -> \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u044b \u043d\u0430 \u0434\u0438\u0441\u043a\u00bb)\n\u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u0435\u0442\u0435\u0432\u043e\u0439 \u0442\u0440\u0430\u0444\u0438\u043a.
tip.learntimeparams=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0431\u043e\u043b\u0435\u0435 \u0442\u043e\u0447\u043d\u044b\u043c\u0438, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435\n\u0422\u0440\u0435\u043a->\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438\n\u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u0430\u043c\u0438 \u0442\u0440\u0435\u043a\u0438.
-tip.downloadsrtm=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e, \u0432\u044b\u0437\u043e\u0432\u043e\u043c\n\u041e\u043d\u043b\u0430\u0439\u043d-> \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c SRTM-\u0442\u0430\u0439\u043b\u044b\n\u0434\u043b\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u044d\u0448\u0435 \u043a\u0430\u0440\u0442\u044b.
+tip.downloadsrtm=\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0432\u0430\u0448\u0435\u043c \u043a\u044d\u0448\u0435 \u043a\u0430\u0440\u0442\u044b.
tip.usesrtmfor3d=\u042d\u0442\u043e\u0442 \u0442\u0440\u0435\u043a \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u044b\u0441\u043e\u0442.\n\u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 SRTM, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u044b\u0441\u043e\u0442 \u0434\u043b\u044f \u0432\u0438\u0434\u0430 3D.
tip.manuallycorrelateone=\u041f\u0440\u0438 \u0440\u0443\u0447\u043d\u043e\u043c \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043c\u0435\u0442\u043a\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.
# Text entries for the GpsPrune application
-# Swedish entries
+# Swedish entries thanks to erikiiofph7
# Menu entries
menu.file=Arkiv
menu.range.none=V\u00e4lj ingen
menu.range.start=S\u00e4tt till b\u00f6rjan av intervall
menu.range.end=S\u00e4tt till slutet av intervall
-menu.range.average=Medelv\u00e4rdesval
+menu.range.average=Skapa medelv\u00e4rdespunkt
menu.range.reverse=V\u00e4nd intervall
menu.range.mergetracksegments=Sl\u00e5 ihop sp\u00e5rsegment
menu.range.cutandmove=Klipp och flytta urval
menu.view.browser.mapquest=Mapquest
menu.view.browser.yahoo=Yahoo maps
menu.view.browser.bing=Bing maps
+menu.view.browser.inlinemap=Inline map
+menu.view.browser.graphhopper=GraphHopper
menu.settings=Inst\u00e4llningar
menu.settings.onlinemode=H\u00e4mta kartor fr\u00e5n Internet
menu.settings.autosave=Autospara inst\u00e4llningar vid avslut
shortcut.menu.track.undo=Z
shortcut.menu.track.compress=K
shortcut.menu.range.all=A
+shortcut.menu.point.edit=E
shortcut.menu.help.help=H
# Functions
function.convertnamestotimes=Omvandla waypointnamn till tidpunkter
function.deletefieldvalues=Ta bort f\u00e4lt-v\u00e4rden
function.findwaypoint=S\u00f6k waypoint
-function.pastecoordinates=Infoga koordinater
+function.pastecoordinates=Skapa punkt via koordinater
+function.pastecoordinatelist=Skapa punkter via en koordinat-lista
+function.enterpluscode=Skapa punkt(er) via pluss-kod
function.charts=Diagram
function.show3d=3D-vy
function.distances=Avst\u00e5nd
function.viewfulldetails=Alla detaljer
function.estimatetime=Uppskatta tid
function.learnestimationparams=L\u00e4r upp tidsuppskattningsparametrar
+function.autoplay=Spela upp sp\u00e5ret
function.setmapbg=V\u00e4lj bakgrundskarta
function.setpaths=V\u00e4lj s\u00f6kv\u00e4gar f\u00f6r program
function.selectsegment=Markera aktuellt segment
function.sewsegments=Sy ihop sp\u00e5r-segment
function.createmarkerwaypoints=Skapa markerings-waypoints
function.lookupsrtm=H\u00e4mta h\u00f6jddata fr\u00e5n SRTM
-function.downloadsrtm=Ladda ner SRTM-h\u00f6jddata
function.getwikipedia=H\u00e4mta n\u00e4rliggande Wikipedia-artiklar
function.searchwikipedianames=S\u00f6k i Wikipedia p\u00e5 namn
function.searchosmpois=H\u00e4mta n\u00e4rliggande OSM-punkter
function.mapillary=S\u00f6k efter foton i Mapillary
function.downloadosm=Ladda ner OSM-data f\u00f6r omr\u00e5det
function.duplicatepoint=Duplicera punkt
+function.projectpoint=Projicera punkt
function.setcolours=V\u00e4lj f\u00e4rger
function.setdisplaysettings=V\u00e4lj visningsalternativ
function.setlanguage=V\u00e4lj spr\u00e5k
dialog.load.table.datatype=Datatyp
dialog.load.table.description=Beskrivning
dialog.delimiter.comma=Komma ,
+dialog.delimiter.tab=Tabb
dialog.delimiter.space=Mellanslag
+dialog.delimiter.semicolon=Semikolon ;
dialog.delimiter.other=Annat
dialog.openoptions.altitudeunits=H\u00f6jdenhet
dialog.openoptions.speedunits=Hastighetsenheter
dialog.jpegload.progress.title=Laddar in foton
dialog.jpegload.progress=V\u00e4nta medan foton s\u00f6ks
dialog.gpsload.nogpsbabel=Inget GPSBabel-program kunde hittas. Forts\u00e4tt \u00e4nd\u00e5?
+dialog.gpsload.device=Enhetsnamn
dialog.gpsload.format=Format
dialog.gpsload.getwaypoints=Ladda in waypoints
dialog.gpsload.gettracks=Ladda in sp\u00e5r
dialog.estimatetime.error.nodistance=Tidsuppskattningen kr\u00e4ver kopplade sp\u00e5rpunkter f\u00f6r att f\u00e5 avst\u00e5nd
dialog.estimatetime.error.noaltitudes=Intervallet har ingen h\u00f6jd-data
dialog.learnestimationparams.intro=Detta \u00e4r parametrarna ber\u00e4knade fr\u00e5n detta sp\u00e5ret
-dialog.rearrange.tostart=Alla till b\u00f6rjan av fil
-dialog.rearrange.toend=Alla till slut av fil
+dialog.learnestimationparams.averageerror=Medel-avvikelse
+dialog.learnestimationparams.combine=Dessa parametrar kan kombineras med nuvarande v\u00e4rden
+dialog.learnestimationparams.combinedresults=Kombinerat resultat
+dialog.learnestimationparams.weight.100pccurrent=Beh\u00e5ll nuvarande v\u00e4rden
+dialog.learnestimationparams.weight.current=nuvarande
+dialog.learnestimationparams.weight.calculated=ber\u00e4knat
+dialog.learnestimationparams.weight.50pc=Medel av nuvarande v\u00e4rden och ber\u00e4knade v\u00e4rden
+dialog.learnestimationparams.weight.100pccalculated=Anv\u00e4nd dom ber\u00e4knade v\u00e4rdena
+dialog.setmapbg.intro=V\u00e4lj en av kartorna, eller l\u00e4gg till en egen
+dialog.addmapsource.title=L\u00e4gg till en ny karta
+dialog.addmapsource.sourcename=Kartans namn
+dialog.addmapsource.layer1url=URL f\u00f6r f\u00f6rsta lagret
+dialog.addmapsource.layer2url=URL f\u00f6r andra lagret
+dialog.addmapsource.maxzoom=Max zoom-niv\u00e5
+dialog.addmapsource.noname=Namnl\u00f6s
+dialog.gpsies.column.name=Sp\u00e5rnamn
+dialog.gpsies.column.length=L\u00e4ngd
+dialog.gpsies.description=Beskrivning
+dialog.gpsies.nodescription=Ingen beskrivning
+dialog.gpsies.nonefound=Inga sp\u00e5r funna
+dialog.mapillary.nonefound=Inga foton funna
+dialog.wikipedia.column.name=Artikelnamn
+dialog.wikipedia.column.distance=Avst\u00e5nd
+dialog.wikipedia.nonefound=Inga punkter hittade p\u00e5 Wikipedia
+dialog.wikipedia.gallery=Galleri
+dialog.osmpois.column.name=Namn
+dialog.osmpois.column.type=Typ
+dialog.osmpois.nonefound=Inga punkter hittade
+dialog.correlate.photoselect.intro=V\u00e4lj en av dessa korrelerade foton att anv\u00e4nda som tids-offset
+dialog.correlate.select.photoname=Fotonamn
+dialog.correlate.select.timediff=Tidsskillnad
+dialog.correlate.select.photolater=Foto senare
+dialog.correlate.options.intro=V\u00e4lj inst\u00e4llningar f\u00f6r automatisk korrelation
+dialog.correlate.options.offsetpanel=tids-offset
+dialog.correlate.options.offset=Offset
+dialog.correlate.options.offset.hours=timmar,
+dialog.correlate.options.offset.minutes=minuter och
+dialog.correlate.options.offset.seconds=sekunder
+dialog.correlate.options.photolater=Foto senare \u00e4n punkt
+dialog.correlate.options.pointlaterphoto=Punkt senare \u00e4n foto
+dialog.correlate.options.audiolater=Ljud senare \u00e4n punkt
+dialog.correlate.options.pointlateraudio=Punkt senare \u00e4n ljud
+dialog.correlate.options.limitspanel=Korrelationsbegr\u00e4nsningar
+dialog.correlate.options.notimelimit=Ingen tidsbegr\u00e4nsning
+dialog.correlate.options.timelimit=Tidsbegr\u00e4nsning
+dialog.correlate.options.nodistancelimit=Ingen avst\u00e5ndsbegr\u00e4nsning
+dialog.correlate.options.distancelimit=Avst\u00e5ndsbegr\u00e4nsning
+dialog.correlate.options.correlate=Korrelera
+dialog.correlate.alloutsiderange=Alla objekt \u00e4r utanf\u00f6r tidsomf\u00e5nget f\u00f6r sp\u00e5ret, s\u00e5 inga kan korreleras.\nF\u00f6rs\u00f6k att \u00e4ndra offset eller manuellt korrelera \u00e5tminstone ett av objekten.
+dialog.correlate.filetimes=Filens tidsst\u00e4mpel markerar:
+dialog.correlate.filetimes2=av ljudklippet
+dialog.correlate.correltimes=F\u00f6r korrelering, anv\u00e4nd
+dialog.correlate.timestamp.beginning=B\u00f6rjan
+dialog.correlate.timestamp.middle=Mitten
+dialog.correlate.timestamp.end=Slutet
+dialog.correlate.audioselect.intro=V\u00e4lj en av dessa korrelerade ljud att anv\u00e4nda som tids-offset
+dialog.correlate.select.audioname=Ljudnamn
+dialog.correlate.select.audiolater=Ljud senare
+dialog.rearrangewaypoints.desc=V\u00e4lj vart och i vilken ordning waypoints ska hamna
+dialog.rearrangephotos.desc=V\u00e4lj vart och i vilken ordning foto-punkterna ska hamna
+dialog.rearrange.tostart=Alla till b\u00f6rjan
+dialog.rearrange.toend=Alla till slutet
dialog.rearrange.tonearest=Varje till n\u00e4rmaste sp\u00e5rpunkt
+dialog.rearrange.nosort=Sortera inte
+dialog.rearrange.sortbyfilename=Sortera p\u00e5 filnamn
+dialog.rearrange.sortbyname=Sortera p\u00e5 namn
+dialog.rearrange.sortbytime=Sortera p\u00e5 tid
+dialog.compress.closepoints.title=Ta bort punkter f\u00f6r n\u00e4ra varandra
+dialog.compress.closepoints.paramdesc=Spannfaktor
+dialog.compress.wackypoints.title=Ta bort avvikande punkter
+dialog.compress.wackypoints.paramdesc=Avst\u00e5ndsfaktor
+dialog.compress.singletons.title=Ta bort Singletons
+dialog.compress.singletons.paramdesc=Avst\u00e5ndsfaktor
+dialog.compress.duplicates.title=Ta bort dubbletter
+dialog.compress.douglaspeucker.title=Douglas-Peucker-komprimering
+dialog.compress.douglaspeucker.paramdesc=Spannfaktor
+dialog.compress.summarylabel=Punkter att ta bort
+dialog.compress.confirm=%d punkter har markerats.\nVill du ta bort de markerade punkterna?
+dialog.compress.confirmnone=inga punkter har markerats
+dialog.deletemarked.nonefound=Inga datapunkter kunde tas bort
+dialog.pastecoordinates.desc=Fyll i koordinaterna h\u00e4r
+dialog.pastecoordinates.coords=Koordinater
+dialog.pastecoordinates.nothingfound=V\u00e4nligen kontrollera koordinaterna och f\u00f6rs\u00f6k igen
+dialog.pastecoordinatelist.desc=Fyll i koordinaterna f\u00f6r dom nya punkterna, en punkt per rad
+dialog.pluscode.desc=Fyll i pluss-koden (Open Location Code) h\u00e4r
+dialog.pluscode.code=Pluss-kod
+dialog.help.help=L\u00e4s\n https://gpsprune.activityworkshop.net/\nf\u00f6r mer information och tips,\ninklusive en PDF-anv\u00e4ndarhandbok som man kan k\u00f6pa.
+dialog.about.version=Version
+dialog.about.build=Build
+dialog.about.summarytext1=GpsPrune \u00e4r ett program f\u00f6r att ladda in, visa och redigera data fr\u00e5n GPS-mottagare.
+dialog.about.summarytext2=Det \u00e4r publicerat under Gnu GPL f\u00f6r fri, \u00f6ppen, v\u00e4rldsomsp\u00e4nnande anv\u00e4ndning och f\u00f6rb\u00e4ttring.<br>Kopiering, \u00e5terutgivning och modifieringar \u00e4r till\u00e5tna och uppmuntras<br>enligt villkoren i den inkluderade filen <code>license.txt</code>.
+dialog.about.summarytext3=Bes\u00f6k <code style="font-weight:bold">https://activityworkshop.net/</code> f\u00f6r mer information och tips, inklusive<br>en PDF-anv\u00e4ndarhandbok som du kan k\u00f6pa.
+dialog.about.languages=Tillg\u00e4ngliga spr\u00e5k
+dialog.about.translatedby=\u00d6versatt till svenska av erikiiofph7.
+dialog.about.systeminfo=System-info
+dialog.about.systeminfo.os=Operativsystem
+dialog.about.systeminfo.java=Java Runtime
+dialog.about.systeminfo.java3d=Java3d installerat
+dialog.about.systeminfo.povray=Povray installerat
+dialog.about.systeminfo.exiftool=Exiftool installerat
+dialog.about.systeminfo.gpsbabel=Gpsbabel installerat
+dialog.about.systeminfo.gnuplot=Gnuplot installerat
+dialog.about.yes=Ja
+dialog.about.no=Nej
+dialog.about.credits=Tillk\u00e4nnagivanden
+dialog.about.credits.code=GpsPune:s kod skriven av
+dialog.about.credits.exifcode=Exif:s kad skriven av
+dialog.about.credits.icons=N\u00e5gra ikoner tagna fr\u00e5n
+dialog.about.credits.translators=\u00d6vers\u00e4ttare
+dialog.about.credits.translations=\u00d6vers\u00e4ttningar hj\u00e4lpta av
+dialog.about.credits.devtools=Utvecklingsverktyg
+dialog.about.credits.othertools=\u00d6vriga verktyg
+dialog.about.credits.thanks=Tack till
+dialog.about.readme=L\u00e4sMig
+dialog.checkversion.error=Versionsnummret kunde inte kollas upp.\nVar god kontrollera din internetuppkoppling.
+dialog.checkversion.uptodate=Du anv\u00e4nder den senaste versionen av GpsPrune.
+dialog.checkversion.newversion1=En ny version av GpsPrune finns nu tillg\u00e4nglig! Den senaste versionen \u00e4r
+dialog.checkversion.newversion2=.
+dialog.checkversion.releasedate1=Denna nya version sl\u00e4pptes
+dialog.checkversion.releasedate2=.
+dialog.checkversion.download=F\u00f6r att ladda ner den nya versionen g\u00e5 till https://gpsprune.activityworkshop.net/download.html.
+dialog.keys.intro=Du kan anv\u00e4nda dessa snabbkommandon ist\u00e4llet f\u00f6r att anv\u00e4nda musen
+dialog.keys.keylist=<table><tr><td>Piltangenter</td><td>Panorera kartan \u00e5t v\u00e4nster, h\u00f6ger, upp, ner</td></tr><tr><td>Ctrl + v\u00e4nster, h\u00f6ger piltangent</td><td>Markera f\u00f6reg\u00e5ende eller n\u00e4sta punkt</td></tr><tr><td>Ctrl + pil upp, pil ner</td><td>Zooma in eller ut</td></tr><tr><td>Ctrl + PgUp, PgDown</td><td>Markera f\u00f6reg\u00e5ende, n\u00e4sta segment</td></tr><tr><td>Ctrl + Home, End</td><td>Markera f\u00f6rsta, sista punkt</td></tr><tr><td>Del</td><td>Radera markerad punkt</td></tr></table>
+dialog.keys.normalmodifier=Ctrl
+dialog.keys.macmodifier=Command
+dialog.paths.prune.gnuplotpath=S\u00f6kv\u00e4g till gnuplot
+dialog.paths.prune.gpsbabelpath=S\u00f6kv\u00e4g till gpsbabel
+dialog.paths.prune.exiftoolpath=S\u00f6kv\u00e4g till exiftool
+dialog.setpaths.intro=Om du beh\u00f6ver kan du ange s\u00f6kv\u00e4gar till dom externa programmen:
+dialog.setpaths.found=S\u00f6kv\u00e4g hittad?
+dialog.addaltitude.noaltitudes=Det valda intervallet inneh\u00e5ller ingen h\u00f6jddata
+dialog.addaltitude.desc=H\u00f6jd-offset att addera
+dialog.lookupsrtm.overwritezeros=Skriva \u00f6ver h\u00f6jd-v\u00e4rden som \u00e4r noll?
+dialog.setcolours.intro=Klicka p\u00e5 en f\u00e4rg-ruta f\u00f6r att \u00e4ndra f\u00e4rg
+dialog.setcolours.background=Bakgrund
+dialog.setcolours.borders=Kanter
+dialog.setcolours.lines=Linjer
+dialog.setcolours.primary=Prim\u00e4r
+dialog.setcolours.secondary=Sekund\u00e4r
+dialog.setcolours.point=Punkter
+dialog.setcolours.selection=Markering
+dialog.setcolours.text=Text
+dialog.colourchooser.title=V\u00e4lj f\u00e4rg
+dialog.colourchooser.red=R\u00f6d
+dialog.colourchooser.green=Gr\u00f6n
+dialog.colourchooser.blue=Bl\u00e5
+dialog.colourer.intro=En punkt-m\u00e5lare kan ge sp\u00e5rpunkter olika f\u00e4rg
+dialog.colourer.type=M\u00e5lar-typ
+dialog.colourer.type.none=Ingen
+dialog.colourer.type.byfile=Efter fil
+dialog.colourer.type.bysegment=Efter segment
+dialog.colourer.type.byaltitude=Efter h\u00f6jd
+dialog.colourer.type.byspeed=Efter hastighet
+dialog.colourer.type.byvertspeed=Efter vertikal hastighet
+dialog.colourer.type.bygradient=Efter gradient
+dialog.colourer.type.bydate=Efter datum
+dialog.colourer.start=Start-f\u00e4rg
+dialog.colourer.end=Slut-f\u00e4rg
+dialog.colourer.maxcolours=Max antal f\u00e4rger
+dialog.setlanguage.firstintro=Du kan antingen v\u00e4lja ett av dom inkluderade spr\u00e5ken<p>eller v\u00e4lja att anv\u00e4nda en text-fil ist\u00e4llet.
+dialog.setlanguage.secondintro=Du m\u00e5ste spara dina inst\u00e4llningar och sedan<p>starta om GpsPrune f\u00f6r att \u00e4ndringarna ska verkst\u00e4llas.
+dialog.setlanguage.language=Spr\u00e5k
+dialog.setlanguage.languagefile=Spr\u00e5k-fil
+dialog.setlanguage.endmessage=Spara dina inst\u00e4llningar nu och starta om GpsPrune\nf\u00f6r att \u00e4ndringarna ska verkst\u00e4llas.
+dialog.setlanguage.endmessagewithautosave=Var god starta om GpsPrune f\u00f6r att bytet av spr\u00e5k ska ske.
+dialog.diskcache.save=Spara kartbilder till h\u00e5rddisk
+dialog.diskcache.dir=Cache-mapp
+dialog.diskcache.createdir=Skapa mapp
+dialog.diskcache.nocreate=Ingen cache-mapp skapad
+dialog.diskcache.cannotwrite=Kart-rutor ("tiles") kan inte sparas i den valda mappen
+dialog.diskcache.table.path=Mapp
+dialog.diskcache.table.usedby=Anv\u00e4nds av
+dialog.diskcache.table.zoom=Zoom
+dialog.diskcache.table.tiles=Kart-rutor ("tiles")
+dialog.diskcache.table.megabytes=Megabytes
+dialog.diskcache.tileset=Upps\u00e4ttning kart-rutor ("tiles")
+dialog.diskcache.tileset.multiple=multipla
+dialog.weather.sunrise=Soluppg\u00e5ng
+dialog.weather.sunset=Solnedg\u00e5ng
+dialog.weather.temperatureunits=Temperaturer
+dialog.weather.currentforecast=Nuvarande v\u00e4der
+dialog.weather.dailyforecast=Flerdygnsprognos
+dialog.weather.day.now=Nuvarande v\u00e4der
+dialog.weather.day.today=Idag
+dialog.weather.day.tomorrow=Imorgon
+dialog.weather.day.monday=M\u00e5ndag
+dialog.weather.day.tuesday=Tisdag
+dialog.weather.day.wednesday=Onsdag
+dialog.weather.day.thursday=Torsdag
+dialog.weather.day.friday=Fredag
+dialog.weather.day.saturday=L\u00f6rdag
+dialog.weather.day.sunday=S\u00f6ndag
+dialog.weather.wind=Vind
+dialog.weather.temp=Temp
+dialog.weather.humidity=Fuktighet
+dialog.deletebydate.nodate=Ingen tidsst\u00e4mpel
+dialog.deletebydate.column.keep=Beh\u00e5ll
+dialog.deletebydate.column.delete=Ta bort
+dialog.settimezone.system=Anv\u00e4nd systemets tidszon
+dialog.settimezone.custom=Anv\u00e4nd f\u00f6ljande tidszon:
+dialog.settimezone.selectedzone=Vald tidszon
+dialog.settimezone.offsetfromutc=Offset fr\u00e5n UTC
+dialog.autoplay.usetimestamps=Anv\u00e4nd tidsst\u00e4mplar fr\u00e5n punkter
+dialog.autoplay.rewind=Tillbaka till b\u00f6rjan
+dialog.autoplay.pause=Paus
+dialog.autoplay.play=Spela upp
# Buttons
button.ok=OK
button.yestoall=Ja till alla
button.notoall=Nej till alla
button.always=Alltid
-button.select=Markera
-button.selectall=Markera alla
-button.selectnone=Markera inget
+button.select=V\u00e4lj
+button.selectall=V\u00e4lj alla
+button.selectnone=V\u00e4lj ingen
button.preview=F\u00f6rhandsvisa
button.load=Ladda in
button.guessfields=Gissa f\u00e4lt
details.altitude.to=till
details.range.climb=Uppf\u00f6r
details.range.descent=Nedf\u00f6r
-details.coordformat=Koortinat-format
-details.distanceunits=Distans-enhet
+details.coordformat=Koordinatformat
+details.distanceunits=Distansenhet
display.range.time.secs=s
display.range.time.mins=m
display.range.time.hours=h
details.audio.playing=spelar...
map.overzoom=Inga kartor tillg\u00e4ngliga p\u00e5 denna zoom-niv\u00e5
+# Field names
+fieldname.latitude=Latitud
+fieldname.longitude=Longitud
+fieldname.coordinates=Koordinaterna
+fieldname.altitude=Altitud
+fieldname.timestamp=Tidpunkt
+fieldname.time=Tid
+fieldname.date=Datum
+fieldname.waypointname=Namn
+fieldname.waypointtype=Typ
+fieldname.newsegment=Segment
+fieldname.prefix=F\u00e4lt
+fieldname.distance=Distans
+fieldname.speed=Hastighet
+fieldname.verticalspeed=Vertikal hastighet
+fieldname.description=Beskrivning
+fieldname.comment=Kommentar
+fieldname.mediafilename=Filnamn
+
+# Measurement units
+units.original=Original
+units.default=Default
+units.metres=Meter
+units.metres.short=m
+units.feet=Fot
+units.feet.short=fot
+units.kilometres=Kilometer
+units.kilometres.short=km
+units.kilometresperhour=km per timme
+units.kilometresperhour.short=km/h
+units.miles=Miles
+units.miles.short=mi
+units.milesperhour=miles per timme
+units.milesperhour.short=mph
+units.nauticalmiles=Nautiska mil
+units.nauticalmiles.short=N.m.
+units.nauticalmilesperhour.short=knop
+units.metrespersec=meter per sekund
+units.metrespersec.short=m/s
+units.feetpersec=fot per sekund
+units.feetpersec.short=fot/s
+units.hours=timmar
+units.minutes=minuter
+units.seconds=sekunder
+units.degminsec=Grad-min-sek
+units.degmin=Grad-min
+units.deg=Grader
+units.iso8601=ISO 8601
+units.degreescelsius=Celsius
+units.degreescelsius.short=\u00b0C
+units.degreesfahrenheit=Fahrenheit
+units.degreesfahrenheit.short=\u00b0F
+
+# How to combine conditions, such as filters
+logic.and=och
+logic.or=eller
+
# External urls and services
openweathermap.lang=se
function.splitsegments=\u0420\u043e\u0437\u0431\u0438\u0442\u0438 \u0442\u0440\u0435\u043a \u043d\u0430 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438
function.sewsegments=\u0417\u0448\u0438\u0442\u0438 \u0441\u0435\u0433\u043c\u0435\u043d\u0442\u0438 \u0442\u0440\u0435\u043a\u0456\u0432 \u0440\u0430\u0437\u043e\u043c
function.lookupsrtm=\u041e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u0432\u0438\u0441\u043e\u0442\u0438 \u0437 SRTM
-function.downloadsrtm=\u0417\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 SRTM-\u0442\u0430\u0439\u043b\u0438
function.getwikipedia=\u041e\u0442\u0440\u0438\u043c\u0430\u0442\u0438 \u043d\u0430\u0439\u0431\u043b\u0438\u0436\u0447\u0443 \u0441\u0442\u0430\u0442\u0442\u044e \u0437 \u0412\u0456\u043a\u0456\u043f\u0435\u0434\u0456\u0457
function.searchwikipedianames=\u041f\u043e\u0448\u0443\u043a \u0441\u0442\u0430\u0442\u0435\u0439 \u0437 \u0412\u0456\u043a\u0456\u043f\u0435\u0434\u0456\u0457 \u0437\u0430 \u043d\u0430\u0437\u0432\u043e\u044e
function.downloadosm=\u0417\u0432\u0430\u043d\u0442\u0430\u0436\u0438\u0442\u0438 OSM-\u0434\u0430\u043d\u0456 \u043d\u0430 \u0442\u0435\u0440\u0438\u0442\u043e\u0440\u0456\u044e
function.splitsegments=\u5206\u5272\u8f68\u8ff9
function.sewsegments=\u63a5\u5408\u8f68\u8ff9\u7247\u6bb5
function.lookupsrtm=\u4eceSRTM\u83b7\u5f97\u9ad8\u5ea6\u4fe1\u606f
-function.downloadsrtm=\u4e0b\u8f7dSRTM\u6570\u636e
function.getwikipedia=\u7ef4\u57fa\u767e\u79d1\u6709\u5173\u672c\u5730\u6587\u7ae0
function.searchwikipedianames=\u6309\u540d\u5b57\u4ece\u7ef4\u57fa\u767e\u79d1\u67e5\u627e
function.downloadosm=\u4e0b\u8f7d\u6b64\u5730OSM\u6570\u636e
confirm.lookupsrtm=\u627e\u5230 %d \u9ad8\u5ea6\u503c
confirm.downloadsrtm=\u4e0b\u8f7d %d \u9ad8\u5ea6\u6587\u4ef6\u5230\u7f13\u5b58\u4e2d
confirm.downloadsrtm.1=\u4e0b\u8f7d %d \u9ad8\u5ea6\u6587\u4ef6\u5230\u7f13\u5b58\u4e2d
-confirm.downloadsrtm.none=\u65e0\u9700\u4e0b\u8f7d\uff0c\u6587\u4ef6\u5df2\u5b58\u50a8\u5728\u7f13\u5b58\u4e2d
confirm.deletefieldvalues=\u533a\u57df\u6570\u636e\u5df2\u5220\u9664
confirm.audioload=\u5df2\u6dfb\u52a0\u58f0\u97f3\u6587\u4ef6
confirm.correlateaudios.single=\u58f0\u97f3\u5df2\u5173\u8054
tip.title=\u63d0\u793a
tip.useamapcache=\u542f\u7528\u78c1\u76d8\u7f13\u5b58 (\u8bbe\u7f6e -> \u4fdd\u5b58\u5730\u56fe)\n\u53ef\u4ee5\u63d0\u9ad8\u663e\u793a\u901f\u5ea6\uff0c\u51cf\u5c11\u7f51\u7edc\u6d41\u91cf
tip.learntimeparams=\u5bf9\u8bb0\u5f55\u7684\u8f68\u8ff9\u542f\u7528 \u8f68\u8ff9 -> \u4f7f\u7528\u5f53\u524d\u8f68\u8ff9\u53c2\u6570\u4f30\u8ba1\u65f6\u95f4\n\u5c06\u4f7f\u7ed3\u679c\u66f4\u52a0\u7cbe\u786e
-tip.downloadsrtm=\u53ef\u4ee5\u70b9\u51fb \u8054\u7f51 -> \u4e0b\u8f7dSRTM\u6570\u636e\n\u5c06\u6570\u636e\u4fdd\u5b58\u5230\u78c1\u76d8\u7f13\u5b58\u4ee5\u63d0\u9ad8\u901f\u5ea6
tip.usesrtmfor3d=\u6b64\u8f68\u8ff9\u6ca1\u6709\u9ad8\u5ea6\u4fe1\u606f\n\u53ef\u4ee5\u901a\u8fc7SRTM\u83b7\u53d6\u5927\u81f4\u9ad8\u5ea6\u4ee5\u663e\u793a3D\u89c6\u56fe
tip.manuallycorrelateone=\u63d0\u793a\uff1a\u624b\u52a8\u94fe\u63a5\u81f3\u5c11\u4e00\u5f20\u7167\u7247\uff0c\u53ef\u81ea\u52a8\u8ba1\u7b97\u65f6\u95f4\u504f\u79fb
private String _latitude = null, _longitude = null;
private GpxTag _elevation = new GpxTag(), _time = new GpxTag();
private GpxTag _type = new GpxTag(), _description = new GpxTag();
- private GpxTag _link = new GpxTag();
+ private GpxTag _link = new GpxTag(), _comment = new GpxTag();
private GpxTag _currentTag = null;
private ArrayList<String[]> _pointList = new ArrayList<String[]>();
private ArrayList<String> _linkList = new ArrayList<String>();
_type.setValue(null);
_link.setValue(null);
_description.setValue(null);
+ _comment.setValue(null);
}
else if (tag.equals("ele")) {
_currentTag = _elevation;
else if (tag.equals("description") || tag.equals("desc")) {
_currentTag = _description;
}
+ else if (tag.equals("cmt")) {
+ _currentTag = _comment;
+ }
else if (tag.equals("link")) {
_link.setValue(attributes.getValue("href"));
}
private void processPoint()
{
// Put the values into a String array matching the order in getFieldArray()
- String[] values = new String[8];
+ String[] values = new String[9];
values[0] = _latitude;
values[1] = _longitude;
values[2] = _elevation.getValue();
}
values[6] = _type.getValue();
values[7] = _description.getValue();
+ values[8] = _comment.getValue();
_pointList.add(values);
_trackNameList.addPoint(_trackNum, _trackName.getValue(), _isTrackPoint);
_linkList.add(_link.getValue());
{
final Field[] fields = {Field.LATITUDE, Field.LONGITUDE, Field.ALTITUDE,
Field.WAYPT_NAME, Field.TIMESTAMP, Field.NEW_SEGMENT,
- Field.WAYPT_TYPE, Field.DESCRIPTION};
+ Field.WAYPT_TYPE, Field.DESCRIPTION, Field.COMMENT};
return fields;
}
-GpsPrune version 20
-===================
+GpsPrune version 20.1
+=====================
GpsPrune is an application for viewing, editing and managing coordinate data from GPS systems,
including format conversion, charting, 3d visualisation, audio and photo correlation, and online resource lookup.
=======
To run GpsPrune from the jar file, simply call it from a command prompt or shell:
- java -jar gpsprune_20.jar
+ java -jar gpsprune_20.1.jar
If the jar file is saved in a different directory, you will need to include the path.
Depending on your system settings, you may be able to click or double-click on the jar file
or other link can of course be made should you wish.
To specify a language other than the default, use an additional parameter, eg:
- java -jar gpsprune_20.jar --lang=DE
+ java -jar gpsprune_20.1.jar --lang=DE
-New with version 20
+New with version 20.1
=====================
+The following fixes and additions were made since version 20:
+ - Starting with an empty map (fperrin)
+ - Reading and writing <cmt> tags from gpx files (Willy)
+ - Add option to use GTK look-and-feel (fperrin)
+ - Translation updates (Carlos, Tche333)
+ - Solve issue #29/973910 regarding missing tile cache (Peter Gervai)
+ - Remove "Download SRTM" function and just do it automatically
+ - Tweak waypoint icons
+ - Fix problem with a recently-used file which has disappeared
+ - Fix problem with moving / renaming downloaded tile files
+
+New with version 20
+===================
The following fixes and additions were made since version 19:
- Add option to use Nimbus look-and-feel (wishlist 77)
- Extend the marker waypoints function to include half the distance, half the climb and half the descent
}
source = replaceGpxTags(source, "<desc>", "</desc>",
XmlUtils.fixCdata(inPoint.getFieldValue(Field.DESCRIPTION)));
+ source = replaceGpxTags(source, "<cmt>", "</cmt>", inPoint.getFieldValue(Field.COMMENT));
}
// photo / audio links
if (source != null && (inPoint.hasMedia() || source.indexOf("</link>") > 0)) {
inWriter.write(XmlUtils.fixCdata(inPoint.getWaypointName().trim()));
inWriter.write("</name>\n");
// description, if any
- String desc = XmlUtils.fixCdata(inPoint.getFieldValue(Field.DESCRIPTION));
+ final String desc = XmlUtils.fixCdata(inPoint.getFieldValue(Field.DESCRIPTION));
if (desc != null && !desc.equals(""))
{
inWriter.write("\t\t<desc>");
inWriter.write(desc);
inWriter.write("</desc>\n");
}
+ // comment, if any
+ final String comment = XmlUtils.fixCdata(inPoint.getFieldValue(Field.COMMENT));
+ if (comment != null && !comment.equals(""))
+ {
+ inWriter.write("\t\t<cmt>");
+ inWriter.write(comment);
+ inWriter.write("</cmt>\n");
+ }
// Media links, if any
if (inSettings.getExportPhotoPoints() && inPoint.getPhoto() != null)
{
// Wait until tile is available (loaded asynchronously)
while (tile.getWidth(null) < 0 && !inDownload)
{
- // System.out.println("Wait for tile width");
try {
- Thread.sleep(inDownload ? 500 : 100);
+ Thread.sleep(100);
}
catch (InterruptedException ie) {}
}
- // work out where to copy it to, paint it
- // System.out.println("Painting tile " + x + "," + y + " at " + xOffset + "," + yOffset);
numTilesUsed++;
g.drawImage(tile, xOffset, yOffset, null);
}
{
// Doesn't need any action
}
+
+ /** React to cache problem */
+ public void reportCacheFailure()
+ {
+ // Doesn't need any action
+ }
}