Codebase list gpsprune / e2bc01d
Imported Upstream version 10 David Paleino 14 years ago
72 changed file(s) with 17840 addition(s) and 1281 deletion(s). Raw diff Collapse all Expand all
44 # create compile directory
55 mkdir compile
66 # compile java
7 javac -cp /usr/share/java/metadata-extractor.jar -d compile tim/prune/*.java tim/prune/config/*.java tim/prune/correlate/*.java tim/prune/data/*.java tim/prune/jpeg/*.java tim/prune/function/*.java tim/prune/function/browser/*.java tim/prune/function/charts/*.java tim/prune/function/compress/*.java tim/prune/function/distance/*.java tim/prune/function/edit/*.java tim/prune/function/gpsies/*.java tim/prune/gui/*.java tim/prune/gui/map/*.java tim/prune/load/*.java tim/prune/load/xml/*.java tim/prune/save/*.java tim/prune/threedee/*.java tim/prune/undo/*.java
7 javac -cp /usr/share/java/metadata-extractor.jar -d compile tim/prune/*.java tim/prune/config/*.java tim/prune/correlate/*.java tim/prune/data/*.java tim/prune/jpeg/*.java tim/prune/function/*.java tim/prune/function/browser/*.java tim/prune/function/charts/*.java tim/prune/function/compress/*.java tim/prune/function/distance/*.java tim/prune/function/edit/*.java tim/prune/function/gpsies/*.java tim/prune/function/srtm/*.java tim/prune/gui/*.java tim/prune/gui/map/*.java tim/prune/gui/profile/*.java tim/prune/jpeg/*.java tim/prune/load/*.java tim/prune/load/xml/*.java tim/prune/save/*.java tim/prune/threedee/*.java tim/prune/undo/*.java
88 # add other required resources
99 cp -r tim/prune/lang compile/tim/prune/
1010 cp -r tim/prune/*.txt compile/tim/prune/
1111 cp -r tim/prune/gui/images compile/tim/prune/gui/
12 cp tim/prune/function/srtm/srtmtiles.dat compile/tim/prune/function/srtm
1213 # make dist directory
1314 mkdir dist
1415 # build into jar file
15 jar cfm dist/prune_09.jar MANIFEST.MF -C compile .
16 jar cfm dist/prune_10.jar MANIFEST.MF -C compile .
1617 # finished!
1718 echo "build complete"
99 import javax.swing.JOptionPane;
1010
1111 import tim.prune.data.Altitude;
12 import tim.prune.data.Checker;
1213 import tim.prune.data.DataPoint;
1314 import tim.prune.data.Field;
1415 import tim.prune.data.LatLonRectangle;
577578 {
578579 // create undo object
579580 UndoCreatePoint undo = new UndoCreatePoint();
581 _undoStack.add(undo);
580582 // add point to track
581583 inPoint.setSegmentStart(true);
582584 _track.appendPoints(new DataPoint[] {inPoint});
583585 // ensure track's field list contains point's fields
584586 _track.extendFieldList(inPoint.getFieldList());
585587 _trackInfo.selectPoint(_trackInfo.getTrack().getNumPoints()-1);
586 // add undo object to stack
587 _undoStack.add(undo);
588588 // update listeners
589589 UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.createpoint"));
590590 }
646646 * @param inAltFormat altitude format
647647 * @param inSourceInfo information about the source of the data
648648 */
649 public void informDataLoaded(Field[] inFieldArray, Object[][] inDataArray, Altitude.Format inAltFormat,
650 SourceInfo inSourceInfo)
649 public void informDataLoaded(Field[] inFieldArray, Object[][] inDataArray,
650 Altitude.Format inAltFormat, SourceInfo inSourceInfo)
651651 {
652652 // Check whether loaded array can be properly parsed into a Track
653653 Track loadedTrack = new Track();
658658 // load next file if there's a queue
659659 loadNextFile();
660660 return;
661 }
662 // Check for doubled track
663 if (Checker.isDoubledTrack(loadedTrack)) {
664 JOptionPane.showMessageDialog(_frame, I18nManager.getText("dialog.open.contentsdoubled"),
665 I18nManager.getText("function.open"), JOptionPane.WARNING_MESSAGE);
661666 }
662667 // Decide whether to load or append
663668 if (_track.getNumPoints() > 0)
715720 }
716721 UpdateMessageBroker.informSubscribers();
717722 // Update status bar
718 UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.loadfile") + " '" + inSourceInfo.getName() + "'");
723 UpdateMessageBroker.informSubscribers(I18nManager.getText("confirm.loadfile")
724 + " '" + inSourceInfo.getName() + "'");
719725 // update menu
720726 _menuManager.informFileLoaded();
721727 // load next file if there's a queue
66 import tim.prune.function.distance.DistanceFunction;
77 import tim.prune.function.edit.PointNameEditor;
88 import tim.prune.function.gpsies.GetGpsiesFunction;
9 import tim.prune.function.srtm.LookupSrtmFunction;
910 import tim.prune.load.GpsLoader;
1011 import tim.prune.save.GpsSaver;
1112 import tim.prune.save.GpxExporter;
2728 public static RearrangeWaypointsFunction FUNCTION_REARRANGE_WAYPOINTS = null;
2829 public static GenericFunction FUNCTION_REARRANGE_PHOTOS = null;
2930 public static GenericFunction FUNCTION_COMPRESS = null;
31 public static GenericFunction FUNCTION_LOOKUP_SRTM = null;
3032 public static GenericFunction FUNCTION_ADD_TIME_OFFSET = null;
3133 public static GenericFunction FUNCTION_ADD_ALTITUDE_OFFSET = null;
3234 public static GenericFunction FUNCTION_CONVERT_NAMES_TO_TIMES = null;
4345 public static GenericFunction FUNCTION_FULL_RANGE_DETAILS = null;
4446 public static GenericFunction FUNCTION_GET_GPSIES = null;
4547 public static GenericFunction FUNCTION_SET_MAP_BG = null;
48 public static GenericFunction FUNCTION_SET_DISK_CACHE = null;
4649 public static GenericFunction FUNCTION_SET_PATHS = null;
4750 public static GenericFunction FUNCTION_SET_KMZ_IMAGE_SIZE = null;
4851 public static GenericFunction FUNCTION_SET_COLOURS = null;
6972 FUNCTION_REARRANGE_WAYPOINTS = new RearrangeWaypointsFunction(inApp);
7073 FUNCTION_REARRANGE_PHOTOS = new RearrangePhotosFunction(inApp);
7174 FUNCTION_COMPRESS = new CompressTrackFunction(inApp);
75 FUNCTION_LOOKUP_SRTM = new LookupSrtmFunction(inApp);
7276 FUNCTION_ADD_TIME_OFFSET = new AddTimeOffset(inApp);
7377 FUNCTION_ADD_ALTITUDE_OFFSET = new AddAltitudeOffset(inApp);
7478 FUNCTION_CONVERT_NAMES_TO_TIMES = new ConvertNamesToTimes(inApp);
8589 FUNCTION_FULL_RANGE_DETAILS = new FullRangeDetails(inApp);
8690 FUNCTION_GET_GPSIES = new GetGpsiesFunction(inApp);
8791 FUNCTION_SET_MAP_BG = new SetMapBgFunction(inApp);
92 FUNCTION_SET_DISK_CACHE = new DiskCacheConfig(inApp);
8893 FUNCTION_SET_PATHS = new SetPathsFunction(inApp);
8994 FUNCTION_SET_KMZ_IMAGE_SIZE = new SetKmzImageSize(inApp);
9095 FUNCTION_SET_COLOURS = new SetColours(inApp);
1616 import tim.prune.gui.DetailsDisplay;
1717 import tim.prune.gui.IconManager;
1818 import tim.prune.gui.MenuManager;
19 import tim.prune.gui.ProfileChart;
2019 import tim.prune.gui.SelectorDisplay;
2120 import tim.prune.gui.StatusBar;
2221 import tim.prune.gui.Viewport;
2322 import tim.prune.gui.map.MapCanvas;
23 import tim.prune.gui.profile.ProfileChart;
2424
2525 /**
2626 * Prune is a tool to visualize, edit, convert and prune GPS data
3232 public class GpsPruner
3333 {
3434 /** Version number of application, used in about screen and for version check */
35 public static final String VERSION_NUMBER = "9";
35 public static final String VERSION_NUMBER = "10";
3636 /** Build number, just used for about screen */
37 public static final String BUILD_NUMBER = "179";
37 public static final String BUILD_NUMBER = "189";
3838 /** Static reference to App object */
3939 private static App APP = null;
40
41 /** Program name, used for Frame title and for Macs also on the system bar */
42 private static final String PROGRAM_NAME = "Prune";
4043
4144
4245 /**
5154 String configFilename = null;
5255 ArrayList<File> dataFiles = new ArrayList<File>();
5356 boolean showUsage = false;
57
58 // Mac OSX - specific properties (Mac insists that this is done as soon as possible)
59 if (System.getProperty("mrj.version") != null) {
60 System.setProperty("apple.laf.useScreenMenuBar", "true"); // menu at top of screen
61 System.setProperty("com.apple.mrj.application.apple.menu.about.name", PROGRAM_NAME);
62 }
63 // Loop over given arguments, if any
5464 for (int i=0; i<args.length; i++)
5565 {
5666 String arg = args[i];
167177 */
168178 private static void launch(ArrayList<File> inDataFiles)
169179 {
170 JFrame frame = new JFrame("Prune");
180 // Initialise Frame
181 JFrame frame = new JFrame(PROGRAM_NAME);
171182 APP = new App(frame);
172183
173184 // make menu
3636 public static final String KEY_POVRAY_FONT = "prune.povrayfont";
3737 /** Key for metric/imperial */
3838 public static final String KEY_METRIC_UNITS = "prune.metricunits";
39 /** Key for map server index */
40 public static final String KEY_MAPSERVERINDEX = "prune.mapserverindex";
41 /** Key for map server url */
42 public static final String KEY_MAPSERVERURL = "prune.mapserverurl";
39 /** Key for index of map source */
40 public static final String KEY_MAPSOURCE_INDEX = "prune.mapsource";
41 /** Key for String containing custom map sources */
42 public static final String KEY_MAPSOURCE_LIST = "prune.mapsourcelist";
4343 /** Key for show map flag */
4444 public static final String KEY_SHOW_MAP = "prune.showmap";
45 /** Key for path to disk cache */
46 public static final String KEY_DISK_CACHE = "prune.diskcache";
47 /** Key for working online flag */
48 public static final String KEY_ONLINE_MODE = "prune.onlinemode";
4549 /** Key for width of thumbnails in kmz */
4650 public static final String KEY_KMZ_IMAGE_WIDTH = "prune.kmzimagewidth";
4751 /** Key for height of thumbnails in kmz */
216220 /**
217221 * Get the given configuration setting as a boolean
218222 * @param inKey key
219 * @return configuration setting as a boolean
223 * @return configuration setting as a boolean (default to true)
220224 */
221225 public static boolean getConfigBoolean(String inKey)
222226 {
0 package tim.prune.data;
1
2 /**
3 * Class to provide checking functions
4 */
5 public abstract class Checker
6 {
7
8 /**
9 * Check if a given track is doubled, so that each point is given twice,
10 * once as waypoint and again as track point
11 * @param inTrack track to check
12 * @return true if track is doubled, false otherwise
13 */
14 public static boolean isDoubledTrack(Track inTrack)
15 {
16 // Check for empty track
17 if (inTrack == null || inTrack.getNumPoints() < 2) {return false;}
18 // Check for non-even number of points
19 final int numPoints = inTrack.getNumPoints();
20 if (numPoints % 2 == 1) {return false;}
21 // Loop through first half of track
22 final int halfNum = numPoints / 2;
23 for (int i=0; i<halfNum; i++)
24 {
25 DataPoint firstPoint = inTrack.getPoint(i);
26 DataPoint secondPoint = inTrack.getPoint(i + halfNum);
27 if (!firstPoint.getLatitude().equals(secondPoint.getLatitude())
28 || !firstPoint.getLongitude().equals(secondPoint.getLongitude())) {
29 return false;
30 }
31 }
32 // Passed the test, so contents must all be doubled
33 return true;
34 }
35
36 /**
37 * Find the index of the next segment start after the given index
38 * @param inTrack track object
39 * @param inIndex current index
40 * @return index of next segment start
41 */
42 public static int getNextSegmentStart(Track inTrack, int inIndex)
43 {
44 int i = inIndex + 1;
45 DataPoint point = null;
46 while ((point=inTrack.getPoint(i)) != null && !point.getSegmentStart()) {
47 i++;
48 }
49 return Math.min(i, inTrack.getNumPoints()-1);
50 }
51
52 /**
53 * Find the index of the previous segment start before the given index
54 * @param inTrack track object
55 * @param inIndex current index
56 * @return index of previous segment start
57 */
58 public static int getPreviousSegmentStart(Track inTrack, int inIndex)
59 {
60 int i = inIndex - 1;
61 DataPoint point = null;
62 while ((point=inTrack.getPoint(i)) != null && !point.getSegmentStart()) {
63 i--;
64 }
65 return Math.max(i, 0);
66 }
67 }
116116 }
117117 // parse fields according to number found
118118 _degrees = (int) fields[0];
119 _asDouble = _degrees;
119120 _originalFormat = hasCardinal?FORMAT_DEG:FORMAT_DEG_WITHOUT_CARDINAL;
120121 _fracDenom = 10;
121122 if (numFields == 2)
747747 }
748748
749749 /**
750 * @return true if track has altitude data (which are not all zero)
750 * @return true if track has altitude data
751751 */
752752 public boolean hasAltitudeData()
753753 {
754 return getAltitudeRange().getMaximum() > 0;
754 for (int i=0; i<_numPoints; i++) {
755 if (_dataPoints[i].hasAltitude()) {return true;}
756 }
757 return false;
755758 }
756759
757760 /**
398398 {
399399 // See whether to start selection from current range start or current point
400400 int rangeStart = _selection.getStart();
401 if (rangeStart < 0) {rangeStart = _selection.getCurrentPointIndex();}
401 if (rangeStart < 0 || _selection.getCurrentPointIndex() != _selection.getEnd()) {
402 rangeStart = _selection.getCurrentPointIndex();
403 }
402404 selectPoint(inPointNum);
403405 if (rangeStart < inPointNum) {
404406 _selection.selectRange(rangeStart, inPointNum);
1010 import java.awt.event.ActionListener;
1111 import java.awt.event.KeyEvent;
1212 import java.awt.event.KeyListener;
13 import java.io.ByteArrayOutputStream;
14 import java.io.File;
15 import java.io.FileInputStream;
16 import java.io.IOException;
1317 import java.io.InputStream;
18 import java.util.zip.GZIPInputStream;
1419
1520 import javax.swing.BorderFactory;
1621 import javax.swing.BoxLayout;
185190 new JLabel("Ramon, Miguel, In\u00E9s, Piotr, Petrovsk, Josatoc, Weehal,"),
186191 1, 3);
187192 addToGridBagPanel(creditsPanel, gridBag, constraints,
188 new JLabel(" theYinYeti, Rothermographer, Sam, Rudolph, nazotoko, katpatuka"),
193 new JLabel(" theYinYeti, Rothermographer, Sam, Rudolph, nazotoko,"),
189194 1, 4);
190195 addToGridBagPanel(creditsPanel, gridBag, constraints,
196 new JLabel(" katpatuka, R\u00E9mi"),
197 1, 5);
198 addToGridBagPanel(creditsPanel, gridBag, constraints,
191199 new JLabel(I18nManager.getText("dialog.about.credits.translations") + " : "),
192 0, 5);
200 0, 6);
193201 addToGridBagPanel(creditsPanel, gridBag, constraints,
194202 new JLabel("Open Office, Gpsdrive, Babelfish, Leo, Launchpad"),
195 1, 5);
203 1, 6);
196204 addToGridBagPanel(creditsPanel, gridBag, constraints,
197205 new JLabel(I18nManager.getText("dialog.about.credits.devtools") + " : "),
198 0, 6);
206 0, 7);
199207 addToGridBagPanel(creditsPanel, gridBag, constraints,
200208 new JLabel("Debian Linux, Sun Java, Eclipse, Svn, Gimp, Inkscape"),
201 1, 6);
209 1, 7);
202210 addToGridBagPanel(creditsPanel, gridBag, constraints,
203211 new JLabel(I18nManager.getText("dialog.about.credits.othertools") + " : "),
204 0, 7);
212 0, 8);
205213 addToGridBagPanel(creditsPanel, gridBag, constraints,
206214 new JLabel("Openstreetmap, Povray, Exiftool, Google Earth, Gpsbabel, Gnuplot"),
207 1, 7);
215 1, 8);
208216 addToGridBagPanel(creditsPanel, gridBag, constraints,
209217 new JLabel(I18nManager.getText("dialog.about.credits.thanks") + " : "),
210 0, 8);
218 0, 9);
211219 addToGridBagPanel(creditsPanel, gridBag, constraints,
212220 new JLabel("Friends and loved ones, for encouragement and support"),
213 1, 8);
221 1, 9);
214222 _tabs.add(I18nManager.getText("dialog.about.credits"), creditsPanel);
215223
216224 // Read me
278286 */
279287 private String getReadmeText()
280288 {
289 // First, try locally-held readme.txt if available (as it normally should be)
290 // Readme file can either be in file system or packed in the same jar as code
291 String errorMessage = null;
281292 try
282293 {
283294 // For some reason using ../readme.txt doesn't work, so need absolute path
285296 if (in != null) {
286297 byte[] buffer = new byte[in.available()];
287298 in.read(buffer);
299 in.close();
288300 return new String(buffer);
289301 }
290302 }
291 catch (java.io.IOException e) {
292 System.err.println("Exception trying to get readme : " + e.getMessage());
303 catch (IOException e) {
304 errorMessage = e.getMessage();
305 }
306 // Locally-held file failed, so try to find gz file installed on system (eg Debian)
307 try
308 {
309 File gzFile = new File("/usr/share/doc/gpsprune/readme.txt.gz");
310 if (gzFile.exists())
311 {
312 // Copy decompressed bytes from gz file into out
313 InputStream in = new GZIPInputStream(new FileInputStream(gzFile));
314 ByteArrayOutputStream out = new ByteArrayOutputStream();
315 byte[] buffer = new byte[8 * 1024];
316 int count = 0;
317 do {
318 out.write(buffer, 0, count);
319 count = in.read(buffer, 0, buffer.length);
320 } while (count != -1);
321 out.close();
322 in.close();
323 return out.toString();
324 }
325 }
326 catch (IOException e) {
327 System.err.println("Exception trying to get readme.gz : " + e.getMessage());
328 }
329 // Only show first error message if couldn't get readme from gz either
330 if (errorMessage != null) {
331 System.err.println("Exception trying to get readme: " + errorMessage);
293332 }
294333 return I18nManager.getText("error.readme.notfound");
295334 }
0 package tim.prune.function;
1
2 import java.awt.BorderLayout;
3 import java.awt.CardLayout;
4 import java.awt.Component;
5 import java.awt.FlowLayout;
6 import java.awt.GridLayout;
7 import java.awt.event.ActionEvent;
8 import java.awt.event.ActionListener;
9 import java.awt.event.KeyAdapter;
10 import java.awt.event.KeyEvent;
11 import java.net.MalformedURLException;
12 import java.net.URL;
13
14 import javax.swing.BorderFactory;
15 import javax.swing.ButtonGroup;
16 import javax.swing.JButton;
17 import javax.swing.JComboBox;
18 import javax.swing.JDialog;
19 import javax.swing.JLabel;
20 import javax.swing.JPanel;
21 import javax.swing.JRadioButton;
22 import javax.swing.JTextField;
23
24 import tim.prune.I18nManager;
25 import tim.prune.gui.map.CloudmadeMapSource;
26 import tim.prune.gui.map.MapSource;
27 import tim.prune.gui.map.MapSourceLibrary;
28 import tim.prune.gui.map.OsmMapSource;
29
30 /**
31 * Class to handle the adding of a new map source
32 */
33 public class AddMapSourceDialog
34 {
35 private SetMapBgFunction _parent = null;
36 private JDialog _addDialog = null;
37 private JRadioButton[] _typeRadios = null;
38 private JPanel _cards = null;
39 // controls for osm panel
40 private JTextField _oNameField = null;
41 private JTextField _baseUrlField = null, _topUrlField = null;
42 private JComboBox _oZoomCombo = null;
43 // controls for cloudmade panel
44 private JTextField _cNameField = null;
45 private JTextField _cStyleField = null;
46 private JComboBox _cZoomCombo = null;
47 private JButton _okButton = null;
48
49
50 /**
51 * Constructor
52 * @param inParent parent dialog
53 */
54 public AddMapSourceDialog(JDialog inParentDialog, SetMapBgFunction inParentFunction)
55 {
56 _parent = inParentFunction;
57 _addDialog = new JDialog(inParentDialog, I18nManager.getText("dialog.addmapsource.title"), true);
58 _addDialog.add(makeDialogComponents());
59 _addDialog.setLocationRelativeTo(inParentDialog);
60 _addDialog.pack();
61 }
62
63
64 /**
65 * Create dialog components
66 * @return Panel containing all gui elements in dialog
67 */
68 private Component makeDialogComponents()
69 {
70 JPanel dialogPanel = new JPanel();
71 dialogPanel.setLayout(new BorderLayout());
72 // Top panel with two radio buttons to select source type
73 JPanel radioPanel = new JPanel();
74 ButtonGroup radioGroup = new ButtonGroup();
75 radioPanel.setLayout(new GridLayout(1, 0));
76 _typeRadios = new JRadioButton[2];
77 _typeRadios[0] = new JRadioButton("Openstreetmap");
78 radioGroup.add(_typeRadios[0]);
79 radioPanel.add(_typeRadios[0]);
80 _typeRadios[1] = new JRadioButton("Cloudmade");
81 radioGroup.add(_typeRadios[1]);
82 radioPanel.add(_typeRadios[1]);
83 _typeRadios[0].setSelected(true);
84 // listener for clicks on type radios
85 ActionListener typeListener = new ActionListener() {
86 public void actionPerformed(ActionEvent arg0) {
87 CardLayout cl = (CardLayout) _cards.getLayout();
88 if (_typeRadios[0].isSelected()) {cl.first(_cards);}
89 else {cl.last(_cards);}
90 enableOK();
91 }
92 };
93 _typeRadios[0].addActionListener(typeListener);
94 _typeRadios[1].addActionListener(typeListener);
95 radioPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
96 dialogPanel.add(radioPanel, BorderLayout.NORTH);
97
98 _cards = new JPanel();
99 _cards.setLayout(new CardLayout());
100 // listener
101 KeyAdapter keyListener = new KeyAdapter() {
102 public void keyReleased(KeyEvent e) {
103 super.keyReleased(e);
104 enableOK();
105 }
106 };
107 // openstreetmap panel
108 JPanel osmPanel = new JPanel();
109 osmPanel.setLayout(new GridLayout(0, 2, 5, 5));
110 osmPanel.setBorder(BorderFactory.createEmptyBorder(6, 2, 4, 2));
111 osmPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.sourcename")));
112 _oNameField = new JTextField(18);
113 _oNameField.addKeyListener(keyListener);
114 osmPanel.add(_oNameField);
115 // Base layer
116 osmPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.layer1url")));
117 _baseUrlField = new JTextField(18);
118 _baseUrlField.addKeyListener(keyListener);
119 osmPanel.add(_baseUrlField);
120 // Top layer
121 osmPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.layer2url")));
122 _topUrlField = new JTextField(18);
123 _topUrlField.addKeyListener(keyListener);
124 osmPanel.add(_topUrlField);
125 // Max zoom
126 osmPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.maxzoom")));
127 _oZoomCombo = new JComboBox();
128 for (int i=10; i<=20; i++) {
129 _oZoomCombo.addItem("" + i);
130 }
131 osmPanel.add(_oZoomCombo);
132 _cards.add(osmPanel, "card1");
133 // Panel for cloudmade source
134 JPanel cloudPanel = new JPanel();
135 cloudPanel.setLayout(new GridLayout(0, 2, 5, 5));
136 cloudPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.sourcename")));
137 _cNameField = new JTextField(18);
138 _cNameField.addKeyListener(keyListener);
139 cloudPanel.add(_cNameField);
140 cloudPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.cloudstyle")));
141 _cStyleField = new JTextField(18);
142 _cStyleField.addKeyListener(keyListener);
143 cloudPanel.add(_cStyleField);
144 cloudPanel.add(new JLabel(I18nManager.getText("dialog.addmapsource.maxzoom")));
145 _cZoomCombo = new JComboBox();
146 for (int i=10; i<=20; i++) {
147 _cZoomCombo.addItem("" + i);
148 }
149 cloudPanel.add(_cZoomCombo);
150 cloudPanel.add(new JLabel(" ")); // force four rows to space text boxes properly
151 _cards.add(cloudPanel, "card2");
152 // cards
153 JPanel holderPanel = new JPanel();
154 holderPanel.setLayout(new BorderLayout());
155 holderPanel.add(_cards, BorderLayout.NORTH);
156 dialogPanel.add(holderPanel, BorderLayout.CENTER);
157
158 // button panel at bottom
159 JPanel buttonPanel = new JPanel();
160 buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
161 _okButton = new JButton(I18nManager.getText("button.ok"));
162 ActionListener okListener = new ActionListener() {
163 public void actionPerformed(ActionEvent e)
164 {
165 finish();
166 }
167 };
168 _okButton.addActionListener(okListener);
169 buttonPanel.add(_okButton);
170 JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
171 cancelButton.addActionListener(new ActionListener() {
172 public void actionPerformed(ActionEvent e)
173 {
174 _addDialog.dispose();
175 }
176 });
177 buttonPanel.add(cancelButton);
178 dialogPanel.add(buttonPanel, BorderLayout.SOUTH);
179 return dialogPanel;
180 }
181
182
183 /**
184 * Init and show the dialog
185 */
186 public void showDialog()
187 {
188 _oNameField.setText("");
189 _baseUrlField.setText("");
190 _topUrlField.setText("");
191 _oZoomCombo.setSelectedIndex(8);
192 _cNameField.setText("");
193 _cStyleField.setText("");
194 _cZoomCombo.setSelectedIndex(8);
195 _okButton.setEnabled(false);
196 _addDialog.setVisible(true);
197 }
198
199
200 /**
201 * Check the currently entered details and enable the OK button if it looks OK
202 */
203 private void enableOK()
204 {
205 boolean ok = false;
206 if (_typeRadios[0].isSelected()) {ok = isOsmPanelOk();}
207 if (_typeRadios[1].isSelected()) {ok = isCloudPanelOk();}
208 _okButton.setEnabled(ok);
209 }
210
211 /**
212 * Check the openstreetmap panel if all details are complete
213 * @return true if details look ok
214 */
215 private boolean isOsmPanelOk()
216 {
217 boolean ok = _oNameField.getText().trim().length() > 1;
218 URL baseUrl = null, topUrl = null;
219 try {
220 // Try to parse base url if given
221 String baseText = _baseUrlField.getText().trim();
222 if (baseText.length() > 10) {
223 baseUrl = new URL(baseText);
224 }
225 else if (baseText.length() > 0) {ok = false;}
226 // Same again for top url if given
227 String topText = _topUrlField.getText().trim();
228 if (topText.length() > 10) {
229 topUrl = new URL(topText);
230 }
231 else if (topText.length() > 0) {ok = false;}
232 } catch (MalformedURLException e) {
233 ok = false;
234 }
235 // looks ok if at least one url given
236 return (ok && (baseUrl != null || topUrl != null));
237 }
238
239 /**
240 * Check the cloudmade panel if all details are complete
241 * @return true if details look ok
242 */
243 private boolean isCloudPanelOk()
244 {
245 boolean ok = _cNameField.getText().trim().length() > 1;
246 int styleNum = 0;
247 try {
248 styleNum = Integer.parseInt(_cStyleField.getText());
249 }
250 catch (NumberFormatException nfe) {}
251 return (ok && styleNum > 0);
252 }
253
254 /**
255 * Finish by adding the requested source and refreshing the parent
256 */
257 private void finish()
258 {
259 MapSource newSource = null;
260 if (_typeRadios[0].isSelected())
261 {
262 // Openstreetmap source
263 String sourceName = getUniqueSourcename(_oNameField.getText());
264 String url1 = _baseUrlField.getText().trim();
265 String url2 = _topUrlField.getText().trim();
266 newSource = new OsmMapSource(sourceName, url1, url2, _oZoomCombo.getSelectedIndex()+10);
267 }
268 else if (_typeRadios[1].isSelected())
269 {
270 String sourceName = getUniqueSourcename(_cNameField.getText());
271 newSource = new CloudmadeMapSource(sourceName, _cStyleField.getText(),
272 _cZoomCombo.getSelectedIndex()+10);
273 }
274 // Add new source if ok
275 if (newSource != null)
276 {
277 MapSourceLibrary.addSource(newSource);
278 // inform setmapbg dialog
279 _parent.updateList();
280 _addDialog.setVisible(false);
281 }
282 }
283
284 /**
285 * Check the given source name if it exists in library already
286 * @param inName name to check
287 * @return unique name not yet in library
288 */
289 private static String getUniqueSourcename(String inName)
290 {
291 String name = inName;
292 if (name == null) {name = "";}
293 else {name = name.trim();}
294 if (name.equals("")) {
295 name = I18nManager.getText("dialog.addmapsource.noname");
296 }
297 // Check there isn't already a map source with this name
298 if (MapSourceLibrary.hasSourceName(name))
299 {
300 int suffix = 1;
301 while (MapSourceLibrary.hasSourceName(name + suffix)) {
302 suffix++;
303 }
304 name += suffix;
305 }
306 return name;
307 }
308 }
0 package tim.prune.function;
1
2 import java.awt.BorderLayout;
3 import java.awt.Component;
4 import java.awt.FlowLayout;
5 import java.awt.event.ActionEvent;
6 import java.awt.event.ActionListener;
7 import java.awt.event.KeyAdapter;
8 import java.awt.event.KeyEvent;
9 import java.io.File;
10
11 import javax.swing.JButton;
12 import javax.swing.JCheckBox;
13 import javax.swing.JDialog;
14 import javax.swing.JFileChooser;
15 import javax.swing.JLabel;
16 import javax.swing.JOptionPane;
17 import javax.swing.JPanel;
18 import javax.swing.JTextField;
19
20 import tim.prune.App;
21 import tim.prune.DataSubscriber;
22 import tim.prune.GenericFunction;
23 import tim.prune.I18nManager;
24 import tim.prune.UpdateMessageBroker;
25 import tim.prune.config.Config;
26
27 /**
28 * Class to show the popup window for setting the path to disk cache
29 */
30 public class DiskCacheConfig extends GenericFunction
31 {
32 private JDialog _dialog = null;
33 private JCheckBox _cacheCheckbox = null;
34 private JTextField _cacheDirBox = null;
35 private JButton _browseButton = null;
36 private JButton _okButton = null;
37 private boolean _initialCheckState = false;
38 private String _initialCacheDir = null;
39
40 /**
41 * Constructor
42 * @param inApp app object
43 */
44 public DiskCacheConfig(App inApp)
45 {
46 super(inApp);
47 }
48
49 /**
50 * Return the name key for this function
51 */
52 public String getNameKey()
53 {
54 return "function.diskcache";
55 }
56
57 /**
58 * @return the contents of the window as a Component
59 */
60 private Component makeContents()
61 {
62 JPanel dialogPanel = new JPanel();
63 dialogPanel.setLayout(new BorderLayout(0, 5));
64 // top panel
65 JPanel topPanel = new JPanel();
66 _cacheCheckbox = new JCheckBox(I18nManager.getText("dialog.diskcache.save"));
67 _cacheCheckbox.addActionListener(new ActionListener() {
68 public void actionPerformed(ActionEvent arg0) {
69 enableOk();
70 }
71 });
72 topPanel.add(_cacheCheckbox);
73 dialogPanel.add(topPanel, BorderLayout.NORTH);
74 // dir panel
75 JPanel dirPanel = new JPanel();
76 dirPanel.setLayout(new BorderLayout());
77 dirPanel.add(new JLabel(I18nManager.getText("dialog.diskcache.dir")), BorderLayout.WEST);
78 _cacheDirBox = new JTextField(24);
79 _cacheDirBox.addKeyListener(new KeyAdapter() {
80 public void keyReleased(KeyEvent arg0) {
81 super.keyReleased(arg0);
82 enableOk();
83 }
84 });
85 dirPanel.add(_cacheDirBox, BorderLayout.CENTER);
86 _browseButton = new JButton(I18nManager.getText("button.browse"));
87 _browseButton.addActionListener(new ActionListener() {
88 public void actionPerformed(ActionEvent arg0) {
89 chooseDir();
90 }
91 });
92 dirPanel.add(_browseButton, BorderLayout.EAST);
93 dialogPanel.add(dirPanel, BorderLayout.CENTER);
94
95 // Cancel button at the bottom
96 JPanel buttonPanel = new JPanel();
97 buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
98 _okButton = new JButton(I18nManager.getText("button.ok"));
99 _okButton.addActionListener(new ActionListener()
100 {
101 public void actionPerformed(ActionEvent e)
102 {
103 finish();
104 }
105 });
106 buttonPanel.add(_okButton);
107 JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
108 cancelButton.addActionListener(new ActionListener() {
109 public void actionPerformed(ActionEvent e)
110 {
111 _dialog.dispose();
112 }
113 });
114 buttonPanel.add(cancelButton);
115 dialogPanel.add(buttonPanel, BorderLayout.SOUTH);
116 return dialogPanel;
117 }
118
119 /**
120 * Enable or disable the ok button according to what's changed
121 */
122 private void enableOk()
123 {
124 boolean checkState = _cacheCheckbox.isSelected();
125 _cacheDirBox.setEditable(checkState);
126 _browseButton.setEnabled(checkState);
127 boolean ok = false;
128 // If checkbox has stayed off then disable ok
129 if (!_initialCheckState && !checkState) {ok = false;}
130 else {
131 // If checkbox has been switched off then enable
132 if (!checkState) {ok = true;}
133 else {
134 // checkbox is on, check value
135 String path = _cacheDirBox.getText();
136 if (path.equals("") || (_initialCacheDir != null && path.equals(_initialCacheDir))) {
137 // Value blank or same as before
138 ok = false;
139 }
140 else {
141 ok = true;
142 }
143 }
144 }
145 _okButton.setEnabled(ok);
146 }
147
148 /**
149 * Show window
150 */
151 public void begin()
152 {
153 if (_dialog == null)
154 {
155 _dialog = new JDialog(_parentFrame, I18nManager.getText(getNameKey()));
156 _dialog.setLocationRelativeTo(_parentFrame);
157 _dialog.getContentPane().add(makeContents());
158 _dialog.pack();
159 }
160 // Set controls according to current config
161 String currPath = Config.getConfigString(Config.KEY_DISK_CACHE);
162 _cacheCheckbox.setSelected(currPath != null);
163 _cacheDirBox.setText(currPath==null?"":currPath);
164 enableOk();
165 // Remember current state
166 _initialCheckState = _cacheCheckbox.isSelected();
167 _dialog.setVisible(true);
168 }
169
170 /**
171 * Function activated by the "Browse..." button to select a directory for the cache
172 */
173 private void chooseDir()
174 {
175 JFileChooser chooser = new JFileChooser();
176 chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
177 // Set start path from currently selected dir
178 String path = _cacheDirBox.getText();
179 if (path.length() > 1) {chooser.setCurrentDirectory(new File(path));}
180 if (chooser.showOpenDialog(_parentFrame) == JFileChooser.APPROVE_OPTION)
181 {
182 _cacheDirBox.setText(chooser.getSelectedFile().getAbsolutePath());
183 }
184 enableOk();
185 }
186
187 /**
188 * OK pressed, save selected settings in Config
189 */
190 private void finish()
191 {
192 String cachePath = (_cacheCheckbox.isSelected()?_cacheDirBox.getText():null);
193 // Create dir if it doesn't exist already and creation confirmed
194 if (cachePath != null)
195 {
196 File cacheDir = new File(cachePath);
197 if ((!cacheDir.exists() || !cacheDir.isDirectory()) && (JOptionPane.showConfirmDialog(_dialog,
198 I18nManager.getText("dialog.diskcache.createdir") + ": " + cacheDir.getAbsolutePath() + " ?",
199 I18nManager.getText(getNameKey()), JOptionPane.OK_CANCEL_OPTION) == JOptionPane.CANCEL_OPTION || !cacheDir.mkdir()))
200 {
201 JOptionPane.showMessageDialog(_dialog, I18nManager.getText("dialog.diskcache.nocreate"),
202 I18nManager.getText(getNameKey()), JOptionPane.WARNING_MESSAGE);
203 return;
204 }
205 }
206 Config.setConfigString(Config.KEY_DISK_CACHE, cachePath);
207 // inform subscribers so that tiles are wiped from memory and refetched
208 UpdateMessageBroker.informSubscribers(DataSubscriber.MAPSERVER_CHANGED);
209 _dialog.dispose();
210 }
211 }
2121 import tim.prune.data.Distance;
2222 import tim.prune.data.Selection;
2323 import tim.prune.gui.DisplayUtils;
24 import tim.prune.gui.profile.SpeedData;
2425
2526 /**
2627 * Class to show the full range details in a separate popup
3738 private JLabel _gradientLabel = null;
3839 /** Moving distance, speed */
3940 private JLabel _movingDistanceLabel = null, _aveMovingSpeedLabel = null;
41 private JLabel _maxSpeedLabel = null;
4042 /** Number formatter for one decimal place */
4143 private static final NumberFormat FORMAT_ONE_DP = NumberFormat.getNumberInstance();
4244 /** Flexible number formatter for different decimal places */
122124 midPanel.add(movingSpeedLabel);
123125 _aveMovingSpeedLabel = new JLabel("5 km/h");
124126 midPanel.add(_aveMovingSpeedLabel);
127 // Maximum speed
128 JLabel maxSpeedLabel = new JLabel(I18nManager.getText("details.range.maxspeed") + ": ");
129 maxSpeedLabel.setHorizontalAlignment(JLabel.RIGHT);
130 midPanel.add(maxSpeedLabel);
131 _maxSpeedLabel = new JLabel("10 km/h");
132 midPanel.add(_maxSpeedLabel);
125133
126134 dialogPanel.add(midPanel, BorderLayout.CENTER);
127135 // button panel at bottom
193201 else {
194202 _aveMovingSpeedLabel.setText("");
195203 }
204
205 // Maximum speed
206 SpeedData speeds = new SpeedData(_app.getTrackInfo().getTrack());
207 speeds.init();
208 double maxSpeed = 0.0;
209 for (int i=selection.getStart(); i<=selection.getEnd(); i++) {
210 if (speeds.hasData(i) && (speeds.getData(i) > maxSpeed)) {
211 maxSpeed = speeds.getData(i);
212 }
213 }
214 if (maxSpeed > 0.0) {
215 _maxSpeedLabel.setText(roundedNumber(maxSpeed) + " " + speedUnitsStr);
216 }
217 else {
218 _maxSpeedLabel.setText("");
219 }
196220 }
197221
198222 /**
0 package tim.prune.function;
1
2 import javax.swing.AbstractListModel;
3
4 import tim.prune.gui.map.MapSource;
5 import tim.prune.gui.map.MapSourceLibrary;
6
7 /**
8 * Class to act as list model for the map source list
9 */
10 public class MapSourceListModel extends AbstractListModel
11 {
12 /**
13 * @see javax.swing.ListModel#getSize()
14 */
15 public int getSize()
16 {
17 return MapSourceLibrary.getNumSources();
18 }
19
20 /**
21 * @see javax.swing.ListModel#getElementAt(int)
22 */
23 public Object getElementAt(int inIndex)
24 {
25 if (inIndex < 0 || inIndex >= getSize()) return "";
26 return MapSourceLibrary.getSource(inIndex).getName();
27 }
28
29 /**
30 * @param inIndex index in list
31 * @return corresponding map source object
32 */
33 public MapSource getSource(int inIndex)
34 {
35 if (inIndex < 0 || inIndex >= getSize()) return null;
36 return MapSourceLibrary.getSource(inIndex);
37 }
38
39 /**
40 * Fire event to notify that contents have changed
41 */
42 public void fireChanged()
43 {
44 this.fireContentsChanged(this, 0, getSize()-1);
45 }
46 }
77 import java.awt.event.KeyAdapter;
88 import java.awt.event.KeyEvent;
99 import java.awt.event.MouseAdapter;
10 import java.awt.event.MouseEvent;
1011
1112 import javax.swing.BorderFactory;
1213 import javax.swing.JButton;
9596 // Listeners to enable/disable ok button
9697 KeyAdapter keyListener = new KeyAdapter() {
9798 /** Key released */
98 public void keyReleased(KeyEvent arg0) {
99 public void keyReleased(KeyEvent inE) {
99100 enableOK();
101 if (inE.getKeyCode() == KeyEvent.VK_ESCAPE) {
102 _dialog.dispose();
103 }
100104 }
101105 };
102106 MouseAdapter mouseListener = new MouseAdapter() {
103 public void mouseReleased(java.awt.event.MouseEvent arg0) {
107 public void mouseReleased(MouseEvent inE) {
104108 enableOK();
105109 };
106110 };
131135 ActionListener okListener = new ActionListener() {
132136 public void actionPerformed(ActionEvent e)
133137 {
134 finish();
138 if (_okButton.isEnabled()) {finish();}
135139 }
136140 };
137141 _okButton.addActionListener(okListener);
158162 private void enableOK()
159163 {
160164 String text = _coordField.getText();
161 _okButton.setEnabled(text != null && text.length() > 10
165 _okButton.setEnabled(text != null && text.length() > 6
162166 && (text.indexOf(' ') >= 0 || text.indexOf(',') >= 0));
163167 }
164168
4242 /** Names of languages for display in dropdown (not translated) */
4343 private static final String[] LANGUAGE_NAMES = {"deutsch", "english", "espa\u00F1ol", "fran\u00E7ais",
4444 "italiano", "polski", "\u4e2d\u6587 (chinese)", "\u65E5\u672C\u8A9E (japanese)",
45 "schwiizerd\u00FC\u00FCtsch", "t\u00FCrk\u00E7e", "portugu\u00EAs", "bahasa indonesia", "rom\u00E2n\u0103"
45 "schwiizerd\u00FC\u00FCtsch", "t\u00FCrk\u00E7e", "portugu\u00EAs",
46 "afrikaans", "bahasa indonesia", "rom\u00E2n\u0103"
4647 };
4748 /** Associated language codes (must be in same order as names!) */
4849 private static final String[] LANGUAGE_CODES = {"de", "en", "es", "fr", "it", "pl", "zh", "ja",
49 "de_ch", "tr", "pt", "in", "ro"
50 "de_ch", "tr", "pt", "af", "in", "ro"
5051 };
5152
5253
11
22 import java.awt.BorderLayout;
33 import java.awt.Component;
4 import java.awt.Dimension;
45 import java.awt.FlowLayout;
56 import java.awt.event.ActionEvent;
67 import java.awt.event.ActionListener;
78 import java.awt.event.KeyAdapter;
89 import java.awt.event.KeyEvent;
910
11 import javax.swing.BorderFactory;
1012 import javax.swing.BoxLayout;
11 import javax.swing.ButtonGroup;
1213 import javax.swing.JButton;
1314 import javax.swing.JDialog;
1415 import javax.swing.JLabel;
16 import javax.swing.JList;
1517 import javax.swing.JPanel;
16 import javax.swing.JRadioButton;
17 import javax.swing.JTextField;
18 import javax.swing.JScrollPane;
19 import javax.swing.ListSelectionModel;
20 import javax.swing.event.ListSelectionEvent;
21 import javax.swing.event.ListSelectionListener;
1822
1923 import tim.prune.App;
2024 import tim.prune.DataSubscriber;
2226 import tim.prune.I18nManager;
2327 import tim.prune.UpdateMessageBroker;
2428 import tim.prune.config.Config;
29 import tim.prune.gui.map.MapSourceLibrary;
2530
2631 /**
2732 * Function to set the tile server for the map backgrounds
2934 public class SetMapBgFunction extends GenericFunction
3035 {
3136 private JDialog _dialog = null;
37 private JList _list = null;
38 private MapSourceListModel _listModel = null;
39 private String _initialSource = null;
3240 private JButton _okButton = null;
33 private JRadioButton[] _serverRadios = null;
34 private JTextField _serverUrl = null;
35 /** Index of 'other' server with freeform url */
36 private static final int OTHER_SERVER_NUM = 3;
41 private JButton _deleteButton = null;
42 // Add dialog
43 private AddMapSourceDialog _addDialog = null;
3744
3845
3946 /**
6269 _dialog.setLocationRelativeTo(_parentFrame);
6370 _dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
6471 _dialog.getContentPane().add(makeDialogComponents());
65 initValues();
6672 _dialog.pack();
6773 }
68 enableOK();
74 initValues();
75 enableButtons();
6976 _dialog.setVisible(true);
7077 }
7178
7784 private Component makeDialogComponents()
7885 {
7986 JPanel dialogPanel = new JPanel();
80 dialogPanel.setLayout(new BorderLayout());
81 // Main panel
82 JPanel mainPanel = new JPanel();
83 mainPanel.setLayout(new BoxLayout(mainPanel, BoxLayout.Y_AXIS));
84 _serverRadios = new JRadioButton[4];
85 ButtonGroup serverRadioGroup = new ButtonGroup();
86 String[] serverKeys = {"dialog.setmapbg.mapnik", "dialog.setmapbg.osma",
87 "dialog.setmapbg.cyclemap", "dialog.setmapbg.other"};
88 // action listener for radios
89 ActionListener changeListener = new ActionListener() {
90 public void actionPerformed(ActionEvent arg0) {
91 enableOK();
92 }
93 };
94 // Create four radio buttons
95 for (int i=0; i<4; i++)
96 {
97 _serverRadios[i] = new JRadioButton(I18nManager.getText(serverKeys[i]));
98 _serverRadios[i].addActionListener(changeListener);
99 serverRadioGroup.add(_serverRadios[i]);
100 mainPanel.add(_serverRadios[i]);
101 }
102 // entry field for other server urls
103 mainPanel.add(new JLabel(I18nManager.getText("dialog.setmapbg.server")));
104 _serverUrl = new JTextField("", 12);
105 _serverUrl.addKeyListener(new KeyAdapter() {
87 dialogPanel.setLayout(new BorderLayout(8, 8));
88 // intro label
89 JLabel introLabel = new JLabel(I18nManager.getText("dialog.setmapbg.intro"));
90 introLabel.setBorder(BorderFactory.createEmptyBorder(5, 4, 1, 4));
91 dialogPanel.add(introLabel, BorderLayout.NORTH);
92 // list box
93 _listModel = new MapSourceListModel();
94 _list = new JList(_listModel);
95 _list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
96 dialogPanel.add(new JScrollPane(_list), BorderLayout.CENTER);
97 _list.addListSelectionListener(new ListSelectionListener() {
98 public void valueChanged(ListSelectionEvent arg0) {
99 enableButtons();
100 }
101 });
102 _list.addKeyListener(new KeyAdapter() {
106103 public void keyReleased(KeyEvent e) {
107104 super.keyReleased(e);
108 enableOK();
109 }
110 });
111 mainPanel.add(_serverUrl);
112 dialogPanel.add(mainPanel, BorderLayout.NORTH);
105 if (e.getKeyCode() == KeyEvent.VK_ESCAPE) {
106 _dialog.dispose();
107 }
108 }
109 });
110 _list.setPreferredSize(new Dimension(200, 200));
111 // button panel on right
112 JPanel rightPanel = new JPanel();
113 rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.Y_AXIS));
114 JButton addButton = new JButton(I18nManager.getText("button.addnew"));
115 addButton.addActionListener(new ActionListener() {
116 public void actionPerformed(ActionEvent arg0) {
117 addNewSource();
118 }
119 });
120 rightPanel.add(addButton);
121 _deleteButton = new JButton(I18nManager.getText("button.delete"));
122 _deleteButton.addActionListener(new ActionListener() {
123 public void actionPerformed(ActionEvent arg0) {
124 deleteMapSource(_list.getSelectedIndex());
125 }
126 });
127 rightPanel.add(_deleteButton);
128 dialogPanel.add(rightPanel, BorderLayout.EAST);
113129
114130 // button panel at bottom
115131 JPanel buttonPanel = new JPanel();
141157 */
142158 private void initValues()
143159 {
144 // Get values from config
145 try {
146 _serverRadios[Config.getConfigInt(Config.KEY_MAPSERVERINDEX)].setSelected(true);
160 updateList();
161 // Get selected value from config
162 int currSource = Config.getConfigInt(Config.KEY_MAPSOURCE_INDEX);
163 if (currSource < 0 || currSource >= _listModel.getSize()) {
164 currSource = 0;
147165 }
148 catch (ArrayIndexOutOfBoundsException e) {} // ignore
149 String url = Config.getConfigString(Config.KEY_MAPSERVERURL);
150 if (url != null) {_serverUrl.setText(url);}
151 // Choose default if none selected
152 if (getSelectedServer() < 0) {
153 _serverRadios[0].setSelected(true);
166 _initialSource = _listModel.getSource(currSource).getSiteStrings();
167 _list.setSelectedIndex(currSource);
168 }
169
170 /**
171 * @return index of selected server, or -1 if none
172 */
173 private int getSelectedServer()
174 {
175 return _list.getSelectedIndex();
176 }
177
178 /**
179 * Enable or disable the buttons according to the selection
180 */
181 private void enableButtons()
182 {
183 int serverNum = getSelectedServer();
184 _okButton.setEnabled(serverNum >= 0 && serverNum < _listModel.getSize()
185 && !_listModel.getSource(serverNum).getSiteStrings().equals(_initialSource));
186 _deleteButton.setEnabled(serverNum >= MapSourceLibrary.getNumFixedSources()
187 && serverNum < _listModel.getSize());
188 }
189
190 /**
191 * Start the dialog to add a new map source to the list
192 */
193 private void addNewSource()
194 {
195 if (_addDialog == null) {
196 _addDialog = new AddMapSourceDialog(_dialog, this);
154197 }
155 }
156
157 /**
158 * @return index of selected radio button, or -1 if none
159 */
160 private int getSelectedServer()
161 {
162 // Loop over all four radios
163 for (int i=0; i<4; i++) {
164 if (_serverRadios[i].isSelected()) {return i;}
165 }
166 // None selected
167 return -1;
168 }
169
170 /**
171 * Enable or disable the OK button according to the selection
172 */
173 private void enableOK()
198 _addDialog.showDialog();
199 }
200
201 /**
202 * Delete the selected map source so it is no longer available
203 * @param inIndex index within list
204 */
205 private void deleteMapSource(int inIndex)
206 {
207 MapSourceLibrary.deleteSource(inIndex);
208 updateList();
209 enableButtons();
210 }
211
212 /**
213 * use the library to update the current list, after add or delete
214 */
215 public void updateList()
216 {
217 _listModel.fireChanged();
218 Config.setConfigString(Config.KEY_MAPSOURCE_LIST, MapSourceLibrary.getConfigString());
219 }
220
221 /**
222 * Finish the dialog when OK pressed
223 */
224 private void finish()
174225 {
175226 int serverNum = getSelectedServer();
176 _okButton.setEnabled(inputOK());
177 _serverUrl.setEnabled(serverNum == OTHER_SERVER_NUM);
178 }
179
180 /**
181 * @return true if inputs are ok
182 */
183 private boolean inputOK()
184 {
185 int serverNum = getSelectedServer();
186 return serverNum >= 0 && (serverNum != OTHER_SERVER_NUM || _serverUrl.getText().length() > 4);
187 }
188
189 /**
190 * Finish the dialog when OK pressed
191 */
192 private void finish()
193 {
194 int serverNum = getSelectedServer();
195 if (!inputOK()) {serverNum = 0;}
196 Config.setConfigInt(Config.KEY_MAPSERVERINDEX, serverNum);
197 Config.setConfigString(Config.KEY_MAPSERVERURL, _serverUrl.getText());
227 if (serverNum < 0) {serverNum = 0;}
228 Config.setConfigInt(Config.KEY_MAPSOURCE_INDEX, serverNum);
198229 UpdateMessageBroker.informSubscribers(DataSubscriber.MAPSERVER_CHANGED);
199230 _dialog.dispose();
200231 }
8686
8787 // Main panel with edit boxes for paths
8888 JPanel mainPanel = new JPanel();
89 mainPanel.setLayout(new GridLayout(3, 3, 10, 1));
89 mainPanel.setLayout(new GridLayout(NUM_KEYS+1, 3, 10, 1));
90 mainPanel.add(new JLabel(" "));
91 mainPanel.add(new JLabel(" "));
92 mainPanel.add(new JLabel(I18nManager.getText("dialog.setpaths.found")));
9093 _editFields = new JTextField[NUM_KEYS];
9194 _installedLabels = new JLabel[NUM_KEYS];
9295 for (int i=0; i<NUM_KEYS; i++)
146149 for (int i=0; i<NUM_KEYS; i++)
147150 {
148151 String command = _editFields[i].getText();
149 _installedLabels[i].setText(ExternalTools.isToolInstalled(i, command)?yesText:noText);
152 _installedLabels[i].setText(" " + (ExternalTools.isToolInstalled(i, command)?yesText:noText));
150153 }
151154 }
152155
188188 // button panel on bottom
189189 JPanel buttonPanel = new JPanel();
190190 buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
191 // Cancel button
192 JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
193 cancelButton.addActionListener(new ActionListener() {
194 public void actionPerformed(ActionEvent e) {
195 _dialog.setVisible(false);
196 }
197 });
198 buttonPanel.add(cancelButton);
199191 // ok button
200192 JButton okButton = new JButton(I18nManager.getText("button.ok"));
201193 okButton.addActionListener(new ActionListener() {
205197 }
206198 });
207199 buttonPanel.add(okButton);
200 // Cancel button
201 JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
202 cancelButton.addActionListener(new ActionListener() {
203 public void actionPerformed(ActionEvent e) {
204 _dialog.setVisible(false);
205 }
206 });
207 buttonPanel.add(cancelButton);
208208 dialogPanel.add(buttonPanel, BorderLayout.SOUTH);
209209 return dialogPanel;
210210 }
525525 ChartSeries values = new ChartSeries(inTrack.getNumPoints());
526526 DataPoint prevPoint = null, currPoint = null, nextPoint = null;
527527 DataPoint[] points = getDataPoints(inTrack, false);
528 final boolean useMetric = Config.getConfigBoolean(Config.KEY_METRIC_UNITS);
528529 // Loop over collected points
529530 for (int i=1; i<(points.length-1); i++)
530531 {
540541 + DataPoint.calculateRadiansBetween(currPoint, nextPoint);
541542 double time = nextPoint.getTimestamp().getSecondsSince(prevPoint.getTimestamp()) / 60.0 / 60.0;
542543 // Convert to distance and pass to chartseries
543 if (Config.getConfigBoolean(Config.KEY_METRIC_UNITS)) {
544 if (useMetric) {
544545 values.setData(i, Distance.convertRadiansToDistance(rads, Units.KILOMETRES) / time);
545546 } else {
546547 values.setData(i, Distance.convertRadiansToDistance(rads, Units.MILES) / time);
0 package tim.prune.function.srtm;
1
2 import java.awt.BorderLayout;
3 import java.awt.Component;
4 import java.awt.Dimension;
5 import java.awt.FlowLayout;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.io.IOException;
9 import java.net.URL;
10 import java.util.ArrayList;
11 import java.util.zip.ZipEntry;
12 import java.util.zip.ZipInputStream;
13
14 import javax.swing.JButton;
15 import javax.swing.JDialog;
16 import javax.swing.JLabel;
17 import javax.swing.JPanel;
18 import javax.swing.JProgressBar;
19
20 import tim.prune.App;
21 import tim.prune.DataSubscriber;
22 import tim.prune.GenericFunction;
23 import tim.prune.I18nManager;
24 import tim.prune.UpdateMessageBroker;
25 import tim.prune.data.DataPoint;
26 import tim.prune.data.Field;
27 import tim.prune.data.Track;
28 import tim.prune.undo.UndoLookupSrtm;
29
30 /**
31 * Class to provide a lookup function for point altitudes
32 * using the Space Shuttle's SRTM data files.
33 * HGT files are downloaded into memory via HTTP and point altitudes
34 * can then be interpolated from the 3m grid data.
35 */
36 public class LookupSrtmFunction extends GenericFunction implements Runnable
37 {
38 /** function dialog */
39 private JDialog _dialog = null;
40 /** Progress bar for function */
41 private JProgressBar _progressBar = null;
42 /** Cancel flag */
43 private boolean _cancelled = false;
44
45 /** Expected size of hgt file in bytes */
46 private static final long HGT_SIZE = 2884802L;
47 /** Altitude below which is considered void */
48 private static final int VOID_VAL = -32768;
49
50 /**
51 * Constructor
52 * @param inApp App object
53 */
54 public LookupSrtmFunction(App inApp)
55 {
56 super(inApp);
57 }
58
59 /** @return name key */
60 public String getNameKey() {
61 return "function.lookupsrtm";
62 }
63
64 /**
65 * Begin the lookup
66 */
67 public void begin()
68 {
69 if (_dialog == null)
70 {
71 _dialog = new JDialog(_parentFrame, I18nManager.getText(getNameKey()), false);
72 _dialog.setLocationRelativeTo(_parentFrame);
73 _dialog.getContentPane().add(makeDialogComponents());
74 _dialog.pack();
75 }
76 _progressBar.setMinimum(0);
77 _progressBar.setMaximum(100);
78 _progressBar.setValue(20);
79 _cancelled = false;
80 // start new thread for time-consuming part
81 new Thread(this).start();
82 }
83
84
85 /**
86 * Make the dialog components
87 * @return the GUI components for the dialog
88 */
89 private Component makeDialogComponents()
90 {
91 JPanel dialogPanel = new JPanel();
92 dialogPanel.setLayout(new BorderLayout());
93 dialogPanel.add(new JLabel(I18nManager.getText("confirm.running")), BorderLayout.NORTH);
94 _progressBar = new JProgressBar();
95 _progressBar.setPreferredSize(new Dimension(250, 30));
96 dialogPanel.add(_progressBar, BorderLayout.CENTER);
97 // Cancel button at the bottom
98 JPanel buttonPanel = new JPanel();
99 buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
100 JButton cancelButton = new JButton(I18nManager.getText("button.cancel"));
101 cancelButton.addActionListener(new ActionListener() {
102 public void actionPerformed(ActionEvent e) {
103 _cancelled = true;
104 }
105 });
106 buttonPanel.add(cancelButton);
107 dialogPanel.add(buttonPanel, BorderLayout.SOUTH);
108 return dialogPanel;
109 }
110
111 /**
112 * Run method using separate thread
113 */
114 public void run()
115 {
116 _dialog.setVisible(true);
117 // Compile list of tiles to get
118 Track track = _app.getTrackInfo().getTrack();
119 ArrayList<SrtmTile> tileList = new ArrayList<SrtmTile>();
120 for (int i=0; i<track.getNumPoints(); i++)
121 {
122 // Only consider points which don't have altitudes already
123 if (!track.getPoint(i).hasAltitude())
124 {
125 SrtmTile tile = new SrtmTile(track.getPoint(i));
126 boolean alreadyGot = false;
127 for (int t=0; t<tileList.size(); t++) {
128 if (tileList.get(t).equals(tile)) {
129 alreadyGot = true;
130 }
131 }
132 if (!alreadyGot) {tileList.add(tile);}
133 }
134 }
135 UndoLookupSrtm undo = new UndoLookupSrtm(_app.getTrackInfo());
136 int numAltitudesFound = 0;
137 // Update progress bar
138 _progressBar.setMaximum(tileList.size());
139 _progressBar.setIndeterminate(tileList.size() <= 1);
140 _progressBar.setValue(0);
141 // Get urls for each tile
142 URL[] urls = TileFinder.getUrls(tileList);
143 for (int t=0; t<tileList.size() && !_cancelled; t++)
144 {
145 if (urls[t] != null)
146 {
147 SrtmTile tile = tileList.get(t);
148 // System.out.println("tile " + t + " of " + tileList.size() + " = " + urls[t].toString());
149 try {
150 _progressBar.setValue(t);
151 final int ARRLENGTH = 1201*1201;
152 int[] heights = new int[ARRLENGTH];
153 // Open zipinputstream on url and check size
154 ZipInputStream inStream = new ZipInputStream(urls[t].openStream());
155 ZipEntry entry = inStream.getNextEntry();
156 boolean entryOk = (entry.getSize() == HGT_SIZE);
157 if (entryOk)
158 {
159 // Read entire file contents into one byte array
160 for (int i=0; i<ARRLENGTH; i++) {
161 heights[i] = inStream.read()*256 + inStream.read();
162 if (heights[i] >= 32768) {heights[i] -= 65536;}
163 }
164 }
165 //else {
166 // System.out.println("length not ok: " + entry.getSize());
167 //}
168 // Close stream from url
169 inStream.close();
170
171 if (entryOk)
172 {
173 // Loop over all points in track, try to apply altitude from array
174 for (int p=0; p<track.getNumPoints(); p++)
175 {
176 DataPoint point = track.getPoint(p);
177 if (!point.hasAltitude() || point.getAltitude().getValue() == 0) {
178 if (new SrtmTile(point).equals(tile))
179 {
180 double x = (point.getLongitude().getDouble() - tile.getLongitude()) * 1200;
181 double y = 1201 - (point.getLatitude().getDouble() - tile.getLatitude()) * 1200;
182 int idx1 = ((int)y)*1201 + (int)x;
183 try {
184 int[] fouralts = {heights[idx1], heights[idx1+1], heights[idx1-1201], heights[idx1-1200]};
185 int numVoids = (fouralts[0]==VOID_VAL?1:0) + (fouralts[1]==VOID_VAL?1:0)
186 + (fouralts[2]==VOID_VAL?1:0) + (fouralts[3]==VOID_VAL?1:0);
187 // if (numVoids > 0) System.out.println(numVoids + " voids found");
188 double altitude = 0.0;
189 switch (numVoids) {
190 case 0: altitude = bilinearInterpolate(fouralts, x, y); break;
191 case 1: altitude = bilinearInterpolate(fixVoid(fouralts), x, y); break;
192 case 2:
193 case 3: altitude = averageNonVoid(fouralts); break;
194 default: altitude = VOID_VAL;
195 }
196 if (altitude != VOID_VAL) {
197 point.setFieldValue(Field.ALTITUDE, ""+altitude, false);
198 numAltitudesFound++;
199 }
200 }
201 catch (ArrayIndexOutOfBoundsException obe) {
202 //System.err.println("lat=" + point.getLatitude().getDouble() + ", x=" + x + ", y=" + y + ", idx=" + idx1);
203 }
204 }
205 }
206 }
207 }
208 }
209 catch (IOException ioe) {
210 //System.err.println("eek - " + ioe.getMessage());
211 }
212 }
213 }
214 _dialog.dispose();
215 if (numAltitudesFound > 0)
216 {
217 // Inform app including undo information
218 track.requestRescale();
219 UpdateMessageBroker.informSubscribers(DataSubscriber.DATA_ADDED_OR_REMOVED);
220 _app.completeFunction(undo, I18nManager.getText("confirm.lookupsrtm1") + " " + numAltitudesFound
221 + " " + I18nManager.getText("confirm.lookupsrtm2"));
222 }
223 else {
224 _app.showErrorMessage(getNameKey(), "error.lookupsrtm.none");
225 }
226 }
227
228 /**
229 * Perform a bilinear interpolation on the given altitude array
230 * @param inAltitudes array of four altitude values on corners of square (bl, br, tl, tr)
231 * @param inX x coordinate
232 * @param inY y coordinate
233 * @return interpolated altitude
234 */
235 private static double bilinearInterpolate(int[] inAltitudes, double inX, double inY)
236 {
237 double alpha = inX - (int) inX;
238 double beta = 1 - (inY - (int) inY);
239 double alt = (1-alpha)*(1-beta)*inAltitudes[0] + alpha*(1-beta)*inAltitudes[1]
240 + (1-alpha)*beta*inAltitudes[2] + alpha*beta*inAltitudes[3];
241 return alt;
242 }
243
244 /**
245 * Fix a single void in the given array by replacing it with the average of the others
246 * @param inAltitudes array of altitudes containing one void
247 * @return fixed array without voids
248 */
249 private static int[] fixVoid(int[] inAltitudes)
250 {
251 int[] fixed = new int[inAltitudes.length];
252 for (int i=0; i<inAltitudes.length; i++) {
253 if (inAltitudes[i] == VOID_VAL) {
254 fixed[i] = (int) Math.round(averageNonVoid(inAltitudes));
255 }
256 else {
257 fixed[i] = inAltitudes[i];
258 }
259 }
260 return fixed;
261 }
262
263 /**
264 * Calculate the average of the non-void altitudes in the given array
265 * @param inAltitudes array of altitudes with one or more voids
266 * @return average of non-void altitudes
267 */
268 private static final double averageNonVoid(int[] inAltitudes)
269 {
270 double totalAltitude = 0.0;
271 int numAlts = 0;
272 for (int i=0; i<inAltitudes.length; i++) {
273 if (inAltitudes[i] != VOID_VAL) {
274 totalAltitude += inAltitudes[i];
275 numAlts++;
276 }
277 }
278 if (numAlts < 1) {return VOID_VAL;}
279 return totalAltitude / numAlts;
280 }
281 }
0 package tim.prune.function.srtm;
1
2 import tim.prune.data.Coordinate;
3 import tim.prune.data.DataPoint;
4
5 /**
6 * Class to represent a single tile of Srtm data, from a single hgt.zip file
7 */
8 public class SrtmTile
9 {
10 /** Latitude in degrees north/south */
11 private int _latitude = 0;
12 /** Longitude ini degrees east/west */
13 private int _longitude = 0;
14
15 /**
16 * Constructor working out the tile for a single point
17 * @param inPoint data point
18 */
19 public SrtmTile(DataPoint inPoint)
20 {
21 Coordinate latitude = inPoint.getLatitude();
22 _latitude = (int) Math.floor(latitude.getDouble());
23 Coordinate longitude = inPoint.getLongitude();
24 _longitude = (int) Math.floor(longitude.getDouble());
25 }
26
27 /**
28 * Check for equality
29 * @param inOther other tile object
30 * @return true if both represent same tile
31 */
32 public boolean equals(SrtmTile inOther)
33 {
34 return (_latitude == inOther._latitude) && (_longitude == inOther._longitude);
35 }
36
37 /** @return latitude as int */
38 public int getLatitude() {
39 return _latitude;
40 }
41
42 /** @return longitude as int */
43 public int getLongitude() {
44 return _longitude;
45 }
46
47 /**
48 * @return filename of tile
49 */
50 public String getTileName()
51 {
52 return (_latitude >= 0?"N":"S")
53 + (Math.abs(_latitude) < 10?"0":"")
54 + Math.abs(_latitude)
55 + (_longitude >= 0?"E":"W")
56 + (Math.abs(_longitude) < 100?"0":"")
57 + (Math.abs(_longitude) < 10?"0":"")
58 + Math.abs(_longitude)
59 + ".hgt.zip";
60 }
61 }
0 package tim.prune.function.srtm;
1
2 import java.io.InputStream;
3 import java.net.MalformedURLException;
4 import java.net.URL;
5 import java.util.ArrayList;
6
7
8 /**
9 * Class to get the URLs of the SRTM tiles
10 * using the srtmtiles.dat file
11 */
12 public abstract class TileFinder
13 {
14 /** URL prefix for all tiles */
15 private static final String URL_PREFIX = "http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/";
16 /** Directory names for each continent */
17 private static final String[] CONTINENTS = {"", "Eurasia", "North_America", "Australia",
18 "Islands", "South_America", "Africa"};
19
20
21 /**
22 * Get the Urls for the given list of tiles
23 * @param inTiles list of Tiles to get
24 * @return array of URLs
25 */
26 public static URL[] getUrls(ArrayList<SrtmTile> inTiles)
27 {
28 if (inTiles == null || inTiles.size() < 1) {return null;}
29 URL[] urls = new URL[inTiles.size()];
30 // Read dat file into array
31 byte[] lookup = readDatFile();
32 for (int t=0; t<inTiles.size(); t++)
33 {
34 SrtmTile tile = inTiles.get(t);
35 // Get byte from lookup array
36 int idx = (tile.getLatitude() + 59)*360 + (tile.getLongitude() + 180);
37 try
38 {
39 int dir = lookup[idx];
40 if (dir > 0) {
41 try {
42 urls[t] = new URL(URL_PREFIX + CONTINENTS[dir] + "/" + tile.getTileName());
43 } catch (MalformedURLException e) {} // ignore error, url stays null
44 }
45 } catch (ArrayIndexOutOfBoundsException e) {} // ignore error, url stays null
46 }
47 return urls;
48 }
49
50 /**
51 * Read the dat file and get the contents
52 * @return byte array containing file contents
53 */
54 private static byte[] readDatFile()
55 {
56 try
57 {
58 // Need absolute path to dat file
59 InputStream in = TileFinder.class.getResourceAsStream("/tim/prune/function/srtm/srtmtiles.dat");
60 if (in != null)
61 {
62 byte[] buffer = new byte[in.available()];
63 in.read(buffer);
64 in.close();
65 return buffer;
66 }
67 }
68 catch (java.io.IOException e) {
69 System.err.println("Exception trying to read srtmtiles.dat : " + e.getMessage());
70 }
71 return null;
72 }
73 }
0 package tim.prune.function.srtm.gen;
1
2 import java.io.BufferedReader;
3 import java.io.File;
4 import java.io.FileOutputStream;
5 import java.io.FileReader;
6
7 /**
8 * Class used to generate a lookup file to find the URLs of SRTM tiles.
9 * The tiles are split into directories for each continent, so we need some way
10 * of going from coordinates to directories.
11 * This class reads the directory listings from the files tiles1.txt, tiles2.txt etc
12 * and combines the result into a binary array
13 */
14 public class GenerateTileLookup
15 {
16
17 /**
18 * Main method for generating the array
19 * @param args ignored
20 */
21 public static void main(String[] args)
22 {
23 System.out.println("Generate tile lookup");
24 byte[] lookup = new byte[360 * 120]; // +/- 180 degrees longitude, +/- 60 degrees latitude
25 for (int f=1; f<= 6; f++)
26 {
27 try
28 {
29 BufferedReader r = new BufferedReader(new FileReader(new File("tim/prune/function/srtm/gen/tiles" + f + ".txt")));
30 String line = r.readLine();
31 System.out.println("Read continent: '" + line + "'");
32 while ((line = r.readLine()) != null) {
33 if (line.length() == 7)
34 {
35 boolean north = (line.charAt(0) == 'N');
36 int lat = Integer.parseInt(line.substring(1, 3));
37 if (!north) {lat = -lat;}
38 boolean east = (line.charAt(3) == 'E');
39 int lon = Integer.parseInt(line.substring(4));
40 if (!east) {lon = -lon;}
41 // Store in lookup
42 int arrindex = (lat+59)*360 + (lon+180);
43 lookup[arrindex] = (byte) f;
44 }
45 }
46 }
47 catch (Exception e) {
48 e.printStackTrace();
49 }
50 }
51 // Now f should be populated
52 StringBuilder b = new StringBuilder();
53 for (int l=-180; l<180; l++) {
54 int i = 59 * 360 + (l+180);
55 b.append("" + lookup[i]);
56 }
57 System.out.println("equator: " + b.toString());
58
59 // Write bytes to file
60 try {
61 FileOutputStream out = new FileOutputStream(new File("srtmtiles.dat"));
62 out.write(lookup);
63 out.close();
64 }
65 catch (Exception e) {
66 e.printStackTrace();
67 }
68 }
69 }
0 Eurasia
1 N00E072
2 N00E073
3 N00E097
4 N00E098
5 N00E099
6 N00E100
7 N00E101
8 N00E102
9 N00E103
10 N00E104
11 N00E106
12 N00E107
13 N00E108
14 N00E109
15 N00E110
16 N00E111
17 N00E112
18 N00E113
19 N00E114
20 N00E115
21 N00E116
22 N00E117
23 N00E118
24 N00E119
25 N00E120
26 N00E121
27 N00E122
28 N00E123
29 N00E124
30 N00E126
31 N00E127
32 N00E128
33 N00E129
34 N00E130
35 N00E131
36 N00E134
37 N00E172
38 N00E173
39 N00W177
40 N01E073
41 N01E097
42 N01E098
43 N01E099
44 N01E100
45 N01E101
46 N01E102
47 N01E103
48 N01E104
49 N01E106
50 N01E107
51 N01E108
52 N01E109
53 N01E110
54 N01E111
55 N01E112
56 N01E113
57 N01E114
58 N01E115
59 N01E116
60 N01E117
61 N01E118
62 N01E119
63 N01E120
64 N01E121
65 N01E122
66 N01E124
67 N01E125
68 N01E126
69 N01E127
70 N01E128
71 N01E131
72 N01E154
73 N01E172
74 N01E173
75 N01W158
76 N02E072
77 N02E073
78 N02E095
79 N02E096
80 N02E097
81 N02E098
82 N02E099
83 N02E100
84 N02E101
85 N02E102
86 N02E103
87 N02E104
88 N02E105
89 N02E106
90 N02E107
91 N02E108
92 N02E109
93 N02E111
94 N02E112
95 N02E113
96 N02E114
97 N02E115
98 N02E116
99 N02E117
100 N02E118
101 N02E125
102 N02E127
103 N02E128
104 N02E131
105 N02E173
106 N02W158
107 N03E072
108 N03E073
109 N03E095
110 N03E096
111 N03E097
112 N03E098
113 N03E099
114 N03E100
115 N03E101
116 N03E102
117 N03E103
118 N03E105
119 N03E106
120 N03E107
121 N03E108
122 N03E112
123 N03E113
124 N03E114
125 N03E115
126 N03E116
127 N03E117
128 N03E125
129 N03E126
130 N03E131
131 N03E154
132 N03E172
133 N03E173
134 N03W160
135 N04E072
136 N04E073
137 N04E095
138 N04E096
139 N04E097
140 N04E098
141 N04E100
142 N04E101
143 N04E102
144 N04E103
145 N04E107
146 N04E108
147 N04E113
148 N04E114
149 N04E115
150 N04E116
151 N04E117
152 N04E118
153 N04E119
154 N04E125
155 N04E126
156 N04E127
157 N04E131
158 N04E132
159 N04E168
160 N04W161
161 N05E072
162 N05E073
163 N05E080
164 N05E094
165 N05E095
166 N05E096
167 N05E097
168 N05E100
169 N05E101
170 N05E102
171 N05E103
172 N05E114
173 N05E115
174 N05E116
175 N05E117
176 N05E118
177 N05E119
178 N05E120
179 N05E121
180 N05E124
181 N05E125
182 N05E126
183 N05E132
184 N05E153
185 N05E157
186 N05E162
187 N05E163
188 N05E168
189 N05E169
190 N05E172
191 N05W163
192 N06E072
193 N06E073
194 N06E079
195 N06E080
196 N06E081
197 N06E093
198 N06E095
199 N06E099
200 N06E100
201 N06E101
202 N06E102
203 N06E115
204 N06E116
205 N06E117
206 N06E118
207 N06E120
208 N06E121
209 N06E122
210 N06E123
211 N06E124
212 N06E125
213 N06E126
214 N06E134
215 N06E143
216 N06E149
217 N06E151
218 N06E152
219 N06E157
220 N06E158
221 N06E159
222 N06E160
223 N06E169
224 N06E171
225 N06E172
226 N06W163
227 N07E072
228 N07E073
229 N07E079
230 N07E080
231 N07E081
232 N07E093
233 N07E098
234 N07E099
235 N07E100
236 N07E113
237 N07E116
238 N07E117
239 N07E118
240 N07E121
241 N07E122
242 N07E123
243 N07E124
244 N07E125
245 N07E126
246 N07E134
247 N07E143
248 N07E144
249 N07E145
250 N07E146
251 N07E147
252 N07E149
253 N07E151
254 N07E152
255 N07E155
256 N07E157
257 N07E158
258 N07E168
259 N07E171
260 N08E073
261 N08E076
262 N08E077
263 N08E078
264 N08E079
265 N08E080
266 N08E081
267 N08E092
268 N08E093
269 N08E097
270 N08E098
271 N08E099
272 N08E100
273 N08E104
274 N08E105
275 N08E106
276 N08E111
277 N08E116
278 N08E117
279 N08E118
280 N08E122
281 N08E123
282 N08E124
283 N08E125
284 N08E126
285 N08E134
286 N08E137
287 N08E140
288 N08E144
289 N08E146
290 N08E147
291 N08E149
292 N08E150
293 N08E151
294 N08E152
295 N08E154
296 N08E165
297 N08E166
298 N08E167
299 N08E168
300 N08E170
301 N08E171
302 N09E076
303 N09E077
304 N09E078
305 N09E079
306 N09E080
307 N09E092
308 N09E097
309 N09E098
310 N09E099
311 N09E100
312 N09E102
313 N09E103
314 N09E104
315 N09E105
316 N09E106
317 N09E109
318 N09E117
319 N09E118
320 N09E119
321 N09E120
322 N09E121
323 N09E122
324 N09E123
325 N09E124
326 N09E125
327 N09E126
328 N09E138
329 N09E139
330 N09E140
331 N09E145
332 N09E160
333 N09E165
334 N09E166
335 N09E167
336 N09E169
337 N09E170
338 N10E072
339 N10E073
340 N10E075
341 N10E076
342 N10E077
343 N10E078
344 N10E079
345 N10E092
346 N10E097
347 N10E098
348 N10E099
349 N10E102
350 N10E103
351 N10E104
352 N10E105
353 N10E106
354 N10E107
355 N10E108
356 N10E114
357 N10E115
358 N10E118
359 N10E119
360 N10E120
361 N10E121
362 N10E122
363 N10E123
364 N10E124
365 N10E125
366 N10E126
367 N10E139
368 N10E165
369 N10E166
370 N10E168
371 N10E169
372 N10E170
373 N11E072
374 N11E073
375 N11E075
376 N11E076
377 N11E077
378 N11E078
379 N11E079
380 N11E092
381 N11E093
382 N11E097
383 N11E098
384 N11E099
385 N11E102
386 N11E103
387 N11E104
388 N11E105
389 N11E106
390 N11E107
391 N11E108
392 N11E109
393 N11E114
394 N11E115
395 N11E119
396 N11E120
397 N11E121
398 N11E122
399 N11E123
400 N11E124
401 N11E125
402 N11E162
403 N11E165
404 N11E166
405 N11E167
406 N11E169
407 N12E074
408 N12E075
409 N12E076
410 N12E077
411 N12E078
412 N12E079
413 N12E080
414 N12E092
415 N12E093
416 N12E097
417 N12E098
418 N12E099
419 N12E100
420 N12E101
421 N12E102
422 N12E103
423 N12E104
424 N12E105
425 N12E106
426 N12E107
427 N12E108
428 N12E109
429 N12E119
430 N12E120
431 N12E121
432 N12E122
433 N12E123
434 N12E124
435 N12E125
436 N12E170
437 N13E074
438 N13E075
439 N13E076
440 N13E077
441 N13E078
442 N13E079
443 N13E080
444 N13E092
445 N13E093
446 N13E094
447 N13E097
448 N13E098
449 N13E099
450 N13E100
451 N13E101
452 N13E102
453 N13E103
454 N13E104
455 N13E105
456 N13E106
457 N13E107
458 N13E108
459 N13E109
460 N13E120
461 N13E121
462 N13E122
463 N13E123
464 N13E124
465 N13E144
466 N14E074
467 N14E075
468 N14E076
469 N14E077
470 N14E078
471 N14E079
472 N14E080
473 N14E093
474 N14E097
475 N14E098
476 N14E099
477 N14E100
478 N14E101
479 N14E102
480 N14E103
481 N14E104
482 N14E105
483 N14E106
484 N14E107
485 N14E108
486 N14E109
487 N14E120
488 N14E121
489 N14E122
490 N14E123
491 N14E124
492 N14E145
493 N14E168
494 N14E169
495 N15E073
496 N15E074
497 N15E075
498 N15E076
499 N15E077
500 N15E078
501 N15E079
502 N15E080
503 N15E081
504 N15E094
505 N15E095
506 N15E097
507 N15E098
508 N15E099
509 N15E100
510 N15E101
511 N15E102
512 N15E103
513 N15E104
514 N15E105
515 N15E106
516 N15E107
517 N15E108
518 N15E109
519 N15E111
520 N15E119
521 N15E120
522 N15E121
523 N15E122
524 N15E145
525 N16E073
526 N16E074
527 N16E075
528 N16E076
529 N16E077
530 N16E078
531 N16E079
532 N16E080
533 N16E081
534 N16E082
535 N16E094
536 N16E095
537 N16E096
538 N16E097
539 N16E098
540 N16E099
541 N16E100
542 N16E101
543 N16E102
544 N16E103
545 N16E104
546 N16E105
547 N16E106
548 N16E107
549 N16E108
550 N16E111
551 N16E112
552 N16E119
553 N16E120
554 N16E121
555 N16E122
556 N16E145
557 N16E146
558 N17E073
559 N17E074
560 N17E075
561 N17E076
562 N17E077
563 N17E078
564 N17E079
565 N17E080
566 N17E081
567 N17E082
568 N17E083
569 N17E094
570 N17E095
571 N17E096
572 N17E097
573 N17E098
574 N17E099
575 N17E100
576 N17E101
577 N17E102
578 N17E103
579 N17E104
580 N17E105
581 N17E106
582 N17E107
583 N17E120
584 N17E121
585 N17E122
586 N17E145
587 N18E072
588 N18E073
589 N18E074
590 N18E075
591 N18E076
592 N18E077
593 N18E078
594 N18E079
595 N18E080
596 N18E081
597 N18E082
598 N18E083
599 N18E084
600 N18E093
601 N18E094
602 N18E095
603 N18E096
604 N18E097
605 N18E098
606 N18E099
607 N18E100
608 N18E101
609 N18E102
610 N18E103
611 N18E104
612 N18E105
613 N18E106
614 N18E108
615 N18E109
616 N18E110
617 N18E120
618 N18E121
619 N18E122
620 N18E145
621 N19E072
622 N19E073
623 N19E074
624 N19E075
625 N19E076
626 N19E077
627 N19E078
628 N19E079
629 N19E080
630 N19E081
631 N19E082
632 N19E083
633 N19E084
634 N19E085
635 N19E086
636 N19E092
637 N19E093
638 N19E094
639 N19E095
640 N19E096
641 N19E097
642 N19E098
643 N19E099
644 N19E100
645 N19E101
646 N19E102
647 N19E103
648 N19E104
649 N19E105
650 N19E106
651 N19E108
652 N19E109
653 N19E110
654 N19E111
655 N19E121
656 N19E122
657 N19E145
658 N19E166
659 N20E070
660 N20E071
661 N20E072
662 N20E073
663 N20E074
664 N20E075
665 N20E076
666 N20E077
667 N20E078
668 N20E079
669 N20E080
670 N20E081
671 N20E082
672 N20E083
673 N20E084
674 N20E085
675 N20E086
676 N20E087
677 N20E092
678 N20E093
679 N20E094
680 N20E095
681 N20E096
682 N20E097
683 N20E098
684 N20E099
685 N20E100
686 N20E101
687 N20E102
688 N20E103
689 N20E104
690 N20E105
691 N20E106
692 N20E107
693 N20E109
694 N20E110
695 N20E116
696 N20E121
697 N20E122
698 N20E136
699 N20E144
700 N20E145
701 N21E069
702 N21E070
703 N21E071
704 N21E072
705 N21E073
706 N21E074
707 N21E075
708 N21E076
709 N21E077
710 N21E078
711 N21E079
712 N21E080
713 N21E081
714 N21E082
715 N21E083
716 N21E084
717 N21E085
718 N21E086
719 N21E087
720 N21E088
721 N21E089
722 N21E090
723 N21E091
724 N21E092
725 N21E093
726 N21E094
727 N21E095
728 N21E096
729 N21E097
730 N21E098
731 N21E099
732 N21E100
733 N21E101
734 N21E102
735 N21E103
736 N21E104
737 N21E105
738 N21E106
739 N21E107
740 N21E108
741 N21E109
742 N21E110
743 N21E111
744 N21E112
745 N21E113
746 N21E114
747 N21E120
748 N21E121
749 N22E068
750 N22E069
751 N22E070
752 N22E071
753 N22E072
754 N22E073
755 N22E074
756 N22E075
757 N22E076
758 N22E077
759 N22E078
760 N22E079
761 N22E080
762 N22E081
763 N22E082
764 N22E083
765 N22E084
766 N22E085
767 N22E086
768 N22E087
769 N22E088
770 N22E089
771 N22E090
772 N22E091
773 N22E092
774 N22E093
775 N22E094
776 N22E095
777 N22E096
778 N22E097
779 N22E098
780 N22E099
781 N22E100
782 N22E101
783 N22E102
784 N22E103
785 N22E104
786 N22E105
787 N22E106
788 N22E107
789 N22E108
790 N22E109
791 N22E110
792 N22E111
793 N22E112
794 N22E113
795 N22E114
796 N22E115
797 N22E116
798 N22E120
799 N22E121
800 N23E067
801 N23E068
802 N23E069
803 N23E070
804 N23E071
805 N23E072
806 N23E073
807 N23E074
808 N23E075
809 N23E076
810 N23E077
811 N23E078
812 N23E079
813 N23E080
814 N23E081
815 N23E082
816 N23E083
817 N23E084
818 N23E085
819 N23E086
820 N23E087
821 N23E088
822 N23E089
823 N23E090
824 N23E091
825 N23E092
826 N23E093
827 N23E094
828 N23E095
829 N23E096
830 N23E097
831 N23E098
832 N23E099
833 N23E100
834 N23E101
835 N23E102
836 N23E103
837 N23E104
838 N23E105
839 N23E106
840 N23E107
841 N23E108
842 N23E109
843 N23E110
844 N23E111
845 N23E112
846 N23E113
847 N23E114
848 N23E115
849 N23E116
850 N23E117
851 N23E119
852 N23E120
853 N23E121
854 N24E066
855 N24E067
856 N24E068
857 N24E069
858 N24E070
859 N24E071
860 N24E072
861 N24E073
862 N24E074
863 N24E075
864 N24E076
865 N24E077
866 N24E078
867 N24E079
868 N24E080
869 N24E081
870 N24E082
871 N24E083
872 N24E084
873 N24E085
874 N24E086
875 N24E087
876 N24E088
877 N24E089
878 N24E090
879 N24E091
880 N24E092
881 N24E093
882 N24E094
883 N24E095
884 N24E096
885 N24E097
886 N24E098
887 N24E099
888 N24E100
889 N24E101
890 N24E102
891 N24E103
892 N24E104
893 N24E105
894 N24E106
895 N24E107
896 N24E108
897 N24E109
898 N24E110
899 N24E111
900 N24E112
901 N24E113
902 N24E114
903 N24E115
904 N24E116
905 N24E117
906 N24E118
907 N24E119
908 N24E120
909 N24E121
910 N24E122
911 N24E123
912 N24E124
913 N24E125
914 N24E131
915 N24E141
916 N24E153
917 N25E060
918 N25E061
919 N25E062
920 N25E063
921 N25E064
922 N25E065
923 N25E066
924 N25E067
925 N25E068
926 N25E069
927 N25E070
928 N25E071
929 N25E072
930 N25E073
931 N25E074
932 N25E075
933 N25E076
934 N25E077
935 N25E078
936 N25E079
937 N25E080
938 N25E081
939 N25E082
940 N25E083
941 N25E084
942 N25E085
943 N25E086
944 N25E087
945 N25E088
946 N25E089
947 N25E090
948 N25E091
949 N25E092
950 N25E093
951 N25E094
952 N25E095
953 N25E096
954 N25E097
955 N25E098
956 N25E099
957 N25E100
958 N25E101
959 N25E102
960 N25E103
961 N25E104
962 N25E105
963 N25E106
964 N25E107
965 N25E108
966 N25E109
967 N25E110
968 N25E111
969 N25E112
970 N25E113
971 N25E114
972 N25E115
973 N25E116
974 N25E117
975 N25E118
976 N25E119
977 N25E121
978 N25E122
979 N25E123
980 N25E124
981 N25E131
982 N25E141
983 N26E060
984 N26E061
985 N26E062
986 N26E063
987 N26E064
988 N26E065
989 N26E066
990 N26E067
991 N26E068
992 N26E069
993 N26E070
994 N26E071
995 N26E072
996 N26E073
997 N26E074
998 N26E075
999 N26E076
1000 N26E077
1001 N26E078
1002 N26E079
1003 N26E080
1004 N26E081
1005 N26E082
1006 N26E083
1007 N26E084
1008 N26E085
1009 N26E086
1010 N26E087
1011 N26E088
1012 N26E089
1013 N26E090
1014 N26E091
1015 N26E092
1016 N26E093
1017 N26E094
1018 N26E095
1019 N26E096
1020 N26E097
1021 N26E098
1022 N26E099
1023 N26E100
1024 N26E101
1025 N26E102
1026 N26E103
1027 N26E104
1028 N26E105
1029 N26E106
1030 N26E107
1031 N26E108
1032 N26E109
1033 N26E110
1034 N26E111
1035 N26E112
1036 N26E113
1037 N26E114
1038 N26E115
1039 N26E116
1040 N26E117
1041 N26E118
1042 N26E119
1043 N26E120
1044 N26E126
1045 N26E127
1046 N26E128
1047 N26E142
1048 N27E060
1049 N27E061
1050 N27E062
1051 N27E063
1052 N27E064
1053 N27E065
1054 N27E066
1055 N27E067
1056 N27E068
1057 N27E069
1058 N27E070
1059 N27E071
1060 N27E072
1061 N27E073
1062 N27E074
1063 N27E075
1064 N27E076
1065 N27E077
1066 N27E078
1067 N27E079
1068 N27E080
1069 N27E081
1070 N27E082
1071 N27E083
1072 N27E084
1073 N27E085
1074 N27E086
1075 N27E087
1076 N27E088
1077 N27E089
1078 N27E090
1079 N27E091
1080 N27E092
1081 N27E093
1082 N27E094
1083 N27E095
1084 N27E096
1085 N27E097
1086 N27E098
1087 N27E099
1088 N27E100
1089 N27E101
1090 N27E102
1091 N27E103
1092 N27E104
1093 N27E105
1094 N27E106
1095 N27E107
1096 N27E108
1097 N27E109
1098 N27E110
1099 N27E111
1100 N27E112
1101 N27E113
1102 N27E114
1103 N27E115
1104 N27E116
1105 N27E117
1106 N27E118
1107 N27E119
1108 N27E120
1109 N27E121
1110 N27E127
1111 N27E128
1112 N27E129
1113 N27E140
1114 N27E142
1115 N28E060
1116 N28E061
1117 N28E062
1118 N28E063
1119 N28E064
1120 N28E065
1121 N28E066
1122 N28E067
1123 N28E068
1124 N28E069
1125 N28E070
1126 N28E071
1127 N28E072
1128 N28E073
1129 N28E074
1130 N28E075
1131 N28E076
1132 N28E077
1133 N28E078
1134 N28E079
1135 N28E080
1136 N28E081
1137 N28E082
1138 N28E083
1139 N28E084
1140 N28E085
1141 N28E086
1142 N28E087
1143 N28E088
1144 N28E089
1145 N28E090
1146 N28E091
1147 N28E092
1148 N28E093
1149 N28E094
1150 N28E095
1151 N28E096
1152 N28E097
1153 N28E098
1154 N28E099
1155 N28E100
1156 N28E101
1157 N28E102
1158 N28E103
1159 N28E104
1160 N28E105
1161 N28E106
1162 N28E107
1163 N28E108
1164 N28E109
1165 N28E110
1166 N28E111
1167 N28E112
1168 N28E113
1169 N28E114
1170 N28E115
1171 N28E116
1172 N28E117
1173 N28E118
1174 N28E119
1175 N28E120
1176 N28E121
1177 N28E122
1178 N28E128
1179 N28E129
1180 N28E130
1181 N29E060
1182 N29E061
1183 N29E062
1184 N29E063
1185 N29E064
1186 N29E065
1187 N29E066
1188 N29E067
1189 N29E068
1190 N29E069
1191 N29E070
1192 N29E071
1193 N29E072
1194 N29E073
1195 N29E074
1196 N29E075
1197 N29E076
1198 N29E077
1199 N29E078
1200 N29E079
1201 N29E080
1202 N29E081
1203 N29E082
1204 N29E083
1205 N29E084
1206 N29E085
1207 N29E086
1208 N29E087
1209 N29E088
1210 N29E089
1211 N29E090
1212 N29E091
1213 N29E092
1214 N29E093
1215 N29E094
1216 N29E095
1217 N29E096
1218 N29E097
1219 N29E098
1220 N29E099
1221 N29E100
1222 N29E101
1223 N29E102
1224 N29E103
1225 N29E104
1226 N29E105
1227 N29E106
1228 N29E107
1229 N29E108
1230 N29E109
1231 N29E110
1232 N29E111
1233 N29E112
1234 N29E113
1235 N29E114
1236 N29E115
1237 N29E116
1238 N29E117
1239 N29E118
1240 N29E119
1241 N29E120
1242 N29E121
1243 N29E122
1244 N29E129
1245 N29E140
1246 N30E060
1247 N30E061
1248 N30E062
1249 N30E063
1250 N30E064
1251 N30E065
1252 N30E066
1253 N30E067
1254 N30E068
1255 N30E069
1256 N30E070
1257 N30E071
1258 N30E072
1259 N30E073
1260 N30E074
1261 N30E075
1262 N30E076
1263 N30E077
1264 N30E078
1265 N30E079
1266 N30E080
1267 N30E081
1268 N30E082
1269 N30E083
1270 N30E084
1271 N30E085
1272 N30E086
1273 N30E087
1274 N30E088
1275 N30E089
1276 N30E090
1277 N30E091
1278 N30E092
1279 N30E093
1280 N30E094
1281 N30E095
1282 N30E096
1283 N30E097
1284 N30E098
1285 N30E099
1286 N30E100
1287 N30E101
1288 N30E102
1289 N30E103
1290 N30E104
1291 N30E105
1292 N30E106
1293 N30E107
1294 N30E108
1295 N30E109
1296 N30E110
1297 N30E111
1298 N30E112
1299 N30E113
1300 N30E114
1301 N30E115
1302 N30E116
1303 N30E117
1304 N30E118
1305 N30E119
1306 N30E120
1307 N30E121
1308 N30E122
1309 N30E129
1310 N30E130
1311 N30E131
1312 N30E140
1313 N31E060
1314 N31E061
1315 N31E062
1316 N31E063
1317 N31E064
1318 N31E065
1319 N31E066
1320 N31E067
1321 N31E068
1322 N31E069
1323 N31E070
1324 N31E071
1325 N31E072
1326 N31E073
1327 N31E074
1328 N31E075
1329 N31E076
1330 N31E077
1331 N31E078
1332 N31E079
1333 N31E080
1334 N31E081
1335 N31E082
1336 N31E083
1337 N31E084
1338 N31E085
1339 N31E086
1340 N31E087
1341 N31E088
1342 N31E089
1343 N31E090
1344 N31E091
1345 N31E092
1346 N31E093
1347 N31E094
1348 N31E095
1349 N31E096
1350 N31E097
1351 N31E098
1352 N31E099
1353 N31E100
1354 N31E101
1355 N31E102
1356 N31E103
1357 N31E104
1358 N31E105
1359 N31E106
1360 N31E107
1361 N31E108
1362 N31E109
1363 N31E110
1364 N31E111
1365 N31E112
1366 N31E113
1367 N31E114
1368 N31E115
1369 N31E116
1370 N31E117
1371 N31E118
1372 N31E119
1373 N31E120
1374 N31E121
1375 N31E122
1376 N31E128
1377 N31E129
1378 N31E130
1379 N31E131
1380 N31E139
1381 N31E140
1382 N32E060
1383 N32E061
1384 N32E062
1385 N32E063
1386 N32E064
1387 N32E065
1388 N32E066
1389 N32E067
1390 N32E068
1391 N32E069
1392 N32E070
1393 N32E071
1394 N32E072
1395 N32E073
1396 N32E074
1397 N32E075
1398 N32E076
1399 N32E077
1400 N32E078
1401 N32E079
1402 N32E080
1403 N32E081
1404 N32E082
1405 N32E083
1406 N32E084
1407 N32E085
1408 N32E086
1409 N32E087
1410 N32E088
1411 N32E089
1412 N32E090
1413 N32E091
1414 N32E092
1415 N32E093
1416 N32E094
1417 N32E095
1418 N32E096
1419 N32E097
1420 N32E098
1421 N32E099
1422 N32E100
1423 N32E101
1424 N32E102
1425 N32E103
1426 N32E104
1427 N32E105
1428 N32E106
1429 N32E107
1430 N32E108
1431 N32E109
1432 N32E110
1433 N32E111
1434 N32E112
1435 N32E113
1436 N32E114
1437 N32E115
1438 N32E116
1439 N32E117
1440 N32E118
1441 N32E119
1442 N32E120
1443 N32E121
1444 N32E128
1445 N32E129
1446 N32E130
1447 N32E131
1448 N32E132
1449 N32E133
1450 N32E139
1451 N33E060
1452 N33E061
1453 N33E062
1454 N33E063
1455 N33E064
1456 N33E065
1457 N33E066
1458 N33E067
1459 N33E068
1460 N33E069
1461 N33E070
1462 N33E071
1463 N33E072
1464 N33E073
1465 N33E074
1466 N33E075
1467 N33E076
1468 N33E077
1469 N33E078
1470 N33E079
1471 N33E080
1472 N33E081
1473 N33E082
1474 N33E083
1475 N33E084
1476 N33E085
1477 N33E086
1478 N33E087
1479 N33E088
1480 N33E089
1481 N33E090
1482 N33E091
1483 N33E092
1484 N33E093
1485 N33E094
1486 N33E095
1487 N33E096
1488 N33E097
1489 N33E098
1490 N33E099
1491 N33E100
1492 N33E101
1493 N33E102
1494 N33E103
1495 N33E104
1496 N33E105
1497 N33E106
1498 N33E107
1499 N33E108
1500 N33E109
1501 N33E110
1502 N33E111
1503 N33E112
1504 N33E113
1505 N33E114
1506 N33E115
1507 N33E116
1508 N33E117
1509 N33E118
1510 N33E119
1511 N33E120
1512 N33E126
1513 N33E128
1514 N33E129
1515 N33E130
1516 N33E131
1517 N33E132
1518 N33E133
1519 N33E134
1520 N33E135
1521 N33E136
1522 N33E138
1523 N33E139
1524 N34E060
1525 N34E061
1526 N34E062
1527 N34E063
1528 N34E064
1529 N34E065
1530 N34E066
1531 N34E067
1532 N34E068
1533 N34E069
1534 N34E070
1535 N34E071
1536 N34E072
1537 N34E073
1538 N34E074
1539 N34E075
1540 N34E076
1541 N34E077
1542 N34E078
1543 N34E079
1544 N34E080
1545 N34E081
1546 N34E082
1547 N34E083
1548 N34E084
1549 N34E085
1550 N34E086
1551 N34E087
1552 N34E088
1553 N34E089
1554 N34E090
1555 N34E091
1556 N34E092
1557 N34E093
1558 N34E094
1559 N34E095
1560 N34E096
1561 N34E097
1562 N34E098
1563 N34E099
1564 N34E100
1565 N34E101
1566 N34E102
1567 N34E103
1568 N34E104
1569 N34E105
1570 N34E106
1571 N34E107
1572 N34E108
1573 N34E109
1574 N34E110
1575 N34E111
1576 N34E112
1577 N34E113
1578 N34E114
1579 N34E115
1580 N34E116
1581 N34E117
1582 N34E118
1583 N34E119
1584 N34E120
1585 N34E125
1586 N34E126
1587 N34E127
1588 N34E128
1589 N34E129
1590 N34E130
1591 N34E131
1592 N34E132
1593 N34E133
1594 N34E134
1595 N34E135
1596 N34E136
1597 N34E137
1598 N34E138
1599 N34E139
1600 N35E000
1601 N35E001
1602 N35E002
1603 N35E003
1604 N35E004
1605 N35E005
1606 N35E006
1607 N35E007
1608 N35E008
1609 N35E009
1610 N35E010
1611 N35E011
1612 N35E012
1613 N35E014
1614 N35E023
1615 N35E024
1616 N35E025
1617 N35E026
1618 N35E027
1619 N35E032
1620 N35E033
1621 N35E034
1622 N35E035
1623 N35E036
1624 N35E037
1625 N35E038
1626 N35E039
1627 N35E040
1628 N35E041
1629 N35E042
1630 N35E043
1631 N35E044
1632 N35E045
1633 N35E046
1634 N35E047
1635 N35E048
1636 N35E049
1637 N35E050
1638 N35E051
1639 N35E052
1640 N35E053
1641 N35E054
1642 N35E055
1643 N35E056
1644 N35E057
1645 N35E058
1646 N35E059
1647 N35E060
1648 N35E061
1649 N35E062
1650 N35E063
1651 N35E064
1652 N35E065
1653 N35E066
1654 N35E067
1655 N35E068
1656 N35E069
1657 N35E070
1658 N35E071
1659 N35E072
1660 N35E073
1661 N35E074
1662 N35E075
1663 N35E076
1664 N35E077
1665 N35E078
1666 N35E079
1667 N35E080
1668 N35E081
1669 N35E082
1670 N35E083
1671 N35E084
1672 N35E085
1673 N35E086
1674 N35E087
1675 N35E088
1676 N35E089
1677 N35E090
1678 N35E091
1679 N35E092
1680 N35E093
1681 N35E094
1682 N35E095
1683 N35E096
1684 N35E097
1685 N35E098
1686 N35E099
1687 N35E100
1688 N35E101
1689 N35E102
1690 N35E103
1691 N35E104
1692 N35E105
1693 N35E106
1694 N35E107
1695 N35E108
1696 N35E109
1697 N35E110
1698 N35E111
1699 N35E112
1700 N35E113
1701 N35E114
1702 N35E115
1703 N35E116
1704 N35E117
1705 N35E118
1706 N35E119
1707 N35E120
1708 N35E125
1709 N35E126
1710 N35E127
1711 N35E128
1712 N35E129
1713 N35E132
1714 N35E133
1715 N35E134
1716 N35E135
1717 N35E136
1718 N35E137
1719 N35E138
1720 N35E139
1721 N35E140
1722 N35W001
1723 N35W002
1724 N35W003
1725 N35W004
1726 N35W005
1727 N35W006
1728 N35W007
1729 N36E000
1730 N36E001
1731 N36E002
1732 N36E003
1733 N36E004
1734 N36E005
1735 N36E006
1736 N36E007
1737 N36E008
1738 N36E009
1739 N36E010
1740 N36E011
1741 N36E012
1742 N36E014
1743 N36E015
1744 N36E021
1745 N36E022
1746 N36E023
1747 N36E024
1748 N36E025
1749 N36E026
1750 N36E027
1751 N36E028
1752 N36E029
1753 N36E030
1754 N36E031
1755 N36E032
1756 N36E033
1757 N36E034
1758 N36E035
1759 N36E036
1760 N36E037
1761 N36E038
1762 N36E039
1763 N36E040
1764 N36E041
1765 N36E042
1766 N36E043
1767 N36E044
1768 N36E045
1769 N36E046
1770 N36E047
1771 N36E048
1772 N36E049
1773 N36E050
1774 N36E051
1775 N36E052
1776 N36E053
1777 N36E054
1778 N36E055
1779 N36E056
1780 N36E057
1781 N36E058
1782 N36E059
1783 N36E060
1784 N36E061
1785 N36E062
1786 N36E063
1787 N36E064
1788 N36E065
1789 N36E066
1790 N36E067
1791 N36E068
1792 N36E069
1793 N36E070
1794 N36E071
1795 N36E072
1796 N36E073
1797 N36E074
1798 N36E075
1799 N36E076
1800 N36E077
1801 N36E078
1802 N36E079
1803 N36E080
1804 N36E081
1805 N36E082
1806 N36E083
1807 N36E084
1808 N36E085
1809 N36E086
1810 N36E087
1811 N36E088
1812 N36E089
1813 N36E090
1814 N36E091
1815 N36E092
1816 N36E093
1817 N36E094
1818 N36E095
1819 N36E096
1820 N36E097
1821 N36E098
1822 N36E099
1823 N36E100
1824 N36E101
1825 N36E102
1826 N36E103
1827 N36E104
1828 N36E105
1829 N36E106
1830 N36E107
1831 N36E108
1832 N36E109
1833 N36E110
1834 N36E111
1835 N36E112
1836 N36E113
1837 N36E114
1838 N36E115
1839 N36E116
1840 N36E117
1841 N36E118
1842 N36E119
1843 N36E120
1844 N36E121
1845 N36E122
1846 N36E125
1847 N36E126
1848 N36E127
1849 N36E128
1850 N36E129
1851 N36E132
1852 N36E133
1853 N36E135
1854 N36E136
1855 N36E137
1856 N36E138
1857 N36E139
1858 N36E140
1859 N36W002
1860 N36W003
1861 N36W004
1862 N36W005
1863 N36W006
1864 N36W007
1865 N36W008
1866 N36W009
1867 N37E006
1868 N37E007
1869 N37E008
1870 N37E009
1871 N37E010
1872 N37E011
1873 N37E012
1874 N37E013
1875 N37E014
1876 N37E015
1877 N37E016
1878 N37E020
1879 N37E021
1880 N37E022
1881 N37E023
1882 N37E024
1883 N37E025
1884 N37E026
1885 N37E027
1886 N37E028
1887 N37E029
1888 N37E030
1889 N37E031
1890 N37E032
1891 N37E033
1892 N37E034
1893 N37E035
1894 N37E036
1895 N37E037
1896 N37E038
1897 N37E039
1898 N37E040
1899 N37E041
1900 N37E042
1901 N37E043
1902 N37E044
1903 N37E045
1904 N37E046
1905 N37E047
1906 N37E048
1907 N37E049
1908 N37E050
1909 N37E053
1910 N37E054
1911 N37E055
1912 N37E056
1913 N37E057
1914 N37E058
1915 N37E059
1916 N37E060
1917 N37E061
1918 N37E062
1919 N37E063
1920 N37E064
1921 N37E065
1922 N37E066
1923 N37E067
1924 N37E068
1925 N37E069
1926 N37E070
1927 N37E071
1928 N37E072
1929 N37E073
1930 N37E074
1931 N37E075
1932 N37E076
1933 N37E077
1934 N37E078
1935 N37E079
1936 N37E080
1937 N37E081
1938 N37E082
1939 N37E083
1940 N37E084
1941 N37E085
1942 N37E086
1943 N37E087
1944 N37E088
1945 N37E089
1946 N37E090
1947 N37E091
1948 N37E092
1949 N37E093
1950 N37E094
1951 N37E095
1952 N37E096
1953 N37E097
1954 N37E098
1955 N37E099
1956 N37E100
1957 N37E101
1958 N37E102
1959 N37E103
1960 N37E104
1961 N37E105
1962 N37E106
1963 N37E107
1964 N37E108
1965 N37E109
1966 N37E110
1967 N37E111
1968 N37E112
1969 N37E113
1970 N37E114
1971 N37E115
1972 N37E116
1973 N37E117
1974 N37E118
1975 N37E119
1976 N37E120
1977 N37E121
1978 N37E122
1979 N37E124
1980 N37E125
1981 N37E126
1982 N37E127
1983 N37E128
1984 N37E129
1985 N37E130
1986 N37E131
1987 N37E136
1988 N37E137
1989 N37E138
1990 N37E139
1991 N37E140
1992 N37E141
1993 N37W001
1994 N37W002
1995 N37W003
1996 N37W004
1997 N37W005
1998 N37W006
1999 N37W007
2000 N37W008
2001 N37W009
2002 N38E000
2003 N38E001
2004 N38E008
2005 N38E009
2006 N38E012
2007 N38E013
2008 N38E014
2009 N38E015
2010 N38E016
2011 N38E017
2012 N38E020
2013 N38E021
2014 N38E022
2015 N38E023
2016 N38E024
2017 N38E025
2018 N38E026
2019 N38E027
2020 N38E028
2021 N38E029
2022 N38E030
2023 N38E031
2024 N38E032
2025 N38E033
2026 N38E034
2027 N38E035
2028 N38E036
2029 N38E037
2030 N38E038
2031 N38E039
2032 N38E040
2033 N38E041
2034 N38E042
2035 N38E043
2036 N38E044
2037 N38E045
2038 N38E046
2039 N38E047
2040 N38E048
2041 N38E049
2042 N38E053
2043 N38E054
2044 N38E055
2045 N38E056
2046 N38E057
2047 N38E058
2048 N38E059
2049 N38E060
2050 N38E061
2051 N38E062
2052 N38E063
2053 N38E064
2054 N38E065
2055 N38E066
2056 N38E067
2057 N38E068
2058 N38E069
2059 N38E070
2060 N38E071
2061 N38E072
2062 N38E073
2063 N38E074
2064 N38E075
2065 N38E076
2066 N38E077
2067 N38E078
2068 N38E079
2069 N38E080
2070 N38E081
2071 N38E082
2072 N38E083
2073 N38E084
2074 N38E085
2075 N38E086
2076 N38E087
2077 N38E088
2078 N38E089
2079 N38E090
2080 N38E091
2081 N38E092
2082 N38E093
2083 N38E094
2084 N38E095
2085 N38E096
2086 N38E097
2087 N38E098
2088 N38E099
2089 N38E100
2090 N38E101
2091 N38E102
2092 N38E103
2093 N38E104
2094 N38E105
2095 N38E106
2096 N38E107
2097 N38E108
2098 N38E109
2099 N38E110
2100 N38E111
2101 N38E112
2102 N38E113
2103 N38E114
2104 N38E115
2105 N38E116
2106 N38E117
2107 N38E118
2108 N38E120
2109 N38E121
2110 N38E124
2111 N38E125
2112 N38E126
2113 N38E127
2114 N38E128
2115 N38E138
2116 N38E139
2117 N38E140
2118 N38E141
2119 N38W001
2120 N38W002
2121 N38W003
2122 N38W004
2123 N38W005
2124 N38W006
2125 N38W007
2126 N38W008
2127 N38W009
2128 N38W010
2129 N39E000
2130 N39E001
2131 N39E002
2132 N39E003
2133 N39E004
2134 N39E008
2135 N39E009
2136 N39E015
2137 N39E016
2138 N39E017
2139 N39E018
2140 N39E019
2141 N39E020
2142 N39E021
2143 N39E022
2144 N39E023
2145 N39E024
2146 N39E025
2147 N39E026
2148 N39E027
2149 N39E028
2150 N39E029
2151 N39E030
2152 N39E031
2153 N39E032
2154 N39E033
2155 N39E034
2156 N39E035
2157 N39E036
2158 N39E037
2159 N39E038
2160 N39E039
2161 N39E040
2162 N39E041
2163 N39E042
2164 N39E043
2165 N39E044
2166 N39E045
2167 N39E046
2168 N39E047
2169 N39E048
2170 N39E049
2171 N39E052
2172 N39E053
2173 N39E054
2174 N39E055
2175 N39E056
2176 N39E057
2177 N39E058
2178 N39E059
2179 N39E060
2180 N39E061
2181 N39E062
2182 N39E063
2183 N39E064
2184 N39E065
2185 N39E066
2186 N39E067
2187 N39E068
2188 N39E069
2189 N39E070
2190 N39E071
2191 N39E072
2192 N39E073
2193 N39E074
2194 N39E075
2195 N39E076
2196 N39E077
2197 N39E078
2198 N39E079
2199 N39E080
2200 N39E081
2201 N39E082
2202 N39E083
2203 N39E084
2204 N39E085
2205 N39E086
2206 N39E087
2207 N39E088
2208 N39E089
2209 N39E090
2210 N39E091
2211 N39E092
2212 N39E093
2213 N39E094
2214 N39E095
2215 N39E096
2216 N39E097
2217 N39E098
2218 N39E099
2219 N39E100
2220 N39E101
2221 N39E102
2222 N39E103
2223 N39E104
2224 N39E105
2225 N39E106
2226 N39E107
2227 N39E108
2228 N39E109
2229 N39E110
2230 N39E111
2231 N39E112
2232 N39E113
2233 N39E114
2234 N39E115
2235 N39E116
2236 N39E117
2237 N39E118
2238 N39E119
2239 N39E121
2240 N39E122
2241 N39E123
2242 N39E124
2243 N39E125
2244 N39E126
2245 N39E127
2246 N39E128
2247 N39E139
2248 N39E140
2249 N39E141
2250 N39E142
2251 N39W001
2252 N39W002
2253 N39W003
2254 N39W004
2255 N39W005
2256 N39W006
2257 N39W007
2258 N39W008
2259 N39W009
2260 N39W010
2261 N40E000
2262 N40E003
2263 N40E004
2264 N40E008
2265 N40E009
2266 N40E012
2267 N40E013
2268 N40E014
2269 N40E015
2270 N40E016
2271 N40E017
2272 N40E018
2273 N40E019
2274 N40E020
2275 N40E021
2276 N40E022
2277 N40E023
2278 N40E024
2279 N40E025
2280 N40E026
2281 N40E027
2282 N40E028
2283 N40E029
2284 N40E030
2285 N40E031
2286 N40E032
2287 N40E033
2288 N40E034
2289 N40E035
2290 N40E036
2291 N40E037
2292 N40E038
2293 N40E039
2294 N40E040
2295 N40E041
2296 N40E042
2297 N40E043
2298 N40E044
2299 N40E045
2300 N40E046
2301 N40E047
2302 N40E048
2303 N40E049
2304 N40E050
2305 N40E052
2306 N40E053
2307 N40E054
2308 N40E055
2309 N40E056
2310 N40E057
2311 N40E058
2312 N40E059
2313 N40E060
2314 N40E061
2315 N40E062
2316 N40E063
2317 N40E064
2318 N40E065
2319 N40E066
2320 N40E067
2321 N40E068
2322 N40E069
2323 N40E070
2324 N40E071
2325 N40E072
2326 N40E073
2327 N40E074
2328 N40E075
2329 N40E076
2330 N40E077
2331 N40E078
2332 N40E079
2333 N40E080
2334 N40E081
2335 N40E082
2336 N40E083
2337 N40E084
2338 N40E085
2339 N40E086
2340 N40E087
2341 N40E088
2342 N40E089
2343 N40E090
2344 N40E091
2345 N40E092
2346 N40E093
2347 N40E094
2348 N40E095
2349 N40E096
2350 N40E097
2351 N40E098
2352 N40E099
2353 N40E100
2354 N40E101
2355 N40E102
2356 N40E103
2357 N40E104
2358 N40E105
2359 N40E106
2360 N40E107
2361 N40E108
2362 N40E109
2363 N40E110
2364 N40E111
2365 N40E112
2366 N40E113
2367 N40E114
2368 N40E115
2369 N40E116
2370 N40E117
2371 N40E118
2372 N40E119
2373 N40E120
2374 N40E121
2375 N40E122
2376 N40E123
2377 N40E124
2378 N40E125
2379 N40E126
2380 N40E127
2381 N40E128
2382 N40E129
2383 N40E139
2384 N40E140
2385 N40E141
2386 N40W001
2387 N40W002
2388 N40W003
2389 N40W004
2390 N40W005
2391 N40W006
2392 N40W007
2393 N40W008
2394 N40W009
2395 N41E000
2396 N41E001
2397 N41E002
2398 N41E003
2399 N41E008
2400 N41E009
2401 N41E011
2402 N41E012
2403 N41E013
2404 N41E014
2405 N41E015
2406 N41E016
2407 N41E017
2408 N41E019
2409 N41E020
2410 N41E021
2411 N41E022
2412 N41E023
2413 N41E024
2414 N41E025
2415 N41E026
2416 N41E027
2417 N41E028
2418 N41E029
2419 N41E030
2420 N41E031
2421 N41E032
2422 N41E033
2423 N41E034
2424 N41E035
2425 N41E036
2426 N41E037
2427 N41E038
2428 N41E039
2429 N41E040
2430 N41E041
2431 N41E042
2432 N41E043
2433 N41E044
2434 N41E045
2435 N41E046
2436 N41E047
2437 N41E048
2438 N41E049
2439 N41E052
2440 N41E053
2441 N41E054
2442 N41E055
2443 N41E056
2444 N41E057
2445 N41E058
2446 N41E059
2447 N41E060
2448 N41E061
2449 N41E062
2450 N41E063
2451 N41E064
2452 N41E065
2453 N41E066
2454 N41E067
2455 N41E068
2456 N41E069
2457 N41E070
2458 N41E071
2459 N41E072
2460 N41E073
2461 N41E074
2462 N41E075
2463 N41E076
2464 N41E077
2465 N41E078
2466 N41E079
2467 N41E080
2468 N41E081
2469 N41E082
2470 N41E083
2471 N41E084
2472 N41E085
2473 N41E086
2474 N41E087
2475 N41E088
2476 N41E089
2477 N41E090
2478 N41E091
2479 N41E092
2480 N41E093
2481 N41E094
2482 N41E095
2483 N41E096
2484 N41E097
2485 N41E098
2486 N41E099
2487 N41E100
2488 N41E101
2489 N41E102
2490 N41E103
2491 N41E104
2492 N41E105
2493 N41E106
2494 N41E107
2495 N41E108
2496 N41E109
2497 N41E110
2498 N41E111
2499 N41E112
2500 N41E113
2501 N41E114
2502 N41E115
2503 N41E116
2504 N41E117
2505 N41E118
2506 N41E119
2507 N41E120
2508 N41E121
2509 N41E122
2510 N41E123
2511 N41E124
2512 N41E125
2513 N41E126
2514 N41E127
2515 N41E128
2516 N41E129
2517 N41E130
2518 N41E139
2519 N41E140
2520 N41E141
2521 N41E143
2522 N41W001
2523 N41W002
2524 N41W003
2525 N41W004
2526 N41W005
2527 N41W006
2528 N41W007
2529 N41W008
2530 N41W009
2531 N42E000
2532 N42E001
2533 N42E002
2534 N42E003
2535 N42E006
2536 N42E008
2537 N42E009
2538 N42E010
2539 N42E011
2540 N42E012
2541 N42E013
2542 N42E014
2543 N42E015
2544 N42E016
2545 N42E017
2546 N42E018
2547 N42E019
2548 N42E020
2549 N42E021
2550 N42E022
2551 N42E023
2552 N42E024
2553 N42E025
2554 N42E026
2555 N42E027
2556 N42E028
2557 N42E033
2558 N42E034
2559 N42E035
2560 N42E040
2561 N42E041
2562 N42E042
2563 N42E043
2564 N42E044
2565 N42E045
2566 N42E046
2567 N42E047
2568 N42E048
2569 N42E051
2570 N42E052
2571 N42E053
2572 N42E054
2573 N42E055
2574 N42E056
2575 N42E057
2576 N42E058
2577 N42E059
2578 N42E060
2579 N42E061
2580 N42E062
2581 N42E063
2582 N42E064
2583 N42E065
2584 N42E066
2585 N42E067
2586 N42E068
2587 N42E069
2588 N42E070
2589 N42E071
2590 N42E072
2591 N42E073
2592 N42E074
2593 N42E075
2594 N42E076
2595 N42E077
2596 N42E078
2597 N42E079
2598 N42E080
2599 N42E081
2600 N42E082
2601 N42E083
2602 N42E084
2603 N42E085
2604 N42E086
2605 N42E087
2606 N42E088
2607 N42E089
2608 N42E090
2609 N42E091
2610 N42E092
2611 N42E093
2612 N42E094
2613 N42E095
2614 N42E096
2615 N42E097
2616 N42E098
2617 N42E099
2618 N42E100
2619 N42E101
2620 N42E102
2621 N42E103
2622 N42E104
2623 N42E105
2624 N42E106
2625 N42E107
2626 N42E108
2627 N42E109
2628 N42E110
2629 N42E111
2630 N42E112
2631 N42E113
2632 N42E114
2633 N42E115
2634 N42E116
2635 N42E117
2636 N42E118
2637 N42E119
2638 N42E120
2639 N42E121
2640 N42E122
2641 N42E123
2642 N42E124
2643 N42E125
2644 N42E126
2645 N42E127
2646 N42E128
2647 N42E129
2648 N42E130
2649 N42E131
2650 N42E132
2651 N42E133
2652 N42E134
2653 N42E139
2654 N42E140
2655 N42E141
2656 N42E142
2657 N42E143
2658 N42E144
2659 N42E145
2660 N42W001
2661 N42W002
2662 N42W003
2663 N42W004
2664 N42W005
2665 N42W006
2666 N42W007
2667 N42W008
2668 N42W009
2669 N42W010
2670 N43E000
2671 N43E001
2672 N43E002
2673 N43E003
2674 N43E004
2675 N43E005
2676 N43E006
2677 N43E007
2678 N43E008
2679 N43E009
2680 N43E010
2681 N43E011
2682 N43E012
2683 N43E013
2684 N43E015
2685 N43E016
2686 N43E017
2687 N43E018
2688 N43E019
2689 N43E020
2690 N43E021
2691 N43E022
2692 N43E023
2693 N43E024
2694 N43E025
2695 N43E026
2696 N43E027
2697 N43E028
2698 N43E039
2699 N43E040
2700 N43E041
2701 N43E042
2702 N43E043
2703 N43E044
2704 N43E045
2705 N43E046
2706 N43E047
2707 N43E050
2708 N43E051
2709 N43E052
2710 N43E053
2711 N43E054
2712 N43E055
2713 N43E056
2714 N43E057
2715 N43E058
2716 N43E059
2717 N43E060
2718 N43E061
2719 N43E062
2720 N43E063
2721 N43E064
2722 N43E065
2723 N43E066
2724 N43E067
2725 N43E068
2726 N43E069
2727 N43E070
2728 N43E071
2729 N43E072
2730 N43E073
2731 N43E074
2732 N43E075
2733 N43E076
2734 N43E077
2735 N43E078
2736 N43E079
2737 N43E080
2738 N43E081
2739 N43E082
2740 N43E083
2741 N43E084
2742 N43E085
2743 N43E086
2744 N43E087
2745 N43E088
2746 N43E089
2747 N43E090
2748 N43E091
2749 N43E092
2750 N43E093
2751 N43E094
2752 N43E095
2753 N43E096
2754 N43E097
2755 N43E098
2756 N43E099
2757 N43E100
2758 N43E101
2759 N43E102
2760 N43E103
2761 N43E104
2762 N43E105
2763 N43E106
2764 N43E107
2765 N43E108
2766 N43E109
2767 N43E110
2768 N43E111
2769 N43E112
2770 N43E113
2771 N43E114
2772 N43E115
2773 N43E116
2774 N43E117
2775 N43E118
2776 N43E119
2777 N43E120
2778 N43E121
2779 N43E122
2780 N43E123
2781 N43E124
2782 N43E125
2783 N43E126
2784 N43E127
2785 N43E128
2786 N43E129
2787 N43E130
2788 N43E131
2789 N43E132
2790 N43E133
2791 N43E134
2792 N43E135
2793 N43E140
2794 N43E141
2795 N43E142
2796 N43E143
2797 N43E144
2798 N43E145
2799 N43E146
2800 N43W001
2801 N43W002
2802 N43W003
2803 N43W004
2804 N43W005
2805 N43W006
2806 N43W007
2807 N43W008
2808 N43W009
2809 N43W010
2810 N44E000
2811 N44E001
2812 N44E002
2813 N44E003
2814 N44E004
2815 N44E005
2816 N44E006
2817 N44E007
2818 N44E008
2819 N44E009
2820 N44E010
2821 N44E011
2822 N44E012
2823 N44E013
2824 N44E014
2825 N44E015
2826 N44E016
2827 N44E017
2828 N44E018
2829 N44E019
2830 N44E020
2831 N44E021
2832 N44E022
2833 N44E023
2834 N44E024
2835 N44E025
2836 N44E026
2837 N44E027
2838 N44E028
2839 N44E029
2840 N44E033
2841 N44E034
2842 N44E035
2843 N44E037
2844 N44E038
2845 N44E039
2846 N44E040
2847 N44E041
2848 N44E042
2849 N44E043
2850 N44E044
2851 N44E045
2852 N44E046
2853 N44E047
2854 N44E050
2855 N44E051
2856 N44E052
2857 N44E053
2858 N44E054
2859 N44E055
2860 N44E056
2861 N44E057
2862 N44E058
2863 N44E059
2864 N44E060
2865 N44E061
2866 N44E062
2867 N44E063
2868 N44E064
2869 N44E065
2870 N44E066
2871 N44E067
2872 N44E068
2873 N44E069
2874 N44E070
2875 N44E071
2876 N44E072
2877 N44E073
2878 N44E074
2879 N44E075
2880 N44E076
2881 N44E077
2882 N44E078
2883 N44E079
2884 N44E080
2885 N44E081
2886 N44E082
2887 N44E083
2888 N44E084
2889 N44E085
2890 N44E086
2891 N44E087
2892 N44E088
2893 N44E089
2894 N44E090
2895 N44E091
2896 N44E092
2897 N44E093
2898 N44E094
2899 N44E095
2900 N44E096
2901 N44E097
2902 N44E098
2903 N44E099
2904 N44E100
2905 N44E101
2906 N44E102
2907 N44E103
2908 N44E104
2909 N44E105
2910 N44E106
2911 N44E107
2912 N44E108
2913 N44E109
2914 N44E110
2915 N44E111
2916 N44E112
2917 N44E113
2918 N44E114
2919 N44E115
2920 N44E116
2921 N44E117
2922 N44E118
2923 N44E119
2924 N44E120
2925 N44E121
2926 N44E122
2927 N44E123
2928 N44E124
2929 N44E125
2930 N44E126
2931 N44E127
2932 N44E128
2933 N44E129
2934 N44E130
2935 N44E131
2936 N44E132
2937 N44E133
2938 N44E134
2939 N44E135
2940 N44E136
2941 N44E141
2942 N44E142
2943 N44E143
2944 N44E144
2945 N44E145
2946 N44E146
2947 N44E147
2948 N44W001
2949 N44W002
2950 N45E000
2951 N45E001
2952 N45E002
2953 N45E003
2954 N45E004
2955 N45E005
2956 N45E006
2957 N45E007
2958 N45E008
2959 N45E009
2960 N45E010
2961 N45E011
2962 N45E012
2963 N45E013
2964 N45E014
2965 N45E015
2966 N45E016
2967 N45E017
2968 N45E018
2969 N45E019
2970 N45E020
2971 N45E021
2972 N45E022
2973 N45E023
2974 N45E024
2975 N45E025
2976 N45E026
2977 N45E027
2978 N45E028
2979 N45E029
2980 N45E030
2981 N45E032
2982 N45E033
2983 N45E034
2984 N45E035
2985 N45E036
2986 N45E037
2987 N45E038
2988 N45E039
2989 N45E040
2990 N45E041
2991 N45E042
2992 N45E043
2993 N45E044
2994 N45E045
2995 N45E046
2996 N45E047
2997 N45E048
2998 N45E049
2999 N45E050
3000 N45E051
3001 N45E052
3002 N45E053
3003 N45E054
3004 N45E055
3005 N45E056
3006 N45E057
3007 N45E058
3008 N45E059
3009 N45E060
3010 N45E061
3011 N45E062
3012 N45E063
3013 N45E064
3014 N45E065
3015 N45E066
3016 N45E067
3017 N45E068
3018 N45E069
3019 N45E070
3020 N45E071
3021 N45E072
3022 N45E073
3023 N45E074
3024 N45E075
3025 N45E076
3026 N45E077
3027 N45E078
3028 N45E079
3029 N45E080
3030 N45E081
3031 N45E082
3032 N45E083
3033 N45E084
3034 N45E085
3035 N45E086
3036 N45E087
3037 N45E088
3038 N45E089
3039 N45E090
3040 N45E091
3041 N45E092
3042 N45E093
3043 N45E094
3044 N45E095
3045 N45E096
3046 N45E097
3047 N45E098
3048 N45E099
3049 N45E100
3050 N45E101
3051 N45E102
3052 N45E103
3053 N45E104
3054 N45E105
3055 N45E106
3056 N45E107
3057 N45E108
3058 N45E109
3059 N45E110
3060 N45E111
3061 N45E112
3062 N45E113
3063 N45E114
3064 N45E115
3065 N45E116
3066 N45E117
3067 N45E118
3068 N45E119
3069 N45E120
3070 N45E121
3071 N45E122
3072 N45E123
3073 N45E124
3074 N45E125
3075 N45E126
3076 N45E127
3077 N45E128
3078 N45E129
3079 N45E130
3080 N45E131
3081 N45E132
3082 N45E133
3083 N45E134
3084 N45E135
3085 N45E136
3086 N45E137
3087 N45E140
3088 N45E141
3089 N45E142
3090 N45E147
3091 N45E148
3092 N45E149
3093 N45E150
3094 N45W001
3095 N45W002
3096 N46E000
3097 N46E001
3098 N46E002
3099 N46E003
3100 N46E004
3101 N46E005
3102 N46E006
3103 N46E007
3104 N46E008
3105 N46E009
3106 N46E010
3107 N46E011
3108 N46E012
3109 N46E013
3110 N46E014
3111 N46E015
3112 N46E016
3113 N46E017
3114 N46E018
3115 N46E019
3116 N46E020
3117 N46E021
3118 N46E022
3119 N46E023
3120 N46E024
3121 N46E025
3122 N46E026
3123 N46E027
3124 N46E028
3125 N46E029
3126 N46E030
3127 N46E031
3128 N46E032
3129 N46E033
3130 N46E034
3131 N46E035
3132 N46E036
3133 N46E037
3134 N46E038
3135 N46E039
3136 N46E040
3137 N46E041
3138 N46E042
3139 N46E043
3140 N46E044
3141 N46E045
3142 N46E046
3143 N46E047
3144 N46E048
3145 N46E049
3146 N46E050
3147 N46E051
3148 N46E052
3149 N46E053
3150 N46E054
3151 N46E055
3152 N46E056
3153 N46E057
3154 N46E058
3155 N46E059
3156 N46E060
3157 N46E061
3158 N46E062
3159 N46E063
3160 N46E064
3161 N46E065
3162 N46E066
3163 N46E067
3164 N46E068
3165 N46E069
3166 N46E070
3167 N46E071
3168 N46E072
3169 N46E073
3170 N46E074
3171 N46E075
3172 N46E076
3173 N46E077
3174 N46E078
3175 N46E079
3176 N46E080
3177 N46E081
3178 N46E082
3179 N46E083
3180 N46E084
3181 N46E085
3182 N46E086
3183 N46E087
3184 N46E088
3185 N46E089
3186 N46E090
3187 N46E091
3188 N46E092
3189 N46E093
3190 N46E094
3191 N46E095
3192 N46E096
3193 N46E097
3194 N46E098
3195 N46E099
3196 N46E100
3197 N46E101
3198 N46E102
3199 N46E103
3200 N46E104
3201 N46E105
3202 N46E106
3203 N46E107
3204 N46E108
3205 N46E109
3206 N46E110
3207 N46E111
3208 N46E112
3209 N46E113
3210 N46E114
3211 N46E115
3212 N46E116
3213 N46E117
3214 N46E118
3215 N46E119
3216 N46E120
3217 N46E121
3218 N46E122
3219 N46E123
3220 N46E124
3221 N46E125
3222 N46E126
3223 N46E127
3224 N46E128
3225 N46E129
3226 N46E130
3227 N46E131
3228 N46E132
3229 N46E133
3230 N46E134
3231 N46E135
3232 N46E136
3233 N46E137
3234 N46E138
3235 N46E141
3236 N46E142
3237 N46E143
3238 N46E149
3239 N46E150
3240 N46E151
3241 N46E152
3242 N46W001
3243 N46W002
3244 N46W003
3245 N47E000
3246 N47E001
3247 N47E002
3248 N47E003
3249 N47E004
3250 N47E005
3251 N47E006
3252 N47E007
3253 N47E008
3254 N47E009
3255 N47E010
3256 N47E011
3257 N47E012
3258 N47E013
3259 N47E014
3260 N47E015
3261 N47E016
3262 N47E017
3263 N47E018
3264 N47E019
3265 N47E020
3266 N47E021
3267 N47E022
3268 N47E023
3269 N47E024
3270 N47E025
3271 N47E026
3272 N47E027
3273 N47E028
3274 N47E029
3275 N47E030
3276 N47E031
3277 N47E032
3278 N47E033
3279 N47E034
3280 N47E035
3281 N47E036
3282 N47E037
3283 N47E038
3284 N47E039
3285 N47E040
3286 N47E041
3287 N47E042
3288 N47E043
3289 N47E044
3290 N47E045
3291 N47E046
3292 N47E047
3293 N47E048
3294 N47E049
3295 N47E050
3296 N47E051
3297 N47E052
3298 N47E053
3299 N47E054
3300 N47E055
3301 N47E056
3302 N47E057
3303 N47E058
3304 N47E059
3305 N47E060
3306 N47E061
3307 N47E062
3308 N47E063
3309 N47E064
3310 N47E065
3311 N47E066
3312 N47E067
3313 N47E068
3314 N47E069
3315 N47E070
3316 N47E071
3317 N47E072
3318 N47E073
3319 N47E074
3320 N47E075
3321 N47E076
3322 N47E077
3323 N47E078
3324 N47E079
3325 N47E080
3326 N47E081
3327 N47E082
3328 N47E083
3329 N47E084
3330 N47E085
3331 N47E086
3332 N47E087
3333 N47E088
3334 N47E089
3335 N47E090
3336 N47E091
3337 N47E092
3338 N47E093
3339 N47E094
3340 N47E095
3341 N47E096
3342 N47E097
3343 N47E098
3344 N47E099
3345 N47E100
3346 N47E101
3347 N47E102
3348 N47E103
3349 N47E104
3350 N47E105
3351 N47E106
3352 N47E107
3353 N47E108
3354 N47E109
3355 N47E110
3356 N47E111
3357 N47E112
3358 N47E113
3359 N47E114
3360 N47E115
3361 N47E116
3362 N47E117
3363 N47E118
3364 N47E119
3365 N47E120
3366 N47E121
3367 N47E122
3368 N47E123
3369 N47E124
3370 N47E125
3371 N47E126
3372 N47E127
3373 N47E128
3374 N47E129
3375 N47E130
3376 N47E131
3377 N47E132
3378 N47E133
3379 N47E134
3380 N47E135
3381 N47E136
3382 N47E137
3383 N47E138
3384 N47E139
3385 N47E141
3386 N47E142
3387 N47E143
3388 N47E152
3389 N47E153
3390 N47W001
3391 N47W002
3392 N47W003
3393 N47W004
3394 N47W005
3395 N48E000
3396 N48E001
3397 N48E002
3398 N48E003
3399 N48E004
3400 N48E005
3401 N48E006
3402 N48E007
3403 N48E008
3404 N48E009
3405 N48E010
3406 N48E011
3407 N48E012
3408 N48E013
3409 N48E014
3410 N48E015
3411 N48E016
3412 N48E017
3413 N48E018
3414 N48E019
3415 N48E020
3416 N48E021
3417 N48E022
3418 N48E023
3419 N48E024
3420 N48E025
3421 N48E026
3422 N48E027
3423 N48E028
3424 N48E029
3425 N48E030
3426 N48E031
3427 N48E032
3428 N48E033
3429 N48E034
3430 N48E035
3431 N48E036
3432 N48E037
3433 N48E038
3434 N48E039
3435 N48E040
3436 N48E041
3437 N48E042
3438 N48E043
3439 N48E044
3440 N48E045
3441 N48E046
3442 N48E047
3443 N48E048
3444 N48E049
3445 N48E050
3446 N48E051
3447 N48E052
3448 N48E053
3449 N48E054
3450 N48E055
3451 N48E056
3452 N48E057
3453 N48E058
3454 N48E059
3455 N48E060
3456 N48E061
3457 N48E062
3458 N48E063
3459 N48E064
3460 N48E065
3461 N48E066
3462 N48E067
3463 N48E068
3464 N48E069
3465 N48E070
3466 N48E071
3467 N48E072
3468 N48E073
3469 N48E074
3470 N48E075
3471 N48E076
3472 N48E077
3473 N48E078
3474 N48E079
3475 N48E080
3476 N48E081
3477 N48E082
3478 N48E083
3479 N48E084
3480 N48E085
3481 N48E086
3482 N48E087
3483 N48E088
3484 N48E089
3485 N48E090
3486 N48E091
3487 N48E092
3488 N48E093
3489 N48E094
3490 N48E095
3491 N48E096
3492 N48E097
3493 N48E098
3494 N48E099
3495 N48E100
3496 N48E101
3497 N48E102
3498 N48E103
3499 N48E104
3500 N48E105
3501 N48E106
3502 N48E107
3503 N48E108
3504 N48E109
3505 N48E110
3506 N48E111
3507 N48E112
3508 N48E113
3509 N48E114
3510 N48E115
3511 N48E116
3512 N48E117
3513 N48E118
3514 N48E119
3515 N48E120
3516 N48E121
3517 N48E122
3518 N48E123
3519 N48E124
3520 N48E125
3521 N48E126
3522 N48E127
3523 N48E128
3524 N48E129
3525 N48E130
3526 N48E131
3527 N48E132
3528 N48E133
3529 N48E134
3530 N48E135
3531 N48E136
3532 N48E137
3533 N48E138
3534 N48E139
3535 N48E140
3536 N48E141
3537 N48E142
3538 N48E144
3539 N48E153
3540 N48E154
3541 N48W001
3542 N48W002
3543 N48W003
3544 N48W004
3545 N48W005
3546 N48W006
3547 N49E000
3548 N49E001
3549 N49E002
3550 N49E003
3551 N49E004
3552 N49E005
3553 N49E006
3554 N49E007
3555 N49E008
3556 N49E009
3557 N49E010
3558 N49E011
3559 N49E012
3560 N49E013
3561 N49E014
3562 N49E015
3563 N49E016
3564 N49E017
3565 N49E018
3566 N49E019
3567 N49E020
3568 N49E021
3569 N49E022
3570 N49E023
3571 N49E024
3572 N49E025
3573 N49E026
3574 N49E027
3575 N49E028
3576 N49E029
3577 N49E030
3578 N49E031
3579 N49E032
3580 N49E033
3581 N49E034
3582 N49E035
3583 N49E036
3584 N49E037
3585 N49E038
3586 N49E039
3587 N49E040
3588 N49E041
3589 N49E042
3590 N49E043
3591 N49E044
3592 N49E045
3593 N49E046
3594 N49E047
3595 N49E048
3596 N49E049
3597 N49E050
3598 N49E051
3599 N49E052
3600 N49E053
3601 N49E054
3602 N49E055
3603 N49E056
3604 N49E057
3605 N49E058
3606 N49E059
3607 N49E060
3608 N49E061
3609 N49E062
3610 N49E063
3611 N49E064
3612 N49E065
3613 N49E066
3614 N49E067
3615 N49E068
3616 N49E069
3617 N49E070
3618 N49E071
3619 N49E072
3620 N49E073
3621 N49E074
3622 N49E075
3623 N49E076
3624 N49E077
3625 N49E078
3626 N49E079
3627 N49E080
3628 N49E081
3629 N49E082
3630 N49E083
3631 N49E084
3632 N49E085
3633 N49E086
3634 N49E087
3635 N49E088
3636 N49E089
3637 N49E090
3638 N49E091
3639 N49E092
3640 N49E093
3641 N49E094
3642 N49E095
3643 N49E096
3644 N49E097
3645 N49E098
3646 N49E099
3647 N49E100
3648 N49E101
3649 N49E102
3650 N49E103
3651 N49E104
3652 N49E105
3653 N49E106
3654 N49E107
3655 N49E108
3656 N49E109
3657 N49E110
3658 N49E111
3659 N49E112
3660 N49E113
3661 N49E114
3662 N49E115
3663 N49E116
3664 N49E117
3665 N49E118
3666 N49E119
3667 N49E120
3668 N49E121
3669 N49E122
3670 N49E123
3671 N49E124
3672 N49E125
3673 N49E126
3674 N49E127
3675 N49E128
3676 N49E129
3677 N49E130
3678 N49E131
3679 N49E132
3680 N49E133
3681 N49E134
3682 N49E135
3683 N49E136
3684 N49E137
3685 N49E138
3686 N49E139
3687 N49E140
3688 N49E142
3689 N49E143
3690 N49E144
3691 N49E154
3692 N49E155
3693 N49W001
3694 N49W002
3695 N49W003
3696 N49W006
3697 N49W007
3698 N50E000
3699 N50E001
3700 N50E002
3701 N50E003
3702 N50E004
3703 N50E005
3704 N50E006
3705 N50E007
3706 N50E008
3707 N50E009
3708 N50E010
3709 N50E011
3710 N50E012
3711 N50E013
3712 N50E014
3713 N50E015
3714 N50E016
3715 N50E017
3716 N50E018
3717 N50E019
3718 N50E020
3719 N50E021
3720 N50E022
3721 N50E023
3722 N50E024
3723 N50E025
3724 N50E026
3725 N50E027
3726 N50E028
3727 N50E029
3728 N50E030
3729 N50E031
3730 N50E032
3731 N50E033
3732 N50E034
3733 N50E035
3734 N50E036
3735 N50E037
3736 N50E038
3737 N50E039
3738 N50E040
3739 N50E041
3740 N50E042
3741 N50E043
3742 N50E044
3743 N50E045
3744 N50E046
3745 N50E047
3746 N50E048
3747 N50E049
3748 N50E050
3749 N50E051
3750 N50E052
3751 N50E053
3752 N50E054
3753 N50E055
3754 N50E056
3755 N50E057
3756 N50E058
3757 N50E059
3758 N50E060
3759 N50E061
3760 N50E062
3761 N50E063
3762 N50E064
3763 N50E065
3764 N50E066
3765 N50E067
3766 N50E068
3767 N50E069
3768 N50E070
3769 N50E071
3770 N50E072
3771 N50E073
3772 N50E074
3773 N50E075
3774 N50E076
3775 N50E077
3776 N50E078
3777 N50E079
3778 N50E080
3779 N50E081
3780 N50E082
3781 N50E083
3782 N50E084
3783 N50E085
3784 N50E086
3785 N50E087
3786 N50E088
3787 N50E089
3788 N50E090
3789 N50E091
3790 N50E092
3791 N50E093
3792 N50E094
3793 N50E095
3794 N50E096
3795 N50E097
3796 N50E098
3797 N50E099
3798 N50E100
3799 N50E101
3800 N50E102
3801 N50E103
3802 N50E104
3803 N50E105
3804 N50E106
3805 N50E107
3806 N50E108
3807 N50E109
3808 N50E110
3809 N50E111
3810 N50E112
3811 N50E113
3812 N50E114
3813 N50E115
3814 N50E116
3815 N50E117
3816 N50E118
3817 N50E119
3818 N50E120
3819 N50E121
3820 N50E122
3821 N50E123
3822 N50E124
3823 N50E125
3824 N50E126
3825 N50E127
3826 N50E128
3827 N50E129
3828 N50E130
3829 N50E131
3830 N50E132
3831 N50E133
3832 N50E134
3833 N50E135
3834 N50E136
3835 N50E137
3836 N50E138
3837 N50E139
3838 N50E140
3839 N50E142
3840 N50E143
3841 N50E154
3842 N50E155
3843 N50E156
3844 N50W001
3845 N50W002
3846 N50W003
3847 N50W004
3848 N50W005
3849 N50W006
3850 N51E000
3851 N51E001
3852 N51E002
3853 N51E003
3854 N51E004
3855 N51E005
3856 N51E006
3857 N51E007
3858 N51E008
3859 N51E009
3860 N51E010
3861 N51E011
3862 N51E012
3863 N51E013
3864 N51E014
3865 N51E015
3866 N51E016
3867 N51E017
3868 N51E018
3869 N51E019
3870 N51E020
3871 N51E021
3872 N51E022
3873 N51E023
3874 N51E024
3875 N51E025
3876 N51E026
3877 N51E027
3878 N51E028
3879 N51E029
3880 N51E030
3881 N51E031
3882 N51E032
3883 N51E033
3884 N51E034
3885 N51E035
3886 N51E036
3887 N51E037
3888 N51E038
3889 N51E039
3890 N51E040
3891 N51E041
3892 N51E042
3893 N51E043
3894 N51E044
3895 N51E045
3896 N51E046
3897 N51E047
3898 N51E048
3899 N51E049
3900 N51E050
3901 N51E051
3902 N51E052
3903 N51E053
3904 N51E054
3905 N51E055
3906 N51E056
3907 N51E057
3908 N51E058
3909 N51E059
3910 N51E060
3911 N51E061
3912 N51E062
3913 N51E063
3914 N51E064
3915 N51E065
3916 N51E066
3917 N51E067
3918 N51E068
3919 N51E069
3920 N51E070
3921 N51E071
3922 N51E072
3923 N51E073
3924 N51E074
3925 N51E075
3926 N51E076
3927 N51E077
3928 N51E078
3929 N51E079
3930 N51E080
3931 N51E081
3932 N51E082
3933 N51E083
3934 N51E084
3935 N51E085
3936 N51E086
3937 N51E087
3938 N51E088
3939 N51E089
3940 N51E090
3941 N51E091
3942 N51E092
3943 N51E093
3944 N51E094
3945 N51E095
3946 N51E096
3947 N51E097
3948 N51E098
3949 N51E099
3950 N51E100
3951 N51E101
3952 N51E102
3953 N51E103
3954 N51E104
3955 N51E105
3956 N51E106
3957 N51E107
3958 N51E108
3959 N51E109
3960 N51E110
3961 N51E111
3962 N51E112
3963 N51E113
3964 N51E114
3965 N51E115
3966 N51E116
3967 N51E117
3968 N51E118
3969 N51E119
3970 N51E120
3971 N51E121
3972 N51E122
3973 N51E123
3974 N51E124
3975 N51E125
3976 N51E126
3977 N51E127
3978 N51E128
3979 N51E129
3980 N51E130
3981 N51E131
3982 N51E132
3983 N51E133
3984 N51E134
3985 N51E135
3986 N51E136
3987 N51E137
3988 N51E138
3989 N51E139
3990 N51E140
3991 N51E141
3992 N51E142
3993 N51E143
3994 N51E156
3995 N51E157
3996 N51E158
3997 N51W001
3998 N51W002
3999 N51W003
4000 N51W004
4001 N51W005
4002 N51W006
4003 N51W008
4004 N51W009
4005 N51W010
4006 N51W011
4007 N52E000
4008 N52E001
4009 N52E004
4010 N52E005
4011 N52E006
4012 N52E007
4013 N52E008
4014 N52E009
4015 N52E010
4016 N52E011
4017 N52E012
4018 N52E013
4019 N52E014
4020 N52E015
4021 N52E016
4022 N52E017
4023 N52E018
4024 N52E019
4025 N52E020
4026 N52E021
4027 N52E022
4028 N52E023
4029 N52E024
4030 N52E025
4031 N52E026
4032 N52E027
4033 N52E028
4034 N52E029
4035 N52E030
4036 N52E031
4037 N52E032
4038 N52E033
4039 N52E034
4040 N52E035
4041 N52E036
4042 N52E037
4043 N52E038
4044 N52E039
4045 N52E040
4046 N52E041
4047 N52E042
4048 N52E043
4049 N52E044
4050 N52E045
4051 N52E046
4052 N52E047
4053 N52E048
4054 N52E049
4055 N52E050
4056 N52E051
4057 N52E052
4058 N52E053
4059 N52E054
4060 N52E055
4061 N52E056
4062 N52E057
4063 N52E058
4064 N52E059
4065 N52E060
4066 N52E061
4067 N52E062
4068 N52E063
4069 N52E064
4070 N52E065
4071 N52E066
4072 N52E067
4073 N52E068
4074 N52E069
4075 N52E070
4076 N52E071
4077 N52E072
4078 N52E073
4079 N52E074
4080 N52E075
4081 N52E076
4082 N52E077
4083 N52E078
4084 N52E079
4085 N52E080
4086 N52E081
4087 N52E082
4088 N52E083
4089 N52E084
4090 N52E085
4091 N52E086
4092 N52E087
4093 N52E088
4094 N52E089
4095 N52E090
4096 N52E091
4097 N52E092
4098 N52E093
4099 N52E094
4100 N52E095
4101 N52E096
4102 N52E097
4103 N52E098
4104 N52E099
4105 N52E100
4106 N52E101
4107 N52E102
4108 N52E103
4109 N52E104
4110 N52E105
4111 N52E106
4112 N52E107
4113 N52E108
4114 N52E109
4115 N52E110
4116 N52E111
4117 N52E112
4118 N52E113
4119 N52E114
4120 N52E115
4121 N52E116
4122 N52E117
4123 N52E118
4124 N52E119
4125 N52E120
4126 N52E121
4127 N52E122
4128 N52E123
4129 N52E124
4130 N52E125
4131 N52E126
4132 N52E127
4133 N52E128
4134 N52E129
4135 N52E130
4136 N52E131
4137 N52E132
4138 N52E133
4139 N52E134
4140 N52E135
4141 N52E136
4142 N52E137
4143 N52E138
4144 N52E139
4145 N52E140
4146 N52E141
4147 N52E142
4148 N52E143
4149 N52E156
4150 N52E157
4151 N52E158
4152 N52W001
4153 N52W002
4154 N52W003
4155 N52W004
4156 N52W005
4157 N52W006
4158 N52W007
4159 N52W008
4160 N52W009
4161 N52W010
4162 N52W011
4163 N53E000
4164 N53E004
4165 N53E005
4166 N53E006
4167 N53E007
4168 N53E008
4169 N53E009
4170 N53E010
4171 N53E011
4172 N53E012
4173 N53E013
4174 N53E014
4175 N53E015
4176 N53E016
4177 N53E017
4178 N53E018
4179 N53E019
4180 N53E020
4181 N53E021
4182 N53E022
4183 N53E023
4184 N53E024
4185 N53E025
4186 N53E026
4187 N53E027
4188 N53E028
4189 N53E029
4190 N53E030
4191 N53E031
4192 N53E032
4193 N53E033
4194 N53E034
4195 N53E035
4196 N53E036
4197 N53E037
4198 N53E038
4199 N53E039
4200 N53E040
4201 N53E041
4202 N53E042
4203 N53E043
4204 N53E044
4205 N53E045
4206 N53E046
4207 N53E047
4208 N53E048
4209 N53E049
4210 N53E050
4211 N53E051
4212 N53E052
4213 N53E053
4214 N53E054
4215 N53E055
4216 N53E056
4217 N53E057
4218 N53E058
4219 N53E059
4220 N53E060
4221 N53E061
4222 N53E062
4223 N53E063
4224 N53E064
4225 N53E065
4226 N53E066
4227 N53E067
4228 N53E068
4229 N53E069
4230 N53E070
4231 N53E071
4232 N53E072
4233 N53E073
4234 N53E074
4235 N53E075
4236 N53E076
4237 N53E077
4238 N53E078
4239 N53E079
4240 N53E080
4241 N53E081
4242 N53E082
4243 N53E083
4244 N53E084
4245 N53E085
4246 N53E086
4247 N53E087
4248 N53E088
4249 N53E089
4250 N53E090
4251 N53E091
4252 N53E092
4253 N53E093
4254 N53E094
4255 N53E095
4256 N53E096
4257 N53E097
4258 N53E098
4259 N53E099
4260 N53E100
4261 N53E101
4262 N53E102
4263 N53E103
4264 N53E104
4265 N53E105
4266 N53E106
4267 N53E107
4268 N53E108
4269 N53E109
4270 N53E110
4271 N53E111
4272 N53E112
4273 N53E113
4274 N53E114
4275 N53E115
4276 N53E116
4277 N53E117
4278 N53E118
4279 N53E119
4280 N53E120
4281 N53E121
4282 N53E122
4283 N53E123
4284 N53E124
4285 N53E125
4286 N53E126
4287 N53E127
4288 N53E128
4289 N53E129
4290 N53E130
4291 N53E131
4292 N53E132
4293 N53E133
4294 N53E134
4295 N53E135
4296 N53E136
4297 N53E137
4298 N53E138
4299 N53E139
4300 N53E140
4301 N53E141
4302 N53E142
4303 N53E143
4304 N53E155
4305 N53E156
4306 N53E157
4307 N53E158
4308 N53E159
4309 N53E160
4310 N53W001
4311 N53W002
4312 N53W003
4313 N53W004
4314 N53W005
4315 N53W006
4316 N53W007
4317 N53W008
4318 N53W009
4319 N53W010
4320 N53W011
4321 N54E007
4322 N54E008
4323 N54E009
4324 N54E010
4325 N54E011
4326 N54E012
4327 N54E013
4328 N54E014
4329 N54E015
4330 N54E016
4331 N54E017
4332 N54E018
4333 N54E019
4334 N54E020
4335 N54E021
4336 N54E022
4337 N54E023
4338 N54E024
4339 N54E025
4340 N54E026
4341 N54E027
4342 N54E028
4343 N54E029
4344 N54E030
4345 N54E031
4346 N54E032
4347 N54E033
4348 N54E034
4349 N54E035
4350 N54E036
4351 N54E037
4352 N54E038
4353 N54E039
4354 N54E040
4355 N54E041
4356 N54E042
4357 N54E043
4358 N54E044
4359 N54E045
4360 N54E046
4361 N54E047
4362 N54E048
4363 N54E049
4364 N54E050
4365 N54E051
4366 N54E052
4367 N54E053
4368 N54E054
4369 N54E055
4370 N54E056
4371 N54E057
4372 N54E058
4373 N54E059
4374 N54E060
4375 N54E061
4376 N54E062
4377 N54E063
4378 N54E064
4379 N54E065
4380 N54E066
4381 N54E067
4382 N54E068
4383 N54E069
4384 N54E070
4385 N54E071
4386 N54E072
4387 N54E073
4388 N54E074
4389 N54E075
4390 N54E076
4391 N54E077
4392 N54E078
4393 N54E079
4394 N54E080
4395 N54E081
4396 N54E082
4397 N54E083
4398 N54E084
4399 N54E085
4400 N54E086
4401 N54E087
4402 N54E088
4403 N54E089
4404 N54E090
4405 N54E091
4406 N54E092
4407 N54E093
4408 N54E094
4409 N54E095
4410 N54E096
4411 N54E097
4412 N54E098
4413 N54E099
4414 N54E100
4415 N54E101
4416 N54E102
4417 N54E103
4418 N54E104
4419 N54E105
4420 N54E106
4421 N54E107
4422 N54E108
4423 N54E109
4424 N54E110
4425 N54E111
4426 N54E112
4427 N54E113
4428 N54E114
4429 N54E115
4430 N54E116
4431 N54E117
4432 N54E118
4433 N54E119
4434 N54E120
4435 N54E121
4436 N54E122
4437 N54E123
4438 N54E124
4439 N54E125
4440 N54E126
4441 N54E127
4442 N54E128
4443 N54E129
4444 N54E130
4445 N54E131
4446 N54E132
4447 N54E133
4448 N54E134
4449 N54E135
4450 N54E136
4451 N54E137
4452 N54E138
4453 N54E139
4454 N54E140
4455 N54E142
4456 N54E155
4457 N54E156
4458 N54E157
4459 N54E158
4460 N54E159
4461 N54E160
4462 N54E161
4463 N54E162
4464 N54E166
4465 N54E167
4466 N54E168
4467 N54W001
4468 N54W002
4469 N54W003
4470 N54W004
4471 N54W005
4472 N54W006
4473 N54W007
4474 N54W008
4475 N54W009
4476 N54W010
4477 N54W011
4478 N55E008
4479 N55E009
4480 N55E010
4481 N55E011
4482 N55E012
4483 N55E013
4484 N55E014
4485 N55E015
4486 N55E020
4487 N55E021
4488 N55E022
4489 N55E023
4490 N55E024
4491 N55E025
4492 N55E026
4493 N55E027
4494 N55E028
4495 N55E029
4496 N55E030
4497 N55E031
4498 N55E032
4499 N55E033
4500 N55E034
4501 N55E035
4502 N55E036
4503 N55E037
4504 N55E038
4505 N55E039
4506 N55E040
4507 N55E041
4508 N55E042
4509 N55E043
4510 N55E044
4511 N55E045
4512 N55E046
4513 N55E047
4514 N55E048
4515 N55E049
4516 N55E050
4517 N55E051
4518 N55E052
4519 N55E053
4520 N55E054
4521 N55E055
4522 N55E056
4523 N55E057
4524 N55E058
4525 N55E059
4526 N55E060
4527 N55E061
4528 N55E062
4529 N55E063
4530 N55E064
4531 N55E065
4532 N55E066
4533 N55E067
4534 N55E068
4535 N55E069
4536 N55E070
4537 N55E071
4538 N55E072
4539 N55E073
4540 N55E074
4541 N55E075
4542 N55E076
4543 N55E077
4544 N55E078
4545 N55E079
4546 N55E080
4547 N55E081
4548 N55E082
4549 N55E083
4550 N55E084
4551 N55E085
4552 N55E086
4553 N55E087
4554 N55E088
4555 N55E089
4556 N55E090
4557 N55E091
4558 N55E092
4559 N55E093
4560 N55E094
4561 N55E095
4562 N55E096
4563 N55E097
4564 N55E098
4565 N55E099
4566 N55E100
4567 N55E101
4568 N55E102
4569 N55E103
4570 N55E104
4571 N55E105
4572 N55E106
4573 N55E107
4574 N55E108
4575 N55E109
4576 N55E110
4577 N55E111
4578 N55E112
4579 N55E113
4580 N55E114
4581 N55E115
4582 N55E116
4583 N55E117
4584 N55E118
4585 N55E119
4586 N55E120
4587 N55E121
4588 N55E122
4589 N55E123
4590 N55E124
4591 N55E125
4592 N55E126
4593 N55E127
4594 N55E128
4595 N55E129
4596 N55E130
4597 N55E131
4598 N55E132
4599 N55E133
4600 N55E134
4601 N55E135
4602 N55E136
4603 N55E137
4604 N55E138
4605 N55E155
4606 N55E156
4607 N55E157
4608 N55E158
4609 N55E159
4610 N55E160
4611 N55E161
4612 N55E162
4613 N55E165
4614 N55E166
4615 N55W002
4616 N55W003
4617 N55W004
4618 N55W005
4619 N55W006
4620 N55W007
4621 N55W008
4622 N55W009
4623 N56E008
4624 N56E009
4625 N56E010
4626 N56E011
4627 N56E012
4628 N56E013
4629 N56E014
4630 N56E015
4631 N56E016
4632 N56E018
4633 N56E020
4634 N56E021
4635 N56E022
4636 N56E023
4637 N56E024
4638 N56E025
4639 N56E026
4640 N56E027
4641 N56E028
4642 N56E029
4643 N56E030
4644 N56E031
4645 N56E032
4646 N56E033
4647 N56E034
4648 N56E035
4649 N56E036
4650 N56E037
4651 N56E038
4652 N56E039
4653 N56E040
4654 N56E041
4655 N56E042
4656 N56E043
4657 N56E044
4658 N56E045
4659 N56E046
4660 N56E047
4661 N56E048
4662 N56E049
4663 N56E050
4664 N56E051
4665 N56E052
4666 N56E053
4667 N56E054
4668 N56E055
4669 N56E056
4670 N56E057
4671 N56E058
4672 N56E059
4673 N56E060
4674 N56E061
4675 N56E062
4676 N56E063
4677 N56E064
4678 N56E065
4679 N56E066
4680 N56E067
4681 N56E068
4682 N56E069
4683 N56E070
4684 N56E071
4685 N56E072
4686 N56E073
4687 N56E074
4688 N56E075
4689 N56E076
4690 N56E077
4691 N56E078
4692 N56E079
4693 N56E080
4694 N56E081
4695 N56E082
4696 N56E083
4697 N56E084
4698 N56E085
4699 N56E086
4700 N56E087
4701 N56E088
4702 N56E089
4703 N56E090
4704 N56E091
4705 N56E092
4706 N56E093
4707 N56E094
4708 N56E095
4709 N56E096
4710 N56E097
4711 N56E098
4712 N56E099
4713 N56E100
4714 N56E101
4715 N56E102
4716 N56E103
4717 N56E104
4718 N56E105
4719 N56E106
4720 N56E107
4721 N56E108
4722 N56E109
4723 N56E110
4724 N56E111
4725 N56E112
4726 N56E113
4727 N56E114
4728 N56E115
4729 N56E116
4730 N56E117
4731 N56E118
4732 N56E119
4733 N56E120
4734 N56E121
4735 N56E122
4736 N56E123
4737 N56E124
4738 N56E125
4739 N56E126
4740 N56E127
4741 N56E128
4742 N56E129
4743 N56E130
4744 N56E131
4745 N56E132
4746 N56E133
4747 N56E134
4748 N56E135
4749 N56E136
4750 N56E137
4751 N56E138
4752 N56E143
4753 N56E155
4754 N56E156
4755 N56E157
4756 N56E158
4757 N56E159
4758 N56E160
4759 N56E161
4760 N56E162
4761 N56E163
4762 N56W003
4763 N56W004
4764 N56W005
4765 N56W006
4766 N56W007
4767 N56W008
4768 N57E006
4769 N57E007
4770 N57E008
4771 N57E009
4772 N57E010
4773 N57E011
4774 N57E012
4775 N57E013
4776 N57E014
4777 N57E015
4778 N57E016
4779 N57E017
4780 N57E018
4781 N57E019
4782 N57E021
4783 N57E022
4784 N57E023
4785 N57E024
4786 N57E025
4787 N57E026
4788 N57E027
4789 N57E028
4790 N57E029
4791 N57E030
4792 N57E031
4793 N57E032
4794 N57E033
4795 N57E034
4796 N57E035
4797 N57E036
4798 N57E037
4799 N57E038
4800 N57E039
4801 N57E040
4802 N57E041
4803 N57E042
4804 N57E043
4805 N57E044
4806 N57E045
4807 N57E046
4808 N57E047
4809 N57E048
4810 N57E049
4811 N57E050
4812 N57E051
4813 N57E052
4814 N57E053
4815 N57E054
4816 N57E055
4817 N57E056
4818 N57E057
4819 N57E058
4820 N57E059
4821 N57E060
4822 N57E061
4823 N57E062
4824 N57E063
4825 N57E064
4826 N57E065
4827 N57E066
4828 N57E067
4829 N57E068
4830 N57E069
4831 N57E070
4832 N57E071
4833 N57E072
4834 N57E073
4835 N57E074
4836 N57E075
4837 N57E076
4838 N57E077
4839 N57E078
4840 N57E079
4841 N57E080
4842 N57E081
4843 N57E082
4844 N57E083
4845 N57E084
4846 N57E085
4847 N57E086
4848 N57E087
4849 N57E088
4850 N57E089
4851 N57E090
4852 N57E091
4853 N57E092
4854 N57E093
4855 N57E094
4856 N57E095
4857 N57E096
4858 N57E097
4859 N57E098
4860 N57E099
4861 N57E100
4862 N57E101
4863 N57E102
4864 N57E103
4865 N57E104
4866 N57E105
4867 N57E106
4868 N57E107
4869 N57E108
4870 N57E109
4871 N57E110
4872 N57E111
4873 N57E112
4874 N57E113
4875 N57E114
4876 N57E115
4877 N57E116
4878 N57E117
4879 N57E118
4880 N57E119
4881 N57E120
4882 N57E121
4883 N57E122
4884 N57E123
4885 N57E124
4886 N57E125
4887 N57E126
4888 N57E127
4889 N57E128
4890 N57E129
4891 N57E130
4892 N57E131
4893 N57E132
4894 N57E133
4895 N57E134
4896 N57E135
4897 N57E136
4898 N57E137
4899 N57E138
4900 N57E139
4901 N57E140
4902 N57E156
4903 N57E157
4904 N57E158
4905 N57E159
4906 N57E160
4907 N57E161
4908 N57E162
4909 N57E163
4910 N57W002
4911 N57W003
4912 N57W004
4913 N57W005
4914 N57W006
4915 N57W007
4916 N57W008
4917 N57W009
4918 N57W014
4919 N58E005
4920 N58E006
4921 N58E007
4922 N58E008
4923 N58E009
4924 N58E010
4925 N58E011
4926 N58E012
4927 N58E013
4928 N58E014
4929 N58E015
4930 N58E016
4931 N58E017
4932 N58E018
4933 N58E019
4934 N58E021
4935 N58E022
4936 N58E023
4937 N58E024
4938 N58E025
4939 N58E026
4940 N58E027
4941 N58E028
4942 N58E029
4943 N58E030
4944 N58E031
4945 N58E032
4946 N58E033
4947 N58E034
4948 N58E035
4949 N58E036
4950 N58E037
4951 N58E038
4952 N58E039
4953 N58E040
4954 N58E041
4955 N58E042
4956 N58E043
4957 N58E044
4958 N58E045
4959 N58E046
4960 N58E047
4961 N58E048
4962 N58E049
4963 N58E050
4964 N58E051
4965 N58E052
4966 N58E053
4967 N58E054
4968 N58E055
4969 N58E056
4970 N58E057
4971 N58E058
4972 N58E059
4973 N58E060
4974 N58E061
4975 N58E062
4976 N58E063
4977 N58E064
4978 N58E065
4979 N58E066
4980 N58E067
4981 N58E068
4982 N58E069
4983 N58E070
4984 N58E071
4985 N58E072
4986 N58E073
4987 N58E074
4988 N58E075
4989 N58E076
4990 N58E077
4991 N58E078
4992 N58E079
4993 N58E080
4994 N58E081
4995 N58E082
4996 N58E083
4997 N58E084
4998 N58E085
4999 N58E086
5000 N58E087
5001 N58E088
5002 N58E089
5003 N58E090
5004 N58E091
5005 N58E092
5006 N58E093
5007 N58E094
5008 N58E095
5009 N58E096
5010 N58E097
5011 N58E098
5012 N58E099
5013 N58E100
5014 N58E101
5015 N58E102
5016 N58E103
5017 N58E104
5018 N58E105
5019 N58E106
5020 N58E107
5021 N58E108
5022 N58E109
5023 N58E110
5024 N58E111
5025 N58E112
5026 N58E113
5027 N58E114
5028 N58E115
5029 N58E116
5030 N58E117
5031 N58E118
5032 N58E119
5033 N58E120
5034 N58E121
5035 N58E122
5036 N58E123
5037 N58E124
5038 N58E125
5039 N58E126
5040 N58E127
5041 N58E128
5042 N58E129
5043 N58E130
5044 N58E131
5045 N58E132
5046 N58E133
5047 N58E134
5048 N58E135
5049 N58E136
5050 N58E137
5051 N58E138
5052 N58E139
5053 N58E140
5054 N58E141
5055 N58E142
5056 N58E150
5057 N58E151
5058 N58E152
5059 N58E157
5060 N58E158
5061 N58E159
5062 N58E160
5063 N58E161
5064 N58E162
5065 N58E163
5066 N58E164
5067 N58W003
5068 N58W004
5069 N58W005
5070 N58W006
5071 N58W007
5072 N58W008
5073 N59E004
5074 N59E005
5075 N59E006
5076 N59E007
5077 N59E008
5078 N59E009
5079 N59E010
5080 N59E011
5081 N59E012
5082 N59E013
5083 N59E014
5084 N59E015
5085 N59E016
5086 N59E017
5087 N59E018
5088 N59E019
5089 N59E020
5090 N59E021
5091 N59E022
5092 N59E023
5093 N59E024
5094 N59E025
5095 N59E026
5096 N59E027
5097 N59E028
5098 N59E029
5099 N59E030
5100 N59E031
5101 N59E032
5102 N59E033
5103 N59E034
5104 N59E035
5105 N59E036
5106 N59E037
5107 N59E038
5108 N59E039
5109 N59E040
5110 N59E041
5111 N59E042
5112 N59E043
5113 N59E044
5114 N59E045
5115 N59E046
5116 N59E047
5117 N59E048
5118 N59E049
5119 N59E050
5120 N59E051
5121 N59E052
5122 N59E053
5123 N59E054
5124 N59E055
5125 N59E056
5126 N59E057
5127 N59E058
5128 N59E059
5129 N59E060
5130 N59E061
5131 N59E062
5132 N59E063
5133 N59E064
5134 N59E065
5135 N59E066
5136 N59E067
5137 N59E068
5138 N59E069
5139 N59E070
5140 N59E071
5141 N59E072
5142 N59E073
5143 N59E074
5144 N59E075
5145 N59E076
5146 N59E077
5147 N59E078
5148 N59E079
5149 N59E080
5150 N59E081
5151 N59E082
5152 N59E083
5153 N59E084
5154 N59E085
5155 N59E086
5156 N59E087
5157 N59E088
5158 N59E089
5159 N59E090
5160 N59E091
5161 N59E092
5162 N59E093
5163 N59E094
5164 N59E095
5165 N59E096
5166 N59E097
5167 N59E098
5168 N59E099
5169 N59E100
5170 N59E101
5171 N59E102
5172 N59E103
5173 N59E104
5174 N59E105
5175 N59E106
5176 N59E107
5177 N59E108
5178 N59E109
5179 N59E110
5180 N59E111
5181 N59E112
5182 N59E113
5183 N59E114
5184 N59E115
5185 N59E116
5186 N59E117
5187 N59E118
5188 N59E119
5189 N59E120
5190 N59E121
5191 N59E122
5192 N59E123
5193 N59E124
5194 N59E125
5195 N59E126
5196 N59E127
5197 N59E128
5198 N59E129
5199 N59E130
5200 N59E131
5201 N59E132
5202 N59E133
5203 N59E134
5204 N59E135
5205 N59E136
5206 N59E137
5207 N59E138
5208 N59E139
5209 N59E140
5210 N59E141
5211 N59E142
5212 N59E143
5213 N59E144
5214 N59E145
5215 N59E146
5216 N59E147
5217 N59E148
5218 N59E149
5219 N59E150
5220 N59E151
5221 N59E152
5222 N59E153
5223 N59E154
5224 N59E155
5225 N59E159
5226 N59E160
5227 N59E161
5228 N59E162
5229 N59E163
5230 N59E164
5231 N59E165
5232 N59E166
5233 N59W002
5234 N59W003
5235 N59W004
5236 N59W005
5237 N59W006
5238 N59W007
5239 N60E004
5240 N60E005
5241 N60E006
5242 N60E007
5243 N60E008
5244 N60E009
5245 N60E010
5246 N60E011
5247 N60E012
5248 N60E013
5249 N60E014
5250 N60E015
5251 N60E016
5252 N60E017
5253 N60E018
5254 N60E019
5255 N60E020
5256 N60E021
5257 N60E022
5258 N60E023
5259 N60E024
5260 N60E025
5261 N60E026
5262 N60E027
5263 N60E028
5264 N60E029
5265 N60E030
5266 N60E031
5267 N60E032
5268 N60E033
5269 N60E034
5270 N60E035
5271 N60E036
5272 N60E037
5273 N60E038
5274 N60E039
5275 N60E040
5276 N60E041
5277 N60E042
5278 N60E043
5279 N60E044
5280 N60E045
5281 N60E046
5282 N60E047
5283 N60E048
5284 N60E049
5285 N60E050
5286 N60E051
5287 N60E052
5288 N60E053
5289 N60E054
5290 N60E055
5291 N60E056
5292 N60E057
5293 N60E058
5294 N60E059
5295 N60E060
5296 N60E061
5297 N60E062
5298 N60E063
5299 N60E064
5300 N60E065
5301 N60E066
5302 N60E067
5303 N60E068
5304 N60E069
5305 N60E070
5306 N60E071
5307 N60E072
5308 N60E073
5309 N60E074
5310 N60E075
5311 N60E076
5312 N60E077
5313 N60E078
5314 N60E079
5315 N60E080
5316 N60E081
5317 N60E082
5318 N60E083
5319 N60E084
5320 N60E085
5321 N60E086
5322 N60E087
5323 N60E088
5324 N60E089
5325 N60E090
5326 N60E091
5327 N60E092
5328 N60E093
5329 N60E094
5330 N60E095
5331 N60E096
5332 N60E097
5333 N60E098
5334 N60E099
5335 N60E100
5336 N60E101
5337 N60E102
5338 N60E103
5339 N60E104
5340 N60E105
5341 N60E106
5342 N60E107
5343 N60E108
5344 N60E109
5345 N60E110
5346 N60E111
5347 N60E112
5348 N60E113
5349 N60E114
5350 N60E115
5351 N60E116
5352 N60E117
5353 N60E118
5354 N60E119
5355 N60E120
5356 N60E121
5357 N60E122
5358 N60E123
5359 N60E124
5360 N60E125
5361 N60E126
5362 N60E127
5363 N60E128
5364 N60E129
5365 N60E130
5366 N60E131
5367 N60E132
5368 N60E133
5369 N60E134
5370 N60E135
5371 N60E136
5372 N60E137
5373 N60E138
5374 N60E139
5375 N60E140
5376 N60E141
5377 N60E142
5378 N60E143
5379 N60E144
5380 N60E145
5381 N60E146
5382 N60E147
5383 N60E148
5384 N60E149
5385 N60E150
5386 N60E151
5387 N60E152
5388 N60E153
5389 N60E154
5390 N60E155
5391 N60E156
5392 N60E159
5393 N60E160
5394 N60E161
5395 N60E162
5396 N60E163
5397 N60E164
5398 N60E165
5399 N60E166
5400 N60E167
5401 N60E168
5402 N60E169
5403 N60E170
5404 N60E171
5405 N60E172
5406 N60W001
5407 N60W002
5408 N60W003
5409 S01E073
5410 S01E098
5411 S01E099
5412 S01E100
5413 S01E101
5414 S01E102
5415 S01E103
5416 S01E104
5417 S01E105
5418 S01E109
5419 S01E110
5420 S01E111
5421 S01E112
5422 S01E113
5423 S01E114
5424 S01E115
5425 S01E116
5426 S01E117
5427 S01E119
5428 S01E120
5429 S01E121
5430 S01E122
5431 S01E123
5432 S01E127
5433 S01E128
5434 S01E129
5435 S01E130
5436 S01E131
5437 S01E132
5438 S01E133
5439 S01E134
5440 S01E135
5441 S01E136
5442 S01E145
5443 S01E166
5444 S01E169
5445 S01E174
5446 S01W161
5447 S02E098
5448 S02E099
5449 S02E100
5450 S02E101
5451 S02E102
5452 S02E103
5453 S02E104
5454 S02E105
5455 S02E106
5456 S02E108
5457 S02E109
5458 S02E110
5459 S02E111
5460 S02E112
5461 S02E113
5462 S02E114
5463 S02E115
5464 S02E116
5465 S02E117
5466 S02E119
5467 S02E120
5468 S02E121
5469 S02E122
5470 S02E123
5471 S02E124
5472 S02E125
5473 S02E126
5474 S02E127
5475 S02E128
5476 S02E129
5477 S02E130
5478 S02E131
5479 S02E132
5480 S02E133
5481 S02E134
5482 S02E135
5483 S02E136
5484 S02E137
5485 S02E138
5486 S02E139
5487 S02E142
5488 S02E143
5489 S02E144
5490 S02E145
5491 S02E146
5492 S02E147
5493 S02E148
5494 S02E149
5495 S02E150
5496 S02E174
5497 S02E175
5498 S02E176
5499 S03E099
5500 S03E100
5501 S03E101
5502 S03E102
5503 S03E103
5504 S03E104
5505 S03E105
5506 S03E106
5507 S03E107
5508 S03E108
5509 S03E110
5510 S03E111
5511 S03E112
5512 S03E113
5513 S03E114
5514 S03E115
5515 S03E116
5516 S03E117
5517 S03E118
5518 S03E119
5519 S03E120
5520 S03E121
5521 S03E122
5522 S03E123
5523 S03E124
5524 S03E125
5525 S03E126
5526 S03E127
5527 S03E128
5528 S03E129
5529 S03E130
5530 S03E131
5531 S03E132
5532 S03E133
5533 S03E134
5534 S03E135
5535 S03E136
5536 S03E137
5537 S03E138
5538 S03E139
5539 S03E140
5540 S03E141
5541 S03E142
5542 S03E145
5543 S03E146
5544 S03E147
5545 S03E148
5546 S03E149
5547 S03E150
5548 S03E151
5549 S03E152
5550 S03E175
5551 S03E176
5552 S03W172
5553 S04E100
5554 S04E101
5555 S04E102
5556 S04E103
5557 S04E104
5558 S04E105
5559 S04E106
5560 S04E107
5561 S04E108
5562 S04E110
5563 S04E111
5564 S04E112
5565 S04E113
5566 S04E114
5567 S04E115
5568 S04E116
5569 S04E117
5570 S04E118
5571 S04E119
5572 S04E120
5573 S04E121
5574 S04E122
5575 S04E123
5576 S04E125
5577 S04E126
5578 S04E127
5579 S04E128
5580 S04E129
5581 S04E130
5582 S04E131
5583 S04E132
5584 S04E133
5585 S04E134
5586 S04E135
5587 S04E136
5588 S04E137
5589 S04E138
5590 S04E139
5591 S04E140
5592 S04E141
5593 S04E142
5594 S04E143
5595 S04E144
5596 S04E150
5597 S04E151
5598 S04E152
5599 S04E153
5600 S04E154
5601 S04W155
5602 S04W171
5603 S04W172
5604 S04W175
5605 S05E101
5606 S05E102
5607 S05E103
5608 S05E104
5609 S05E105
5610 S05E114
5611 S05E115
5612 S05E116
5613 S05E119
5614 S05E120
5615 S05E121
5616 S05E122
5617 S05E123
5618 S05E129
5619 S05E130
5620 S05E131
5621 S05E132
5622 S05E133
5623 S05E134
5624 S05E135
5625 S05E136
5626 S05E137
5627 S05E138
5628 S05E139
5629 S05E140
5630 S05E141
5631 S05E142
5632 S05E143
5633 S05E144
5634 S05E145
5635 S05E146
5636 S05E149
5637 S05E150
5638 S05E151
5639 S05E152
5640 S05E153
5641 S05E154
5642 S05E155
5643 S05E156
5644 S05E157
5645 S05E159
5646 S05W155
5647 S05W172
5648 S05W173
5649 S05W175
5650 S06E071
5651 S06E072
5652 S06E102
5653 S06E103
5654 S06E104
5655 S06E105
5656 S06E106
5657 S06E107
5658 S06E108
5659 S06E110
5660 S06E112
5661 S06E114
5662 S06E117
5663 S06E118
5664 S06E119
5665 S06E120
5666 S06E121
5667 S06E122
5668 S06E123
5669 S06E124
5670 S06E127
5671 S06E130
5672 S06E131
5673 S06E132
5674 S06E133
5675 S06E134
5676 S06E137
5677 S06E138
5678 S06E139
5679 S06E140
5680 S06E141
5681 S06E142
5682 S06E143
5683 S06E144
5684 S06E145
5685 S06E146
5686 S06E147
5687 S06E148
5688 S06E149
5689 S06E150
5690 S06E151
5691 S06E152
5692 S06E154
5693 S06E155
5694 S06E159
5695 S06E176
5696 S06W156
5697 S07E071
5698 S07E105
5699 S07E106
5700 S07E107
5701 S07E108
5702 S07E109
5703 S07E110
5704 S07E111
5705 S07E112
5706 S07E113
5707 S07E114
5708 S07E115
5709 S07E116
5710 S07E118
5711 S07E119
5712 S07E120
5713 S07E121
5714 S07E122
5715 S07E124
5716 S07E126
5717 S07E129
5718 S07E130
5719 S07E131
5720 S07E132
5721 S07E134
5722 S07E138
5723 S07E139
5724 S07E140
5725 S07E141
5726 S07E142
5727 S07E143
5728 S07E144
5729 S07E145
5730 S07E146
5731 S07E147
5732 S07E148
5733 S07E149
5734 S07E150
5735 S07E151
5736 S07E154
5737 S07E155
5738 S07E156
5739 S07E157
5740 S07E176
5741 S07E177
5742 S08E072
5743 S08E105
5744 S08E106
5745 S08E107
5746 S08E108
5747 S08E109
5748 S08E110
5749 S08E111
5750 S08E112
5751 S08E113
5752 S08E114
5753 S08E115
5754 S08E117
5755 S08E118
5756 S08E120
5757 S08E121
5758 S08E122
5759 S08E123
5760 S08E125
5761 S08E126
5762 S08E127
5763 S08E128
5764 S08E129
5765 S08E130
5766 S08E131
5767 S08E134
5768 S08E137
5769 S08E138
5770 S08E139
5771 S08E140
5772 S08E141
5773 S08E142
5774 S08E143
5775 S08E144
5776 S08E145
5777 S08E146
5778 S08E147
5779 S08E155
5780 S08E156
5781 S08E157
5782 S08E158
5783 S08E159
5784 S08E160
5785 S08E177
5786 S08E178
5787 S08W141
5788 S09E110
5789 S09E111
5790 S09E112
5791 S09E113
5792 S09E114
5793 S09E115
5794 S09E116
5795 S09E117
5796 S09E118
5797 S09E119
5798 S09E120
5799 S09E121
5800 S09E122
5801 S09E123
5802 S09E124
5803 S09E125
5804 S09E126
5805 S09E127
5806 S09E128
5807 S09E129
5808 S09E130
5809 S09E131
5810 S09E137
5811 S09E138
5812 S09E139
5813 S09E140
5814 S09E141
5815 S09E142
5816 S09E143
5817 S09E145
5818 S09E146
5819 S09E147
5820 S09E148
5821 S09E149
5822 S09E150
5823 S09E151
5824 S09E152
5825 S09E156
5826 S09E157
5827 S09E158
5828 S09E159
5829 S09E160
5830 S09E161
5831 S09E178
5832 S09E179
5833 S09W140
5834 S09W141
5835 S09W158
5836 S09W159
5837 S09W173
5838 S10E116
5839 S10E117
5840 S10E118
5841 S10E119
5842 S10E120
5843 S10E123
5844 S10E124
5845 S10E125
5846 S10E126
5847 S10E140
5848 S10E141
5849 S10E142
5850 S10E143
5851 S10E144
5852 S10E146
5853 S10E147
5854 S10E148
5855 S10E149
5856 S10E150
5857 S10E151
5858 S10E152
5859 S10E153
5860 S10E158
5861 S10E159
5862 S10E160
5863 S10E161
5864 S10E167
5865 S10E179
5866 S10W139
5867 S10W140
5868 S10W141
5869 S10W151
5870 S10W158
5871 S10W159
5872 S10W162
5873 S10W172
5874 S11E105
5875 S12E096
5876 S13E096
5877
0 North_America
1 N10W110
2 N15W062
3 N15W064
4 N15W079
5 N15W080
6 N15W083
7 N15W084
8 N15W085
9 N15W086
10 N15W087
11 N15W088
12 N15W089
13 N15W090
14 N15W091
15 N15W092
16 N15W093
17 N15W094
18 N15W096
19 N15W097
20 N15W098
21 N16W062
22 N16W063
23 N16W086
24 N16W087
25 N16W088
26 N16W089
27 N16W090
28 N16W091
29 N16W092
30 N16W093
31 N16W094
32 N16W095
33 N16W096
34 N16W097
35 N16W098
36 N16W099
37 N16W100
38 N16W101
39 N17W062
40 N17W063
41 N17W064
42 N17W065
43 N17W066
44 N17W067
45 N17W068
46 N17W072
47 N17W076
48 N17W077
49 N17W078
50 N17W084
51 N17W088
52 N17W089
53 N17W090
54 N17W091
55 N17W092
56 N17W093
57 N17W094
58 N17W095
59 N17W096
60 N17W097
61 N17W098
62 N17W099
63 N17W100
64 N17W101
65 N17W102
66 N17W103
67 N18W063
68 N18W064
69 N18W065
70 N18W066
71 N18W067
72 N18W068
73 N18W069
74 N18W070
75 N18W071
76 N18W072
77 N18W073
78 N18W074
79 N18W075
80 N18W076
81 N18W077
82 N18W078
83 N18W079
84 N18W088
85 N18W089
86 N18W090
87 N18W091
88 N18W092
89 N18W093
90 N18W094
91 N18W095
92 N18W096
93 N18W097
94 N18W098
95 N18W099
96 N18W100
97 N18W101
98 N18W102
99 N18W103
100 N18W104
101 N18W105
102 N18W111
103 N18W112
104 N18W115
105 N19W069
106 N19W070
107 N19W071
108 N19W072
109 N19W073
110 N19W074
111 N19W075
112 N19W076
113 N19W077
114 N19W078
115 N19W080
116 N19W081
117 N19W082
118 N19W088
119 N19W089
120 N19W090
121 N19W091
122 N19W092
123 N19W096
124 N19W097
125 N19W098
126 N19W099
127 N19W100
128 N19W101
129 N19W102
130 N19W103
131 N19W104
132 N19W105
133 N19W106
134 N19W111
135 N20W073
136 N20W074
137 N20W075
138 N20W076
139 N20W077
140 N20W078
141 N20W079
142 N20W080
143 N20W087
144 N20W088
145 N20W089
146 N20W090
147 N20W091
148 N20W092
149 N20W093
150 N20W097
151 N20W098
152 N20W099
153 N20W100
154 N20W101
155 N20W102
156 N20W103
157 N20W104
158 N20W105
159 N20W106
160 N21W072
161 N21W073
162 N21W074
163 N21W076
164 N21W077
165 N21W078
166 N21W079
167 N21W080
168 N21W081
169 N21W082
170 N21W083
171 N21W084
172 N21W085
173 N21W087
174 N21W088
175 N21W089
176 N21W090
177 N21W091
178 N21W098
179 N21W099
180 N21W100
181 N21W101
182 N21W102
183 N21W103
184 N21W104
185 N21W105
186 N21W106
187 N21W107
188 N22W073
189 N22W074
190 N22W075
191 N22W076
192 N22W078
193 N22W079
194 N22W080
195 N22W081
196 N22W082
197 N22W083
198 N22W084
199 N22W085
200 N22W090
201 N22W092
202 N22W098
203 N22W099
204 N22W100
205 N22W101
206 N22W102
207 N22W103
208 N22W104
209 N22W105
210 N22W106
211 N22W107
212 N22W110
213 N22W111
214 N23W074
215 N23W075
216 N23W076
217 N23W077
218 N23W078
219 N23W080
220 N23W081
221 N23W082
222 N23W083
223 N23W084
224 N23W098
225 N23W099
226 N23W100
227 N23W101
228 N23W102
229 N23W103
230 N23W104
231 N23W105
232 N23W106
233 N23W107
234 N23W108
235 N23W110
236 N23W111
237 N24W075
238 N24W076
239 N24W077
240 N24W078
241 N24W079
242 N24W080
243 N24W081
244 N24W082
245 N24W083
246 N24W098
247 N24W099
248 N24W100
249 N24W101
250 N24W102
251 N24W103
252 N24W104
253 N24W105
254 N24W106
255 N24W107
256 N24W108
257 N24W109
258 N24W110
259 N24W111
260 N24W112
261 N24W113
262 N24W116
263 N25W077
264 N25W078
265 N25W079
266 N25W080
267 N25W081
268 N25W082
269 N25W098
270 N25W099
271 N25W100
272 N25W101
273 N25W102
274 N25W103
275 N25W104
276 N25W105
277 N25W106
278 N25W107
279 N25W108
280 N25W109
281 N25W110
282 N25W111
283 N25W112
284 N25W113
285 N26W077
286 N26W078
287 N26W079
288 N26W080
289 N26W081
290 N26W082
291 N26W083
292 N26W098
293 N26W099
294 N26W100
295 N26W101
296 N26W102
297 N26W103
298 N26W104
299 N26W105
300 N26W106
301 N26W107
302 N26W108
303 N26W109
304 N26W110
305 N26W112
306 N26W113
307 N26W114
308 N26W115
309 N27W078
310 N27W079
311 N27W081
312 N27W082
313 N27W083
314 N27W097
315 N27W098
316 N27W099
317 N27W100
318 N27W101
319 N27W102
320 N27W103
321 N27W104
322 N27W105
323 N27W106
324 N27W107
325 N27W108
326 N27W109
327 N27W110
328 N27W111
329 N27W112
330 N27W113
331 N27W114
332 N27W115
333 N27W116
334 N28W081
335 N28W082
336 N28W083
337 N28W090
338 N28W096
339 N28W097
340 N28W098
341 N28W099
342 N28W100
343 N28W101
344 N28W102
345 N28W103
346 N28W104
347 N28W105
348 N28W106
349 N28W107
350 N28W108
351 N28W109
352 N28W110
353 N28W111
354 N28W112
355 N28W113
356 N28W114
357 N28W115
358 N28W116
359 N28W119
360 N29W081
361 N29W082
362 N29W083
363 N29W084
364 N29W085
365 N29W086
366 N29W089
367 N29W090
368 N29W091
369 N29W092
370 N29W093
371 N29W094
372 N29W095
373 N29W096
374 N29W097
375 N29W098
376 N29W099
377 N29W100
378 N29W101
379 N29W102
380 N29W103
381 N29W104
382 N29W105
383 N29W106
384 N29W107
385 N29W108
386 N29W109
387 N29W110
388 N29W111
389 N29W112
390 N29W113
391 N29W114
392 N29W115
393 N29W116
394 N29W119
395 N30W082
396 N30W083
397 N30W084
398 N30W085
399 N30W086
400 N30W087
401 N30W088
402 N30W089
403 N30W090
404 N30W091
405 N30W092
406 N30W093
407 N30W094
408 N30W095
409 N30W096
410 N30W097
411 N30W098
412 N30W099
413 N30W100
414 N30W101
415 N30W102
416 N30W103
417 N30W104
418 N30W105
419 N30W106
420 N30W107
421 N30W108
422 N30W109
423 N30W110
424 N30W111
425 N30W112
426 N30W113
427 N30W114
428 N30W115
429 N30W116
430 N30W117
431 N31W081
432 N31W082
433 N31W083
434 N31W084
435 N31W085
436 N31W086
437 N31W087
438 N31W088
439 N31W089
440 N31W090
441 N31W091
442 N31W092
443 N31W093
444 N31W094
445 N31W095
446 N31W096
447 N31W097
448 N31W098
449 N31W099
450 N31W100
451 N31W101
452 N31W102
453 N31W103
454 N31W104
455 N31W105
456 N31W106
457 N31W107
458 N31W108
459 N31W109
460 N31W110
461 N31W111
462 N31W112
463 N31W113
464 N31W114
465 N31W115
466 N31W116
467 N31W117
468 N32W065
469 N32W080
470 N32W081
471 N32W082
472 N32W083
473 N32W084
474 N32W085
475 N32W086
476 N32W087
477 N32W088
478 N32W089
479 N32W090
480 N32W091
481 N32W092
482 N32W093
483 N32W094
484 N32W095
485 N32W096
486 N32W097
487 N32W098
488 N32W099
489 N32W100
490 N32W101
491 N32W102
492 N32W103
493 N32W104
494 N32W105
495 N32W106
496 N32W107
497 N32W108
498 N32W109
499 N32W110
500 N32W111
501 N32W112
502 N32W113
503 N32W114
504 N32W115
505 N32W116
506 N32W117
507 N32W118
508 N32W119
509 N33W078
510 N33W079
511 N33W080
512 N33W081
513 N33W082
514 N33W083
515 N33W084
516 N33W085
517 N33W086
518 N33W087
519 N33W088
520 N33W089
521 N33W090
522 N33W091
523 N33W092
524 N33W093
525 N33W094
526 N33W095
527 N33W096
528 N33W097
529 N33W098
530 N33W099
531 N33W100
532 N33W101
533 N33W102
534 N33W103
535 N33W104
536 N33W105
537 N33W106
538 N33W107
539 N33W108
540 N33W109
541 N33W110
542 N33W111
543 N33W112
544 N33W113
545 N33W114
546 N33W115
547 N33W116
548 N33W117
549 N33W118
550 N33W119
551 N33W120
552 N33W121
553 N34W077
554 N34W078
555 N34W079
556 N34W080
557 N34W081
558 N34W082
559 N34W083
560 N34W084
561 N34W085
562 N34W086
563 N34W087
564 N34W088
565 N34W089
566 N34W090
567 N34W091
568 N34W092
569 N34W093
570 N34W094
571 N34W095
572 N34W096
573 N34W097
574 N34W098
575 N34W099
576 N34W100
577 N34W101
578 N34W102
579 N34W103
580 N34W104
581 N34W105
582 N34W106
583 N34W107
584 N34W108
585 N34W109
586 N34W110
587 N34W111
588 N34W112
589 N34W113
590 N34W114
591 N34W115
592 N34W116
593 N34W117
594 N34W118
595 N34W119
596 N34W120
597 N34W121
598 N35W076
599 N35W077
600 N35W078
601 N35W079
602 N35W080
603 N35W081
604 N35W082
605 N35W083
606 N35W084
607 N35W085
608 N35W086
609 N35W087
610 N35W088
611 N35W089
612 N35W090
613 N35W091
614 N35W092
615 N35W093
616 N35W094
617 N35W095
618 N35W096
619 N35W097
620 N35W098
621 N35W099
622 N35W100
623 N35W101
624 N35W102
625 N35W103
626 N35W104
627 N35W105
628 N35W106
629 N35W107
630 N35W108
631 N35W109
632 N35W110
633 N35W111
634 N35W112
635 N35W113
636 N35W114
637 N35W115
638 N35W116
639 N35W117
640 N35W118
641 N35W119
642 N35W120
643 N35W121
644 N35W122
645 N36W076
646 N36W077
647 N36W078
648 N36W079
649 N36W080
650 N36W081
651 N36W082
652 N36W083
653 N36W084
654 N36W085
655 N36W086
656 N36W087
657 N36W088
658 N36W089
659 N36W090
660 N36W091
661 N36W092
662 N36W093
663 N36W094
664 N36W095
665 N36W096
666 N36W097
667 N36W098
668 N36W099
669 N36W100
670 N36W101
671 N36W102
672 N36W103
673 N36W104
674 N36W105
675 N36W106
676 N36W107
677 N36W108
678 N36W109
679 N36W110
680 N36W111
681 N36W112
682 N36W113
683 N36W114
684 N36W115
685 N36W116
686 N36W117
687 N36W118
688 N36W119
689 N36W120
690 N36W121
691 N36W122
692 N36W123
693 N37W076
694 N37W077
695 N37W078
696 N37W079
697 N37W080
698 N37W081
699 N37W082
700 N37W083
701 N37W084
702 N37W085
703 N37W086
704 N37W087
705 N37W088
706 N37W089
707 N37W090
708 N37W091
709 N37W092
710 N37W093
711 N37W094
712 N37W095
713 N37W096
714 N37W097
715 N37W098
716 N37W099
717 N37W100
718 N37W101
719 N37W102
720 N37W103
721 N37W104
722 N37W105
723 N37W106
724 N37W107
725 N37W108
726 N37W109
727 N37W110
728 N37W111
729 N37W112
730 N37W113
731 N37W114
732 N37W115
733 N37W116
734 N37W117
735 N37W118
736 N37W119
737 N37W120
738 N37W121
739 N37W122
740 N37W123
741 N37W124
742 N38W075
743 N38W076
744 N38W077
745 N38W078
746 N38W079
747 N38W080
748 N38W081
749 N38W082
750 N38W083
751 N38W084
752 N38W085
753 N38W086
754 N38W087
755 N38W088
756 N38W089
757 N38W090
758 N38W091
759 N38W092
760 N38W093
761 N38W094
762 N38W095
763 N38W096
764 N38W097
765 N38W098
766 N38W099
767 N38W100
768 N38W101
769 N38W102
770 N38W103
771 N38W104
772 N38W105
773 N38W106
774 N38W107
775 N38W108
776 N38W109
777 N38W110
778 N38W111
779 N38W112
780 N38W113
781 N38W114
782 N38W115
783 N38W116
784 N38W117
785 N38W118
786 N38W119
787 N38W120
788 N38W121
789 N38W122
790 N38W123
791 N38W124
792 N39W075
793 N39W076
794 N39W077
795 N39W078
796 N39W079
797 N39W080
798 N39W081
799 N39W082
800 N39W083
801 N39W084
802 N39W085
803 N39W086
804 N39W087
805 N39W088
806 N39W089
807 N39W090
808 N39W091
809 N39W092
810 N39W093
811 N39W094
812 N39W095
813 N39W096
814 N39W097
815 N39W098
816 N39W099
817 N39W100
818 N39W101
819 N39W102
820 N39W103
821 N39W104
822 N39W105
823 N39W106
824 N39W107
825 N39W108
826 N39W109
827 N39W110
828 N39W111
829 N39W112
830 N39W113
831 N39W114
832 N39W115
833 N39W116
834 N39W117
835 N39W118
836 N39W119
837 N39W120
838 N39W121
839 N39W122
840 N39W123
841 N39W124
842 N39W125
843 N40W073
844 N40W074
845 N40W075
846 N40W076
847 N40W077
848 N40W078
849 N40W079
850 N40W080
851 N40W081
852 N40W082
853 N40W083
854 N40W084
855 N40W085
856 N40W086
857 N40W087
858 N40W088
859 N40W089
860 N40W090
861 N40W091
862 N40W092
863 N40W093
864 N40W094
865 N40W095
866 N40W096
867 N40W097
868 N40W098
869 N40W099
870 N40W100
871 N40W101
872 N40W102
873 N40W103
874 N40W104
875 N40W105
876 N40W106
877 N40W107
878 N40W108
879 N40W109
880 N40W110
881 N40W111
882 N40W112
883 N40W113
884 N40W114
885 N40W115
886 N40W116
887 N40W117
888 N40W118
889 N40W119
890 N40W120
891 N40W121
892 N40W122
893 N40W123
894 N40W124
895 N40W125
896 N41W070
897 N41W071
898 N41W072
899 N41W073
900 N41W074
901 N41W075
902 N41W076
903 N41W077
904 N41W078
905 N41W079
906 N41W080
907 N41W081
908 N41W082
909 N41W083
910 N41W084
911 N41W085
912 N41W086
913 N41W087
914 N41W088
915 N41W089
916 N41W090
917 N41W091
918 N41W092
919 N41W093
920 N41W094
921 N41W095
922 N41W096
923 N41W097
924 N41W098
925 N41W099
926 N41W100
927 N41W101
928 N41W102
929 N41W103
930 N41W104
931 N41W105
932 N41W106
933 N41W107
934 N41W108
935 N41W109
936 N41W110
937 N41W111
938 N41W112
939 N41W113
940 N41W114
941 N41W115
942 N41W116
943 N41W117
944 N41W118
945 N41W119
946 N41W120
947 N41W121
948 N41W122
949 N41W123
950 N41W124
951 N41W125
952 N42W071
953 N42W072
954 N42W073
955 N42W074
956 N42W075
957 N42W076
958 N42W077
959 N42W078
960 N42W079
961 N42W080
962 N42W081
963 N42W082
964 N42W083
965 N42W084
966 N42W085
967 N42W086
968 N42W087
969 N42W088
970 N42W089
971 N42W090
972 N42W091
973 N42W092
974 N42W093
975 N42W094
976 N42W095
977 N42W096
978 N42W097
979 N42W098
980 N42W099
981 N42W100
982 N42W101
983 N42W102
984 N42W103
985 N42W104
986 N42W105
987 N42W106
988 N42W107
989 N42W108
990 N42W109
991 N42W110
992 N42W111
993 N42W112
994 N42W113
995 N42W114
996 N42W115
997 N42W116
998 N42W117
999 N42W118
1000 N42W119
1001 N42W120
1002 N42W121
1003 N42W122
1004 N42W123
1005 N42W124
1006 N42W125
1007 N43W060
1008 N43W061
1009 N43W065
1010 N43W066
1011 N43W067
1012 N43W069
1013 N43W070
1014 N43W071
1015 N43W072
1016 N43W073
1017 N43W074
1018 N43W075
1019 N43W076
1020 N43W077
1021 N43W078
1022 N43W079
1023 N43W080
1024 N43W081
1025 N43W082
1026 N43W083
1027 N43W084
1028 N43W085
1029 N43W086
1030 N43W087
1031 N43W088
1032 N43W089
1033 N43W090
1034 N43W091
1035 N43W092
1036 N43W093
1037 N43W094
1038 N43W095
1039 N43W096
1040 N43W097
1041 N43W098
1042 N43W099
1043 N43W100
1044 N43W101
1045 N43W102
1046 N43W103
1047 N43W104
1048 N43W105
1049 N43W106
1050 N43W107
1051 N43W108
1052 N43W109
1053 N43W110
1054 N43W111
1055 N43W112
1056 N43W113
1057 N43W114
1058 N43W115
1059 N43W116
1060 N43W117
1061 N43W118
1062 N43W119
1063 N43W120
1064 N43W121
1065 N43W122
1066 N43W123
1067 N43W124
1068 N43W125
1069 N44W060
1070 N44W062
1071 N44W063
1072 N44W064
1073 N44W065
1074 N44W066
1075 N44W067
1076 N44W068
1077 N44W069
1078 N44W070
1079 N44W071
1080 N44W072
1081 N44W073
1082 N44W074
1083 N44W075
1084 N44W076
1085 N44W077
1086 N44W078
1087 N44W079
1088 N44W080
1089 N44W081
1090 N44W082
1091 N44W083
1092 N44W084
1093 N44W085
1094 N44W086
1095 N44W087
1096 N44W088
1097 N44W089
1098 N44W090
1099 N44W091
1100 N44W092
1101 N44W093
1102 N44W094
1103 N44W095
1104 N44W096
1105 N44W097
1106 N44W098
1107 N44W099
1108 N44W100
1109 N44W101
1110 N44W102
1111 N44W103
1112 N44W104
1113 N44W105
1114 N44W106
1115 N44W107
1116 N44W108
1117 N44W109
1118 N44W110
1119 N44W111
1120 N44W112
1121 N44W113
1122 N44W114
1123 N44W115
1124 N44W116
1125 N44W117
1126 N44W118
1127 N44W119
1128 N44W120
1129 N44W121
1130 N44W122
1131 N44W123
1132 N44W124
1133 N44W125
1134 N45W060
1135 N45W061
1136 N45W062
1137 N45W063
1138 N45W064
1139 N45W065
1140 N45W066
1141 N45W067
1142 N45W068
1143 N45W069
1144 N45W070
1145 N45W071
1146 N45W072
1147 N45W073
1148 N45W074
1149 N45W075
1150 N45W076
1151 N45W077
1152 N45W078
1153 N45W079
1154 N45W080
1155 N45W081
1156 N45W082
1157 N45W083
1158 N45W084
1159 N45W085
1160 N45W086
1161 N45W087
1162 N45W088
1163 N45W089
1164 N45W090
1165 N45W091
1166 N45W092
1167 N45W093
1168 N45W094
1169 N45W095
1170 N45W096
1171 N45W097
1172 N45W098
1173 N45W099
1174 N45W100
1175 N45W101
1176 N45W102
1177 N45W103
1178 N45W104
1179 N45W105
1180 N45W106
1181 N45W107
1182 N45W108
1183 N45W109
1184 N45W110
1185 N45W111
1186 N45W112
1187 N45W113
1188 N45W114
1189 N45W115
1190 N45W116
1191 N45W117
1192 N45W118
1193 N45W119
1194 N45W120
1195 N45W121
1196 N45W122
1197 N45W123
1198 N45W124
1199 N45W125
1200 N46W053
1201 N46W054
1202 N46W055
1203 N46W056
1204 N46W057
1205 N46W060
1206 N46W061
1207 N46W062
1208 N46W063
1209 N46W064
1210 N46W065
1211 N46W066
1212 N46W067
1213 N46W068
1214 N46W069
1215 N46W070
1216 N46W071
1217 N46W072
1218 N46W073
1219 N46W074
1220 N46W075
1221 N46W076
1222 N46W077
1223 N46W078
1224 N46W079
1225 N46W080
1226 N46W081
1227 N46W082
1228 N46W083
1229 N46W084
1230 N46W085
1231 N46W086
1232 N46W087
1233 N46W088
1234 N46W089
1235 N46W090
1236 N46W091
1237 N46W092
1238 N46W093
1239 N46W094
1240 N46W095
1241 N46W096
1242 N46W097
1243 N46W098
1244 N46W099
1245 N46W100
1246 N46W101
1247 N46W102
1248 N46W103
1249 N46W104
1250 N46W105
1251 N46W106
1252 N46W107
1253 N46W108
1254 N46W109
1255 N46W110
1256 N46W111
1257 N46W112
1258 N46W113
1259 N46W114
1260 N46W115
1261 N46W116
1262 N46W117
1263 N46W118
1264 N46W119
1265 N46W120
1266 N46W121
1267 N46W122
1268 N46W123
1269 N46W124
1270 N46W125
1271 N47W053
1272 N47W054
1273 N47W055
1274 N47W056
1275 N47W057
1276 N47W058
1277 N47W059
1278 N47W060
1279 N47W061
1280 N47W062
1281 N47W063
1282 N47W064
1283 N47W065
1284 N47W066
1285 N47W067
1286 N47W068
1287 N47W069
1288 N47W070
1289 N47W071
1290 N47W072
1291 N47W073
1292 N47W074
1293 N47W075
1294 N47W076
1295 N47W077
1296 N47W078
1297 N47W079
1298 N47W080
1299 N47W081
1300 N47W082
1301 N47W083
1302 N47W084
1303 N47W085
1304 N47W086
1305 N47W088
1306 N47W089
1307 N47W090
1308 N47W091
1309 N47W092
1310 N47W093
1311 N47W094
1312 N47W095
1313 N47W096
1314 N47W097
1315 N47W098
1316 N47W099
1317 N47W100
1318 N47W101
1319 N47W102
1320 N47W103
1321 N47W104
1322 N47W105
1323 N47W106
1324 N47W107
1325 N47W108
1326 N47W109
1327 N47W110
1328 N47W111
1329 N47W112
1330 N47W113
1331 N47W114
1332 N47W115
1333 N47W116
1334 N47W117
1335 N47W118
1336 N47W119
1337 N47W120
1338 N47W121
1339 N47W122
1340 N47W123
1341 N47W124
1342 N47W125
1343 N48W053
1344 N48W054
1345 N48W055
1346 N48W056
1347 N48W057
1348 N48W058
1349 N48W059
1350 N48W060
1351 N48W065
1352 N48W066
1353 N48W067
1354 N48W068
1355 N48W069
1356 N48W070
1357 N48W071
1358 N48W072
1359 N48W073
1360 N48W074
1361 N48W075
1362 N48W076
1363 N48W077
1364 N48W078
1365 N48W079
1366 N48W080
1367 N48W081
1368 N48W082
1369 N48W083
1370 N48W084
1371 N48W085
1372 N48W086
1373 N48W087
1374 N48W088
1375 N48W089
1376 N48W090
1377 N48W091
1378 N48W092
1379 N48W093
1380 N48W094
1381 N48W095
1382 N48W096
1383 N48W097
1384 N48W098
1385 N48W099
1386 N48W100
1387 N48W101
1388 N48W102
1389 N48W103
1390 N48W104
1391 N48W105
1392 N48W106
1393 N48W107
1394 N48W108
1395 N48W109
1396 N48W110
1397 N48W111
1398 N48W112
1399 N48W113
1400 N48W114
1401 N48W115
1402 N48W116
1403 N48W117
1404 N48W118
1405 N48W119
1406 N48W120
1407 N48W121
1408 N48W122
1409 N48W123
1410 N48W124
1411 N48W125
1412 N48W126
1413 N49W054
1414 N49W055
1415 N49W056
1416 N49W057
1417 N49W058
1418 N49W059
1419 N49W062
1420 N49W063
1421 N49W064
1422 N49W065
1423 N49W066
1424 N49W067
1425 N49W068
1426 N49W069
1427 N49W070
1428 N49W071
1429 N49W072
1430 N49W073
1431 N49W074
1432 N49W075
1433 N49W076
1434 N49W077
1435 N49W078
1436 N49W079
1437 N49W080
1438 N49W081
1439 N49W082
1440 N49W083
1441 N49W084
1442 N49W085
1443 N49W086
1444 N49W087
1445 N49W088
1446 N49W089
1447 N49W090
1448 N49W091
1449 N49W092
1450 N49W093
1451 N49W094
1452 N49W095
1453 N49W096
1454 N49W097
1455 N49W098
1456 N49W099
1457 N49W100
1458 N49W101
1459 N49W102
1460 N49W103
1461 N49W104
1462 N49W105
1463 N49W106
1464 N49W107
1465 N49W108
1466 N49W109
1467 N49W110
1468 N49W111
1469 N49W112
1470 N49W113
1471 N49W114
1472 N49W115
1473 N49W116
1474 N49W117
1475 N49W118
1476 N49W119
1477 N49W120
1478 N49W121
1479 N49W122
1480 N49W123
1481 N49W124
1482 N49W125
1483 N49W126
1484 N49W127
1485 N49W128
1486 N50W056
1487 N50W057
1488 N50W058
1489 N50W059
1490 N50W060
1491 N50W061
1492 N50W062
1493 N50W063
1494 N50W064
1495 N50W065
1496 N50W066
1497 N50W067
1498 N50W068
1499 N50W069
1500 N50W070
1501 N50W071
1502 N50W072
1503 N50W073
1504 N50W074
1505 N50W075
1506 N50W076
1507 N50W077
1508 N50W078
1509 N50W079
1510 N50W080
1511 N50W081
1512 N50W082
1513 N50W083
1514 N50W084
1515 N50W085
1516 N50W086
1517 N50W087
1518 N50W088
1519 N50W089
1520 N50W090
1521 N50W091
1522 N50W092
1523 N50W093
1524 N50W094
1525 N50W095
1526 N50W096
1527 N50W097
1528 N50W098
1529 N50W099
1530 N50W100
1531 N50W101
1532 N50W102
1533 N50W103
1534 N50W104
1535 N50W105
1536 N50W106
1537 N50W107
1538 N50W108
1539 N50W109
1540 N50W110
1541 N50W111
1542 N50W112
1543 N50W113
1544 N50W114
1545 N50W115
1546 N50W116
1547 N50W117
1548 N50W118
1549 N50W119
1550 N50W120
1551 N50W121
1552 N50W122
1553 N50W123
1554 N50W124
1555 N50W125
1556 N50W126
1557 N50W127
1558 N50W128
1559 N50W129
1560 N50W130
1561 N51E177
1562 N51E178
1563 N51E179
1564 N51W056
1565 N51W057
1566 N51W058
1567 N51W059
1568 N51W060
1569 N51W061
1570 N51W062
1571 N51W063
1572 N51W064
1573 N51W065
1574 N51W066
1575 N51W067
1576 N51W068
1577 N51W069
1578 N51W070
1579 N51W071
1580 N51W072
1581 N51W073
1582 N51W074
1583 N51W075
1584 N51W076
1585 N51W077
1586 N51W078
1587 N51W079
1588 N51W080
1589 N51W081
1590 N51W082
1591 N51W083
1592 N51W084
1593 N51W085
1594 N51W086
1595 N51W087
1596 N51W088
1597 N51W089
1598 N51W090
1599 N51W091
1600 N51W092
1601 N51W093
1602 N51W094
1603 N51W095
1604 N51W096
1605 N51W097
1606 N51W098
1607 N51W099
1608 N51W100
1609 N51W101
1610 N51W102
1611 N51W103
1612 N51W104
1613 N51W105
1614 N51W106
1615 N51W107
1616 N51W108
1617 N51W109
1618 N51W110
1619 N51W111
1620 N51W112
1621 N51W113
1622 N51W114
1623 N51W115
1624 N51W116
1625 N51W117
1626 N51W118
1627 N51W119
1628 N51W120
1629 N51W121
1630 N51W122
1631 N51W123
1632 N51W124
1633 N51W125
1634 N51W126
1635 N51W127
1636 N51W128
1637 N51W129
1638 N51W131
1639 N51W132
1640 N51W176
1641 N51W177
1642 N51W178
1643 N51W179
1644 N51W180
1645 N52E172
1646 N52E173
1647 N52E174
1648 N52E175
1649 N52E177
1650 N52E178
1651 N52E179
1652 N52W056
1653 N52W057
1654 N52W058
1655 N52W059
1656 N52W060
1657 N52W061
1658 N52W062
1659 N52W063
1660 N52W064
1661 N52W065
1662 N52W066
1663 N52W067
1664 N52W068
1665 N52W069
1666 N52W070
1667 N52W071
1668 N52W072
1669 N52W073
1670 N52W074
1671 N52W075
1672 N52W076
1673 N52W077
1674 N52W078
1675 N52W079
1676 N52W080
1677 N52W081
1678 N52W082
1679 N52W083
1680 N52W084
1681 N52W085
1682 N52W086
1683 N52W087
1684 N52W088
1685 N52W089
1686 N52W090
1687 N52W091
1688 N52W092
1689 N52W093
1690 N52W094
1691 N52W095
1692 N52W096
1693 N52W097
1694 N52W098
1695 N52W099
1696 N52W100
1697 N52W101
1698 N52W102
1699 N52W103
1700 N52W104
1701 N52W105
1702 N52W106
1703 N52W107
1704 N52W108
1705 N52W109
1706 N52W110
1707 N52W111
1708 N52W112
1709 N52W113
1710 N52W114
1711 N52W115
1712 N52W116
1713 N52W117
1714 N52W118
1715 N52W119
1716 N52W120
1717 N52W121
1718 N52W122
1719 N52W123
1720 N52W124
1721 N52W125
1722 N52W126
1723 N52W127
1724 N52W128
1725 N52W129
1726 N52W130
1727 N52W131
1728 N52W132
1729 N52W133
1730 N52W169
1731 N52W170
1732 N52W171
1733 N52W172
1734 N52W173
1735 N52W174
1736 N52W175
1737 N52W176
1738 N52W177
1739 N53E172
1740 N53W056
1741 N53W057
1742 N53W058
1743 N53W059
1744 N53W060
1745 N53W061
1746 N53W062
1747 N53W063
1748 N53W064
1749 N53W065
1750 N53W066
1751 N53W067
1752 N53W068
1753 N53W069
1754 N53W070
1755 N53W071
1756 N53W072
1757 N53W073
1758 N53W074
1759 N53W075
1760 N53W076
1761 N53W077
1762 N53W078
1763 N53W079
1764 N53W080
1765 N53W081
1766 N53W082
1767 N53W083
1768 N53W084
1769 N53W085
1770 N53W086
1771 N53W087
1772 N53W088
1773 N53W089
1774 N53W090
1775 N53W091
1776 N53W092
1777 N53W093
1778 N53W094
1779 N53W095
1780 N53W096
1781 N53W097
1782 N53W098
1783 N53W099
1784 N53W100
1785 N53W101
1786 N53W102
1787 N53W103
1788 N53W104
1789 N53W105
1790 N53W106
1791 N53W107
1792 N53W108
1793 N53W109
1794 N53W110
1795 N53W111
1796 N53W112
1797 N53W113
1798 N53W114
1799 N53W115
1800 N53W116
1801 N53W117
1802 N53W118
1803 N53W119
1804 N53W120
1805 N53W121
1806 N53W122
1807 N53W123
1808 N53W124
1809 N53W125
1810 N53W126
1811 N53W127
1812 N53W128
1813 N53W129
1814 N53W130
1815 N53W131
1816 N53W132
1817 N53W133
1818 N53W134
1819 N53W167
1820 N53W168
1821 N53W169
1822 N53W170
1823 N54W057
1824 N54W058
1825 N54W059
1826 N54W060
1827 N54W061
1828 N54W062
1829 N54W063
1830 N54W064
1831 N54W065
1832 N54W066
1833 N54W067
1834 N54W068
1835 N54W069
1836 N54W070
1837 N54W071
1838 N54W072
1839 N54W073
1840 N54W074
1841 N54W075
1842 N54W076
1843 N54W077
1844 N54W078
1845 N54W079
1846 N54W080
1847 N54W081
1848 N54W082
1849 N54W083
1850 N54W084
1851 N54W085
1852 N54W086
1853 N54W087
1854 N54W088
1855 N54W089
1856 N54W090
1857 N54W091
1858 N54W092
1859 N54W093
1860 N54W094
1861 N54W095
1862 N54W096
1863 N54W097
1864 N54W098
1865 N54W099
1866 N54W100
1867 N54W101
1868 N54W102
1869 N54W103
1870 N54W104
1871 N54W105
1872 N54W106
1873 N54W107
1874 N54W108
1875 N54W109
1876 N54W110
1877 N54W111
1878 N54W112
1879 N54W113
1880 N54W114
1881 N54W115
1882 N54W116
1883 N54W117
1884 N54W118
1885 N54W119
1886 N54W120
1887 N54W121
1888 N54W122
1889 N54W123
1890 N54W124
1891 N54W125
1892 N54W126
1893 N54W127
1894 N54W128
1895 N54W129
1896 N54W130
1897 N54W131
1898 N54W132
1899 N54W133
1900 N54W134
1901 N54W160
1902 N54W161
1903 N54W162
1904 N54W163
1905 N54W164
1906 N54W165
1907 N54W166
1908 N54W167
1909 N55W070
1910 N55W071
1911 N55W072
1912 N55W112
1913 N55W113
1914 N55W124
1915 N55W125
1916
0 Australia
1 S11E119
2 S11E120
3 S11E121
4 S11E122
5 S11E123
6 S11E124
7 S11E132
8 S11E133
9 S11E141
10 S11E142
11 S11E143
12 S11E147
13 S11E148
14 S11E149
15 S11E150
16 S11E151
17 S11E152
18 S11E153
19 S11E161
20 S11E162
21 S11E165
22 S11E166
23 S11E179
24 S11W140
25 S11W151
26 S11W161
27 S11W162
28 S11W166
29 S12E122
30 S12E130
31 S12E131
32 S12E132
33 S12E133
34 S12E134
35 S12E135
36 S12E136
37 S12E141
38 S12E142
39 S12E143
40 S12E144
41 S12E151
42 S12E152
43 S12E153
44 S12E154
45 S12E159
46 S12E160
47 S12E166
48 S12E169
49 S12E170
50 S12W152
51 S12W166
52 S12W172
53 S13E122
54 S13E123
55 S13E130
56 S13E131
57 S13E132
58 S13E133
59 S13E134
60 S13E135
61 S13E136
62 S13E141
63 S13E142
64 S13E143
65 S13E168
66 S13E176
67 S13E177
68 S14E125
69 S14E126
70 S14E127
71 S14E129
72 S14E130
73 S14E131
74 S14E132
75 S14E133
76 S14E134
77 S14E135
78 S14E136
79 S14E141
80 S14E142
81 S14E143
82 S14E144
83 S14E166
84 S14E167
85 S14W164
86 S14W172
87 S14W173
88 S14W177
89 S15E121
90 S15E123
91 S15E124
92 S15E125
93 S15E126
94 S15E127
95 S15E128
96 S15E129
97 S15E130
98 S15E131
99 S15E132
100 S15E133
101 S15E134
102 S15E135
103 S15E136
104 S15E141
105 S15E142
106 S15E143
107 S15E144
108 S15E145
109 S15E166
110 S15E167
111 S15E168
112 S15W139
113 S15W142
114 S15W145
115 S15W146
116 S15W147
117 S15W148
118 S15W149
119 S15W169
120 S15W170
121 S15W171
122 S15W172
123 S15W178
124 S15W179
125 S16E123
126 S16E124
127 S16E125
128 S16E126
129 S16E127
130 S16E128
131 S16E129
132 S16E130
133 S16E131
134 S16E132
135 S16E133
136 S16E134
137 S16E135
138 S16E136
139 S16E137
140 S16E141
141 S16E142
142 S16E143
143 S16E144
144 S16E145
145 S16E166
146 S16E167
147 S16E168
148 S16W141
149 S16W143
150 S16W145
151 S16W146
152 S16W147
153 S16W148
154 S16W149
155 S16W155
156 S16W174
157 S16W176
158 S16W180
159 S17E122
160 S17E123
161 S17E124
162 S17E125
163 S17E126
164 S17E127
165 S17E128
166 S17E129
167 S17E130
168 S17E131
169 S17E132
170 S17E133
171 S17E134
172 S17E135
173 S17E136
174 S17E137
175 S17E138
176 S17E139
177 S17E140
178 S17E141
179 S17E142
180 S17E143
181 S17E144
182 S17E145
183 S17E146
184 S17E149
185 S17E150
186 S17E167
187 S17E168
188 S17E177
189 S17E178
190 S17E179
191 S17W141
192 S17W142
193 S17W143
194 S17W144
195 S17W145
196 S17W146
197 S17W147
198 S17W150
199 S17W151
200 S17W152
201 S17W153
202 S17W154
203 S17W155
204 S17W180
205 S18E118
206 S18E119
207 S18E122
208 S18E123
209 S18E124
210 S18E125
211 S18E126
212 S18E127
213 S18E128
214 S18E129
215 S18E130
216 S18E131
217 S18E132
218 S18E133
219 S18E134
220 S18E135
221 S18E136
222 S18E137
223 S18E138
224 S18E139
225 S18E140
226 S18E141
227 S18E142
228 S18E143
229 S18E144
230 S18E145
231 S18E146
232 S18E148
233 S18E155
234 S18E168
235 S18E176
236 S18E177
237 S18E178
238 S18E179
239 S18W139
240 S18W141
241 S18W142
242 S18W143
243 S18W144
244 S18W145
245 S18W146
246 S18W149
247 S18W150
248 S18W151
249 S18W179
250 S18W180
251 S19E121
252 S19E122
253 S19E123
254 S19E124
255 S19E125
256 S19E126
257 S19E127
258 S19E128
259 S19E129
260 S19E130
261 S19E131
262 S19E132
263 S19E133
264 S19E134
265 S19E135
266 S19E136
267 S19E137
268 S19E138
269 S19E139
270 S19E140
271 S19E141
272 S19E142
273 S19E143
274 S19E144
275 S19E145
276 S19E146
277 S19E162
278 S19E163
279 S19E168
280 S19E169
281 S19E177
282 S19E178
283 S19E179
284 S19W137
285 S19W138
286 S19W139
287 S19W140
288 S19W141
289 S19W142
290 S19W143
291 S19W160
292 S19W164
293 S19W170
294 S19W174
295 S19W175
296 S19W179
297 S19W180
298 S20E118
299 S20E119
300 S20E120
301 S20E121
302 S20E122
303 S20E123
304 S20E124
305 S20E125
306 S20E126
307 S20E127
308 S20E128
309 S20E129
310 S20E130
311 S20E131
312 S20E132
313 S20E133
314 S20E134
315 S20E135
316 S20E136
317 S20E137
318 S20E138
319 S20E139
320 S20E140
321 S20E141
322 S20E142
323 S20E143
324 S20E144
325 S20E145
326 S20E146
327 S20E147
328 S20E148
329 S20E158
330 S20E163
331 S20E169
332 S20E170
333 S20E177
334 S20E178
335 S20E179
336 S20W139
337 S20W140
338 S20W141
339 S20W142
340 S20W145
341 S20W146
342 S20W158
343 S20W159
344 S20W170
345 S20W175
346 S20W176
347 S20W179
348 S20W180
349 S21E115
350 S21E116
351 S21E117
352 S21E118
353 S21E119
354 S21E120
355 S21E121
356 S21E122
357 S21E123
358 S21E124
359 S21E125
360 S21E126
361 S21E127
362 S21E128
363 S21E129
364 S21E130
365 S21E131
366 S21E132
367 S21E133
368 S21E134
369 S21E135
370 S21E136
371 S21E137
372 S21E138
373 S21E139
374 S21E140
375 S21E141
376 S21E142
377 S21E143
378 S21E144
379 S21E145
380 S21E146
381 S21E147
382 S21E148
383 S21E149
384 S21E150
385 S21E154
386 S21E163
387 S21E164
388 S21E165
389 S21E166
390 S21E167
391 S21E169
392 S21W139
393 S21W140
394 S21W144
395 S21W158
396 S21W159
397 S21W175
398 S21W176
399 S21W179
400 S22E113
401 S22E114
402 S22E115
403 S22E116
404 S22E117
405 S22E118
406 S22E119
407 S22E120
408 S22E121
409 S22E122
410 S22E123
411 S22E124
412 S22E125
413 S22E126
414 S22E127
415 S22E128
416 S22E129
417 S22E130
418 S22E131
419 S22E132
420 S22E133
421 S22E134
422 S22E135
423 S22E136
424 S22E137
425 S22E138
426 S22E139
427 S22E140
428 S22E141
429 S22E142
430 S22E143
431 S22E144
432 S22E145
433 S22E146
434 S22E147
435 S22E148
436 S22E149
437 S22E150
438 S22E151
439 S22E152
440 S22E153
441 S22E154
442 S22E155
443 S22E158
444 S22E164
445 S22E165
446 S22E166
447 S22E167
448 S22E168
449 S22W136
450 S22W137
451 S22W139
452 S22W140
453 S22W141
454 S22W155
455 S22W158
456 S22W160
457 S22W175
458 S22W176
459 S22W179
460 S23E113
461 S23E114
462 S23E115
463 S23E116
464 S23E117
465 S23E118
466 S23E119
467 S23E120
468 S23E121
469 S23E122
470 S23E123
471 S23E124
472 S23E125
473 S23E126
474 S23E127
475 S23E128
476 S23E129
477 S23E130
478 S23E131
479 S23E132
480 S23E133
481 S23E134
482 S23E135
483 S23E136
484 S23E137
485 S23E138
486 S23E139
487 S23E140
488 S23E141
489 S23E142
490 S23E143
491 S23E144
492 S23E145
493 S23E146
494 S23E147
495 S23E148
496 S23E149
497 S23E150
498 S23E152
499 S23E155
500 S23E165
501 S23E166
502 S23E167
503 S23E168
504 S23E171
505 S23E172
506 S23W135
507 S23W137
508 S23W139
509 S23W152
510 S23W153
511 S23W177
512 S24E113
513 S24E114
514 S24E115
515 S24E116
516 S24E117
517 S24E118
518 S24E119
519 S24E120
520 S24E121
521 S24E122
522 S24E123
523 S24E124
524 S24E125
525 S24E126
526 S24E127
527 S24E128
528 S24E129
529 S24E130
530 S24E131
531 S24E132
532 S24E133
533 S24E134
534 S24E135
535 S24E136
536 S24E137
537 S24E138
538 S24E139
539 S24E140
540 S24E141
541 S24E142
542 S24E143
543 S24E144
544 S24E145
545 S24E146
546 S24E147
547 S24E148
548 S24E149
549 S24E150
550 S24E151
551 S24E152
552 S24E155
553 S24W131
554 S24W135
555 S24W136
556 S24W138
557 S24W148
558 S24W150
559 S25E113
560 S25E114
561 S25E115
562 S25E116
563 S25E117
564 S25E118
565 S25E119
566 S25E120
567 S25E121
568 S25E122
569 S25E123
570 S25E124
571 S25E125
572 S25E126
573 S25E127
574 S25E128
575 S25E129
576 S25E130
577 S25E131
578 S25E132
579 S25E133
580 S25E134
581 S25E135
582 S25E136
583 S25E137
584 S25E138
585 S25E139
586 S25E140
587 S25E141
588 S25E142
589 S25E143
590 S25E144
591 S25E145
592 S25E146
593 S25E147
594 S25E148
595 S25E149
596 S25E150
597 S25E151
598 S25E152
599 S25E153
600 S25W125
601 S25W129
602 S26E112
603 S26E113
604 S26E114
605 S26E115
606 S26E116
607 S26E117
608 S26E118
609 S26E119
610 S26E120
611 S26E121
612 S26E122
613 S26E123
614 S26E124
615 S26E125
616 S26E126
617 S26E127
618 S26E128
619 S26E129
620 S26E130
621 S26E131
622 S26E132
623 S26E133
624 S26E134
625 S26E135
626 S26E136
627 S26E137
628 S26E138
629 S26E139
630 S26E140
631 S26E141
632 S26E142
633 S26E143
634 S26E144
635 S26E145
636 S26E146
637 S26E147
638 S26E148
639 S26E149
640 S26E150
641 S26E151
642 S26E152
643 S26E153
644 S26W131
645 S27E113
646 S27E114
647 S27E115
648 S27E116
649 S27E117
650 S27E118
651 S27E119
652 S27E120
653 S27E121
654 S27E122
655 S27E123
656 S27E124
657 S27E125
658 S27E126
659 S27E127
660 S27E128
661 S27E129
662 S27E130
663 S27E131
664 S27E132
665 S27E133
666 S27E134
667 S27E135
668 S27E136
669 S27E137
670 S27E138
671 S27E139
672 S27E140
673 S27E141
674 S27E142
675 S27E143
676 S27E144
677 S27E145
678 S27E146
679 S27E147
680 S27E148
681 S27E149
682 S27E150
683 S27E151
684 S27E152
685 S27E153
686 S27W106
687 S28E113
688 S28E114
689 S28E115
690 S28E116
691 S28E117
692 S28E118
693 S28E119
694 S28E120
695 S28E121
696 S28E122
697 S28E123
698 S28E124
699 S28E125
700 S28E126
701 S28E127
702 S28E128
703 S28E129
704 S28E130
705 S28E131
706 S28E132
707 S28E133
708 S28E134
709 S28E135
710 S28E136
711 S28E137
712 S28E138
713 S28E139
714 S28E140
715 S28E141
716 S28E142
717 S28E143
718 S28E144
719 S28E145
720 S28E146
721 S28E147
722 S28E148
723 S28E149
724 S28E150
725 S28E151
726 S28E152
727 S28E153
728 S28W110
729 S28W144
730 S28W145
731 S29E113
732 S29E114
733 S29E115
734 S29E116
735 S29E117
736 S29E118
737 S29E119
738 S29E120
739 S29E121
740 S29E122
741 S29E123
742 S29E124
743 S29E125
744 S29E126
745 S29E127
746 S29E128
747 S29E129
748 S29E130
749 S29E131
750 S29E132
751 S29E133
752 S29E134
753 S29E135
754 S29E136
755 S29E137
756 S29E138
757 S29E139
758 S29E140
759 S29E141
760 S29E142
761 S29E143
762 S29E144
763 S29E145
764 S29E146
765 S29E147
766 S29E148
767 S29E149
768 S29E150
769 S29E151
770 S29E152
771 S29E153
772 S30E114
773 S30E115
774 S30E116
775 S30E117
776 S30E118
777 S30E119
778 S30E120
779 S30E121
780 S30E122
781 S30E123
782 S30E124
783 S30E125
784 S30E126
785 S30E127
786 S30E128
787 S30E129
788 S30E130
789 S30E131
790 S30E132
791 S30E133
792 S30E134
793 S30E135
794 S30E136
795 S30E137
796 S30E138
797 S30E139
798 S30E140
799 S30E141
800 S30E142
801 S30E143
802 S30E144
803 S30E145
804 S30E146
805 S30E147
806 S30E148
807 S30E149
808 S30E150
809 S30E151
810 S30E152
811 S30E153
812 S31E114
813 S31E115
814 S31E116
815 S31E117
816 S31E118
817 S31E119
818 S31E120
819 S31E121
820 S31E122
821 S31E123
822 S31E124
823 S31E125
824 S31E126
825 S31E127
826 S31E128
827 S31E129
828 S31E130
829 S31E131
830 S31E132
831 S31E133
832 S31E134
833 S31E135
834 S31E136
835 S31E137
836 S31E138
837 S31E139
838 S31E140
839 S31E141
840 S31E142
841 S31E143
842 S31E144
843 S31E145
844 S31E146
845 S31E147
846 S31E148
847 S31E149
848 S31E150
849 S31E151
850 S31E152
851 S31E153
852 S32E115
853 S32E116
854 S32E117
855 S32E118
856 S32E119
857 S32E120
858 S32E121
859 S32E122
860 S32E123
861 S32E124
862 S32E125
863 S32E126
864 S32E127
865 S32E128
866 S32E129
867 S32E130
868 S32E131
869 S32E132
870 S32E133
871 S32E134
872 S32E135
873 S32E136
874 S32E137
875 S32E138
876 S32E139
877 S32E140
878 S32E141
879 S32E142
880 S32E143
881 S32E144
882 S32E145
883 S32E146
884 S32E147
885 S32E148
886 S32E149
887 S32E150
888 S32E151
889 S32E152
890 S32E153
891 S32E159
892 S33E115
893 S33E116
894 S33E117
895 S33E118
896 S33E119
897 S33E120
898 S33E121
899 S33E122
900 S33E123
901 S33E124
902 S33E125
903 S33E126
904 S33E127
905 S33E128
906 S33E132
907 S33E133
908 S33E134
909 S33E135
910 S33E136
911 S33E137
912 S33E138
913 S33E139
914 S33E140
915 S33E141
916 S33E142
917 S33E143
918 S33E144
919 S33E145
920 S33E146
921 S33E147
922 S33E148
923 S33E149
924 S33E150
925 S33E151
926 S33E152
927 S34E114
928 S34E115
929 S34E116
930 S34E117
931 S34E118
932 S34E119
933 S34E120
934 S34E121
935 S34E122
936 S34E123
937 S34E124
938 S34E134
939 S34E135
940 S34E136
941 S34E137
942 S34E138
943 S34E139
944 S34E140
945 S34E141
946 S34E142
947 S34E143
948 S34E144
949 S34E145
950 S34E146
951 S34E147
952 S34E148
953 S34E149
954 S34E150
955 S34E151
956 S35E114
957 S35E115
958 S35E116
959 S35E117
960 S35E118
961 S35E119
962 S35E120
963 S35E121
964 S35E122
965 S35E123
966 S35E134
967 S35E135
968 S35E136
969 S35E137
970 S35E138
971 S35E139
972 S35E140
973 S35E141
974 S35E142
975 S35E143
976 S35E144
977 S35E145
978 S35E146
979 S35E147
980 S35E148
981 S35E149
982 S35E150
983 S35E151
984 S36E116
985 S36E117
986 S36E118
987 S36E135
988 S36E136
989 S36E137
990 S36E138
991 S36E139
992 S36E140
993 S36E141
994 S36E142
995 S36E143
996 S36E144
997 S36E145
998 S36E146
999 S36E147
1000 S36E148
1001 S36E149
1002 S36E150
1003 S37E136
1004 S37E137
1005 S37E139
1006 S37E140
1007 S37E141
1008 S37E142
1009 S37E143
1010 S37E144
1011 S37E145
1012 S37E146
1013 S37E147
1014 S37E148
1015 S37E149
1016 S37E150
1017 S38E139
1018 S38E140
1019 S38E141
1020 S38E142
1021 S38E143
1022 S38E144
1023 S38E145
1024 S38E146
1025 S38E147
1026 S38E148
1027 S38E149
1028 S38E150
1029 S39E140
1030 S39E141
1031 S39E142
1032 S39E143
1033 S39E144
1034 S39E145
1035 S39E146
1036 S39E147
1037 S40E143
1038 S40E144
1039 S40E146
1040 S40E147
1041 S40E148
1042 S41E143
1043 S41E144
1044 S41E145
1045 S41E146
1046 S41E147
1047 S41E148
1048 S42E144
1049 S42E145
1050 S42E146
1051 S42E147
1052 S42E148
1053 S43E145
1054 S43E146
1055 S43E147
1056 S43E148
1057 S44E145
1058 S44E146
1059 S44E147
1060 S44E148
1061
0 Islands
1 N16W170
2 N18W156
3 N19W155
4 N19W156
5 N19W157
6 N20W156
7 N20W157
8 N20W158
9 N21W157
10 N21W158
11 N21W159
12 N21W160
13 N21W161
14 N22W160
15 N22W161
16 N23W162
17 N23W165
18 N23W167
19 N24W168
20 N25W168
21 N25W172
22 N26W174
23 N27W176
24 N28W178
25 N28W179
26 S08W015
27 S16W006
28 S17W006
29 S21W029
30 S21W030
31 S29E167
32 S30E167
33 S30W178
34 S31W179
35 S32W179
36 S35E172
37 S35E173
38 S36E173
39 S36E174
40 S36E175
41 S37E173
42 S37E174
43 S37E175
44 S37E176
45 S38E077
46 S38E174
47 S38E175
48 S38E176
49 S38E177
50 S38E178
51 S38W013
52 S39E077
53 S39E174
54 S39E175
55 S39E176
56 S39E177
57 S39E178
58 S40E173
59 S40E174
60 S40E175
61 S40E176
62 S40E177
63 S40E178
64 S41E172
65 S41E173
66 S41E174
67 S41E175
68 S41E176
69 S41W010
70 S41W011
71 S42E171
72 S42E172
73 S42E173
74 S42E174
75 S42E175
76 S42E176
77 S43E170
78 S43E171
79 S43E172
80 S43E173
81 S43E174
82 S44E168
83 S44E169
84 S44E170
85 S44E171
86 S44E172
87 S44E173
88 S44W176
89 S44W177
90 S45E167
91 S45E168
92 S45E169
93 S45E170
94 S45E171
95 S45W176
96 S45W177
97 S46E050
98 S46E166
99 S46E167
100 S46E168
101 S46E169
102 S46E170
103 S46E171
104 S47E037
105 S47E038
106 S47E050
107 S47E051
108 S47E052
109 S47E166
110 S47E167
111 S47E168
112 S47E169
113 S47E170
114 S48E167
115 S48E168
116 S48E179
117 S49E068
118 S49E069
119 S49E166
120 S50E068
121 S50E069
122 S50E070
123 S50E178
124 S51E068
125 S51E165
126 S51E166
127 S53E073
128 S53E168
129 S53E169
130 S54E072
131 S54E073
132 S54W038
133 S54W039
134 S55E003
135 S55E158
136 S55W036
137 S55W037
138 S55W038
139 S55W039
140 S56E158
141 S56W035
142
0 South_America
1 N00W050
2 N00W051
3 N00W052
4 N00W053
5 N00W054
6 N00W055
7 N00W056
8 N00W057
9 N00W058
10 N00W059
11 N00W060
12 N00W061
13 N00W062
14 N00W063
15 N00W064
16 N00W065
17 N00W066
18 N00W067
19 N00W068
20 N00W069
21 N00W070
22 N00W071
23 N00W072
24 N00W073
25 N00W074
26 N00W075
27 N00W076
28 N00W077
29 N00W078
30 N00W079
31 N00W080
32 N00W081
33 N00W090
34 N00W091
35 N00W092
36 N01W050
37 N01W051
38 N01W052
39 N01W053
40 N01W054
41 N01W055
42 N01W056
43 N01W057
44 N01W058
45 N01W059
46 N01W060
47 N01W061
48 N01W062
49 N01W063
50 N01W064
51 N01W065
52 N01W066
53 N01W067
54 N01W068
55 N01W069
56 N01W070
57 N01W071
58 N01W072
59 N01W073
60 N01W074
61 N01W075
62 N01W076
63 N01W077
64 N01W078
65 N01W079
66 N01W080
67 N01W092
68 N02W051
69 N02W052
70 N02W053
71 N02W054
72 N02W055
73 N02W056
74 N02W057
75 N02W058
76 N02W059
77 N02W060
78 N02W061
79 N02W062
80 N02W063
81 N02W064
82 N02W065
83 N02W066
84 N02W067
85 N02W068
86 N02W069
87 N02W070
88 N02W071
89 N02W072
90 N02W073
91 N02W074
92 N02W075
93 N02W076
94 N02W077
95 N02W078
96 N02W079
97 N03W051
98 N03W052
99 N03W053
100 N03W054
101 N03W055
102 N03W056
103 N03W057
104 N03W058
105 N03W059
106 N03W060
107 N03W061
108 N03W062
109 N03W063
110 N03W064
111 N03W065
112 N03W066
113 N03W067
114 N03W068
115 N03W069
116 N03W070
117 N03W071
118 N03W072
119 N03W073
120 N03W074
121 N03W075
122 N03W076
123 N03W077
124 N03W078
125 N03W079
126 N03W082
127 N04W052
128 N04W053
129 N04W054
130 N04W055
131 N04W056
132 N04W057
133 N04W058
134 N04W059
135 N04W060
136 N04W061
137 N04W062
138 N04W063
139 N04W064
140 N04W065
141 N04W066
142 N04W067
143 N04W068
144 N04W069
145 N04W070
146 N04W071
147 N04W072
148 N04W073
149 N04W074
150 N04W075
151 N04W076
152 N04W077
153 N04W078
154 N04W082
155 N05W053
156 N05W054
157 N05W055
158 N05W056
159 N05W057
160 N05W058
161 N05W059
162 N05W060
163 N05W061
164 N05W062
165 N05W063
166 N05W064
167 N05W065
168 N05W066
169 N05W067
170 N05W068
171 N05W069
172 N05W070
173 N05W071
174 N05W072
175 N05W073
176 N05W074
177 N05W075
178 N05W076
179 N05W077
180 N05W078
181 N05W088
182 N06W056
183 N06W057
184 N06W058
185 N06W059
186 N06W060
187 N06W061
188 N06W062
189 N06W063
190 N06W064
191 N06W065
192 N06W066
193 N06W067
194 N06W068
195 N06W069
196 N06W070
197 N06W071
198 N06W072
199 N06W073
200 N06W074
201 N06W075
202 N06W076
203 N06W077
204 N06W078
205 N07W059
206 N07W060
207 N07W061
208 N07W062
209 N07W063
210 N07W064
211 N07W065
212 N07W066
213 N07W067
214 N07W068
215 N07W069
216 N07W070
217 N07W071
218 N07W072
219 N07W073
220 N07W074
221 N07W075
222 N07W076
223 N07W077
224 N07W078
225 N07W079
226 N07W080
227 N07W081
228 N07W082
229 N07W083
230 N08W060
231 N08W061
232 N08W062
233 N08W063
234 N08W064
235 N08W065
236 N08W066
237 N08W067
238 N08W068
239 N08W069
240 N08W070
241 N08W071
242 N08W072
243 N08W073
244 N08W074
245 N08W075
246 N08W076
247 N08W077
248 N08W078
249 N08W079
250 N08W080
251 N08W081
252 N08W082
253 N08W083
254 N08W084
255 N09W061
256 N09W062
257 N09W063
258 N09W064
259 N09W065
260 N09W066
261 N09W067
262 N09W068
263 N09W069
264 N09W070
265 N09W071
266 N09W072
267 N09W073
268 N09W074
269 N09W075
270 N09W076
271 N09W077
272 N09W078
273 N09W079
274 N09W080
275 N09W081
276 N09W082
277 N09W083
278 N09W084
279 N09W085
280 N09W086
281 N10W061
282 N10W062
283 N10W063
284 N10W064
285 N10W065
286 N10W066
287 N10W067
288 N10W068
289 N10W069
290 N10W070
291 N10W071
292 N10W072
293 N10W073
294 N10W074
295 N10W075
296 N10W076
297 N10W084
298 N10W085
299 N10W086
300 N11W061
301 N11W062
302 N11W064
303 N11W065
304 N11W067
305 N11W068
306 N11W069
307 N11W070
308 N11W071
309 N11W072
310 N11W073
311 N11W074
312 N11W075
313 N11W084
314 N11W085
315 N11W086
316 N11W087
317 N12W062
318 N12W069
319 N12W070
320 N12W071
321 N12W072
322 N12W073
323 N12W082
324 N12W083
325 N12W084
326 N12W085
327 N12W086
328 N12W087
329 N12W088
330 N13W060
331 N13W061
332 N13W062
333 N13W081
334 N13W082
335 N13W084
336 N13W085
337 N13W086
338 N13W087
339 N13W088
340 N13W089
341 N13W090
342 N13W091
343 N13W092
344 N14W061
345 N14W062
346 N14W081
347 N14W083
348 N14W084
349 N14W085
350 N14W086
351 N14W087
352 N14W088
353 N14W089
354 N14W090
355 N14W091
356 N14W092
357 N14W093
358 S01W047
359 S01W048
360 S01W049
361 S01W050
362 S01W051
363 S01W052
364 S01W053
365 S01W054
366 S01W055
367 S01W056
368 S01W057
369 S01W058
370 S01W059
371 S01W060
372 S01W061
373 S01W062
374 S01W063
375 S01W064
376 S01W065
377 S01W066
378 S01W067
379 S01W068
380 S01W069
381 S01W070
382 S01W071
383 S01W072
384 S01W073
385 S01W074
386 S01W075
387 S01W076
388 S01W077
389 S01W078
390 S01W079
391 S01W080
392 S01W081
393 S01W090
394 S01W091
395 S01W092
396 S02W045
397 S02W046
398 S02W047
399 S02W048
400 S02W049
401 S02W050
402 S02W051
403 S02W052
404 S02W053
405 S02W054
406 S02W055
407 S02W056
408 S02W057
409 S02W058
410 S02W059
411 S02W060
412 S02W061
413 S02W062
414 S02W063
415 S02W064
416 S02W065
417 S02W066
418 S02W067
419 S02W068
420 S02W069
421 S02W070
422 S02W071
423 S02W072
424 S02W073
425 S02W074
426 S02W075
427 S02W076
428 S02W077
429 S02W078
430 S02W079
431 S02W080
432 S02W081
433 S02W082
434 S02W090
435 S02W091
436 S02W092
437 S03W040
438 S03W041
439 S03W042
440 S03W043
441 S03W044
442 S03W045
443 S03W046
444 S03W047
445 S03W048
446 S03W049
447 S03W050
448 S03W051
449 S03W052
450 S03W053
451 S03W054
452 S03W055
453 S03W056
454 S03W057
455 S03W058
456 S03W059
457 S03W060
458 S03W061
459 S03W062
460 S03W063
461 S03W064
462 S03W065
463 S03W066
464 S03W067
465 S03W068
466 S03W069
467 S03W070
468 S03W071
469 S03W072
470 S03W073
471 S03W074
472 S03W075
473 S03W076
474 S03W077
475 S03W078
476 S03W079
477 S03W080
478 S03W081
479 S03W082
480 S04W033
481 S04W034
482 S04W039
483 S04W040
484 S04W041
485 S04W042
486 S04W043
487 S04W044
488 S04W045
489 S04W046
490 S04W047
491 S04W048
492 S04W049
493 S04W050
494 S04W051
495 S04W052
496 S04W053
497 S04W054
498 S04W055
499 S04W056
500 S04W057
501 S04W058
502 S04W059
503 S04W060
504 S04W061
505 S04W062
506 S04W063
507 S04W064
508 S04W065
509 S04W066
510 S04W067
511 S04W068
512 S04W069
513 S04W070
514 S04W071
515 S04W072
516 S04W073
517 S04W074
518 S04W075
519 S04W076
520 S04W077
521 S04W078
522 S04W079
523 S04W080
524 S04W081
525 S05W037
526 S05W038
527 S05W039
528 S05W040
529 S05W041
530 S05W042
531 S05W043
532 S05W044
533 S05W045
534 S05W046
535 S05W047
536 S05W048
537 S05W049
538 S05W050
539 S05W051
540 S05W052
541 S05W053
542 S05W054
543 S05W055
544 S05W056
545 S05W057
546 S05W058
547 S05W059
548 S05W060
549 S05W061
550 S05W062
551 S05W063
552 S05W064
553 S05W065
554 S05W066
555 S05W067
556 S05W068
557 S05W069
558 S05W070
559 S05W071
560 S05W072
561 S05W073
562 S05W074
563 S05W075
564 S05W076
565 S05W077
566 S05W078
567 S05W079
568 S05W080
569 S05W081
570 S05W082
571 S06W036
572 S06W037
573 S06W038
574 S06W039
575 S06W040
576 S06W041
577 S06W042
578 S06W043
579 S06W044
580 S06W045
581 S06W046
582 S06W047
583 S06W048
584 S06W049
585 S06W050
586 S06W051
587 S06W052
588 S06W053
589 S06W054
590 S06W055
591 S06W056
592 S06W057
593 S06W058
594 S06W059
595 S06W060
596 S06W061
597 S06W062
598 S06W063
599 S06W064
600 S06W065
601 S06W066
602 S06W067
603 S06W068
604 S06W069
605 S06W070
606 S06W071
607 S06W072
608 S06W073
609 S06W074
610 S06W075
611 S06W076
612 S06W077
613 S06W078
614 S06W079
615 S06W080
616 S06W081
617 S06W082
618 S07W035
619 S07W036
620 S07W037
621 S07W038
622 S07W039
623 S07W040
624 S07W041
625 S07W042
626 S07W043
627 S07W044
628 S07W045
629 S07W046
630 S07W047
631 S07W048
632 S07W049
633 S07W050
634 S07W051
635 S07W052
636 S07W053
637 S07W054
638 S07W055
639 S07W056
640 S07W057
641 S07W058
642 S07W059
643 S07W060
644 S07W061
645 S07W062
646 S07W063
647 S07W064
648 S07W065
649 S07W066
650 S07W067
651 S07W068
652 S07W069
653 S07W070
654 S07W071
655 S07W072
656 S07W073
657 S07W074
658 S07W075
659 S07W076
660 S07W077
661 S07W078
662 S07W079
663 S07W080
664 S07W081
665 S07W082
666 S08W035
667 S08W036
668 S08W037
669 S08W038
670 S08W039
671 S08W040
672 S08W041
673 S08W042
674 S08W043
675 S08W044
676 S08W045
677 S08W046
678 S08W047
679 S08W048
680 S08W049
681 S08W050
682 S08W051
683 S08W052
684 S08W053
685 S08W054
686 S08W055
687 S08W056
688 S08W057
689 S08W058
690 S08W059
691 S08W060
692 S08W061
693 S08W062
694 S08W063
695 S08W064
696 S08W065
697 S08W066
698 S08W067
699 S08W068
700 S08W069
701 S08W070
702 S08W071
703 S08W072
704 S08W073
705 S08W074
706 S08W075
707 S08W076
708 S08W077
709 S08W078
710 S08W079
711 S08W080
712 S09W035
713 S09W036
714 S09W037
715 S09W038
716 S09W039
717 S09W040
718 S09W041
719 S09W042
720 S09W043
721 S09W044
722 S09W045
723 S09W046
724 S09W047
725 S09W048
726 S09W049
727 S09W050
728 S09W051
729 S09W052
730 S09W053
731 S09W054
732 S09W055
733 S09W056
734 S09W057
735 S09W058
736 S09W059
737 S09W060
738 S09W061
739 S09W062
740 S09W063
741 S09W064
742 S09W065
743 S09W066
744 S09W067
745 S09W068
746 S09W069
747 S09W070
748 S09W071
749 S09W072
750 S09W073
751 S09W074
752 S09W075
753 S09W076
754 S09W077
755 S09W078
756 S09W079
757 S09W080
758 S10W036
759 S10W037
760 S10W038
761 S10W039
762 S10W040
763 S10W041
764 S10W042
765 S10W043
766 S10W044
767 S10W045
768 S10W046
769 S10W047
770 S10W048
771 S10W049
772 S10W050
773 S10W051
774 S10W052
775 S10W053
776 S10W054
777 S10W055
778 S10W056
779 S10W057
780 S10W058
781 S10W059
782 S10W060
783 S10W061
784 S10W062
785 S10W063
786 S10W064
787 S10W065
788 S10W066
789 S10W067
790 S10W068
791 S10W069
792 S10W070
793 S10W071
794 S10W072
795 S10W073
796 S10W074
797 S10W075
798 S10W076
799 S10W077
800 S10W078
801 S10W079
802 S11W037
803 S11W038
804 S11W039
805 S11W040
806 S11W041
807 S11W042
808 S11W043
809 S11W044
810 S11W045
811 S11W046
812 S11W047
813 S11W048
814 S11W049
815 S11W050
816 S11W051
817 S11W052
818 S11W053
819 S11W054
820 S11W055
821 S11W056
822 S11W057
823 S11W058
824 S11W059
825 S11W060
826 S11W061
827 S11W062
828 S11W063
829 S11W064
830 S11W065
831 S11W066
832 S11W067
833 S11W068
834 S11W069
835 S11W070
836 S11W071
837 S11W072
838 S11W073
839 S11W074
840 S11W075
841 S11W076
842 S11W077
843 S11W078
844 S11W079
845 S12W038
846 S12W039
847 S12W040
848 S12W041
849 S12W042
850 S12W043
851 S12W044
852 S12W045
853 S12W046
854 S12W047
855 S12W048
856 S12W049
857 S12W050
858 S12W051
859 S12W052
860 S12W053
861 S12W054
862 S12W055
863 S12W056
864 S12W057
865 S12W058
866 S12W059
867 S12W060
868 S12W061
869 S12W062
870 S12W063
871 S12W064
872 S12W065
873 S12W066
874 S12W067
875 S12W068
876 S12W069
877 S12W070
878 S12W071
879 S12W072
880 S12W073
881 S12W074
882 S12W075
883 S12W076
884 S12W077
885 S12W078
886 S13W038
887 S13W039
888 S13W040
889 S13W041
890 S13W042
891 S13W043
892 S13W044
893 S13W045
894 S13W046
895 S13W047
896 S13W048
897 S13W049
898 S13W050
899 S13W051
900 S13W052
901 S13W053
902 S13W054
903 S13W055
904 S13W056
905 S13W057
906 S13W058
907 S13W059
908 S13W060
909 S13W061
910 S13W062
911 S13W063
912 S13W064
913 S13W065
914 S13W066
915 S13W067
916 S13W068
917 S13W069
918 S13W070
919 S13W071
920 S13W072
921 S13W073
922 S13W074
923 S13W075
924 S13W076
925 S13W077
926 S13W078
927 S14W039
928 S14W040
929 S14W041
930 S14W042
931 S14W043
932 S14W044
933 S14W045
934 S14W046
935 S14W047
936 S14W048
937 S14W049
938 S14W050
939 S14W051
940 S14W052
941 S14W053
942 S14W054
943 S14W055
944 S14W056
945 S14W057
946 S14W058
947 S14W059
948 S14W060
949 S14W061
950 S14W062
951 S14W063
952 S14W064
953 S14W065
954 S14W066
955 S14W067
956 S14W068
957 S14W069
958 S14W070
959 S14W071
960 S14W072
961 S14W073
962 S14W074
963 S14W075
964 S14W076
965 S14W077
966 S15W039
967 S15W040
968 S15W041
969 S15W042
970 S15W043
971 S15W044
972 S15W045
973 S15W046
974 S15W047
975 S15W048
976 S15W049
977 S15W050
978 S15W051
979 S15W052
980 S15W053
981 S15W054
982 S15W055
983 S15W056
984 S15W057
985 S15W058
986 S15W059
987 S15W060
988 S15W061
989 S15W062
990 S15W063
991 S15W064
992 S15W065
993 S15W066
994 S15W067
995 S15W068
996 S15W069
997 S15W070
998 S15W071
999 S15W072
1000 S15W073
1001 S15W074
1002 S15W075
1003 S15W076
1004 S15W077
1005 S16W039
1006 S16W040
1007 S16W041
1008 S16W042
1009 S16W043
1010 S16W044
1011 S16W045
1012 S16W046
1013 S16W047
1014 S16W048
1015 S16W049
1016 S16W050
1017 S16W051
1018 S16W052
1019 S16W053
1020 S16W054
1021 S16W055
1022 S16W056
1023 S16W057
1024 S16W058
1025 S16W059
1026 S16W060
1027 S16W061
1028 S16W062
1029 S16W063
1030 S16W064
1031 S16W065
1032 S16W066
1033 S16W067
1034 S16W068
1035 S16W069
1036 S16W070
1037 S16W071
1038 S16W072
1039 S16W073
1040 S16W074
1041 S16W075
1042 S16W076
1043 S17W039
1044 S17W040
1045 S17W041
1046 S17W042
1047 S17W043
1048 S17W044
1049 S17W045
1050 S17W046
1051 S17W047
1052 S17W048
1053 S17W049
1054 S17W050
1055 S17W051
1056 S17W052
1057 S17W053
1058 S17W054
1059 S17W055
1060 S17W056
1061 S17W057
1062 S17W058
1063 S17W059
1064 S17W060
1065 S17W061
1066 S17W062
1067 S17W063
1068 S17W064
1069 S17W065
1070 S17W066
1071 S17W067
1072 S17W068
1073 S17W070
1074 S17W071
1075 S17W072
1076 S17W073
1077 S17W074
1078 S17W075
1079 S18W039
1080 S18W040
1081 S18W041
1082 S18W042
1083 S18W043
1084 S18W044
1085 S18W045
1086 S18W046
1087 S18W047
1088 S18W048
1089 S18W049
1090 S18W050
1091 S18W051
1092 S18W052
1093 S18W053
1094 S18W054
1095 S18W055
1096 S18W056
1097 S18W057
1098 S18W058
1099 S18W059
1100 S18W060
1101 S18W061
1102 S18W062
1103 S18W063
1104 S18W064
1105 S18W065
1106 S18W066
1107 S18W067
1108 S18W068
1109 S18W069
1110 S18W070
1111 S18W071
1112 S18W072
1113 S18W073
1114 S19W040
1115 S19W041
1116 S19W042
1117 S19W043
1118 S19W044
1119 S19W045
1120 S19W046
1121 S19W047
1122 S19W048
1123 S19W049
1124 S19W050
1125 S19W051
1126 S19W052
1127 S19W053
1128 S19W054
1129 S19W055
1130 S19W056
1131 S19W057
1132 S19W058
1133 S19W059
1134 S19W060
1135 S19W061
1136 S19W062
1137 S19W063
1138 S19W064
1139 S19W065
1140 S19W066
1141 S19W067
1142 S19W068
1143 S19W069
1144 S19W070
1145 S19W071
1146 S20W040
1147 S20W041
1148 S20W042
1149 S20W043
1150 S20W044
1151 S20W045
1152 S20W046
1153 S20W047
1154 S20W048
1155 S20W049
1156 S20W050
1157 S20W051
1158 S20W052
1159 S20W053
1160 S20W054
1161 S20W055
1162 S20W056
1163 S20W057
1164 S20W058
1165 S20W059
1166 S20W060
1167 S20W061
1168 S20W062
1169 S20W063
1170 S20W064
1171 S20W065
1172 S20W066
1173 S20W067
1174 S20W068
1175 S20W069
1176 S20W070
1177 S20W071
1178 S21W041
1179 S21W042
1180 S21W043
1181 S21W044
1182 S21W045
1183 S21W046
1184 S21W047
1185 S21W048
1186 S21W049
1187 S21W050
1188 S21W051
1189 S21W052
1190 S21W053
1191 S21W054
1192 S21W055
1193 S21W056
1194 S21W057
1195 S21W058
1196 S21W059
1197 S21W060
1198 S21W061
1199 S21W062
1200 S21W063
1201 S21W064
1202 S21W065
1203 S21W066
1204 S21W067
1205 S21W068
1206 S21W069
1207 S21W070
1208 S21W071
1209 S22W041
1210 S22W042
1211 S22W043
1212 S22W044
1213 S22W045
1214 S22W046
1215 S22W047
1216 S22W048
1217 S22W049
1218 S22W050
1219 S22W051
1220 S22W052
1221 S22W053
1222 S22W054
1223 S22W055
1224 S22W056
1225 S22W057
1226 S22W058
1227 S22W059
1228 S22W060
1229 S22W061
1230 S22W062
1231 S22W063
1232 S22W064
1233 S22W065
1234 S22W066
1235 S22W067
1236 S22W068
1237 S22W069
1238 S22W070
1239 S22W071
1240 S23W041
1241 S23W042
1242 S23W043
1243 S23W044
1244 S23W045
1245 S23W046
1246 S23W047
1247 S23W048
1248 S23W049
1249 S23W050
1250 S23W051
1251 S23W052
1252 S23W053
1253 S23W054
1254 S23W055
1255 S23W056
1256 S23W057
1257 S23W058
1258 S23W059
1259 S23W060
1260 S23W061
1261 S23W062
1262 S23W063
1263 S23W064
1264 S23W065
1265 S23W066
1266 S23W067
1267 S23W068
1268 S23W069
1269 S23W070
1270 S23W071
1271 S24W042
1272 S24W043
1273 S24W044
1274 S24W045
1275 S24W046
1276 S24W047
1277 S24W048
1278 S24W049
1279 S24W050
1280 S24W051
1281 S24W052
1282 S24W053
1283 S24W054
1284 S24W055
1285 S24W056
1286 S24W057
1287 S24W058
1288 S24W059
1289 S24W060
1290 S24W061
1291 S24W062
1292 S24W063
1293 S24W064
1294 S24W065
1295 S24W066
1296 S24W067
1297 S24W068
1298 S24W069
1299 S24W070
1300 S24W071
1301 S25W046
1302 S25W047
1303 S25W048
1304 S25W049
1305 S25W050
1306 S25W051
1307 S25W052
1308 S25W053
1309 S25W054
1310 S25W055
1311 S25W056
1312 S25W057
1313 S25W058
1314 S25W059
1315 S25W060
1316 S25W061
1317 S25W062
1318 S25W063
1319 S25W064
1320 S25W065
1321 S25W066
1322 S25W067
1323 S25W068
1324 S25W069
1325 S25W070
1326 S25W071
1327 S26W048
1328 S26W049
1329 S26W050
1330 S26W051
1331 S26W052
1332 S26W053
1333 S26W054
1334 S26W055
1335 S26W056
1336 S26W057
1337 S26W058
1338 S26W059
1339 S26W060
1340 S26W061
1341 S26W062
1342 S26W063
1343 S26W064
1344 S26W065
1345 S26W066
1346 S26W067
1347 S26W068
1348 S26W069
1349 S26W070
1350 S26W071
1351 S27W049
1352 S27W050
1353 S27W051
1354 S27W052
1355 S27W053
1356 S27W054
1357 S27W055
1358 S27W056
1359 S27W057
1360 S27W058
1361 S27W059
1362 S27W060
1363 S27W061
1364 S27W062
1365 S27W063
1366 S27W064
1367 S27W065
1368 S27W066
1369 S27W067
1370 S27W068
1371 S27W069
1372 S27W070
1373 S27W071
1374 S27W080
1375 S27W081
1376 S28W049
1377 S28W050
1378 S28W051
1379 S28W052
1380 S28W053
1381 S28W054
1382 S28W055
1383 S28W056
1384 S28W057
1385 S28W058
1386 S28W059
1387 S28W060
1388 S28W061
1389 S28W062
1390 S28W063
1391 S28W064
1392 S28W065
1393 S28W066
1394 S28W067
1395 S28W068
1396 S28W069
1397 S28W070
1398 S28W071
1399 S28W072
1400 S29W049
1401 S29W050
1402 S29W051
1403 S29W052
1404 S29W053
1405 S29W054
1406 S29W055
1407 S29W056
1408 S29W057
1409 S29W058
1410 S29W059
1411 S29W060
1412 S29W061
1413 S29W062
1414 S29W063
1415 S29W064
1416 S29W065
1417 S29W066
1418 S29W067
1419 S29W068
1420 S29W069
1421 S29W070
1422 S29W071
1423 S29W072
1424 S30W050
1425 S30W051
1426 S30W052
1427 S30W053
1428 S30W054
1429 S30W055
1430 S30W056
1431 S30W057
1432 S30W058
1433 S30W059
1434 S30W060
1435 S30W061
1436 S30W062
1437 S30W063
1438 S30W064
1439 S30W065
1440 S30W066
1441 S30W067
1442 S30W068
1443 S30W069
1444 S30W070
1445 S30W071
1446 S30W072
1447 S31W051
1448 S31W052
1449 S31W053
1450 S31W054
1451 S31W055
1452 S31W056
1453 S31W057
1454 S31W058
1455 S31W059
1456 S31W060
1457 S31W061
1458 S31W062
1459 S31W063
1460 S31W064
1461 S31W065
1462 S31W066
1463 S31W067
1464 S31W068
1465 S31W069
1466 S31W070
1467 S31W071
1468 S31W072
1469 S32W051
1470 S32W052
1471 S32W053
1472 S32W054
1473 S32W055
1474 S32W056
1475 S32W057
1476 S32W058
1477 S32W059
1478 S32W060
1479 S32W061
1480 S32W062
1481 S32W063
1482 S32W064
1483 S32W065
1484 S32W066
1485 S32W067
1486 S32W068
1487 S32W069
1488 S32W070
1489 S32W071
1490 S32W072
1491 S33W052
1492 S33W053
1493 S33W054
1494 S33W055
1495 S33W056
1496 S33W057
1497 S33W058
1498 S33W059
1499 S33W060
1500 S33W061
1501 S33W062
1502 S33W063
1503 S33W064
1504 S33W065
1505 S33W066
1506 S33W067
1507 S33W068
1508 S33W069
1509 S33W070
1510 S33W071
1511 S33W072
1512 S34W053
1513 S34W054
1514 S34W055
1515 S34W056
1516 S34W057
1517 S34W058
1518 S34W059
1519 S34W060
1520 S34W061
1521 S34W062
1522 S34W063
1523 S34W064
1524 S34W065
1525 S34W066
1526 S34W067
1527 S34W068
1528 S34W069
1529 S34W070
1530 S34W071
1531 S34W072
1532 S34W079
1533 S34W081
1534 S35W054
1535 S35W055
1536 S35W056
1537 S35W057
1538 S35W058
1539 S35W059
1540 S35W060
1541 S35W061
1542 S35W062
1543 S35W063
1544 S35W064
1545 S35W065
1546 S35W066
1547 S35W067
1548 S35W068
1549 S35W069
1550 S35W070
1551 S35W071
1552 S35W072
1553 S35W073
1554 S36W058
1555 S36W059
1556 S36W060
1557 S36W061
1558 S36W062
1559 S36W063
1560 S36W064
1561 S36W065
1562 S36W066
1563 S36W067
1564 S36W068
1565 S36W069
1566 S36W070
1567 S36W071
1568 S36W072
1569 S36W073
1570 S37W057
1571 S37W058
1572 S37W059
1573 S37W060
1574 S37W061
1575 S37W062
1576 S37W063
1577 S37W064
1578 S37W065
1579 S37W066
1580 S37W067
1581 S37W068
1582 S37W069
1583 S37W070
1584 S37W071
1585 S37W072
1586 S37W073
1587 S37W074
1588 S38W057
1589 S38W058
1590 S38W059
1591 S38W060
1592 S38W061
1593 S38W062
1594 S38W063
1595 S38W064
1596 S38W065
1597 S38W066
1598 S38W067
1599 S38W068
1600 S38W069
1601 S38W070
1602 S38W071
1603 S38W072
1604 S38W073
1605 S38W074
1606 S39W058
1607 S39W059
1608 S39W060
1609 S39W061
1610 S39W062
1611 S39W063
1612 S39W064
1613 S39W065
1614 S39W066
1615 S39W067
1616 S39W068
1617 S39W069
1618 S39W070
1619 S39W071
1620 S39W072
1621 S39W073
1622 S39W074
1623 S40W062
1624 S40W063
1625 S40W064
1626 S40W065
1627 S40W066
1628 S40W067
1629 S40W068
1630 S40W069
1631 S40W070
1632 S40W071
1633 S40W072
1634 S40W073
1635 S40W074
1636 S41W063
1637 S41W064
1638 S41W065
1639 S41W066
1640 S41W067
1641 S41W068
1642 S41W069
1643 S41W070
1644 S41W071
1645 S41W072
1646 S41W073
1647 S41W074
1648 S42W063
1649 S42W064
1650 S42W065
1651 S42W066
1652 S42W067
1653 S42W068
1654 S42W069
1655 S42W070
1656 S42W071
1657 S42W072
1658 S42W073
1659 S42W074
1660 S42W075
1661 S43W064
1662 S43W065
1663 S43W066
1664 S43W067
1665 S43W068
1666 S43W069
1667 S43W070
1668 S43W071
1669 S43W072
1670 S43W073
1671 S43W074
1672 S43W075
1673 S44W065
1674 S44W066
1675 S44W067
1676 S44W068
1677 S44W069
1678 S44W070
1679 S44W071
1680 S44W072
1681 S44W073
1682 S44W074
1683 S44W075
1684 S45W066
1685 S45W067
1686 S45W068
1687 S45W069
1688 S45W070
1689 S45W071
1690 S45W072
1691 S45W073
1692 S45W074
1693 S45W075
1694 S45W076
1695 S46W066
1696 S46W067
1697 S46W068
1698 S46W069
1699 S46W070
1700 S46W071
1701 S46W072
1702 S46W073
1703 S46W074
1704 S46W075
1705 S46W076
1706 S47W067
1707 S47W068
1708 S47W069
1709 S47W070
1710 S47W071
1711 S47W072
1712 S47W073
1713 S47W074
1714 S47W075
1715 S47W076
1716 S48W066
1717 S48W067
1718 S48W068
1719 S48W069
1720 S48W070
1721 S48W071
1722 S48W072
1723 S48W073
1724 S48W074
1725 S48W075
1726 S48W076
1727 S49W066
1728 S49W067
1729 S49W068
1730 S49W069
1731 S49W070
1732 S49W071
1733 S49W072
1734 S49W073
1735 S49W074
1736 S49W075
1737 S49W076
1738 S50W068
1739 S50W069
1740 S50W070
1741 S50W071
1742 S50W072
1743 S50W073
1744 S50W074
1745 S50W075
1746 S50W076
1747 S51W062
1748 S51W068
1749 S51W069
1750 S51W070
1751 S51W071
1752 S51W072
1753 S51W073
1754 S51W074
1755 S51W075
1756 S51W076
1757 S52W058
1758 S52W059
1759 S52W060
1760 S52W061
1761 S52W062
1762 S52W069
1763 S52W070
1764 S52W071
1765 S52W072
1766 S52W073
1767 S52W074
1768 S52W075
1769 S52W076
1770 S53W059
1771 S53W060
1772 S53W061
1773 S53W062
1774 S53W069
1775 S53W070
1776 S53W071
1777 S53W072
1778 S53W073
1779 S53W074
1780 S53W075
1781 S53W076
1782 S54W068
1783 S54W069
1784 S54W070
1785 S54W071
1786 S54W072
1787 S54W073
1788 S54W074
1789 S54W075
1790 S55W064
1791 S55W065
1792 S55W066
1793 S55W067
1794 S55W068
1795 S55W069
1796 S55W070
1797 S55W071
1798 S55W072
1799 S55W073
1800 S55W074
1801 S56W067
1802 S56W068
1803 S56W069
1804 S56W070
1805 S56W071
1806 S56W072
1807 s17w069
1808
0 Africa
1 N00E006
2 N00E009
3 N00E010
4 N00E011
5 N00E012
6 N00E013
7 N00E014
8 N00E015
9 N00E016
10 N00E017
11 N00E018
12 N00E019
13 N00E020
14 N00E021
15 N00E022
16 N00E023
17 N00E024
18 N00E025
19 N00E026
20 N00E027
21 N00E028
22 N00E029
23 N00E030
24 N00E031
25 N00E032
26 N00E033
27 N00E034
28 N00E035
29 N00E036
30 N00E037
31 N00E038
32 N00E039
33 N00E040
34 N00E041
35 N00E042
36 N00E043
37 N01E007
38 N01E009
39 N01E010
40 N01E011
41 N01E012
42 N01E013
43 N01E014
44 N01E015
45 N01E016
46 N01E017
47 N01E018
48 N01E019
49 N01E020
50 N01E021
51 N01E022
52 N01E023
53 N01E024
54 N01E025
55 N01E026
56 N01E027
57 N01E028
58 N01E029
59 N01E030
60 N01E031
61 N01E032
62 N01E033
63 N01E034
64 N01E035
65 N01E036
66 N01E037
67 N01E038
68 N01E039
69 N01E040
70 N01E041
71 N01E042
72 N01E043
73 N01E044
74 N01E045
75 N02E009
76 N02E010
77 N02E011
78 N02E012
79 N02E013
80 N02E014
81 N02E015
82 N02E016
83 N02E017
84 N02E018
85 N02E019
86 N02E020
87 N02E021
88 N02E022
89 N02E023
90 N02E024
91 N02E025
92 N02E026
93 N02E027
94 N02E028
95 N02E029
96 N02E030
97 N02E031
98 N02E032
99 N02E033
100 N02E034
101 N02E035
102 N02E036
103 N02E037
104 N02E038
105 N02E039
106 N02E040
107 N02E041
108 N02E042
109 N02E043
110 N02E044
111 N02E045
112 N02E046
113 N03E008
114 N03E009
115 N03E010
116 N03E011
117 N03E012
118 N03E013
119 N03E014
120 N03E015
121 N03E016
122 N03E017
123 N03E018
124 N03E019
125 N03E020
126 N03E021
127 N03E022
128 N03E023
129 N03E024
130 N03E025
131 N03E026
132 N03E027
133 N03E028
134 N03E029
135 N03E030
136 N03E031
137 N03E032
138 N03E033
139 N03E034
140 N03E035
141 N03E036
142 N03E037
143 N03E038
144 N03E039
145 N03E040
146 N03E041
147 N03E042
148 N03E043
149 N03E044
150 N03E045
151 N03E046
152 N03E047
153 N04E005
154 N04E006
155 N04E007
156 N04E008
157 N04E009
158 N04E010
159 N04E011
160 N04E012
161 N04E013
162 N04E014
163 N04E015
164 N04E016
165 N04E017
166 N04E018
167 N04E019
168 N04E020
169 N04E021
170 N04E022
171 N04E023
172 N04E024
173 N04E025
174 N04E026
175 N04E027
176 N04E028
177 N04E029
178 N04E030
179 N04E031
180 N04E032
181 N04E033
182 N04E034
183 N04E035
184 N04E036
185 N04E037
186 N04E038
187 N04E039
188 N04E040
189 N04E041
190 N04E042
191 N04E043
192 N04E044
193 N04E045
194 N04E046
195 N04E047
196 N04E048
197 N04W002
198 N04W003
199 N04W006
200 N04W007
201 N04W008
202 N04W009
203 N04W010
204 N05E000
205 N05E001
206 N05E004
207 N05E005
208 N05E006
209 N05E007
210 N05E008
211 N05E009
212 N05E010
213 N05E011
214 N05E012
215 N05E013
216 N05E014
217 N05E015
218 N05E016
219 N05E017
220 N05E018
221 N05E019
222 N05E020
223 N05E021
224 N05E022
225 N05E023
226 N05E024
227 N05E025
228 N05E026
229 N05E027
230 N05E028
231 N05E029
232 N05E030
233 N05E031
234 N05E032
235 N05E033
236 N05E034
237 N05E035
238 N05E036
239 N05E037
240 N05E038
241 N05E039
242 N05E040
243 N05E041
244 N05E042
245 N05E043
246 N05E044
247 N05E045
248 N05E046
249 N05E047
250 N05E048
251 N05W001
252 N05W002
253 N05W003
254 N05W004
255 N05W005
256 N05W006
257 N05W007
258 N05W008
259 N05W009
260 N05W010
261 N05W011
262 N06E000
263 N06E001
264 N06E002
265 N06E003
266 N06E004
267 N06E005
268 N06E006
269 N06E007
270 N06E008
271 N06E009
272 N06E010
273 N06E011
274 N06E012
275 N06E013
276 N06E014
277 N06E015
278 N06E016
279 N06E017
280 N06E018
281 N06E019
282 N06E020
283 N06E021
284 N06E022
285 N06E023
286 N06E024
287 N06E025
288 N06E026
289 N06E027
290 N06E028
291 N06E029
292 N06E030
293 N06E031
294 N06E032
295 N06E033
296 N06E034
297 N06E035
298 N06E036
299 N06E037
300 N06E038
301 N06E039
302 N06E040
303 N06E041
304 N06E042
305 N06E043
306 N06E044
307 N06E045
308 N06E046
309 N06E047
310 N06E048
311 N06E049
312 N06W001
313 N06W002
314 N06W003
315 N06W004
316 N06W005
317 N06W006
318 N06W007
319 N06W008
320 N06W009
321 N06W010
322 N06W011
323 N06W012
324 N07E000
325 N07E001
326 N07E002
327 N07E003
328 N07E004
329 N07E005
330 N07E006
331 N07E007
332 N07E008
333 N07E009
334 N07E010
335 N07E011
336 N07E012
337 N07E013
338 N07E014
339 N07E015
340 N07E016
341 N07E017
342 N07E018
343 N07E019
344 N07E020
345 N07E021
346 N07E022
347 N07E023
348 N07E024
349 N07E025
350 N07E026
351 N07E027
352 N07E028
353 N07E029
354 N07E030
355 N07E031
356 N07E032
357 N07E033
358 N07E034
359 N07E035
360 N07E036
361 N07E037
362 N07E038
363 N07E039
364 N07E040
365 N07E041
366 N07E042
367 N07E043
368 N07E044
369 N07E045
370 N07E046
371 N07E047
372 N07E048
373 N07E049
374 N07W001
375 N07W002
376 N07W003
377 N07W004
378 N07W005
379 N07W006
380 N07W007
381 N07W008
382 N07W009
383 N07W010
384 N07W011
385 N07W012
386 N07W013
387 N07W014
388 N08E000
389 N08E001
390 N08E002
391 N08E003
392 N08E004
393 N08E005
394 N08E006
395 N08E007
396 N08E008
397 N08E009
398 N08E010
399 N08E011
400 N08E012
401 N08E013
402 N08E014
403 N08E015
404 N08E016
405 N08E017
406 N08E018
407 N08E019
408 N08E020
409 N08E021
410 N08E022
411 N08E023
412 N08E024
413 N08E025
414 N08E026
415 N08E027
416 N08E028
417 N08E029
418 N08E030
419 N08E031
420 N08E032
421 N08E033
422 N08E034
423 N08E035
424 N08E036
425 N08E037
426 N08E038
427 N08E039
428 N08E040
429 N08E041
430 N08E042
431 N08E043
432 N08E044
433 N08E045
434 N08E046
435 N08E047
436 N08E048
437 N08E049
438 N08E050
439 N08W001
440 N08W002
441 N08W003
442 N08W004
443 N08W005
444 N08W006
445 N08W007
446 N08W008
447 N08W009
448 N08W010
449 N08W011
450 N08W012
451 N08W013
452 N08W014
453 N09E000
454 N09E001
455 N09E002
456 N09E003
457 N09E004
458 N09E005
459 N09E006
460 N09E007
461 N09E008
462 N09E009
463 N09E010
464 N09E011
465 N09E012
466 N09E013
467 N09E014
468 N09E015
469 N09E016
470 N09E017
471 N09E018
472 N09E019
473 N09E020
474 N09E021
475 N09E022
476 N09E023
477 N09E024
478 N09E025
479 N09E026
480 N09E027
481 N09E028
482 N09E029
483 N09E030
484 N09E031
485 N09E032
486 N09E033
487 N09E034
488 N09E035
489 N09E036
490 N09E037
491 N09E038
492 N09E039
493 N09E040
494 N09E041
495 N09E042
496 N09E043
497 N09E044
498 N09E045
499 N09E046
500 N09E047
501 N09E048
502 N09E049
503 N09E050
504 N09W001
505 N09W002
506 N09W003
507 N09W004
508 N09W005
509 N09W006
510 N09W007
511 N09W008
512 N09W009
513 N09W010
514 N09W011
515 N09W012
516 N09W013
517 N09W014
518 N09W015
519 N10E000
520 N10E001
521 N10E002
522 N10E003
523 N10E004
524 N10E005
525 N10E006
526 N10E007
527 N10E008
528 N10E009
529 N10E010
530 N10E011
531 N10E012
532 N10E013
533 N10E014
534 N10E015
535 N10E016
536 N10E017
537 N10E018
538 N10E019
539 N10E020
540 N10E021
541 N10E022
542 N10E023
543 N10E024
544 N10E025
545 N10E026
546 N10E027
547 N10E028
548 N10E029
549 N10E030
550 N10E031
551 N10E032
552 N10E033
553 N10E034
554 N10E035
555 N10E036
556 N10E037
557 N10E038
558 N10E039
559 N10E040
560 N10E041
561 N10E042
562 N10E043
563 N10E044
564 N10E045
565 N10E046
566 N10E047
567 N10E048
568 N10E049
569 N10E050
570 N10E051
571 N10W001
572 N10W002
573 N10W003
574 N10W004
575 N10W005
576 N10W006
577 N10W007
578 N10W008
579 N10W009
580 N10W010
581 N10W011
582 N10W012
583 N10W013
584 N10W014
585 N10W015
586 N10W016
587 N11E000
588 N11E001
589 N11E002
590 N11E003
591 N11E004
592 N11E005
593 N11E006
594 N11E007
595 N11E008
596 N11E009
597 N11E010
598 N11E011
599 N11E012
600 N11E013
601 N11E014
602 N11E015
603 N11E016
604 N11E017
605 N11E018
606 N11E019
607 N11E020
608 N11E021
609 N11E022
610 N11E023
611 N11E024
612 N11E025
613 N11E026
614 N11E027
615 N11E028
616 N11E029
617 N11E030
618 N11E031
619 N11E032
620 N11E033
621 N11E034
622 N11E035
623 N11E036
624 N11E037
625 N11E038
626 N11E039
627 N11E040
628 N11E041
629 N11E042
630 N11E043
631 N11E047
632 N11E048
633 N11E049
634 N11E050
635 N11E051
636 N11W001
637 N11W002
638 N11W003
639 N11W004
640 N11W005
641 N11W006
642 N11W007
643 N11W008
644 N11W009
645 N11W010
646 N11W011
647 N11W012
648 N11W013
649 N11W014
650 N11W015
651 N11W016
652 N11W017
653 N12E000
654 N12E001
655 N12E002
656 N12E003
657 N12E004
658 N12E005
659 N12E006
660 N12E007
661 N12E008
662 N12E009
663 N12E010
664 N12E011
665 N12E012
666 N12E013
667 N12E014
668 N12E015
669 N12E016
670 N12E017
671 N12E018
672 N12E019
673 N12E020
674 N12E021
675 N12E022
676 N12E023
677 N12E024
678 N12E025
679 N12E026
680 N12E027
681 N12E028
682 N12E029
683 N12E030
684 N12E031
685 N12E032
686 N12E033
687 N12E034
688 N12E035
689 N12E036
690 N12E037
691 N12E038
692 N12E039
693 N12E040
694 N12E041
695 N12E042
696 N12E043
697 N12E044
698 N12E045
699 N12E052
700 N12E053
701 N12E054
702 N12W001
703 N12W002
704 N12W003
705 N12W004
706 N12W005
707 N12W006
708 N12W007
709 N12W008
710 N12W009
711 N12W010
712 N12W011
713 N12W012
714 N12W013
715 N12W014
716 N12W015
717 N12W016
718 N12W017
719 N13E000
720 N13E001
721 N13E002
722 N13E003
723 N13E004
724 N13E005
725 N13E006
726 N13E007
727 N13E008
728 N13E009
729 N13E010
730 N13E011
731 N13E012
732 N13E013
733 N13E014
734 N13E015
735 N13E016
736 N13E017
737 N13E018
738 N13E019
739 N13E020
740 N13E021
741 N13E022
742 N13E023
743 N13E024
744 N13E025
745 N13E026
746 N13E027
747 N13E028
748 N13E029
749 N13E030
750 N13E031
751 N13E032
752 N13E033
753 N13E034
754 N13E035
755 N13E036
756 N13E037
757 N13E038
758 N13E039
759 N13E040
760 N13E041
761 N13E042
762 N13E043
763 N13E044
764 N13E045
765 N13E046
766 N13E047
767 N13E048
768 N13W001
769 N13W002
770 N13W003
771 N13W004
772 N13W005
773 N13W006
774 N13W007
775 N13W008
776 N13W009
777 N13W010
778 N13W011
779 N13W012
780 N13W013
781 N13W014
782 N13W015
783 N13W016
784 N13W017
785 N14E000
786 N14E001
787 N14E002
788 N14E003
789 N14E004
790 N14E005
791 N14E006
792 N14E007
793 N14E008
794 N14E009
795 N14E010
796 N14E011
797 N14E012
798 N14E013
799 N14E014
800 N14E015
801 N14E016
802 N14E017
803 N14E018
804 N14E019
805 N14E020
806 N14E021
807 N14E022
808 N14E023
809 N14E024
810 N14E025
811 N14E026
812 N14E027
813 N14E028
814 N14E029
815 N14E030
816 N14E031
817 N14E032
818 N14E033
819 N14E034
820 N14E035
821 N14E036
822 N14E037
823 N14E038
824 N14E039
825 N14E040
826 N14E041
827 N14E042
828 N14E043
829 N14E044
830 N14E045
831 N14E046
832 N14E047
833 N14E048
834 N14E049
835 N14E050
836 N14W001
837 N14W002
838 N14W003
839 N14W004
840 N14W005
841 N14W006
842 N14W007
843 N14W008
844 N14W009
845 N14W010
846 N14W011
847 N14W012
848 N14W013
849 N14W014
850 N14W015
851 N14W016
852 N14W017
853 N14W018
854 N14W024
855 N14W025
856 N15E000
857 N15E001
858 N15E002
859 N15E003
860 N15E004
861 N15E005
862 N15E006
863 N15E007
864 N15E008
865 N15E009
866 N15E010
867 N15E011
868 N15E012
869 N15E013
870 N15E014
871 N15E015
872 N15E016
873 N15E017
874 N15E018
875 N15E019
876 N15E020
877 N15E021
878 N15E022
879 N15E023
880 N15E024
881 N15E025
882 N15E026
883 N15E027
884 N15E028
885 N15E029
886 N15E030
887 N15E031
888 N15E032
889 N15E033
890 N15E034
891 N15E035
892 N15E036
893 N15E037
894 N15E038
895 N15E039
896 N15E040
897 N15E041
898 N15E042
899 N15E043
900 N15E044
901 N15E045
902 N15E046
903 N15E047
904 N15E048
905 N15E049
906 N15E050
907 N15E051
908 N15E052
909 N15W001
910 N15W002
911 N15W003
912 N15W004
913 N15W005
914 N15W006
915 N15W007
916 N15W008
917 N15W009
918 N15W010
919 N15W011
920 N15W012
921 N15W013
922 N15W014
923 N15W015
924 N15W016
925 N15W017
926 N15W018
927 N15W023
928 N15W024
929 N15W025
930 N16E000
931 N16E001
932 N16E002
933 N16E003
934 N16E004
935 N16E005
936 N16E006
937 N16E007
938 N16E008
939 N16E009
940 N16E010
941 N16E011
942 N16E012
943 N16E013
944 N16E014
945 N16E015
946 N16E016
947 N16E017
948 N16E018
949 N16E019
950 N16E020
951 N16E021
952 N16E022
953 N16E023
954 N16E024
955 N16E025
956 N16E026
957 N16E027
958 N16E028
959 N16E029
960 N16E030
961 N16E031
962 N16E032
963 N16E033
964 N16E034
965 N16E035
966 N16E036
967 N16E037
968 N16E038
969 N16E039
970 N16E040
971 N16E041
972 N16E042
973 N16E043
974 N16E044
975 N16E045
976 N16E046
977 N16E047
978 N16E048
979 N16E049
980 N16E050
981 N16E051
982 N16E052
983 N16E053
984 N16E054
985 N16E055
986 N16W001
987 N16W002
988 N16W003
989 N16W004
990 N16W005
991 N16W006
992 N16W007
993 N16W008
994 N16W009
995 N16W010
996 N16W011
997 N16W012
998 N16W013
999 N16W014
1000 N16W015
1001 N16W016
1002 N16W017
1003 N16W023
1004 N16W025
1005 N16W026
1006 N17E000
1007 N17E001
1008 N17E002
1009 N17E003
1010 N17E004
1011 N17E005
1012 N17E006
1013 N17E007
1014 N17E008
1015 N17E009
1016 N17E010
1017 N17E011
1018 N17E012
1019 N17E013
1020 N17E014
1021 N17E015
1022 N17E016
1023 N17E017
1024 N17E018
1025 N17E019
1026 N17E020
1027 N17E021
1028 N17E022
1029 N17E023
1030 N17E024
1031 N17E025
1032 N17E026
1033 N17E027
1034 N17E028
1035 N17E029
1036 N17E030
1037 N17E031
1038 N17E032
1039 N17E033
1040 N17E034
1041 N17E035
1042 N17E036
1043 N17E037
1044 N17E038
1045 N17E039
1046 N17E041
1047 N17E042
1048 N17E043
1049 N17E044
1050 N17E045
1051 N17E046
1052 N17E047
1053 N17E048
1054 N17E049
1055 N17E050
1056 N17E051
1057 N17E052
1058 N17E053
1059 N17E054
1060 N17E055
1061 N17E056
1062 N17W001
1063 N17W002
1064 N17W003
1065 N17W004
1066 N17W005
1067 N17W006
1068 N17W007
1069 N17W008
1070 N17W009
1071 N17W010
1072 N17W011
1073 N17W012
1074 N17W013
1075 N17W014
1076 N17W015
1077 N17W016
1078 N17W017
1079 N17W025
1080 N17W026
1081 N18E000
1082 N18E001
1083 N18E002
1084 N18E003
1085 N18E004
1086 N18E005
1087 N18E006
1088 N18E007
1089 N18E008
1090 N18E009
1091 N18E010
1092 N18E011
1093 N18E012
1094 N18E013
1095 N18E014
1096 N18E015
1097 N18E016
1098 N18E017
1099 N18E018
1100 N18E019
1101 N18E020
1102 N18E021
1103 N18E022
1104 N18E023
1105 N18E024
1106 N18E025
1107 N18E026
1108 N18E027
1109 N18E028
1110 N18E029
1111 N18E030
1112 N18E031
1113 N18E032
1114 N18E033
1115 N18E034
1116 N18E035
1117 N18E036
1118 N18E037
1119 N18E038
1120 N18E040
1121 N18E041
1122 N18E042
1123 N18E043
1124 N18E044
1125 N18E045
1126 N18E046
1127 N18E047
1128 N18E048
1129 N18E049
1130 N18E050
1131 N18E051
1132 N18E052
1133 N18E053
1134 N18E054
1135 N18E055
1136 N18E056
1137 N18E057
1138 N18W001
1139 N18W002
1140 N18W003
1141 N18W004
1142 N18W005
1143 N18W006
1144 N18W007
1145 N18W008
1146 N18W009
1147 N18W010
1148 N18W011
1149 N18W012
1150 N18W013
1151 N18W014
1152 N18W015
1153 N18W016
1154 N18W017
1155 N19E000
1156 N19E001
1157 N19E002
1158 N19E003
1159 N19E004
1160 N19E005
1161 N19E006
1162 N19E007
1163 N19E008
1164 N19E009
1165 N19E010
1166 N19E011
1167 N19E012
1168 N19E013
1169 N19E014
1170 N19E015
1171 N19E016
1172 N19E017
1173 N19E018
1174 N19E019
1175 N19E020
1176 N19E021
1177 N19E022
1178 N19E023
1179 N19E024
1180 N19E025
1181 N19E026
1182 N19E027
1183 N19E028
1184 N19E029
1185 N19E030
1186 N19E031
1187 N19E032
1188 N19E033
1189 N19E034
1190 N19E035
1191 N19E036
1192 N19E037
1193 N19E038
1194 N19E039
1195 N19E040
1196 N19E041
1197 N19E042
1198 N19E043
1199 N19E044
1200 N19E045
1201 N19E046
1202 N19E047
1203 N19E048
1204 N19E049
1205 N19E050
1206 N19E051
1207 N19E052
1208 N19E053
1209 N19E054
1210 N19E055
1211 N19E056
1212 N19E057
1213 N19W001
1214 N19W002
1215 N19W003
1216 N19W004
1217 N19W005
1218 N19W006
1219 N19W007
1220 N19W008
1221 N19W009
1222 N19W010
1223 N19W011
1224 N19W012
1225 N19W013
1226 N19W014
1227 N19W015
1228 N19W016
1229 N19W017
1230 N20E000
1231 N20E001
1232 N20E002
1233 N20E003
1234 N20E004
1235 N20E005
1236 N20E006
1237 N20E007
1238 N20E008
1239 N20E009
1240 N20E010
1241 N20E011
1242 N20E012
1243 N20E013
1244 N20E014
1245 N20E015
1246 N20E016
1247 N20E017
1248 N20E018
1249 N20E019
1250 N20E020
1251 N20E021
1252 N20E022
1253 N20E023
1254 N20E024
1255 N20E025
1256 N20E026
1257 N20E027
1258 N20E028
1259 N20E029
1260 N20E030
1261 N20E031
1262 N20E032
1263 N20E033
1264 N20E034
1265 N20E035
1266 N20E036
1267 N20E037
1268 N20E039
1269 N20E040
1270 N20E041
1271 N20E042
1272 N20E043
1273 N20E044
1274 N20E045
1275 N20E046
1276 N20E047
1277 N20E048
1278 N20E049
1279 N20E050
1280 N20E051
1281 N20E052
1282 N20E053
1283 N20E054
1284 N20E055
1285 N20E056
1286 N20E057
1287 N20E058
1288 N20W001
1289 N20W002
1290 N20W003
1291 N20W004
1292 N20W005
1293 N20W006
1294 N20W007
1295 N20W008
1296 N20W009
1297 N20W010
1298 N20W011
1299 N20W012
1300 N20W013
1301 N20W014
1302 N20W015
1303 N20W016
1304 N20W017
1305 N20W018
1306 N21E000
1307 N21E001
1308 N21E002
1309 N21E003
1310 N21E004
1311 N21E005
1312 N21E006
1313 N21E007
1314 N21E008
1315 N21E009
1316 N21E010
1317 N21E011
1318 N21E012
1319 N21E013
1320 N21E014
1321 N21E015
1322 N21E016
1323 N21E017
1324 N21E018
1325 N21E019
1326 N21E020
1327 N21E021
1328 N21E022
1329 N21E023
1330 N21E024
1331 N21E025
1332 N21E026
1333 N21E027
1334 N21E028
1335 N21E029
1336 N21E030
1337 N21E031
1338 N21E032
1339 N21E033
1340 N21E034
1341 N21E035
1342 N21E036
1343 N21E037
1344 N21E038
1345 N21E039
1346 N21E040
1347 N21E041
1348 N21E042
1349 N21E043
1350 N21E044
1351 N21E045
1352 N21E046
1353 N21E047
1354 N21E048
1355 N21E049
1356 N21E050
1357 N21E051
1358 N21E052
1359 N21E053
1360 N21E054
1361 N21E055
1362 N21E056
1363 N21E057
1364 N21E058
1365 N21E059
1366 N21W001
1367 N21W002
1368 N21W003
1369 N21W004
1370 N21W005
1371 N21W006
1372 N21W007
1373 N21W008
1374 N21W009
1375 N21W010
1376 N21W011
1377 N21W012
1378 N21W013
1379 N21W014
1380 N21W015
1381 N21W016
1382 N21W017
1383 N21W018
1384 N22E000
1385 N22E001
1386 N22E002
1387 N22E003
1388 N22E004
1389 N22E005
1390 N22E006
1391 N22E007
1392 N22E008
1393 N22E009
1394 N22E010
1395 N22E011
1396 N22E012
1397 N22E013
1398 N22E014
1399 N22E015
1400 N22E016
1401 N22E017
1402 N22E018
1403 N22E019
1404 N22E020
1405 N22E021
1406 N22E022
1407 N22E023
1408 N22E024
1409 N22E025
1410 N22E026
1411 N22E027
1412 N22E028
1413 N22E029
1414 N22E030
1415 N22E031
1416 N22E032
1417 N22E033
1418 N22E034
1419 N22E035
1420 N22E036
1421 N22E038
1422 N22E039
1423 N22E040
1424 N22E041
1425 N22E042
1426 N22E043
1427 N22E044
1428 N22E045
1429 N22E046
1430 N22E047
1431 N22E048
1432 N22E049
1433 N22E050
1434 N22E051
1435 N22E052
1436 N22E053
1437 N22E054
1438 N22E055
1439 N22E056
1440 N22E057
1441 N22E058
1442 N22E059
1443 N22W001
1444 N22W002
1445 N22W003
1446 N22W004
1447 N22W005
1448 N22W006
1449 N22W007
1450 N22W008
1451 N22W009
1452 N22W010
1453 N22W011
1454 N22W012
1455 N22W013
1456 N22W014
1457 N22W015
1458 N22W016
1459 N22W017
1460 N23E000
1461 N23E001
1462 N23E002
1463 N23E003
1464 N23E004
1465 N23E005
1466 N23E006
1467 N23E007
1468 N23E008
1469 N23E009
1470 N23E010
1471 N23E011
1472 N23E012
1473 N23E013
1474 N23E014
1475 N23E015
1476 N23E016
1477 N23E017
1478 N23E018
1479 N23E019
1480 N23E020
1481 N23E021
1482 N23E022
1483 N23E023
1484 N23E024
1485 N23E025
1486 N23E026
1487 N23E027
1488 N23E028
1489 N23E029
1490 N23E030
1491 N23E031
1492 N23E032
1493 N23E033
1494 N23E034
1495 N23E035
1496 N23E036
1497 N23E038
1498 N23E039
1499 N23E040
1500 N23E041
1501 N23E042
1502 N23E043
1503 N23E044
1504 N23E045
1505 N23E046
1506 N23E047
1507 N23E048
1508 N23E049
1509 N23E050
1510 N23E051
1511 N23E052
1512 N23E053
1513 N23E054
1514 N23E055
1515 N23E056
1516 N23E057
1517 N23E058
1518 N23E059
1519 N23W001
1520 N23W002
1521 N23W003
1522 N23W004
1523 N23W005
1524 N23W006
1525 N23W007
1526 N23W008
1527 N23W009
1528 N23W010
1529 N23W011
1530 N23W012
1531 N23W013
1532 N23W014
1533 N23W015
1534 N23W016
1535 N23W017
1536 N24E000
1537 N24E001
1538 N24E002
1539 N24E003
1540 N24E004
1541 N24E005
1542 N24E006
1543 N24E007
1544 N24E008
1545 N24E009
1546 N24E010
1547 N24E011
1548 N24E013
1549 N24E014
1550 N24E015
1551 N24E016
1552 N24E017
1553 N24E018
1554 N24E019
1555 N24E020
1556 N24E021
1557 N24E022
1558 N24E023
1559 N24E024
1560 N24E025
1561 N24E026
1562 N24E027
1563 N24E028
1564 N24E029
1565 N24E030
1566 N24E031
1567 N24E032
1568 N24E033
1569 N24E034
1570 N24E035
1571 N24E037
1572 N24E038
1573 N24E039
1574 N24E040
1575 N24E041
1576 N24E042
1577 N24E043
1578 N24E044
1579 N24E045
1580 N24E046
1581 N24E047
1582 N24E048
1583 N24E049
1584 N24E050
1585 N24E051
1586 N24E052
1587 N24E053
1588 N24E054
1589 N24E055
1590 N24E056
1591 N24E057
1592 N24W001
1593 N24W002
1594 N24W003
1595 N24W004
1596 N24W005
1597 N24W006
1598 N24W007
1599 N24W008
1600 N24W009
1601 N24W010
1602 N24W011
1603 N24W012
1604 N24W013
1605 N24W014
1606 N24W015
1607 N24W016
1608 N25E000
1609 N25E001
1610 N25E002
1611 N25E003
1612 N25E004
1613 N25E005
1614 N25E006
1615 N25E007
1616 N25E008
1617 N25E009
1618 N25E010
1619 N25E011
1620 N25E012
1621 N25E013
1622 N25E014
1623 N25E015
1624 N25E016
1625 N25E017
1626 N25E018
1627 N25E019
1628 N25E020
1629 N25E021
1630 N25E022
1631 N25E023
1632 N25E024
1633 N25E025
1634 N25E026
1635 N25E027
1636 N25E028
1637 N25E029
1638 N25E030
1639 N25E031
1640 N25E032
1641 N25E033
1642 N25E034
1643 N25E036
1644 N25E037
1645 N25E038
1646 N25E039
1647 N25E040
1648 N25E041
1649 N25E042
1650 N25E043
1651 N25E044
1652 N25E045
1653 N25E046
1654 N25E047
1655 N25E048
1656 N25E049
1657 N25E050
1658 N25E051
1659 N25E052
1660 N25E054
1661 N25E055
1662 N25E056
1663 N25E057
1664 N25E058
1665 N25E059
1666 N25W001
1667 N25W002
1668 N25W003
1669 N25W004
1670 N25W005
1671 N25W006
1672 N25W007
1673 N25W008
1674 N25W009
1675 N25W010
1676 N25W011
1677 N25W012
1678 N25W013
1679 N25W014
1680 N25W015
1681 N26E000
1682 N26E001
1683 N26E002
1684 N26E003
1685 N26E004
1686 N26E005
1687 N26E006
1688 N26E007
1689 N26E008
1690 N26E009
1691 N26E010
1692 N26E011
1693 N26E012
1694 N26E013
1695 N26E014
1696 N26E015
1697 N26E016
1698 N26E017
1699 N26E018
1700 N26E019
1701 N26E020
1702 N26E021
1703 N26E022
1704 N26E023
1705 N26E024
1706 N26E025
1707 N26E026
1708 N26E027
1709 N26E028
1710 N26E029
1711 N26E030
1712 N26E031
1713 N26E032
1714 N26E033
1715 N26E034
1716 N26E035
1717 N26E036
1718 N26E037
1719 N26E038
1720 N26E039
1721 N26E040
1722 N26E041
1723 N26E042
1724 N26E043
1725 N26E044
1726 N26E045
1727 N26E046
1728 N26E047
1729 N26E048
1730 N26E049
1731 N26E050
1732 N26E051
1733 N26E053
1734 N26E054
1735 N26E055
1736 N26E056
1737 N26E057
1738 N26E058
1739 N26E059
1740 N26W001
1741 N26W002
1742 N26W003
1743 N26W004
1744 N26W005
1745 N26W006
1746 N26W007
1747 N26W008
1748 N26W009
1749 N26W010
1750 N26W011
1751 N26W012
1752 N26W013
1753 N26W014
1754 N26W015
1755 N27E000
1756 N27E001
1757 N27E002
1758 N27E003
1759 N27E004
1760 N27E005
1761 N27E006
1762 N27E007
1763 N27E008
1764 N27E009
1765 N27E010
1766 N27E011
1767 N27E012
1768 N27E013
1769 N27E014
1770 N27E015
1771 N27E016
1772 N27E017
1773 N27E018
1774 N27E019
1775 N27E020
1776 N27E021
1777 N27E022
1778 N27E023
1779 N27E024
1780 N27E025
1781 N27E026
1782 N27E027
1783 N27E028
1784 N27E029
1785 N27E030
1786 N27E031
1787 N27E032
1788 N27E033
1789 N27E034
1790 N27E035
1791 N27E036
1792 N27E037
1793 N27E038
1794 N27E039
1795 N27E040
1796 N27E041
1797 N27E042
1798 N27E043
1799 N27E044
1800 N27E045
1801 N27E046
1802 N27E047
1803 N27E048
1804 N27E049
1805 N27E050
1806 N27E051
1807 N27E052
1808 N27E053
1809 N27E054
1810 N27E055
1811 N27E056
1812 N27E057
1813 N27E058
1814 N27E059
1815 N27W001
1816 N27W002
1817 N27W003
1818 N27W004
1819 N27W005
1820 N27W006
1821 N27W007
1822 N27W008
1823 N27W009
1824 N27W010
1825 N27W011
1826 N27W012
1827 N27W013
1828 N27W014
1829 N27W016
1830 N27W017
1831 N27W018
1832 N27W019
1833 N28E000
1834 N28E001
1835 N28E002
1836 N28E003
1837 N28E004
1838 N28E005
1839 N28E006
1840 N28E007
1841 N28E008
1842 N28E009
1843 N28E010
1844 N28E011
1845 N28E012
1846 N28E013
1847 N28E014
1848 N28E015
1849 N28E016
1850 N28E017
1851 N28E018
1852 N28E019
1853 N28E020
1854 N28E021
1855 N28E022
1856 N28E023
1857 N28E024
1858 N28E025
1859 N28E026
1860 N28E027
1861 N28E028
1862 N28E029
1863 N28E030
1864 N28E031
1865 N28E032
1866 N28E033
1867 N28E034
1868 N28E035
1869 N28E036
1870 N28E037
1871 N28E038
1872 N28E039
1873 N28E040
1874 N28E041
1875 N28E042
1876 N28E043
1877 N28E044
1878 N28E045
1879 N28E046
1880 N28E047
1881 N28E048
1882 N28E050
1883 N28E051
1884 N28E052
1885 N28E053
1886 N28E054
1887 N28E055
1888 N28E056
1889 N28E057
1890 N28E058
1891 N28E059
1892 N28W001
1893 N28W002
1894 N28W003
1895 N28W004
1896 N28W005
1897 N28W006
1898 N28W007
1899 N28W008
1900 N28W009
1901 N28W010
1902 N28W011
1903 N28W012
1904 N28W013
1905 N28W014
1906 N28W015
1907 N28W016
1908 N28W017
1909 N28W018
1910 N28W019
1911 N29E000
1912 N29E001
1913 N29E002
1914 N29E003
1915 N29E004
1916 N29E005
1917 N29E006
1918 N29E007
1919 N29E008
1920 N29E009
1921 N29E010
1922 N29E011
1923 N29E012
1924 N29E013
1925 N29E014
1926 N29E015
1927 N29E016
1928 N29E017
1929 N29E018
1930 N29E019
1931 N29E020
1932 N29E021
1933 N29E022
1934 N29E023
1935 N29E024
1936 N29E025
1937 N29E026
1938 N29E027
1939 N29E028
1940 N29E029
1941 N29E030
1942 N29E031
1943 N29E032
1944 N29E033
1945 N29E034
1946 N29E035
1947 N29E036
1948 N29E037
1949 N29E038
1950 N29E039
1951 N29E040
1952 N29E041
1953 N29E042
1954 N29E043
1955 N29E044
1956 N29E045
1957 N29E046
1958 N29E047
1959 N29E048
1960 N29E049
1961 N29E050
1962 N29E051
1963 N29E052
1964 N29E053
1965 N29E054
1966 N29E055
1967 N29E056
1968 N29E057
1969 N29E058
1970 N29E059
1971 N29W001
1972 N29W002
1973 N29W003
1974 N29W004
1975 N29W005
1976 N29W006
1977 N29W007
1978 N29W008
1979 N29W009
1980 N29W010
1981 N29W011
1982 N29W014
1983 N30E000
1984 N30E001
1985 N30E002
1986 N30E003
1987 N30E004
1988 N30E005
1989 N30E006
1990 N30E007
1991 N30E008
1992 N30E009
1993 N30E010
1994 N30E011
1995 N30E012
1996 N30E013
1997 N30E014
1998 N30E015
1999 N30E016
2000 N30E017
2001 N30E018
2002 N30E019
2003 N30E020
2004 N30E021
2005 N30E022
2006 N30E023
2007 N30E024
2008 N30E025
2009 N30E026
2010 N30E027
2011 N30E028
2012 N30E029
2013 N30E030
2014 N30E031
2015 N30E032
2016 N30E033
2017 N30E034
2018 N30E035
2019 N30E036
2020 N30E037
2021 N30E038
2022 N30E039
2023 N30E040
2024 N30E041
2025 N30E042
2026 N30E043
2027 N30E044
2028 N30E045
2029 N30E046
2030 N30E047
2031 N30E048
2032 N30E049
2033 N30E050
2034 N30E051
2035 N30E052
2036 N30E053
2037 N30E054
2038 N30E055
2039 N30E056
2040 N30E057
2041 N30E058
2042 N30E059
2043 N30W001
2044 N30W002
2045 N30W003
2046 N30W004
2047 N30W005
2048 N30W006
2049 N30W007
2050 N30W008
2051 N30W009
2052 N30W010
2053 N30W016
2054 N30W017
2055 N31E000
2056 N31E001
2057 N31E002
2058 N31E003
2059 N31E004
2060 N31E005
2061 N31E006
2062 N31E007
2063 N31E008
2064 N31E009
2065 N31E010
2066 N31E011
2067 N31E012
2068 N31E013
2069 N31E014
2070 N31E015
2071 N31E016
2072 N31E017
2073 N31E019
2074 N31E020
2075 N31E021
2076 N31E022
2077 N31E023
2078 N31E024
2079 N31E025
2080 N31E026
2081 N31E027
2082 N31E028
2083 N31E029
2084 N31E030
2085 N31E031
2086 N31E032
2087 N31E033
2088 N31E034
2089 N31E035
2090 N31E036
2091 N31E037
2092 N31E038
2093 N31E039
2094 N31E040
2095 N31E041
2096 N31E042
2097 N31E043
2098 N31E044
2099 N31E045
2100 N31E046
2101 N31E047
2102 N31E048
2103 N31E049
2104 N31E050
2105 N31E051
2106 N31E052
2107 N31E053
2108 N31E054
2109 N31E055
2110 N31E056
2111 N31E057
2112 N31E058
2113 N31E059
2114 N31W001
2115 N31W002
2116 N31W003
2117 N31W004
2118 N31W005
2119 N31W006
2120 N31W007
2121 N31W008
2122 N31W009
2123 N31W010
2124 N32E000
2125 N32E001
2126 N32E002
2127 N32E003
2128 N32E004
2129 N32E005
2130 N32E006
2131 N32E007
2132 N32E008
2133 N32E009
2134 N32E010
2135 N32E011
2136 N32E012
2137 N32E013
2138 N32E014
2139 N32E015
2140 N32E019
2141 N32E020
2142 N32E021
2143 N32E022
2144 N32E023
2145 N32E024
2146 N32E034
2147 N32E035
2148 N32E036
2149 N32E037
2150 N32E038
2151 N32E039
2152 N32E040
2153 N32E041
2154 N32E042
2155 N32E043
2156 N32E044
2157 N32E045
2158 N32E046
2159 N32E047
2160 N32E048
2161 N32E049
2162 N32E050
2163 N32E051
2164 N32E052
2165 N32E053
2166 N32E054
2167 N32E055
2168 N32E056
2169 N32E057
2170 N32E058
2171 N32E059
2172 N32W001
2173 N32W002
2174 N32W003
2175 N32W004
2176 N32W005
2177 N32W006
2178 N32W007
2179 N32W008
2180 N32W009
2181 N32W010
2182 N32W017
2183 N32W018
2184 N33E000
2185 N33E001
2186 N33E002
2187 N33E003
2188 N33E004
2189 N33E005
2190 N33E006
2191 N33E007
2192 N33E008
2193 N33E009
2194 N33E010
2195 N33E011
2196 N33E035
2197 N33E036
2198 N33E037
2199 N33E038
2200 N33E039
2201 N33E040
2202 N33E041
2203 N33E042
2204 N33E043
2205 N33E044
2206 N33E045
2207 N33E046
2208 N33E047
2209 N33E048
2210 N33E049
2211 N33E050
2212 N33E051
2213 N33E052
2214 N33E053
2215 N33E054
2216 N33E055
2217 N33E056
2218 N33E057
2219 N33E058
2220 N33E059
2221 N33W001
2222 N33W002
2223 N33W003
2224 N33W004
2225 N33W005
2226 N33W006
2227 N33W007
2228 N33W008
2229 N33W009
2230 N33W017
2231 N34E000
2232 N34E001
2233 N34E002
2234 N34E003
2235 N34E004
2236 N34E005
2237 N34E006
2238 N34E007
2239 N34E008
2240 N34E009
2241 N34E010
2242 N34E011
2243 N34E023
2244 N34E024
2245 N34E025
2246 N34E026
2247 N34E032
2248 N34E033
2249 N34E034
2250 N34E035
2251 N34E036
2252 N34E037
2253 N34E038
2254 N34E039
2255 N34E040
2256 N34E041
2257 N34E042
2258 N34E043
2259 N34E044
2260 N34E045
2261 N34E046
2262 N34E047
2263 N34E048
2264 N34E049
2265 N34E050
2266 N34E051
2267 N34E052
2268 N34E053
2269 N34E054
2270 N34E055
2271 N34E056
2272 N34E057
2273 N34E058
2274 N34E059
2275 N34W001
2276 N34W002
2277 N34W003
2278 N34W004
2279 N34W005
2280 N34W006
2281 N34W007
2282 N36W026
2283 N37W025
2284 N37W026
2285 N38W028
2286 N38W029
2287 N39W028
2288 N39W029
2289 N39W032
2290 S01E006
2291 S01E008
2292 S01E009
2293 S01E010
2294 S01E011
2295 S01E012
2296 S01E013
2297 S01E014
2298 S01E015
2299 S01E016
2300 S01E017
2301 S01E018
2302 S01E019
2303 S01E020
2304 S01E021
2305 S01E022
2306 S01E023
2307 S01E024
2308 S01E025
2309 S01E026
2310 S01E027
2311 S01E028
2312 S01E029
2313 S01E030
2314 S01E031
2315 S01E032
2316 S01E033
2317 S01E034
2318 S01E035
2319 S01E036
2320 S01E037
2321 S01E038
2322 S01E039
2323 S01E040
2324 S01E041
2325 S01E042
2326 S02E005
2327 S02E008
2328 S02E009
2329 S02E010
2330 S02E011
2331 S02E012
2332 S02E013
2333 S02E014
2334 S02E015
2335 S02E016
2336 S02E017
2337 S02E018
2338 S02E019
2339 S02E020
2340 S02E021
2341 S02E022
2342 S02E023
2343 S02E024
2344 S02E025
2345 S02E026
2346 S02E027
2347 S02E028
2348 S02E029
2349 S02E030
2350 S02E031
2351 S02E032
2352 S02E033
2353 S02E034
2354 S02E035
2355 S02E036
2356 S02E037
2357 S02E038
2358 S02E039
2359 S02E040
2360 S02E041
2361 S02E042
2362 S03E009
2363 S03E010
2364 S03E011
2365 S03E012
2366 S03E013
2367 S03E014
2368 S03E015
2369 S03E016
2370 S03E017
2371 S03E018
2372 S03E019
2373 S03E020
2374 S03E021
2375 S03E022
2376 S03E023
2377 S03E024
2378 S03E025
2379 S03E026
2380 S03E027
2381 S03E028
2382 S03E029
2383 S03E030
2384 S03E031
2385 S03E032
2386 S03E033
2387 S03E034
2388 S03E035
2389 S03E036
2390 S03E037
2391 S03E038
2392 S03E039
2393 S03E040
2394 S03E041
2395 S04E010
2396 S04E011
2397 S04E012
2398 S04E013
2399 S04E014
2400 S04E015
2401 S04E016
2402 S04E017
2403 S04E018
2404 S04E019
2405 S04E020
2406 S04E021
2407 S04E022
2408 S04E023
2409 S04E024
2410 S04E025
2411 S04E026
2412 S04E027
2413 S04E028
2414 S04E029
2415 S04E030
2416 S04E031
2417 S04E032
2418 S04E033
2419 S04E034
2420 S04E035
2421 S04E036
2422 S04E037
2423 S04E038
2424 S04E039
2425 S04E040
2426 S04E055
2427 S05E011
2428 S05E012
2429 S05E013
2430 S05E014
2431 S05E015
2432 S05E016
2433 S05E017
2434 S05E018
2435 S05E019
2436 S05E020
2437 S05E021
2438 S05E022
2439 S05E023
2440 S05E024
2441 S05E025
2442 S05E026
2443 S05E027
2444 S05E028
2445 S05E029
2446 S05E030
2447 S05E031
2448 S05E032
2449 S05E033
2450 S05E034
2451 S05E035
2452 S05E036
2453 S05E037
2454 S05E038
2455 S05E039
2456 S05E053
2457 S05E055
2458 S06E011
2459 S06E012
2460 S06E013
2461 S06E014
2462 S06E015
2463 S06E016
2464 S06E017
2465 S06E018
2466 S06E019
2467 S06E020
2468 S06E021
2469 S06E022
2470 S06E023
2471 S06E024
2472 S06E025
2473 S06E026
2474 S06E027
2475 S06E028
2476 S06E029
2477 S06E030
2478 S06E031
2479 S06E032
2480 S06E033
2481 S06E034
2482 S06E035
2483 S06E036
2484 S06E037
2485 S06E038
2486 S06E039
2487 S06E053
2488 S06E055
2489 S07E012
2490 S07E013
2491 S07E014
2492 S07E015
2493 S07E016
2494 S07E017
2495 S07E018
2496 S07E019
2497 S07E020
2498 S07E021
2499 S07E022
2500 S07E023
2501 S07E024
2502 S07E025
2503 S07E026
2504 S07E027
2505 S07E028
2506 S07E029
2507 S07E030
2508 S07E031
2509 S07E032
2510 S07E033
2511 S07E034
2512 S07E035
2513 S07E036
2514 S07E037
2515 S07E038
2516 S07E039
2517 S07E052
2518 S07E053
2519 S08E012
2520 S08E013
2521 S08E014
2522 S08E015
2523 S08E016
2524 S08E017
2525 S08E018
2526 S08E019
2527 S08E020
2528 S08E021
2529 S08E022
2530 S08E023
2531 S08E024
2532 S08E025
2533 S08E026
2534 S08E027
2535 S08E028
2536 S08E029
2537 S08E030
2538 S08E031
2539 S08E032
2540 S08E033
2541 S08E034
2542 S08E035
2543 S08E036
2544 S08E037
2545 S08E038
2546 S08E039
2547 S08E052
2548 S08E056
2549 S09E013
2550 S09E014
2551 S09E015
2552 S09E016
2553 S09E017
2554 S09E018
2555 S09E019
2556 S09E020
2557 S09E021
2558 S09E022
2559 S09E023
2560 S09E024
2561 S09E025
2562 S09E026
2563 S09E027
2564 S09E028
2565 S09E029
2566 S09E030
2567 S09E031
2568 S09E032
2569 S09E033
2570 S09E034
2571 S09E035
2572 S09E036
2573 S09E037
2574 S09E038
2575 S09E039
2576 S10E012
2577 S10E013
2578 S10E014
2579 S10E015
2580 S10E016
2581 S10E017
2582 S10E018
2583 S10E019
2584 S10E020
2585 S10E021
2586 S10E022
2587 S10E023
2588 S10E024
2589 S10E025
2590 S10E026
2591 S10E027
2592 S10E028
2593 S10E029
2594 S10E030
2595 S10E031
2596 S10E032
2597 S10E033
2598 S10E034
2599 S10E035
2600 S10E036
2601 S10E037
2602 S10E038
2603 S10E039
2604 S10E046
2605 S10E047
2606 S10E050
2607 S10E051
2608 S11E013
2609 S11E014
2610 S11E015
2611 S11E016
2612 S11E017
2613 S11E018
2614 S11E019
2615 S11E020
2616 S11E021
2617 S11E022
2618 S11E023
2619 S11E024
2620 S11E025
2621 S11E026
2622 S11E027
2623 S11E028
2624 S11E029
2625 S11E030
2626 S11E031
2627 S11E032
2628 S11E033
2629 S11E034
2630 S11E035
2631 S11E036
2632 S11E037
2633 S11E038
2634 S11E039
2635 S11E040
2636 S11E047
2637 S11E051
2638 S11E056
2639 S12E013
2640 S12E014
2641 S12E015
2642 S12E016
2643 S12E017
2644 S12E018
2645 S12E019
2646 S12E020
2647 S12E021
2648 S12E022
2649 S12E023
2650 S12E024
2651 S12E025
2652 S12E026
2653 S12E027
2654 S12E028
2655 S12E029
2656 S12E030
2657 S12E031
2658 S12E032
2659 S12E033
2660 S12E034
2661 S12E035
2662 S12E036
2663 S12E037
2664 S12E038
2665 S12E039
2666 S12E040
2667 S12E043
2668 S12E047
2669 S12E049
2670 S13E012
2671 S13E013
2672 S13E014
2673 S13E015
2674 S13E016
2675 S13E017
2676 S13E018
2677 S13E019
2678 S13E020
2679 S13E021
2680 S13E022
2681 S13E023
2682 S13E024
2683 S13E025
2684 S13E026
2685 S13E027
2686 S13E028
2687 S13E029
2688 S13E030
2689 S13E031
2690 S13E032
2691 S13E033
2692 S13E034
2693 S13E035
2694 S13E036
2695 S13E037
2696 S13E038
2697 S13E039
2698 S13E040
2699 S13E043
2700 S13E044
2701 S13E045
2702 S13E048
2703 S13E049
2704 S14E012
2705 S14E013
2706 S14E014
2707 S14E015
2708 S14E016
2709 S14E017
2710 S14E018
2711 S14E019
2712 S14E020
2713 S14E021
2714 S14E022
2715 S14E023
2716 S14E024
2717 S14E025
2718 S14E026
2719 S14E027
2720 S14E028
2721 S14E029
2722 S14E030
2723 S14E031
2724 S14E032
2725 S14E033
2726 S14E034
2727 S14E035
2728 S14E036
2729 S14E037
2730 S14E038
2731 S14E039
2732 S14E040
2733 S14E045
2734 S14E047
2735 S14E048
2736 S14E049
2737 S14E050
2738 S15E012
2739 S15E013
2740 S15E014
2741 S15E015
2742 S15E016
2743 S15E017
2744 S15E018
2745 S15E019
2746 S15E020
2747 S15E021
2748 S15E022
2749 S15E023
2750 S15E024
2751 S15E025
2752 S15E026
2753 S15E027
2754 S15E028
2755 S15E029
2756 S15E030
2757 S15E031
2758 S15E032
2759 S15E033
2760 S15E034
2761 S15E035
2762 S15E036
2763 S15E037
2764 S15E038
2765 S15E039
2766 S15E040
2767 S15E047
2768 S15E048
2769 S15E049
2770 S15E050
2771 S16E011
2772 S16E012
2773 S16E013
2774 S16E014
2775 S16E015
2776 S16E016
2777 S16E017
2778 S16E018
2779 S16E019
2780 S16E020
2781 S16E021
2782 S16E022
2783 S16E023
2784 S16E024
2785 S16E025
2786 S16E026
2787 S16E027
2788 S16E028
2789 S16E029
2790 S16E030
2791 S16E031
2792 S16E032
2793 S16E033
2794 S16E034
2795 S16E035
2796 S16E036
2797 S16E037
2798 S16E038
2799 S16E039
2800 S16E040
2801 S16E045
2802 S16E046
2803 S16E047
2804 S16E048
2805 S16E049
2806 S16E050
2807 S16E054
2808 S17E011
2809 S17E012
2810 S17E013
2811 S17E014
2812 S17E015
2813 S17E016
2814 S17E017
2815 S17E018
2816 S17E019
2817 S17E020
2818 S17E021
2819 S17E022
2820 S17E023
2821 S17E024
2822 S17E025
2823 S17E026
2824 S17E027
2825 S17E028
2826 S17E029
2827 S17E030
2828 S17E031
2829 S17E032
2830 S17E033
2831 S17E034
2832 S17E035
2833 S17E036
2834 S17E037
2835 S17E038
2836 S17E039
2837 S17E040
2838 S17E043
2839 S17E044
2840 S17E045
2841 S17E046
2842 S17E047
2843 S17E048
2844 S17E049
2845 S17E050
2846 S17E059
2847 S18E011
2848 S18E012
2849 S18E013
2850 S18E014
2851 S18E015
2852 S18E016
2853 S18E017
2854 S18E018
2855 S18E019
2856 S18E020
2857 S18E021
2858 S18E022
2859 S18E023
2860 S18E024
2861 S18E025
2862 S18E026
2863 S18E027
2864 S18E028
2865 S18E029
2866 S18E030
2867 S18E031
2868 S18E032
2869 S18E033
2870 S18E034
2871 S18E035
2872 S18E036
2873 S18E037
2874 S18E038
2875 S18E039
2876 S18E042
2877 S18E043
2878 S18E044
2879 S18E045
2880 S18E046
2881 S18E047
2882 S18E048
2883 S18E049
2884 S19E011
2885 S19E012
2886 S19E013
2887 S19E014
2888 S19E015
2889 S19E016
2890 S19E017
2891 S19E018
2892 S19E019
2893 S19E020
2894 S19E021
2895 S19E022
2896 S19E023
2897 S19E024
2898 S19E025
2899 S19E026
2900 S19E027
2901 S19E028
2902 S19E029
2903 S19E030
2904 S19E031
2905 S19E032
2906 S19E033
2907 S19E034
2908 S19E035
2909 S19E036
2910 S19E037
2911 S19E043
2912 S19E044
2913 S19E045
2914 S19E046
2915 S19E047
2916 S19E048
2917 S19E049
2918 S20E012
2919 S20E013
2920 S20E014
2921 S20E015
2922 S20E016
2923 S20E017
2924 S20E018
2925 S20E019
2926 S20E020
2927 S20E021
2928 S20E022
2929 S20E023
2930 S20E024
2931 S20E025
2932 S20E026
2933 S20E027
2934 S20E028
2935 S20E029
2936 S20E030
2937 S20E031
2938 S20E032
2939 S20E033
2940 S20E034
2941 S20E035
2942 S20E044
2943 S20E045
2944 S20E046
2945 S20E047
2946 S20E048
2947 S20E049
2948 S20E057
2949 S20E063
2950 S21E013
2951 S21E014
2952 S21E015
2953 S21E016
2954 S21E017
2955 S21E018
2956 S21E019
2957 S21E020
2958 S21E021
2959 S21E022
2960 S21E023
2961 S21E024
2962 S21E025
2963 S21E026
2964 S21E027
2965 S21E028
2966 S21E029
2967 S21E030
2968 S21E031
2969 S21E032
2970 S21E033
2971 S21E034
2972 S21E035
2973 S21E043
2974 S21E044
2975 S21E045
2976 S21E046
2977 S21E047
2978 S21E048
2979 S21E055
2980 S21E057
2981 S22E013
2982 S22E014
2983 S22E015
2984 S22E016
2985 S22E017
2986 S22E018
2987 S22E019
2988 S22E020
2989 S22E021
2990 S22E022
2991 S22E023
2992 S22E024
2993 S22E025
2994 S22E026
2995 S22E027
2996 S22E028
2997 S22E029
2998 S22E030
2999 S22E031
3000 S22E032
3001 S22E033
3002 S22E034
3003 S22E035
3004 S22E043
3005 S22E044
3006 S22E045
3007 S22E046
3008 S22E047
3009 S22E048
3010 S22E055
3011 S23E014
3012 S23E015
3013 S23E016
3014 S23E017
3015 S23E018
3016 S23E019
3017 S23E020
3018 S23E021
3019 S23E022
3020 S23E023
3021 S23E024
3022 S23E025
3023 S23E026
3024 S23E027
3025 S23E028
3026 S23E029
3027 S23E030
3028 S23E031
3029 S23E032
3030 S23E033
3031 S23E034
3032 S23E035
3033 S23E040
3034 S23E043
3035 S23E044
3036 S23E045
3037 S23E046
3038 S23E047
3039 S23E048
3040 S24E014
3041 S24E015
3042 S24E016
3043 S24E017
3044 S24E018
3045 S24E019
3046 S24E020
3047 S24E021
3048 S24E022
3049 S24E023
3050 S24E024
3051 S24E025
3052 S24E026
3053 S24E027
3054 S24E028
3055 S24E029
3056 S24E030
3057 S24E031
3058 S24E032
3059 S24E033
3060 S24E034
3061 S24E035
3062 S24E043
3063 S24E044
3064 S24E045
3065 S24E046
3066 S24E047
3067 S25E014
3068 S25E015
3069 S25E016
3070 S25E017
3071 S25E018
3072 S25E019
3073 S25E020
3074 S25E021
3075 S25E022
3076 S25E023
3077 S25E024
3078 S25E025
3079 S25E026
3080 S25E027
3081 S25E028
3082 S25E029
3083 S25E030
3084 S25E031
3085 S25E032
3086 S25E033
3087 S25E034
3088 S25E035
3089 S25E043
3090 S25E044
3091 S25E045
3092 S25E046
3093 S25E047
3094 S26E014
3095 S26E015
3096 S26E016
3097 S26E017
3098 S26E018
3099 S26E019
3100 S26E020
3101 S26E021
3102 S26E022
3103 S26E023
3104 S26E024
3105 S26E025
3106 S26E026
3107 S26E027
3108 S26E028
3109 S26E029
3110 S26E030
3111 S26E031
3112 S26E032
3113 S26E033
3114 S26E034
3115 S26E044
3116 S26E045
3117 S26E046
3118 S26E047
3119 S27E014
3120 S27E015
3121 S27E016
3122 S27E017
3123 S27E018
3124 S27E019
3125 S27E020
3126 S27E021
3127 S27E022
3128 S27E023
3129 S27E024
3130 S27E025
3131 S27E026
3132 S27E027
3133 S27E028
3134 S27E029
3135 S27E030
3136 S27E031
3137 S27E032
3138 S28E015
3139 S28E016
3140 S28E017
3141 S28E018
3142 S28E019
3143 S28E020
3144 S28E021
3145 S28E022
3146 S28E023
3147 S28E024
3148 S28E025
3149 S28E026
3150 S28E027
3151 S28E028
3152 S28E029
3153 S28E030
3154 S28E031
3155 S28E032
3156 S29E015
3157 S29E016
3158 S29E017
3159 S29E018
3160 S29E019
3161 S29E020
3162 S29E021
3163 S29E022
3164 S29E023
3165 S29E024
3166 S29E025
3167 S29E026
3168 S29E027
3169 S29E028
3170 S29E029
3171 S29E030
3172 S29E031
3173 S29E032
3174 S30E016
3175 S30E017
3176 S30E018
3177 S30E019
3178 S30E020
3179 S30E021
3180 S30E022
3181 S30E023
3182 S30E024
3183 S30E025
3184 S30E026
3185 S30E027
3186 S30E028
3187 S30E029
3188 S30E030
3189 S30E031
3190 S31E017
3191 S31E018
3192 S31E019
3193 S31E020
3194 S31E021
3195 S31E022
3196 S31E023
3197 S31E024
3198 S31E025
3199 S31E026
3200 S31E027
3201 S31E028
3202 S31E029
3203 S31E030
3204 S32E017
3205 S32E018
3206 S32E019
3207 S32E020
3208 S32E021
3209 S32E022
3210 S32E023
3211 S32E024
3212 S32E025
3213 S32E026
3214 S32E027
3215 S32E028
3216 S32E029
3217 S32E030
3218 S33E017
3219 S33E018
3220 S33E019
3221 S33E020
3222 S33E021
3223 S33E022
3224 S33E023
3225 S33E024
3226 S33E025
3227 S33E026
3228 S33E027
3229 S33E028
3230 S33E029
3231 S34E017
3232 S34E018
3233 S34E019
3234 S34E020
3235 S34E021
3236 S34E022
3237 S34E023
3238 S34E024
3239 S34E025
3240 S34E026
3241 S34E027
3242 S35E018
3243 S35E019
3244 S35E020
3245 S35E021
3246 S35E022
3247 S35E023
3248 S35E024
3249 S35E025
3250
2121 import tim.prune.FunctionLibrary;
2222 import tim.prune.GenericFunction;
2323 import tim.prune.I18nManager;
24 import tim.prune.UpdateMessageBroker;
2425 import tim.prune.config.Config;
2526 import tim.prune.data.Altitude;
2627 import tim.prune.data.Coordinate;
213214 _distUnitsDropdown.addActionListener(new ActionListener() {
214215 public void actionPerformed(ActionEvent e)
215216 {
216 dataUpdated(DataSubscriber.UNITS_CHANGED);
217217 Config.setConfigBoolean(Config.KEY_METRIC_UNITS, _distUnitsDropdown.getSelectedIndex() == 0);
218 UpdateMessageBroker.informSubscribers(DataSubscriber.UNITS_CHANGED);
218219 }
219220 });
220221 lowerPanel.add(_distUnitsDropdown);
404405 default: // just as it was
405406 coord = inCoordinate.output(Coordinate.FORMAT_NONE);
406407 }
407 return inPrefix + coord;
408 // Fix broken degree signs (due to unicode mangling)
409 final char brokenDeg = 65533;
410 if (coord.indexOf(brokenDeg) >= 0) {
411 coord = coord.replaceAll(String.valueOf(brokenDeg), "\u00B0");
412 }
413 return inPrefix + restrictDP(coord);
408414 }
409415
410416
430436 }
431437
432438 /**
439 * Restrict the given coordinate to a limited number of decimal places for display
440 * @param inCoord coordinate string
441 * @return chopped string
442 */
443 private static String restrictDP(String inCoord)
444 {
445 final int DECIMAL_PLACES = 7;
446 if (inCoord == null) return "";
447 final int dotPos = Math.max(inCoord.lastIndexOf('.'), inCoord.lastIndexOf(','));
448 if (dotPos >= 0) {
449 final int chopPos = dotPos + DECIMAL_PLACES;
450 if (chopPos < (inCoord.length()-1)) {
451 return inCoord.substring(0, chopPos);
452 }
453 }
454 return inCoord;
455 }
456
457 /**
433458 * Create a little button for rotating the current photo
434459 * @param inIcon icon to use (from IconManager)
435460 * @param inFunction function to call (from FunctionLibrary)
2121 + " " + ((inNumSecs / 60) % 60) + I18nManager.getText("display.range.time.mins");
2222 if (inNumSecs < 432000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days")
2323 + " " + (inNumSecs / 60 / 60) % 24 + I18nManager.getText("display.range.time.hours");
24 if (inNumSecs < 8640000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days");
24 if (inNumSecs < 86400000L) return "" + (inNumSecs / 86400L) + I18nManager.getText("display.range.time.days");
2525 return "big";
2626 }
2727 }
+0
-110
tim/prune/gui/GenericChart.java less more
0 package tim.prune.gui;
1
2 import java.awt.Color;
3 import java.awt.Dimension;
4 import java.awt.Graphics;
5 import java.awt.event.MouseEvent;
6 import java.awt.event.MouseListener;
7
8 import tim.prune.I18nManager;
9 import tim.prune.config.ColourScheme;
10 import tim.prune.config.Config;
11 import tim.prune.data.TrackInfo;
12
13
14 /**
15 * Generic chart component to form baseclass for map and profile charts
16 */
17 public abstract class GenericChart extends GenericDisplay implements MouseListener
18 {
19 protected Dimension MINIMUM_SIZE = new Dimension(200, 250);
20 protected static final int BORDER_WIDTH = 8;
21
22 // Colours
23 private static final Color COLOR_NODATA_TEXT = Color.GRAY;
24
25
26 /**
27 * Constructor
28 * @param inTrackInfo track info object
29 */
30 protected GenericChart(TrackInfo inTrackInfo)
31 {
32 super(inTrackInfo);
33 }
34
35 /**
36 * Override minimum size method to restrict map
37 */
38 public Dimension getMinimumSize()
39 {
40 return MINIMUM_SIZE;
41 }
42
43 /**
44 * Override paint method to draw map
45 * @param inG graphics object
46 */
47 public void paint(Graphics inG)
48 {
49 super.paint(inG);
50 int width = getWidth();
51 int height = getHeight();
52 // Get colours
53 ColourScheme colourScheme = Config.getColourScheme();
54 final Color borderColour = colourScheme.getColour(ColourScheme.IDX_BORDERS);
55 final Color backgroundColour = colourScheme.getColour(ColourScheme.IDX_BACKGROUND);
56 final Color insideColour = backgroundColour;
57 // border background
58 inG.setColor(backgroundColour);
59 inG.fillRect(0, 0, width, height);
60 if (width < 2*BORDER_WIDTH || height < 2*BORDER_WIDTH) return;
61 // blank graph area, with line border
62 inG.setColor(insideColour);
63 inG.fillRect(BORDER_WIDTH, BORDER_WIDTH, width - 2*BORDER_WIDTH, height-2*BORDER_WIDTH);
64 // Display message if no data to be displayed
65 if (_track == null || _track.getNumPoints() <= 0)
66 {
67 inG.setColor(COLOR_NODATA_TEXT);
68 inG.drawString(I18nManager.getText("display.nodata"), 50, height/2);
69 }
70 else {
71 inG.setColor(borderColour);
72 inG.drawRect(BORDER_WIDTH, BORDER_WIDTH, width - 2*BORDER_WIDTH, height-2*BORDER_WIDTH);
73 }
74 }
75
76
77 /**
78 * Method to inform map that data has changed
79 */
80 public void dataUpdated(byte inUpdateType)
81 {
82 repaint();
83 }
84
85
86 /**
87 * mouse enter events ignored
88 */
89 public void mouseEntered(MouseEvent e)
90 {}
91
92 /**
93 * mouse exit events ignored
94 */
95 public void mouseExited(MouseEvent e)
96 {}
97
98 /**
99 * ignore mouse pressed for now too
100 */
101 public void mousePressed(MouseEvent e)
102 {}
103
104 /**
105 * and also ignore mouse released
106 */
107 public void mouseReleased(MouseEvent e)
108 {}
109 }
00 package tim.prune.gui;
11
2 import java.awt.Toolkit;
23 import java.awt.event.ActionEvent;
34 import java.awt.event.ActionListener;
4 import java.awt.event.InputEvent;
55 import java.awt.event.KeyEvent;
66
77 import javax.swing.JButton;
7272 private JMenu _browserMapMenu = null;
7373 private JMenuItem _chartItem = null;
7474 private JMenuItem _getGpsiesItem = null;
75 private JMenuItem _lookupSrtmItem = null;
7576 private JMenuItem _distanceItem = null;
7677 private JMenuItem _fullRangeDetailsItem = null;
7778 private JMenuItem _saveExifItem = null;
8384 private JMenuItem _rotatePhotoLeft = null;
8485 private JMenuItem _rotatePhotoRight = null;
8586 private JMenuItem _ignoreExifThumb = null;
87 private JCheckBoxMenuItem _onlineCheckbox = null;
8688
8789 // ActionListeners for reuse by menu and toolbar
8890 private ActionListener _openFileAction = null;
139141 JMenu fileMenu = new JMenu(I18nManager.getText("menu.file"));
140142 setAltKey(fileMenu, "altkey.menu.file");
141143 // Open file
142 JMenuItem openMenuItem = new JMenuItem(I18nManager.getText("menu.file.open"));
144 JMenuItem openMenuItem = new JMenuItem(I18nManager.getText("function.open"));
143145 setShortcut(openMenuItem, "shortcut.menu.file.open");
144146 _openFileAction = new ActionListener() {
145147 public void actionPerformed(ActionEvent e)
206208 // Track menu
207209 JMenu trackMenu = new JMenu(I18nManager.getText("menu.track"));
208210 setAltKey(trackMenu, "altkey.menu.track");
209 _undoItem = new JMenuItem(I18nManager.getText("menu.edit.undo"));
210 setShortcut(_undoItem, "shortcut.menu.edit.undo");
211 _undoItem = new JMenuItem(I18nManager.getText("menu.track.undo"));
212 setShortcut(_undoItem, "shortcut.menu.track.undo");
211213 _undoAction = new ActionListener() {
212214 public void actionPerformed(ActionEvent e)
213215 {
217219 _undoItem.addActionListener(_undoAction);
218220 _undoItem.setEnabled(false);
219221 trackMenu.add(_undoItem);
220 _clearUndoItem = new JMenuItem(I18nManager.getText("menu.edit.clearundo"));
222 _clearUndoItem = new JMenuItem(I18nManager.getText("menu.track.clearundo"));
221223 _clearUndoItem.addActionListener(new ActionListener() {
222224 public void actionPerformed(ActionEvent e)
223225 {
231233 setShortcut(_compressItem, "shortcut.menu.edit.compress");
232234 _compressItem.setEnabled(false);
233235 trackMenu.add(_compressItem);
234 _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.edit.deletemarked"));
236 _deleteMarkedPointsItem = new JMenuItem(I18nManager.getText("menu.track.deletemarked"));
235237 _deleteMarkedPointsItem.addActionListener(new ActionListener() {
236238 public void actionPerformed(ActionEvent e)
237239 {
242244 trackMenu.add(_deleteMarkedPointsItem);
243245 trackMenu.addSeparator();
244246 // Rearrange waypoints
245 _rearrangeMenu = new JMenu(I18nManager.getText("menu.edit.rearrange"));
247 _rearrangeMenu = new JMenu(I18nManager.getText("menu.track.rearrange"));
246248 _rearrangeMenu.setEnabled(false);
247 JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.start"));
249 JMenuItem rearrangeStartItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.start"));
248250 rearrangeStartItem.addActionListener(new ActionListener() {
249251 public void actionPerformed(ActionEvent e)
250252 {
253255 });
254256 rearrangeStartItem.setEnabled(true);
255257 _rearrangeMenu.add(rearrangeStartItem);
256 JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.end"));
258 JMenuItem rearrangeEndItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.end"));
257259 rearrangeEndItem.addActionListener(new ActionListener() {
258260 public void actionPerformed(ActionEvent e)
259261 {
262264 });
263265 rearrangeEndItem.setEnabled(true);
264266 _rearrangeMenu.add(rearrangeEndItem);
265 JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.edit.rearrange.nearest"));
267 JMenuItem rearrangeNearestItem = new JMenuItem(I18nManager.getText("menu.track.rearrange.nearest"));
266268 rearrangeNearestItem.addActionListener(new ActionListener() {
267269 public void actionPerformed(ActionEvent e)
268270 {
276278 _getGpsiesItem = makeMenuItem(FunctionLibrary.FUNCTION_GET_GPSIES);
277279 _getGpsiesItem.setEnabled(false);
278280 trackMenu.add(_getGpsiesItem);
281 _lookupSrtmItem = makeMenuItem(FunctionLibrary.FUNCTION_LOOKUP_SRTM);
282 _lookupSrtmItem.setEnabled(false);
283 trackMenu.add(_lookupSrtmItem);
279284 menubar.add(trackMenu);
280285
281286 // Range menu
282287 JMenu rangeMenu = new JMenu(I18nManager.getText("menu.range"));
283288 setAltKey(rangeMenu, "altkey.menu.range");
284 _selectAllItem = new JMenuItem(I18nManager.getText("menu.select.all"));
285 setShortcut(_selectAllItem, "shortcut.menu.select.all");
289 _selectAllItem = new JMenuItem(I18nManager.getText("menu.range.all"));
290 setShortcut(_selectAllItem, "shortcut.menu.range.all");
286291 _selectAllItem.setEnabled(false);
287292 _selectAllItem.addActionListener(new ActionListener() {
288293 public void actionPerformed(ActionEvent e)
291296 }
292297 });
293298 rangeMenu.add(_selectAllItem);
294 _selectNoneItem = new JMenuItem(I18nManager.getText("menu.select.none"));
299 _selectNoneItem = new JMenuItem(I18nManager.getText("menu.range.none"));
295300 _selectNoneItem.setEnabled(false);
296301 _selectNoneItem.addActionListener(new ActionListener() {
297302 public void actionPerformed(ActionEvent e)
301306 });
302307 rangeMenu.add(_selectNoneItem);
303308 rangeMenu.addSeparator();
304 _selectStartItem = new JMenuItem(I18nManager.getText("menu.select.start"));
309 _selectStartItem = new JMenuItem(I18nManager.getText("menu.range.start"));
305310 _selectStartItem.setEnabled(false);
306311 _selectStartAction = new ActionListener() {
307312 public void actionPerformed(ActionEvent e)
311316 };
312317 _selectStartItem.addActionListener(_selectStartAction);
313318 rangeMenu.add(_selectStartItem);
314 _selectEndItem = new JMenuItem(I18nManager.getText("menu.select.end"));
319 _selectEndItem = new JMenuItem(I18nManager.getText("menu.range.end"));
315320 _selectEndItem.setEnabled(false);
316321 _selectEndAction = new ActionListener() {
317322 public void actionPerformed(ActionEvent e)
322327 _selectEndItem.addActionListener(_selectEndAction);
323328 rangeMenu.add(_selectEndItem);
324329 rangeMenu.addSeparator();
325 _deleteRangeItem = new JMenuItem(I18nManager.getText("menu.edit.deleterange"));
330 _deleteRangeItem = new JMenuItem(I18nManager.getText("menu.range.deleterange"));
326331 _deleteRangeAction = new ActionListener() {
327332 public void actionPerformed(ActionEvent e)
328333 {
332337 _deleteRangeItem.addActionListener(_deleteRangeAction);
333338 _deleteRangeItem.setEnabled(false);
334339 rangeMenu.add(_deleteRangeItem);
335 _reverseItem = new JMenuItem(I18nManager.getText("menu.edit.reverse"));
340 _reverseItem = new JMenuItem(I18nManager.getText("menu.range.reverse"));
336341 _reverseItem.addActionListener(new ActionListener() {
337342 public void actionPerformed(ActionEvent e)
338343 {
347352 _addAltitudeOffsetItem = makeMenuItem(FunctionLibrary.FUNCTION_ADD_ALTITUDE_OFFSET);
348353 _addAltitudeOffsetItem.setEnabled(false);
349354 rangeMenu.add(_addAltitudeOffsetItem);
350 _mergeSegmentsItem = new JMenuItem(I18nManager.getText("menu.edit.mergetracksegments"));
355 _mergeSegmentsItem = new JMenuItem(I18nManager.getText("menu.range.mergetracksegments"));
351356 _mergeSegmentsItem.addActionListener(new ActionListener() {
352357 public void actionPerformed(ActionEvent e)
353358 {
357362 _mergeSegmentsItem.setEnabled(false);
358363 rangeMenu.add(_mergeSegmentsItem);
359364 rangeMenu.addSeparator();
360 _interpolateItem = new JMenuItem(I18nManager.getText("menu.edit.interpolate"));
365 _interpolateItem = new JMenuItem(I18nManager.getText("menu.range.interpolate"));
361366 _interpolateItem.addActionListener(new ActionListener() {
362367 public void actionPerformed(ActionEvent e)
363368 {
366371 });
367372 _interpolateItem.setEnabled(false);
368373 rangeMenu.add(_interpolateItem);
369 _averageItem = new JMenuItem(I18nManager.getText("menu.edit.average"));
374 _averageItem = new JMenuItem(I18nManager.getText("menu.range.average"));
370375 _averageItem.addActionListener(new ActionListener() {
371376 public void actionPerformed(ActionEvent e)
372377 {
375380 });
376381 _averageItem.setEnabled(false);
377382 rangeMenu.add(_averageItem);
378 _cutAndMoveItem = new JMenuItem(I18nManager.getText("menu.edit.cutandmove"));
383 _cutAndMoveItem = new JMenuItem(I18nManager.getText("menu.range.cutandmove"));
379384 _cutAndMoveItem.addActionListener(new ActionListener() {
380385 public void actionPerformed(ActionEvent e)
381386 {
392397 // Point menu
393398 JMenu pointMenu = new JMenu(I18nManager.getText("menu.point"));
394399 setAltKey(pointMenu, "altkey.menu.point");
395 _editPointItem = new JMenuItem(I18nManager.getText("menu.edit.editpoint"));
400 _editPointItem = new JMenuItem(I18nManager.getText("menu.point.editpoint"));
396401 _editPointAction = new ActionListener() {
397402 public void actionPerformed(ActionEvent e)
398403 {
405410 _editWaypointNameItem = makeMenuItem(FunctionLibrary.FUNCTION_EDIT_WAYPOINT_NAME);
406411 _editWaypointNameItem.setEnabled(false);
407412 pointMenu.add(_editWaypointNameItem);
408 _deletePointItem = new JMenuItem(I18nManager.getText("menu.edit.deletepoint"));
413 _deletePointItem = new JMenuItem(I18nManager.getText("menu.point.deletepoint"));
409414 _deletePointAction = new ActionListener() {
410415 public void actionPerformed(ActionEvent e)
411416 {
414419 };
415420 _deletePointItem.addActionListener(_deletePointAction);
416421 _deletePointItem.setEnabled(false);
422 _deletePointItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0));
417423 pointMenu.add(_deletePointItem);
418424 pointMenu.addSeparator();
419425 // find a waypoint
575581 // Set the map background
576582 JMenuItem mapBgItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_MAP_BG);
577583 settingsMenu.add(mapBgItem);
584 _onlineCheckbox = new JCheckBoxMenuItem(I18nManager.getText("menu.settings.onlinemode"));
585 _onlineCheckbox.setSelected(Config.getConfigBoolean(Config.KEY_ONLINE_MODE));
586 _onlineCheckbox.addActionListener(new ActionListener() {
587 public void actionPerformed(ActionEvent e) {
588 boolean isOnline = _onlineCheckbox.isSelected();
589 Config.setConfigBoolean(Config.KEY_ONLINE_MODE, isOnline);
590 if (isOnline) {UpdateMessageBroker.informSubscribers();}
591 }
592 });
593 settingsMenu.add(_onlineCheckbox);
594 settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_DISK_CACHE));
595 settingsMenu.addSeparator();
578596 // Set kmz image size
579 JMenuItem setKmzImageSizeItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_KMZ_IMAGE_SIZE);
580 settingsMenu.add(setKmzImageSizeItem);
597 settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_KMZ_IMAGE_SIZE));
581598 // Set program paths
582 JMenuItem setPathsItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_PATHS);
583 settingsMenu.add(setPathsItem);
599 settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_PATHS));
584600 // Set colours
585 JMenuItem setColoursItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_COLOURS);
586 settingsMenu.add(setColoursItem);
601 settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_COLOURS));
587602 // Set language
588 JMenuItem setLanguageItem = makeMenuItem(FunctionLibrary.FUNCTION_SET_LANGUAGE);
589 settingsMenu.add(setLanguageItem);
603 settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SET_LANGUAGE));
590604 settingsMenu.addSeparator();
591605 // Save configuration
592 JMenuItem saveConfigMenuItem = makeMenuItem(FunctionLibrary.FUNCTION_SAVECONFIG);
593 settingsMenu.add(saveConfigMenuItem);
606 settingsMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SAVECONFIG));
594607 menubar.add(settingsMenu);
595608
596609 // Help menu
599612 JMenuItem helpItem = makeMenuItem(FunctionLibrary.FUNCTION_HELP);
600613 setShortcut(helpItem, "shortcut.menu.help.help");
601614 helpMenu.add(helpItem);
602 JMenuItem showKeysItem = makeMenuItem(FunctionLibrary.FUNCTION_SHOW_KEYS);
603 helpMenu.add(showKeysItem);
604 JMenuItem aboutItem = makeMenuItem(FunctionLibrary.FUNCTION_ABOUT);
605 helpMenu.add(aboutItem);
606 JMenuItem checkVersionItem = makeMenuItem(FunctionLibrary.FUNCTION_CHECK_VERSION);
607 helpMenu.add(checkVersionItem);
615 helpMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_SHOW_KEYS));
616 helpMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_ABOUT));
617 helpMenu.add(makeMenuItem(FunctionLibrary.FUNCTION_CHECK_VERSION));
608618 menubar.add(helpMenu);
609619
610620 return menubar;
657667 if (code >= 0 && code < 26)
658668 {
659669 // Found a valid code between A and Z
660 inMenuItem.setAccelerator(KeyStroke.getKeyStroke(KEY_EVENTS[code], InputEvent.CTRL_DOWN_MASK));
670 inMenuItem.setAccelerator(KeyStroke.getKeyStroke(KEY_EVENTS[code],
671 Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()));
672 // use platform-specific key mask so Ctrl on Linux/Win, Clover on Mac
661673 }
662674 }
663675 }
671683 JToolBar toolbar = new JToolBar();
672684 // Add text file
673685 JButton openFileButton = new JButton(IconManager.getImageIcon(IconManager.OPEN_FILE));
674 openFileButton.setToolTipText(I18nManager.getText("menu.file.open"));
686 openFileButton.setToolTipText(I18nManager.getText("function.open"));
675687 openFileButton.addActionListener(_openFileAction);
676688 toolbar.add(openFileButton);
677689 // Add photo
687699 toolbar.add(_saveButton);
688700 // Undo
689701 _undoButton = new JButton(IconManager.getImageIcon(IconManager.UNDO));
690 _undoButton.setToolTipText(I18nManager.getText("menu.edit.undo"));
702 _undoButton.setToolTipText(I18nManager.getText("menu.track.undo"));
691703 _undoButton.addActionListener(_undoAction);
692704 _undoButton.setEnabled(false);
693705 toolbar.add(_undoButton);
694706 // Edit point
695707 _editPointButton = new JButton(IconManager.getImageIcon(IconManager.EDIT_POINT));
696 _editPointButton.setToolTipText(I18nManager.getText("menu.edit.editpoint"));
708 _editPointButton.setToolTipText(I18nManager.getText("menu.point.editpoint"));
697709 _editPointButton.addActionListener(_editPointAction);
698710 _editPointButton.setEnabled(false);
699711 toolbar.add(_editPointButton);
700712 // Delete point
701713 _deletePointButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_POINT));
702 _deletePointButton.setToolTipText(I18nManager.getText("menu.edit.deletepoint"));
714 _deletePointButton.setToolTipText(I18nManager.getText("menu.point.deletepoint"));
703715 _deletePointButton.addActionListener(_deletePointAction);
704716 _deletePointButton.setEnabled(false);
705717 toolbar.add(_deletePointButton);
706718 // Delete range
707719 _deleteRangeButton = new JButton(IconManager.getImageIcon(IconManager.DELETE_RANGE));
708 _deleteRangeButton.setToolTipText(I18nManager.getText("menu.edit.deleterange"));
720 _deleteRangeButton.setToolTipText(I18nManager.getText("menu.range.deleterange"));
709721 _deleteRangeButton.addActionListener(_deleteRangeAction);
710722 _deleteRangeButton.setEnabled(false);
711723 toolbar.add(_deleteRangeButton);
712724 // Select start, end
713725 _selectStartButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_START));
714 _selectStartButton.setToolTipText(I18nManager.getText("menu.select.start"));
726 _selectStartButton.setToolTipText(I18nManager.getText("menu.range.start"));
715727 _selectStartButton.addActionListener(_selectStartAction);
716728 _selectStartButton.setEnabled(false);
717729 toolbar.add(_selectStartButton);
718730 _selectEndButton = new JButton(IconManager.getImageIcon(IconManager.SET_RANGE_END));
719 _selectEndButton.setToolTipText(I18nManager.getText("menu.select.end"));
731 _selectEndButton.setToolTipText(I18nManager.getText("menu.range.end"));
720732 _selectEndButton.addActionListener(_selectEndAction);
721733 _selectEndButton.setEnabled(false);
722734 toolbar.add(_selectEndButton);
768780 _browserMapMenu.setEnabled(hasData);
769781 _distanceItem.setEnabled(hasData);
770782 _getGpsiesItem.setEnabled(hasData);
783 _lookupSrtmItem.setEnabled(hasData);
771784 _findWaypointItem.setEnabled(hasData && _track.hasWaypoints());
772785 // is undo available?
773786 boolean hasUndo = !_app.getUndoStack().isEmpty();
+0
-227
tim/prune/gui/ProfileChart.java less more
0 package tim.prune.gui;
1
2 import java.awt.Color;
3 import java.awt.Dimension;
4 import java.awt.Graphics;
5 import java.awt.event.MouseEvent;
6
7 import tim.prune.I18nManager;
8 import tim.prune.config.ColourScheme;
9 import tim.prune.config.Config;
10 import tim.prune.data.Altitude;
11 import tim.prune.data.AltitudeRange;
12 import tim.prune.data.Track;
13 import tim.prune.data.TrackInfo;
14
15 /**
16 * Chart component for the profile display
17 */
18 public class ProfileChart extends GenericChart
19 {
20 /** Current scale factor in x direction*/
21 private double _xScaleFactor = 0.0;
22 /** Possible altitude scales to use */
23 private static final int[] ALTITUDE_SCALES = {10000, 5000, 2000, 1000, 500, 200, 100, 50};
24
25
26 /**
27 * Constructor
28 * @param inTrackInfo Track info object
29 */
30 public ProfileChart(TrackInfo inTrackInfo)
31 {
32 super(inTrackInfo);
33 MINIMUM_SIZE = new Dimension(200, 100);
34 addMouseListener(this);
35 }
36
37
38 /**
39 * Override paint method to draw map
40 * @param g Graphics object
41 */
42 public void paint(Graphics g)
43 {
44 super.paint(g);
45 if (_track != null && _track.getNumPoints() > 0)
46 {
47 int width = getWidth();
48 int height = getHeight();
49
50 // Set up colours
51 final Color barColour = Config.getColourScheme().getColour(ColourScheme.IDX_POINT);
52 final Color rangeColour = Config.getColourScheme().getColour(ColourScheme.IDX_SELECTION);
53 final Color currentColour = Config.getColourScheme().getColour(ColourScheme.IDX_PRIMARY);
54 final Color secondColour = Config.getColourScheme().getColour(ColourScheme.IDX_SECONDARY);
55 final Color lineColour = Config.getColourScheme().getColour(ColourScheme.IDX_LINES);
56
57 // message if no altitudes in track
58 if (!_track.hasAltitudeData())
59 {
60 g.setColor(lineColour);
61 g.drawString(I18nManager.getText("display.noaltitudes"), 50, height/2);
62 return;
63 }
64
65 // altitude profile
66 AltitudeRange altitudeRange = _track.getAltitudeRange();
67 int minAltitude = altitudeRange.getMinimum();
68 int maxAltitude = altitudeRange.getMaximum();
69 int numPoints = _track.getNumPoints();
70 _xScaleFactor = 1.0 * (width - 2 * BORDER_WIDTH - 1) / numPoints;
71 double yScaleFactor = 1.0 * (height - 2 * BORDER_WIDTH) / (maxAltitude - minAltitude);
72 int barWidth = (int) (_xScaleFactor + 1.0);
73 int selectedPoint = _trackInfo.getSelection().getCurrentPointIndex();
74 // selection start, end
75 int selectionStart = -1, selectionEnd = -1;
76 if (_trackInfo.getSelection().hasRangeSelected()) {
77 selectionStart = _trackInfo.getSelection().getStart();
78 selectionEnd = _trackInfo.getSelection().getEnd();
79 }
80
81 // horizontal lines for scale - set to round numbers eg 500m
82 int lineScale = getLineScale(minAltitude, maxAltitude);
83 int altitude = (minAltitude/lineScale) * lineScale;
84 int x = 0, y = 0;
85 if (lineScale > 1)
86 {
87 g.setColor(lineColour);
88 while (altitude < maxAltitude)
89 {
90 if (altitude > minAltitude)
91 {
92 y = height - BORDER_WIDTH - (int) (yScaleFactor * (altitude - minAltitude));
93 g.drawLine(BORDER_WIDTH + 1, y, width - BORDER_WIDTH - 1, y);
94 }
95 altitude += lineScale;
96 }
97 }
98
99 try
100 {
101 // loop through points
102 Altitude.Format chartFormat = altitudeRange.getFormat();
103 g.setColor(barColour);
104 for (int p = 0; p < numPoints; p++)
105 {
106 x = (int) (_xScaleFactor * p) + 1;
107 if (p == selectionStart)
108 g.setColor(rangeColour);
109 else if (p == (selectionEnd+1))
110 g.setColor(barColour);
111 if (_track.getPoint(p).getAltitude().isValid())
112 {
113 altitude = _track.getPoint(p).getAltitude().getValue(chartFormat);
114 y = (int) (yScaleFactor * (altitude - minAltitude));
115 g.fillRect(BORDER_WIDTH+x, height-BORDER_WIDTH - y, barWidth, y);
116 }
117 }
118 // current point (make sure it's drawn last)
119 if (selectedPoint > -1)
120 {
121 Altitude alt = _track.getPoint(selectedPoint).getAltitude();
122 if (alt.isValid())
123 {
124 x = (int) (_xScaleFactor * selectedPoint) + 1;
125 g.setColor(secondColour);
126 g.fillRect(BORDER_WIDTH + x, BORDER_WIDTH+1, barWidth, height-2*BORDER_WIDTH-2);
127 g.setColor(currentColour);
128 altitude = alt.getValue(chartFormat);
129 y = (int) (yScaleFactor * (altitude - minAltitude));
130 g.fillRect(BORDER_WIDTH + x, height-BORDER_WIDTH - y, barWidth, y);
131 }
132 }
133 }
134 catch (NullPointerException npe) { // ignore, probably due to data being changed
135 }
136 // Draw numbers on top of the graph to mark scale
137 if (lineScale > 1)
138 {
139 int textHeight = g.getFontMetrics().getHeight();
140 altitude = (minAltitude / lineScale) * lineScale;
141 y = 0;
142 g.setColor(currentColour);
143 while (altitude < maxAltitude)
144 {
145 if (altitude > minAltitude)
146 {
147 y = height - BORDER_WIDTH - (int) (yScaleFactor * (altitude - minAltitude));
148 // Limit y so String isn't above border
149 if (y < (BORDER_WIDTH + textHeight))
150 {
151 y = BORDER_WIDTH + textHeight;
152 }
153 g.drawString(""+altitude, BORDER_WIDTH + 5, y);
154 }
155 altitude += lineScale;
156 }
157 }
158 }
159 }
160
161
162 /**
163 * Work out the scale for the horizontal lines
164 * @param inMin min altitude of data
165 * @param inMax max altitude of data
166 * @return scale separation, or -1 for no scale
167 */
168 private int getLineScale(int inMin, int inMax)
169 {
170 if ((inMax - inMin) < 50 || inMax < 0)
171 {
172 return -1;
173 }
174 int numScales = ALTITUDE_SCALES.length;
175 for (int i=0; i<numScales; i++)
176 {
177 int scale = ALTITUDE_SCALES[i];
178 int numLines = (inMax / scale) - (inMin / scale);
179 // Check for too many lines
180 if (numLines > 10) return -1;
181 // If more than 1 line then use this scale
182 if (numLines > 1) return scale;
183 }
184 // no suitable scale found so just use minimum
185 return ALTITUDE_SCALES[numScales-1];
186 }
187
188
189 /**
190 * Method to inform map that data has changed
191 * @param inTrack track object
192 */
193 public void dataUpdated(Track inTrack)
194 {
195 _track = inTrack;
196 repaint();
197 }
198
199
200 /**
201 * React to click on profile display
202 */
203 public void mouseClicked(MouseEvent e)
204 {
205 // ignore right clicks
206 if (_track != null && !e.isMetaDown())
207 {
208 int xClick = e.getX();
209 int yClick = e.getY();
210 // Check click is within main area (not in border)
211 if (xClick > BORDER_WIDTH && yClick > BORDER_WIDTH && xClick < (getWidth() - BORDER_WIDTH)
212 && yClick < (getHeight() - BORDER_WIDTH))
213 {
214 // work out which data point is nearest and select it
215 int pointNum = (int) ((e.getX() - BORDER_WIDTH) / _xScaleFactor);
216 // If shift clicked, then extend selection
217 if (e.isShiftDown()) {
218 _trackInfo.extendSelection(pointNum);
219 }
220 else {
221 _trackInfo.selectPoint(pointNum);
222 }
223 }
224 }
225 }
226 }
0 package tim.prune.gui.map;
1
2 /**
3 * Class to act as a source for Cloudmade maps with a given style
4 */
5 public class CloudmadeMapSource extends OsmMapSource
6 {
7 /** Selected style number */
8 private String _style = null;
9 /** Server prefix including API-key unique to Prune application */
10 private static final String SERVER_PREFIX = "tile.cloudmade.com/03d86b66f51f4a3b8c236ac06f2a2e57/";
11
12 /**
13 * Constructor
14 * @param inName name to use for map source
15 * @param inStyle style, given as integer
16 * @param inMaxZoom maximum zoom level, 18 by default
17 */
18 public CloudmadeMapSource(String inName, String inStyle, int inMaxZoom)
19 {
20 // Note: Could check style for valid integer value here
21 super(inName, SERVER_PREFIX + inStyle + "/256/", null, inMaxZoom);
22 _style = inStyle;
23 }
24
25 /**
26 * @return semicolon-separated list of all fields
27 */
28 public String getConfigString()
29 {
30 return "c:" + getName() + ";" + _style + ";" + getMaxZoomLevel();
31 }
32
33 /**
34 * Construct a new map source from its config string
35 * @param inConfigString string from Config, separated by semicolons
36 * @return new map source, or null if not parseable
37 */
38 public static CloudmadeMapSource fromConfig(String inConfigString)
39 {
40 CloudmadeMapSource source = null;
41 if (inConfigString.startsWith("c:"))
42 {
43 String[] items = inConfigString.substring(2).split(";");
44 try {
45 if (items.length == 3) {
46 source = new CloudmadeMapSource(items[0], items[1], Integer.parseInt(items[2]));
47 }
48 } catch (NumberFormatException nfe) {}
49 }
50 return source;
51 }
52 }
0 package tim.prune.gui.map;
1
2 import java.awt.Image;
3 import java.awt.Toolkit;
4 import java.awt.image.ImageObserver;
5 import java.io.File;
6 import java.io.FileOutputStream;
7 import java.io.IOException;
8 import java.io.InputStream;
9 import java.net.URL;
10
11 /**
12 * Class to control the reading and saving of map tiles
13 * to a cache on disk
14 */
15 public class DiskTileCacher implements Runnable
16 {
17 /** URL to get image from */
18 private URL _url = null;
19 /** File to save image to */
20 private File _file = null;
21 /** Observer to be notified */
22 private ImageObserver _observer = null;
23 /** Time limit to cache images for */
24 private static final long CACHE_TIME_LIMIT = 20 * 24 * 60 * 60 * 1000; // 20 days in ms
25
26 /**
27 * Private constructor
28 * @param inUrl URL to get
29 * @param inFile file to save to
30 */
31 private DiskTileCacher(URL inUrl, File inFile, ImageObserver inObserver)
32 {
33 _url = inUrl;
34 _file = inFile;
35 _observer = inObserver;
36 new Thread(this).start();
37 }
38
39 /**
40 * Get the specified tile from the disk cache
41 * @param inBasePath base path to whole disk cache
42 * @param inTilePath relative path to requested tile
43 * @param inCheckAge true to check age of file, false to ignore
44 * @return tile image if available, or null if not there
45 */
46 public static Image getTile(String inBasePath, String inTilePath, boolean inCheckAge)
47 {
48 if (inBasePath == null) {return null;}
49 File tileFile = new File(inBasePath, inTilePath);
50 Image image = null;
51 if (tileFile.exists() && tileFile.canRead() && tileFile.length() > 0) {
52 long fileStamp = tileFile.lastModified();
53 if (!inCheckAge || ((System.currentTimeMillis()-fileStamp) < CACHE_TIME_LIMIT))
54 {
55 try {
56 image = Toolkit.getDefaultToolkit().createImage(tileFile.getAbsolutePath());
57 }
58 catch (Exception e) {}
59 }
60 }
61 return image;
62 }
63
64 /**
65 * Save the specified image tile to disk
66 * @param inUrl url to get image from
67 * @param inBasePath base path to disk cache
68 * @param inTilePath relative path to this tile
69 * @param inObserver observer to inform when load complete
70 */
71 public static void saveTile(URL inUrl, String inBasePath, String inTilePath, ImageObserver inObserver)
72 {
73 if (inBasePath == null || inTilePath == null) {return;}
74 // save file if possible
75 File basePath = new File(inBasePath);
76 if (!basePath.exists() || !basePath.isDirectory() || !basePath.canWrite()) {
77 //System.err.println("Can't write");
78 // Can't write to base path
79 return;
80 }
81 File tileFile = new File(basePath, inTilePath);
82 // Check if this file is already being loaded
83 if (!isBeingLoaded(tileFile))
84 {
85 File dir = tileFile.getParentFile();
86 // Start a new thread to load the image if necessary
87 if (dir.exists() || dir.mkdirs())
88 {
89 new DiskTileCacher(inUrl, tileFile, inObserver);
90 }
91 }
92 }
93
94 /**
95 * Check whether the given tile is already being loaded
96 * @param inFile desired file
97 * @return true if temporary file with this name exists
98 */
99 private static boolean isBeingLoaded(File inFile)
100 {
101 File tempFile = new File(inFile.getAbsolutePath() + ".temp");
102 return tempFile.exists();
103 }
104
105 /**
106 * Run method for loading URL asynchronously and saving to file
107 */
108 public void run()
109 {
110 boolean finished = false;
111 InputStream in = null;
112 FileOutputStream out = null;
113 File tempFile = new File(_file.getAbsolutePath() + ".temp");
114 // Use a synchronized block across all threads to make sure this url is only fetched once
115 synchronized (DiskTileCacher.class) {
116 if (tempFile.exists()) {return;}
117 try {
118 if (!tempFile.createNewFile()) {return;}
119 }
120 catch (Exception e) {return;}
121 }
122 try {
123 // Open streams from URL and to file
124 out = new FileOutputStream(tempFile);
125 in = _url.openStream();
126 int d = 0;
127 // Loop over each byte in the stream (maybe buffering is more efficient?)
128 while ((d = in.read()) >= 0) {
129 out.write(d);
130 }
131 finished = true;
132 } catch (IOException e) {}
133 finally {
134 try {
135 in.close();
136 out.close();
137 if (!finished) {tempFile.delete();}
138 }
139 catch (Exception e) {} // ignore
140 }
141 // Move temp file to desired file location
142 if (!tempFile.renameTo(_file)) {
143 // File couldn't be moved - delete both to be sure
144 tempFile.delete();
145 _file.delete();
146 }
147 // Tell parent that load is finished (parameters ignored)
148 _observer.imageUpdate(null, ImageObserver.ALLBITS, 0, 0, 0, 0);
149 }
150 }
3939 import tim.prune.UpdateMessageBroker;
4040 import tim.prune.config.ColourScheme;
4141 import tim.prune.config.Config;
42 import tim.prune.data.Checker;
4243 import tim.prune.data.Coordinate;
4344 import tim.prune.data.DataPoint;
4445 import tim.prune.data.DoubleRange;
6566 private Selection _selection = null;
6667 /** Previously selected point */
6768 private int _prevSelectedPoint = -1;
68 /** Tile cacher */
69 private MapTileCacher _tileCacher = new MapTileCacher(this);
69 /** Tile manager */
70 private MapTileManager _tileManager = new MapTileManager(this);
7071 /** Image to display */
7172 private BufferedImage _mapImage = null;
7273 /** Slider for transparency */
152153 ItemListener mapCheckListener = new ItemListener() {
153154 public void itemStateChanged(ItemEvent e)
154155 {
155 _tileCacher.clearAll();
156 _tileManager.clearMemoryCaches();
156157 _recalculate = true;
157158 Config.setConfigBoolean(Config.KEY_SHOW_MAP, e.getStateChange() == ItemEvent.SELECTED);
158159 UpdateMessageBroker.informSubscribers(); // to let menu know
371372 _prevSelectedPoint = selectedPoint;
372373 }
373374
374 // Draw the mapImage if necessary
375 // Draw the map contents if necessary
375376 if ((_mapImage == null || _recalculate))
376377 {
377 getMapTiles();
378 paintMapContents();
378379 _scaleBar.updateScale(_mapPosition.getZoom(), _mapPosition.getCentreTileY());
379380 }
380381 // Draw the prepared image onto the panel
405406
406407
407408 /**
408 * Get the map tiles for the current zoom level and given tile parameters
409 */
410 private void getMapTiles()
409 * Paint the map tiles and the points on to the _mapImage
410 */
411 private void paintMapContents()
411412 {
412413 if (_mapImage == null || _mapImage.getWidth() != getWidth() || _mapImage.getHeight() != getHeight())
413414 {
426427
427428 // reset error message
428429 if (!showMap) {_shownOsmErrorAlready = false;}
430 _recalculate = false;
429431 // Only get map tiles if selected
430432 if (showMap)
431433 {
432434 // init tile cacher
433 _tileCacher.centreMap(_mapPosition.getZoom(), _mapPosition.getCentreTileX(), _mapPosition.getCentreTileY());
435 _tileManager.centreMap(_mapPosition.getZoom(), _mapPosition.getCentreTileX(), _mapPosition.getCentreTileY());
434436
435437 boolean loadingFailed = false;
436438 if (_mapImage == null) return;
437439
438 if (_tileCacher.isOverzoomed())
440 if (_tileManager.isOverzoomed())
439441 {
440442 // display overzoom message
441443 g.setColor(COLOR_MESSAGES);
443445 }
444446 else
445447 {
448 int numLayers = _tileManager.getNumLayers();
446449 // Loop over tiles drawing each one
447450 int[] tileIndices = _mapPosition.getTileIndices(getWidth(), getHeight());
448451 int[] pixelOffsets = _mapPosition.getDisplayOffsets(getWidth(), getHeight());
452455 for (int tileY = tileIndices[2]; tileY <= tileIndices[3]; tileY++)
453456 {
454457 int y = (tileY - tileIndices[2]) * 256 - pixelOffsets[1];
455 Image image = _tileCacher.getTile(tileX, tileY);
456 if (image != null) {
457 g.drawImage(image, x, y, 256, 256, null);
458 // Loop over layers
459 for (int l=0; l<numLayers; l++)
460 {
461 Image image = _tileManager.getTile(l, tileX, tileY);
462 if (image != null) {
463 g.drawImage(image, x, y, 256, 256, null);
464 }
458465 }
459466 }
460467 }
484491 // free g
485492 g.dispose();
486493
487 _recalculate = false;
488494 // Zoom to fit if no points found
489495 if (pointsPainted <= 0 && _checkBounds) {
490496 zoomToFit();
918924 _checkBounds = true;
919925 }
920926 if ((inUpdateType & DataSubscriber.MAPSERVER_CHANGED) > 0) {
921 _tileCacher.setTileConfig(new MapTileConfig());
927 _tileManager.resetConfig();
922928 }
923929 repaint();
924930 // enable or disable components
937943 {
938944 int code = inE.getKeyCode();
939945 int currPointIndex = _selection.getCurrentPointIndex();
940 // Check for meta key
941 if (inE.isControlDown())
946 // Check for Ctrl key (for Linux/Win) or meta key (Clover key for Mac)
947 if (inE.isControlDown() || inE.isMetaDown())
942948 {
943949 // Check for arrow keys to zoom in and out
944950 if (code == KeyEvent.VK_UP)
950956 _trackInfo.selectPoint(currPointIndex-1);
951957 else if (code == KeyEvent.VK_RIGHT)
952958 _trackInfo.selectPoint(currPointIndex+1);
959 else if (code == KeyEvent.VK_PAGE_UP)
960 _trackInfo.selectPoint(Checker.getPreviousSegmentStart(
961 _trackInfo.getTrack(), _trackInfo.getSelection().getCurrentPointIndex()));
962 else if (code == KeyEvent.VK_PAGE_DOWN)
963 _trackInfo.selectPoint(Checker.getNextSegmentStart(
964 _trackInfo.getTrack(), _trackInfo.getSelection().getCurrentPointIndex()));
965 // Check for home and end
966 else if (code == KeyEvent.VK_HOME)
967 _trackInfo.selectPoint(0);
968 else if (code == KeyEvent.VK_END)
969 _trackInfo.selectPoint(_trackInfo.getTrack().getNumPoints()-1);
953970 }
954971 else
955972 {
965982 else if (code == KeyEvent.VK_LEFT)
966983 rightwardsPan = -PAN_DISTANCE;
967984 panMap(rightwardsPan, upwardsPan);
968 // Check for delete key to delete current point
969 if (code == KeyEvent.VK_DELETE && currPointIndex >= 0)
970 {
985 // Check for backspace key to delete current point (delete key already handled by menu)
986 if (code == KeyEvent.VK_BACK_SPACE && currPointIndex >= 0) {
971987 _app.deleteCurrentPoint();
972988 }
973989 }
0 package tim.prune.gui.map;
1
2 import java.net.MalformedURLException;
3 import java.net.URL;
4
5 /**
6 * Class to represent any map source, whether an OsmMapSource
7 * or one of the more complicated ones.
8 * Map sources may contain just one or several layers, and may
9 * build their URLs in different ways depending on the source
10 */
11 public abstract class MapSource
12 {
13 /**
14 * @return the number of layers used in this source
15 */
16 public abstract int getNumLayers();
17
18 /**
19 * @return the name of the source
20 */
21 public abstract String getName();
22
23 /**
24 * @return the base url for the specified layer
25 */
26 public abstract String getBaseUrl(int inLayerNum);
27
28 /**
29 * @return the site name for the specified layer
30 */
31 public abstract String getSiteName(int inLayerNum);
32
33 /**
34 * @return the file extension for the specified layer
35 */
36 public abstract String getFileExtension(int inLayerNum);
37
38 /**
39 * Make the URL to get the specified tile
40 * @param inLayerNum number of layer, from 0 (base) to getNumLayers-1 (top)
41 * @param inZoom zoom level
42 * @param inX x coordinate of tile
43 * @param inY y coordinate of tile
44 * @return URL as string
45 */
46 public abstract String makeURL(int inLayerNum, int inZoom, int inX, int inY);
47
48 /**
49 * @return the maximum zoom level for this source
50 */
51 public abstract int getMaxZoomLevel();
52
53 /**
54 * Make a relative file path from the base directory including site name
55 * @param inLayerNum layer number
56 * @param inZoom zoom level
57 * @param inX x coordinate
58 * @param inY y coordinate
59 * @return relative file path as String
60 */
61 public String makeFilePath(int inLayerNum, int inZoom, int inX, int inY)
62 {
63 return getSiteName(inLayerNum) + inZoom + "/" + inX + "/" + inY + getFileExtension(inLayerNum);
64 }
65
66 /**
67 * Checks the given url for having the right prefix and trailing slash
68 * @param inUrl url to check
69 * @return validated url with correct prefix and trailing slash, or null
70 */
71 protected static String fixBaseUrl(String inUrl)
72 {
73 if (inUrl == null || inUrl.equals("")) {return null;}
74 String url = inUrl;
75 // check prefix
76 try {
77 new URL(url);
78 }
79 catch (MalformedURLException e) {
80 // add the http protocol
81 url = "http://" + url;
82 }
83 // check trailing /
84 if (!url.endsWith("/")) {
85 url = url + "/";
86 }
87 return url;
88 }
89
90 /**
91 * Fix the site name by stripping off protocol and www.
92 * This is used to create the file path for disk caching
93 * @param inUrl url to strip
94 * @return stripped url
95 */
96 protected static String fixSiteName(String inUrl)
97 {
98 if (inUrl == null || inUrl.equals("")) {return null;}
99 String url = inUrl.toLowerCase();
100 int idx = url.indexOf("://");
101 if (idx >= 0) {url = url.substring(idx + 3);}
102 if (url.startsWith("www.")) {url = url.substring(4);}
103 return url;
104 }
105
106 /**
107 * @return string which can be written to the Config
108 */
109 public abstract String getConfigString();
110
111 /**
112 * @return semicolon-separated list of base urls in order
113 */
114 public String getSiteStrings()
115 {
116 String s = "";
117 for (int i=0; i<getNumLayers(); i++) {
118 String url = getBaseUrl(i);
119 if (url != null) {s = s + url + ";";}
120 }
121 return s;
122 }
123 }
0 package tim.prune.gui.map;
1
2 import java.util.ArrayList;
3
4 import tim.prune.config.Config;
5
6 /**
7 * Class to hold a library for all the map sources
8 * and provide access to each one
9 */
10 public abstract class MapSourceLibrary
11 {
12 /** list of map sources */
13 private static ArrayList<MapSource> _sourceList = null;
14 /** Number of fixed sources */
15 private static int _numFixedSources = 0;
16
17 // Static block to initialise source list
18 static
19 {
20 _sourceList = new ArrayList<MapSource>();
21 addFixedSources();
22 _numFixedSources = _sourceList.size();
23 addConfigSources();
24 }
25
26 /** Private constructor to block instantiation */
27 private MapSourceLibrary() {}
28
29
30 /** @return number of fixed sources which shouldn't be deleted */
31 public static int getNumFixedSources() {
32 return _numFixedSources;
33 }
34
35 /**
36 * Initialise source list by adding bare minimum
37 */
38 private static void addFixedSources()
39 {
40 _sourceList.add(new OsmMapSource("Mapnik", "http://tile.openstreetmap.org/"));
41 _sourceList.add(new OsmMapSource("Osma", "http://tah.openstreetmap.org/Tiles/tile/"));
42 _sourceList.add(new OsmMapSource("Cyclemap", "http://andy.sandbox.cloudmade.com/tiles/cycle/"));
43 _sourceList.add(new OsmMapSource("Reitkarte", "http://topo.geofabrik.de/hills/",
44 "http://topo.openstreetmap.de/topo/", 18));
45 _sourceList.add(new MffMapSource("Mapsforfree", "http://maps-for-free.com/layer/relief/", ".jpg",
46 "http://maps-for-free.com/layer/water/", ".gif", 11));
47 _sourceList.add(new CloudmadeMapSource("Pale Dawn", "998", 18));
48 }
49
50 /**
51 * Add custom sources from Config to the library
52 */
53 private static void addConfigSources()
54 {
55 String configString = Config.getConfigString(Config.KEY_MAPSOURCE_LIST);
56 if (configString != null && configString.length() > 10)
57 {
58 // Loop over sources in string, separated by vertical bars
59 int splitPos = configString.indexOf('|');
60 while (splitPos > 0)
61 {
62 String sourceString = configString.substring(0, splitPos);
63 MapSource source = OsmMapSource.fromConfig(sourceString);
64 if (source == null) {source = CloudmadeMapSource.fromConfig(sourceString);}
65 if (source != null) {
66 _sourceList.add(source);
67 }
68 configString = configString.substring(splitPos+1);
69 splitPos = configString.indexOf('|');
70 }
71 }
72 }
73
74 /**
75 * @return current number of sources
76 */
77 public static int getNumSources() {
78 return _sourceList.size();
79 }
80
81 /**
82 * Add the given MapSource to the list (at the end)
83 * @param inSource MapSource object
84 */
85 public static void addSource(MapSource inSource) {
86 // Check whether source is already there? Check whether valid?
87 _sourceList.add(inSource);
88 }
89
90 /**
91 * @param inIndex source index number
92 * @return corresponding map source object
93 */
94 public static MapSource getSource(int inIndex)
95 {
96 // Check whether within range
97 if (inIndex < 0 || inIndex >= _sourceList.size()) {return null;}
98 return _sourceList.get(inIndex);
99 }
100
101 /**
102 * Delete the specified source
103 * @param inIndex index of source to delete
104 */
105 public static void deleteSource(int inIndex)
106 {
107 if (inIndex >= _numFixedSources) {
108 _sourceList.remove(inIndex);
109 }
110 }
111
112 /**
113 * Check whether the given name already exists in the library (case-insensitive)
114 * @param inName name to check
115 * @return true if already exists, false otherwise
116 */
117 public static boolean hasSourceName(String inName)
118 {
119 if (inName == null) {return false;}
120 String checkName = inName.toLowerCase().trim();
121 for (int i=0; i<getNumSources(); i++)
122 {
123 String name = getSource(i).getName().toLowerCase();
124 if (name.equals(checkName)) {return true;}
125 }
126 return false;
127 }
128
129 /**
130 * @return String containing all custom-added sources as a |-separated list
131 */
132 public static String getConfigString()
133 {
134 StringBuilder builder = new StringBuilder();
135 for (int i=getNumFixedSources(); i<getNumSources(); i++) {
136 builder.append(getSource(i).getConfigString()).append('|');
137 }
138 return builder.toString();
139 }
140 }
+0
-226
tim/prune/gui/map/MapTileCacher.java less more
0 package tim.prune.gui.map;
1
2 import java.awt.Image;
3 import java.awt.Toolkit;
4 import java.awt.image.ImageObserver;
5 import java.net.MalformedURLException;
6 import java.net.URL;
7
8
9 /**
10 * Class to handle the caching of map tiles from openstreetmap
11 */
12 public class MapTileCacher implements ImageObserver
13 {
14 /** Parent to be informed of updates */
15 private MapCanvas _parent = null;
16 /** Array of images to hold tiles */
17 private Image[] _tiles = new Image[GRID_SIZE * GRID_SIZE];
18 /** Current zoom level */
19 private int _zoom = -1;
20 /** X coordinate of central tile */
21 private int _tileX = -1;
22 /** Y coordinate of central tile */
23 private int _tileY = -1;
24 /** X coord of grid centre */
25 private int _gridCentreX = 0;
26 /** Y coord of grid centre */
27 private int _gridCentreY = 0;
28 /** Tile configuration */
29 private MapTileConfig _tileConfig = null;
30
31 /** Grid size */
32 private static final int GRID_SIZE = 15;
33 /** max zoom level of map tiles */
34 private static final int MAX_TILE_ZOOM = 18;
35
36
37 /**
38 * Constructor
39 * @param inParent parent canvas to be informed of updates
40 */
41 public MapTileCacher(MapCanvas inParent)
42 {
43 _parent = inParent;
44 }
45
46 /**
47 * Recentre the map and clear the cache
48 * @param inZoom zoom level
49 * @param inTileX x coord of central tile
50 * @param inTileY y coord of central tile
51 */
52 public void centreMap(int inZoom, int inTileX, int inTileY)
53 {
54 int shift = Math.max(Math.abs(inTileX-_tileX), Math.abs(inTileY - _tileY));
55 if (shift == 0) {return;}
56 // Clear cache if either zoom has changed or map has jumped too far
57 if (inZoom != _zoom || shift > GRID_SIZE/2)
58 {
59 _zoom = inZoom;
60 clearAll();
61 }
62 _gridCentreX = getCacheCoordinate(_gridCentreX + inTileX - _tileX);
63 _gridCentreY = getCacheCoordinate(_gridCentreY + inTileY - _tileY);
64 _tileX = inTileX;
65 _tileY = inTileY;
66 // Mark boundaries as invalid
67 for (int i=0; i<GRID_SIZE; i++)
68 {
69 _tiles[getArrayIndex(_tileX + GRID_SIZE/2 + 1, _tileY + i - GRID_SIZE/2)] = null;
70 _tiles[getArrayIndex(_tileX + i - GRID_SIZE/2, _tileY + GRID_SIZE/2 + 1)] = null;
71 }
72 }
73
74 /**
75 * Clear all the cached images
76 */
77 public void clearAll()
78 {
79 // Clear all images if zoom changed
80 for (int i=0; i<_tiles.length; i++) {
81 _tiles[i] = null;
82 }
83 }
84
85 /**
86 * @param inX x index of tile
87 * @param inY y index of tile
88 * @return selected tile if already loaded, or null otherwise
89 */
90 public Image getTile(int inX, int inY)
91 {
92 if (_tileConfig == null) {_tileConfig = new MapTileConfig();}
93 int arrayIndex = getArrayIndex(inX, inY);
94 Image image = _tiles[arrayIndex];
95 if (image != null)
96 {
97 // image already finished loading so return it
98 return image;
99 }
100
101 // Protect against zoom > max
102 if (isOverzoomed()) return null;
103
104 // Trigger load if not already triggered
105 // Work out tile coords for URL
106 int urlX = getUrlCoordinate(inX, _zoom);
107 int urlY = getUrlCoordinate(inY, _zoom);
108 try
109 {
110 // Use configured tile server
111 String url = _tileConfig.getUrl() + _zoom + "/" + urlX + "/" + urlY + ".png";
112 // Load image asynchronously, using observer
113 image = Toolkit.getDefaultToolkit().createImage(new URL(url));
114 _tiles[arrayIndex] = image;
115 if (image.getWidth(this) > 0) {return image;}
116 }
117 catch (MalformedURLException urle) {} // ignore
118 return null;
119 }
120
121 /**
122 * @return true if zoom is too high for tiles
123 */
124 public boolean isOverzoomed()
125 {
126 return (_zoom > MAX_TILE_ZOOM);
127 }
128
129 /**
130 * Get the array index for the given coordinates
131 * @param inX x coord of tile
132 * @param inY y coord of tile
133 * @return array index
134 */
135 private int getArrayIndex(int inX, int inY)
136 {
137 //System.out.println("Getting array index for (" + inX + ", " + inY + ") where the centre is at (" + _tileX + ", " + _tileY
138 // + ") and grid coords (" + _gridCentreX + ", " + _gridCentreY + ")");
139 int x = getCacheCoordinate(inX - _tileX + _gridCentreX);
140 int y = getCacheCoordinate(inY - _tileY + _gridCentreY);
141 //System.out.println("Transformed to (" + x + ", " + y + ")");
142 return (x + y * GRID_SIZE);
143 }
144
145 /**
146 * Transform a coordinate from map tiles to array coordinates
147 * @param inTile coordinate of tile
148 * @return coordinate in array (wrapping around cache grid)
149 */
150 private static int getCacheCoordinate(int inTile)
151 {
152 int tile = inTile;
153 while (tile >= GRID_SIZE) {tile -= GRID_SIZE;}
154 while (tile < 0) {tile += GRID_SIZE;}
155 return tile;
156 }
157
158 /**
159 * Make sure a url coordinate is within range
160 * @param inTile coordinate of tile in map system
161 * @param inZoom zoom factor
162 * @return coordinate for url (either vertical or horizontal)
163 */
164 private static int getUrlCoordinate(int inTile, int inZoom)
165 {
166 int mapSize = 1 << inZoom;
167 int coord = inTile;
168 while (coord >= mapSize) {coord -= mapSize;}
169 while (coord < 0) {coord += mapSize;}
170 // coord is now between 0 and mapsize
171 return coord;
172 }
173
174 /**
175 * Convert to string for debug
176 * @see java.lang.Object#toString()
177 */
178 public String toString()
179 {
180 StringBuffer result = new StringBuffer("Grid centre (" + _gridCentreX + "," + _gridCentreY + ") - (" + _tileX + "," + _tileY + ")\n");
181 for (int i=0; i<GRID_SIZE; i++)
182 {
183 for (int j=0; j<GRID_SIZE; j++) {
184 if (i == _gridCentreY && j == _gridCentreX) {
185 result.append(_tiles[j + i*GRID_SIZE] == null?"c":"C");
186 }
187 else {
188 result.append(_tiles[j + i*GRID_SIZE] == null?".":"*");
189 }
190 }
191 result.append("\n");
192 }
193 return result.toString();
194 }
195
196 /**
197 * Method called by image loader to inform of updates to the tiles
198 * @param img the image
199 * @param infoflags flags describing how much of the image is known
200 * @param x ignored
201 * @param y ignored
202 * @param width ignored
203 * @param height ignored
204 * @return false to carry on loading, true to stop
205 */
206 public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
207 {
208 boolean loaded = (infoflags & ImageObserver.ALLBITS) > 0;
209 boolean error = (infoflags & ImageObserver.ERROR) > 0;
210 if (loaded || error) {
211 _parent.tilesUpdated(loaded);
212 }
213 return !loaded;
214 }
215
216 /**
217 * Set or reset the tile config
218 * @param inConfig object containing tile config
219 */
220 public void setTileConfig(MapTileConfig inConfig)
221 {
222 _tileConfig = inConfig;
223 clearAll();
224 }
225 }
+0
-92
tim/prune/gui/map/MapTileConfig.java less more
0 package tim.prune.gui.map;
1
2 import java.net.MalformedURLException;
3 import java.net.URL;
4
5 import tim.prune.config.Config;
6
7 /**
8 * Class to hold the config for the map tiles
9 * and retrieve the correct URL prefix
10 */
11 public class MapTileConfig
12 {
13 /** Index of map server */
14 private int _index = 0;
15 /** Url for other */
16 private String _url = null;
17
18 /** server urls for known maps */
19 private static final String[] SERVER_URLS = {
20 "http://tile.openstreetmap.org/", // mapnik
21 "http://tah.openstreetmap.org/Tiles/tile/", // osma
22 "http://andy.sandbox.cloudmade.com/tiles/cycle/" // cyclemap
23 };
24 /** Index of 'other' server with freeform url */
25 private static final int OTHER_SERVER_NUM = 3;
26
27
28 /**
29 * Default constructor using Config
30 */
31 public MapTileConfig()
32 {
33 _index = Config.getConfigInt(Config.KEY_MAPSERVERINDEX);
34 _url = fixUrl(Config.getConfigString(Config.KEY_MAPSERVERURL));
35 // reset index wrong or if other url too short
36 if (_index < 0 || _index > OTHER_SERVER_NUM ||
37 (_index == OTHER_SERVER_NUM && (_url == null || _url.length() < 5)))
38 {
39 _index = 0;
40 }
41 }
42
43 /**
44 * @return url
45 */
46 public String getUrl()
47 {
48 if (_index == OTHER_SERVER_NUM) {return _url;}
49 return SERVER_URLS[_index];
50 }
51
52 /**
53 * Checks the given url for having the right prefix and trailing slash
54 * @param inUrl url to check
55 * @return validated url with correct prefix and trailing slash, or null
56 */
57 private static String fixUrl(String inUrl)
58 {
59 if (inUrl == null || inUrl.equals("")) {return null;}
60 String url = inUrl;
61 // check prefix
62 try {
63 new URL(url);
64 }
65 catch (MalformedURLException e) {
66 // add the http protocol
67 url = "http://" + url;
68 }
69 // check trailing /
70 if (!url.endsWith("/")) {
71 url = url + "/";
72 }
73 return url;
74 }
75
76 /**
77 * @param inOther other config object
78 * @return true if the objects are exactly the same
79 */
80 public boolean equals(MapTileConfig inOther)
81 {
82 // Other object must be non-null and must have same index
83 if (inOther == null || inOther._index != _index) {return false;}
84 // Check url if other selected
85 if (_index == OTHER_SERVER_NUM) {
86 return inOther._url.equals(_url);
87 }
88 // Not other so must match
89 return true;
90 }
91 }
0 package tim.prune.gui.map;
1
2 import java.awt.Image;
3 import java.awt.Toolkit;
4 import java.awt.image.ImageObserver;
5 import java.net.MalformedURLException;
6 import java.net.URL;
7
8 import tim.prune.config.Config;
9
10 /**
11 * Class responsible for managing the map tiles,
12 * including invoking the correct memory cacher(s) and/or disk cacher(s)
13 */
14 public class MapTileManager implements ImageObserver
15 {
16 /** Parent object to inform when tiles received */
17 private MapCanvas _parent = null;
18 /** Current map source */
19 private MapSource _mapSource = null;
20 /** Array of tile caches, one per layer */
21 private MemTileCacher[] _tempCaches = null;
22 /** Number of layers */
23 private int _numLayers = -1;
24 /** Current zoom level */
25 private int _zoom = 0;
26
27
28 /**
29 * Constructor
30 * @param inParent parent canvas to be informed of updates
31 */
32 public MapTileManager(MapCanvas inParent)
33 {
34 _parent = inParent;
35 resetConfig();
36 }
37
38 /**
39 * Recentre the map
40 * @param inZoom zoom level
41 * @param inTileX x coord of central tile
42 * @param inTileY y coord of central tile
43 */
44 public void centreMap(int inZoom, int inTileX, int inTileY)
45 {
46 _zoom = inZoom;
47 // Pass params onto all memory cachers
48 if (_tempCaches != null) {
49 for (int i=0; i<_tempCaches.length; i++) {
50 _tempCaches[i].centreMap(inZoom, inTileX, inTileY);
51 }
52 }
53 }
54
55 /**
56 * @return true if zoom is too high for tiles
57 */
58 public boolean isOverzoomed()
59 {
60 // Ask current map source what maximum zoom is
61 int maxZoom = (_mapSource == null?0:_mapSource.getMaxZoomLevel());
62 return (_zoom > maxZoom);
63 }
64
65 /**
66 * Clear all the memory caches due to changed config / zoom
67 */
68 public void clearMemoryCaches()
69 {
70 int numLayers = _mapSource.getNumLayers();
71 if (_tempCaches == null || _tempCaches.length != numLayers) {
72 // Ccahers don't match, so need to create the right number of them
73 _tempCaches = new MemTileCacher[numLayers];
74 for (int i=0; i<numLayers; i++) {
75 _tempCaches[i] = new MemTileCacher();
76 }
77 }
78 else {
79 // Cachers already there, just need to be cleared
80 for (int i=0; i<numLayers; i++) {
81 _tempCaches[i].clearAll();
82 }
83 }
84 }
85
86 /**
87 * Reset the map source configuration, apparently it has changed
88 */
89 public void resetConfig()
90 {
91 int sourceNum = Config.getConfigInt(Config.KEY_MAPSOURCE_INDEX);
92 _mapSource = MapSourceLibrary.getSource(sourceNum);
93 if (_mapSource == null) {_mapSource = MapSourceLibrary.getSource(0);}
94 clearMemoryCaches();
95 _numLayers = _mapSource.getNumLayers();
96 }
97
98 /**
99 * @return the number of layers in the map
100 */
101 public int getNumLayers()
102 {
103 return _numLayers;
104 }
105
106 /**
107 * @param inLayer layer number, starting from 0
108 * @param inX x index of tile
109 * @param inY y index of tile
110 * @return selected tile if already loaded, or null otherwise
111 */
112 public Image getTile(int inLayer, int inX, int inY)
113 {
114 // Check first in memory cache for tile
115 MemTileCacher tempCache = _tempCaches[inLayer]; // Should probably guard against nulls and array indexes here
116 Image tile = tempCache.getTile(inX, inY);
117 if (tile != null) {
118 return tile;
119 }
120
121 // Tile wasn't in memory, but maybe it's in disk cache (if there is one)
122 String diskCachePath = Config.getConfigString(Config.KEY_DISK_CACHE);
123 boolean useDisk = (diskCachePath != null);
124 boolean onlineMode = Config.getConfigBoolean(Config.KEY_ONLINE_MODE);
125 if (useDisk)
126 {
127 tile = DiskTileCacher.getTile(diskCachePath, _mapSource.makeFilePath(inLayer, _zoom, inX, inY), onlineMode);
128 if (tile != null) {
129 // Pass tile to memory cache
130 tempCache.setTile(tile, inX, inY);
131 if (tile.getWidth(this) > 0) {return tile;}
132 return null;
133 }
134 }
135 // Tile wasn't in memory or on disk, so if online let's get it
136 if (onlineMode)
137 {
138 try
139 {
140 URL tileUrl = new URL(_mapSource.makeURL(inLayer, _zoom, inX, inY));
141 if (useDisk) {
142 // Copy image directly from URL stream to disk cache
143 DiskTileCacher.saveTile(tileUrl, diskCachePath, _mapSource.makeFilePath(inLayer, _zoom, inX, inY), this);
144 }
145 else {
146 // Load image asynchronously, using observer
147 tile = Toolkit.getDefaultToolkit().createImage(tileUrl);
148 // Pass to memory cache
149 _tempCaches[inLayer].setTile(tile, inX, inY);
150 if (tile.getWidth(this) > 0) {return tile;}
151 }
152 }
153 catch (MalformedURLException urle) {} // ignore
154 }
155 return null;
156 }
157
158 /**
159 * Method called by image loader to inform of updates to the tiles
160 * @param img the image
161 * @param infoflags flags describing how much of the image is known
162 * @param x ignored
163 * @param y ignored
164 * @param width ignored
165 * @param height ignored
166 * @return false to carry on loading, true to stop
167 */
168 public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height)
169 {
170 boolean loaded = (infoflags & ImageObserver.ALLBITS) > 0;
171 boolean error = (infoflags & ImageObserver.ERROR) > 0;
172 if (loaded || error) {
173 _parent.tilesUpdated(loaded);
174 }
175 return !loaded;
176 }
177 }
0 package tim.prune.gui.map;
1
2 import java.awt.Image;
3
4 /**
5 * Class to act as a memory-based map tile cache
6 * For caching of tiles on disk, see the DiskTileCacher class.
7 */
8 public class MemTileCacher
9 {
10 /** Array of images to hold tiles */
11 private Image[] _tiles = new Image[GRID_SIZE * GRID_SIZE];
12 /** Current zoom level */
13 private int _zoom = -1;
14 /** X coordinate of central tile */
15 private int _tileX = -1;
16 /** Y coordinate of central tile */
17 private int _tileY = -1;
18 /** X coord of grid centre */
19 private int _gridCentreX = 0;
20 /** Y coord of grid centre */
21 private int _gridCentreY = 0;
22
23 /** Grid size */
24 private static final int GRID_SIZE = 15;
25
26 /**
27 * Recentre the map and clear the cache
28 * @param inZoom zoom level
29 * @param inTileX x coord of central tile
30 * @param inTileY y coord of central tile
31 */
32 public void centreMap(int inZoom, int inTileX, int inTileY)
33 {
34 int shift = Math.max(Math.abs(inTileX-_tileX), Math.abs(inTileY - _tileY));
35 if (shift == 0) {return;}
36 // Clear cache if either zoom has changed or map has jumped too far
37 if (inZoom != _zoom || shift > GRID_SIZE/2)
38 {
39 _zoom = inZoom;
40 clearAll();
41 }
42 _gridCentreX = getCacheCoordinate(_gridCentreX + inTileX - _tileX);
43 _gridCentreY = getCacheCoordinate(_gridCentreY + inTileY - _tileY);
44 _tileX = inTileX;
45 _tileY = inTileY;
46 // Mark boundaries as invalid
47 for (int i=0; i<GRID_SIZE; i++)
48 {
49 _tiles[getArrayIndex(_tileX + GRID_SIZE/2 + 1, _tileY + i - GRID_SIZE/2)] = null;
50 _tiles[getArrayIndex(_tileX + i - GRID_SIZE/2, _tileY + GRID_SIZE/2 + 1)] = null;
51 }
52 }
53
54 /**
55 * Transform a coordinate from map tiles to array coordinates
56 * @param inTile coordinate of tile
57 * @return coordinate in array (wrapping around cache grid)
58 */
59 private static int getCacheCoordinate(int inTile)
60 {
61 int tile = inTile;
62 while (tile >= GRID_SIZE) {tile -= GRID_SIZE;}
63 while (tile < 0) {tile += GRID_SIZE;}
64 return tile;
65 }
66
67 /**
68 * Get the array index for the given coordinates
69 * @param inX x coord of tile
70 * @param inY y coord of tile
71 * @return array index
72 */
73 private int getArrayIndex(int inX, int inY)
74 {
75 //System.out.println("Getting array index for (" + inX + ", " + inY + ") where the centre is at (" + _tileX + ", " + _tileY
76 // + ") and grid coords (" + _gridCentreX + ", " + _gridCentreY + ")");
77 int x = getCacheCoordinate(inX - _tileX + _gridCentreX);
78 int y = getCacheCoordinate(inY - _tileY + _gridCentreY);
79 //System.out.println("Transformed to (" + x + ", " + y + ")");
80 return (x + y * GRID_SIZE);
81 }
82
83 /**
84 * Clear all the cached images
85 */
86 public void clearAll()
87 {
88 // Clear all images if zoom changed
89 for (int i=0; i<_tiles.length; i++) {
90 _tiles[i] = null;
91 }
92 }
93
94 /**
95 * @param inX x index of tile
96 * @param inY y index of tile
97 * @return selected tile if already loaded, or null otherwise
98 */
99 public Image getTile(int inX, int inY)
100 {
101 return _tiles[getArrayIndex(inX, inY)];
102 }
103
104 /**
105 * Save the specified tile at the given coordinates
106 * @param inTile image to save
107 * @param inX x coordinate of tile
108 * @param inY y coordinate of tile
109 */
110 public void setTile(Image inTile, int inX, int inY)
111 {
112 _tiles[getArrayIndex(inX, inY)] = inTile;
113 }
114 }
0 package tim.prune.gui.map;
1
2 import tim.prune.I18nManager;
3
4 /**
5 * Class to provide a map source for maps-for-free sources
6 * These are double-layer sources with jpg and gif tiles
7 */
8 public class MffMapSource extends MapSource
9 {
10 /** Name for this source */
11 private String _name = null;
12 /** Base urls */
13 private String[] _baseUrls = null;
14 /** Site names */
15 private String[] _siteNames = null;
16 /** File extensions */
17 private String[] _extensions = null;
18 /** Maximum zoom level */
19 private int _maxZoom = 0;
20
21 /**
22 * Constructor giving name, url and maximum zoom
23 * @param inName source name
24 * @param inUrl base url
25 * @param inMaxZoom maximum zoom level
26 */
27 public MffMapSource(String inName, String inUrl1, String inExt1,
28 String inUrl2, String inExt2, int inMaxZoom)
29 {
30 _name = inName;
31 if (_name == null || _name.trim().equals("")) {_name = I18nManager.getText("mapsource.unknown");}
32 _baseUrls = new String[2];
33 _baseUrls[0] = fixBaseUrl(inUrl1);
34 _baseUrls[1] = fixBaseUrl(inUrl2);
35 _siteNames = new String[2];
36 _siteNames[0] = fixSiteName(_baseUrls[0]);
37 _siteNames[1] = fixSiteName(_baseUrls[1]);
38 _extensions = new String[2];
39 _extensions[0] = inExt1;
40 _extensions[1] = inExt2;
41 _maxZoom = inMaxZoom;
42 }
43
44 /**
45 * @return name
46 */
47 public String getName() {
48 return _name;
49 }
50
51 /** Number of layers is always 2 for mff sources */
52 public int getNumLayers() {
53 return 2;
54 }
55
56 /** Get base url for specified layer */
57 public String getBaseUrl(int inLayerNum) {
58 return _baseUrls[inLayerNum];
59 }
60
61 /** site name without protocol or www. */
62 public String getSiteName(int inLayerNum) {
63 return _siteNames[inLayerNum];
64 }
65
66 /**
67 * Make the URL to get the specified tile
68 */
69 public String makeURL(int inLayerNum, int inZoom, int inX, int inY)
70 {
71 return _baseUrls[inLayerNum] + "z" + inZoom + "/row" + inY + "/" + inZoom + "_" + inX + "-" + inY + getFileExtension(inLayerNum);
72 }
73
74 /** Get right file extension for this layer */
75 public final String getFileExtension(int inLayerNum) {
76 return _extensions[inLayerNum];
77 }
78
79 /**
80 * @return maximum zoom level
81 */
82 public final int getMaxZoomLevel()
83 {
84 return _maxZoom;
85 }
86
87 /**
88 * @return semicolon-separated list of all fields
89 */
90 public String getConfigString()
91 {
92 // TODO: Maybe a gui will be necessary for this one day
93 return "not required";
94 }
95 }
0 package tim.prune.gui.map;
1
2 import tim.prune.I18nManager;
3
4 /**
5 * Class to provide a map source for all OSM-like sources
6 * (eg mapnik, opencyclemap, openpistemap etc).
7 * These can be single-layer or double-layer sources with png tiles
8 */
9 public class OsmMapSource extends MapSource
10 {
11 /** Name for this source */
12 private String _name = null;
13 /** Base urls */
14 private String[] _baseUrls = null;
15 /** Site names */
16 private String[] _siteNames = null;
17 /** Maximum zoom level */
18 private int _maxZoom = 0;
19
20 /**
21 * Constructor giving single name and url
22 * @param inName source name
23 * @param inUrl base url
24 */
25 public OsmMapSource(String inName, String inUrl)
26 {
27 this(inName, inUrl, null, 18);
28 }
29
30 /**
31 * Constructor giving name, urls and maximum zoom
32 * @param inName source name
33 * @param inUrl1 base layer url
34 * @param inUrl2 upper layer url
35 * @param inMaxZoom maximum zoom level
36 */
37 public OsmMapSource(String inName, String inUrl1, String inUrl2, int inMaxZoom)
38 {
39 _name = inName;
40 if (_name == null || _name.trim().equals("")) {_name = I18nManager.getText("mapsource.unknown");}
41 _baseUrls = new String[2];
42 _baseUrls[0] = fixBaseUrl(inUrl1);
43 _baseUrls[1] = fixBaseUrl(inUrl2);
44 _siteNames = new String[2];
45 _siteNames[0] = fixSiteName(_baseUrls[0]);
46 _siteNames[1] = fixSiteName(_baseUrls[1]);
47 // Swap layers if second layer given without first
48 if (_baseUrls[0] == null && _baseUrls[1] != null)
49 {
50 _baseUrls[0] = _baseUrls[1];
51 _siteNames[0] = _siteNames[1];
52 _baseUrls[1] = _siteNames[1] = null;
53 }
54 _maxZoom = inMaxZoom;
55 }
56
57 /**
58 * Construct a new map source from its config string
59 * @param inConfigString string from Config, separated by semicolons
60 * @return new map source, or null if not parseable
61 */
62 public static OsmMapSource fromConfig(String inConfigString)
63 {
64 OsmMapSource source = null;
65 if (inConfigString.startsWith("o:"))
66 {
67 String[] items = inConfigString.substring(2).split(";");
68 try {
69 if (items.length == 3) {
70 source = new OsmMapSource(items[0], items[1], null, Integer.parseInt(items[2]));
71 }
72 else if (items.length == 4) {
73 source = new OsmMapSource(items[0], items[1], items[2], Integer.parseInt(items[3]));
74 }
75 } catch (NumberFormatException nfe) {}
76 }
77 return source;
78 }
79
80 /**
81 * @return name
82 */
83 public String getName() {
84 return _name;
85 }
86
87 /** Number of layers */
88 public int getNumLayers() {
89 return _baseUrls[1] == null?1:2;
90 }
91
92 /** Base url for this source */
93 public String getBaseUrl(int inLayerNum) {
94 return _baseUrls[inLayerNum];
95 }
96
97 /** site name without protocol or www. */
98 public String getSiteName(int inLayerNum) {
99 return _siteNames[inLayerNum];
100 }
101
102 /**
103 * Make the URL to get the specified tile
104 */
105 public String makeURL(int inLayerNum, int inZoom, int inX, int inY)
106 {
107 return _baseUrls[inLayerNum] + inZoom + "/" + inX + "/" + inY + getFileExtension(inLayerNum);
108 }
109
110 /** file extension is always png */
111 public final String getFileExtension(int inLayerNum) {
112 return ".png";
113 }
114
115 /**
116 * @return maximum zoom level
117 */
118 public final int getMaxZoomLevel()
119 {
120 return _maxZoom;
121 }
122
123
124 /**
125 * @return semicolon-separated list of all fields
126 */
127 public String getConfigString()
128 {
129 return "o:" + getName() + ";" + getSiteStrings() + getMaxZoomLevel();
130 }
131 }
0 package tim.prune.gui.profile;
1
2 import tim.prune.I18nManager;
3 import tim.prune.data.Altitude;
4 import tim.prune.data.DataPoint;
5 import tim.prune.data.Track;
6
7 /**
8 * Class to provide a source of altitude data for the profile chart
9 */
10 public class AltitudeData extends ProfileData
11 {
12 /** Altitude format for values */
13 private Altitude.Format _altitudeFormat = Altitude.Format.NO_FORMAT;
14
15
16 /**
17 * Constructor
18 * @param inTrack track object
19 */
20 public AltitudeData(Track inTrack) {
21 super(inTrack);
22 }
23
24 /**
25 * Get the data and populate the instance arrays
26 */
27 public void init()
28 {
29 initArrays();
30 _hasData = false;
31 _altitudeFormat = Altitude.Format.NO_FORMAT;
32 if (_track != null) {
33 for (int i=0; i<_track.getNumPoints(); i++)
34 {
35 DataPoint point = _track.getPoint(i);
36 if (point != null && point.hasAltitude())
37 {
38 // Point has an altitude - if it's the first one, use its format
39 if (_altitudeFormat == Altitude.Format.NO_FORMAT)
40 {
41 _altitudeFormat = point.getAltitude().getFormat();
42 _minValue = _maxValue = point.getAltitude().getValue();
43 }
44 // Store the value and maintain max and min values
45 double value = point.getAltitude().getValue(_altitudeFormat);
46 _pointValues[i] = value;
47 if (value < _minValue) {_minValue = value;}
48 if (value > _maxValue) {_maxValue = value;}
49
50 _hasData = true;
51 _pointHasData[i] = true;
52 }
53 }
54 }
55 }
56
57 /**
58 * @return text description including units
59 */
60 public String getLabel()
61 {
62 return I18nManager.getText("fieldname.altitude") + " ("
63 + I18nManager.getText(_altitudeFormat==Altitude.Format.FEET?"units.feet.short":"units.metres.short")
64 + ")";
65 }
66
67 /**
68 * @return key for message when no altitudes present
69 */
70 public String getNoDataKey() {
71 return "display.noaltitudes";
72 }
73 }
0 package tim.prune.gui.profile;
1
2 import java.awt.Color;
3 import java.awt.Dimension;
4 import java.awt.FlowLayout;
5 import java.awt.Graphics;
6 import java.awt.event.ActionEvent;
7 import java.awt.event.ActionListener;
8 import java.awt.event.MouseEvent;
9 import java.awt.event.MouseListener;
10 import javax.swing.JLabel;
11 import javax.swing.JMenuItem;
12 import javax.swing.JPopupMenu;
13
14 import tim.prune.I18nManager;
15 import tim.prune.config.ColourScheme;
16 import tim.prune.config.Config;
17 import tim.prune.data.TrackInfo;
18 import tim.prune.gui.GenericDisplay;
19
20 /**
21 * Chart component for the profile display
22 */
23 public class ProfileChart extends GenericDisplay implements MouseListener
24 {
25 /** Current scale factor in x direction*/
26 private double _xScaleFactor = 0.0;
27 /** Data to show on chart */
28 private ProfileData _data = null;
29 /** Label for chart type, units */
30 private JLabel _label = null;
31 /** Right-click popup menu */
32 private JPopupMenu _popup = null;
33
34 /** Possible scales to use */
35 private static final int[] LINE_SCALES = {10000, 5000, 2000, 1000, 500, 200, 100, 50, 10, 5};
36 /** Border width around black line */
37 private static final int BORDER_WIDTH = 6;
38 /** Minimum size for profile chart in pixels */
39 private static final Dimension MINIMUM_SIZE = new Dimension(200, 110);
40 /** Colour to use for text if no data found */
41 private static final Color COLOR_NODATA_TEXT = Color.GRAY;
42 /** Chart type */
43 private static enum ChartType {ALTITUDE, SPEED};
44
45
46 /**
47 * Constructor
48 * @param inTrackInfo Track info object
49 */
50 public ProfileChart(TrackInfo inTrackInfo)
51 {
52 super(inTrackInfo);
53 _data = new AltitudeData(inTrackInfo.getTrack());
54 addMouseListener(this);
55 setLayout(new FlowLayout(FlowLayout.LEFT));
56 _label = new JLabel("Altitude");
57 add(_label);
58 makePopup();
59 }
60
61
62 /**
63 * Override minimum size method to restrict slider
64 */
65 public Dimension getMinimumSize()
66 {
67 return MINIMUM_SIZE;
68 }
69
70 /**
71 * Override paint method to draw map
72 * @param g Graphics object
73 */
74 public void paint(Graphics g)
75 {
76 super.paint(g);
77 ColourScheme colourScheme = Config.getColourScheme();
78 paintBackground(g, colourScheme);
79 if (_track != null && _track.getNumPoints() > 0)
80 {
81 _data.init();
82 _label.setText(_data.getLabel());
83 int width = getWidth();
84 int height = getHeight();
85
86 // Set up colours
87 final Color barColour = colourScheme.getColour(ColourScheme.IDX_POINT);
88 final Color rangeColour = colourScheme.getColour(ColourScheme.IDX_SELECTION);
89 final Color currentColour = colourScheme.getColour(ColourScheme.IDX_PRIMARY);
90 final Color secondColour = colourScheme.getColour(ColourScheme.IDX_SECONDARY);
91 final Color lineColour = colourScheme.getColour(ColourScheme.IDX_LINES);
92
93 // message if no data for the current field in track
94 if (!_data.hasData())
95 {
96 g.setColor(lineColour);
97 g.drawString(I18nManager.getText(_data.getNoDataKey()), 50, (height+_label.getHeight())/2);
98 paintChildren(g);
99 return;
100 }
101
102 // Find minimum and maximum values to plot
103 double minValue = _data.getMinValue();
104 double maxValue = _data.getMaxValue();
105 if (maxValue <= minValue) {maxValue = minValue + 1;}
106
107 final int numPoints = _track.getNumPoints();
108 _xScaleFactor = 1.0 * (width - 2 * BORDER_WIDTH - 1) / numPoints;
109 int usableHeight = height - 2 * BORDER_WIDTH - _label.getHeight();
110 double yScaleFactor = 1.0 * usableHeight / (maxValue - minValue);
111 int barWidth = (int) (_xScaleFactor + 1.0);
112 int selectedPoint = _trackInfo.getSelection().getCurrentPointIndex();
113 // selection start, end
114 int selectionStart = -1, selectionEnd = -1;
115 if (_trackInfo.getSelection().hasRangeSelected()) {
116 selectionStart = _trackInfo.getSelection().getStart();
117 selectionEnd = _trackInfo.getSelection().getEnd();
118 }
119
120 // horizontal lines for scale - set to round numbers eg 500
121 int lineScale = getLineScale(minValue, maxValue);
122 int scaleValue = (int) (minValue/lineScale + 1) * lineScale;
123 int x = 0, y = 0;
124 double value = 0.0;
125 if (lineScale > 1)
126 {
127 g.setColor(lineColour);
128 while (scaleValue < maxValue)
129 {
130 y = height - BORDER_WIDTH - (int) (yScaleFactor * (scaleValue - minValue));
131 g.drawLine(BORDER_WIDTH + 1, y, width - BORDER_WIDTH - 1, y);
132 scaleValue += lineScale;
133 }
134 }
135
136 try
137 {
138 // loop through points
139 g.setColor(barColour);
140 for (int p = 0; p < numPoints; p++)
141 {
142 x = (int) (_xScaleFactor * p) + 1;
143 if (p == selectionStart)
144 g.setColor(rangeColour);
145 else if (p == (selectionEnd+1))
146 g.setColor(barColour);
147 if (_data.hasData(p))
148 {
149 value = _data.getData(p);
150 y = (int) (yScaleFactor * (value - minValue));
151 g.fillRect(BORDER_WIDTH+x, height-BORDER_WIDTH - y, barWidth, y);
152 }
153 }
154 // current point (make sure it's drawn last)
155 if (_data.hasData(selectedPoint))
156 {
157 x = (int) (_xScaleFactor * selectedPoint) + 1;
158 g.setColor(secondColour);
159 g.fillRect(BORDER_WIDTH + x, height-usableHeight-BORDER_WIDTH+1, barWidth, usableHeight-2);
160 g.setColor(currentColour);
161 value = _data.getData(selectedPoint);
162 y = (int) (yScaleFactor * (value - minValue));
163 g.fillRect(BORDER_WIDTH + x, height-BORDER_WIDTH - y, barWidth, y);
164 }
165 }
166 catch (NullPointerException npe) { // ignore, probably due to data being changed
167 }
168 // Draw numbers on top of the graph to mark scale
169 if (lineScale > 1)
170 {
171 int textHeight = g.getFontMetrics().getHeight();
172 scaleValue = (int) (minValue / lineScale + 1) * lineScale;
173 y = 0;
174 g.setColor(currentColour);
175 while (scaleValue < maxValue)
176 {
177 y = height - BORDER_WIDTH - (int) (yScaleFactor * (scaleValue - minValue));
178 // Limit y so String isn't above border
179 if (y < (BORDER_WIDTH + textHeight)) {
180 y = BORDER_WIDTH + textHeight;
181 }
182 g.drawString(""+scaleValue, BORDER_WIDTH + 5, y);
183 scaleValue += lineScale;
184 }
185 }
186 // Paint label on top
187 paintChildren(g);
188 }
189 }
190
191
192 /**
193 * Paint the background for the chart
194 * @param inG graphics object
195 * @param inColourScheme colour scheme
196 */
197 private void paintBackground(Graphics inG, ColourScheme inColourScheme)
198 {
199 final int width = getWidth();
200 final int height = getHeight();
201 // Get colours
202 final Color borderColour = inColourScheme.getColour(ColourScheme.IDX_BORDERS);
203 final Color backgroundColour = inColourScheme.getColour(ColourScheme.IDX_BACKGROUND);
204 // background
205 inG.setColor(backgroundColour);
206 inG.fillRect(0, 0, width, height);
207 if (width < 2*BORDER_WIDTH || height < 2*BORDER_WIDTH) return;
208 // Display message if no data to be displayed
209 if (_track == null || _track.getNumPoints() <= 0)
210 {
211 inG.setColor(COLOR_NODATA_TEXT);
212 inG.drawString(I18nManager.getText("display.nodata"), 50, height/2);
213 }
214 else {
215 inG.setColor(borderColour);
216 inG.drawRect(BORDER_WIDTH, BORDER_WIDTH + _label.getHeight(),
217 width - 2*BORDER_WIDTH, height-2*BORDER_WIDTH-_label.getHeight());
218 }
219 }
220
221 /**
222 * Make the popup menu for right-clicking the chart
223 */
224 private void makePopup()
225 {
226 _popup = new JPopupMenu();
227 JMenuItem altItem = new JMenuItem(I18nManager.getText("fieldname.altitude"));
228 altItem.addActionListener(new ActionListener() {
229 public void actionPerformed(ActionEvent e)
230 {
231 changeView(ChartType.ALTITUDE);
232 }});
233 _popup.add(altItem);
234 JMenuItem speedItem = new JMenuItem(I18nManager.getText("fieldname.speed"));
235 speedItem.addActionListener(new ActionListener() {
236 public void actionPerformed(ActionEvent e)
237 {
238 changeView(ChartType.SPEED);
239 }});
240 _popup.add(speedItem);
241 }
242
243 /**
244 * Work out the scale for the horizontal lines
245 * @param inMin min value of data
246 * @param inMax max value of data
247 * @return scale separation, or -1 for no scale
248 */
249 private int getLineScale(double inMin, double inMax)
250 {
251 if ((inMax - inMin) < 5 || inMax < 0) {
252 return -1;
253 }
254 int numScales = LINE_SCALES.length;
255 for (int i=0; i<numScales; i++)
256 {
257 int scale = LINE_SCALES[i];
258 int numLines = (int)(inMax / scale) - (int)(inMin / scale);
259 // Check for too many lines
260 if (numLines > 10) return -1;
261 // If more than 1 line then use this scale
262 if (numLines > 1) return scale;
263 }
264 // no suitable scale found so just use minimum
265 return LINE_SCALES[numScales-1];
266 }
267
268
269 /**
270 * Method to inform map that data has changed
271 */
272 public void dataUpdated(byte inUpdateType)
273 {
274 _data.init();
275 repaint();
276 }
277
278 /**
279 * React to click on profile display
280 */
281 public void mouseClicked(MouseEvent e)
282 {
283 if (_track == null || _track.getNumPoints() < 1) {return;}
284 // left clicks
285 if (!e.isMetaDown())
286 {
287 int xClick = e.getX();
288 int yClick = e.getY();
289 // Check click is within main area (not in border)
290 if (xClick > BORDER_WIDTH && yClick > BORDER_WIDTH && xClick < (getWidth() - BORDER_WIDTH)
291 && yClick < (getHeight() - BORDER_WIDTH))
292 {
293 // work out which data point is nearest and select it
294 int pointNum = (int) ((e.getX() - BORDER_WIDTH) / _xScaleFactor);
295 // If shift clicked, then extend selection
296 if (e.isShiftDown()) {
297 _trackInfo.extendSelection(pointNum);
298 }
299 else {
300 _trackInfo.selectPoint(pointNum);
301 }
302 }
303 }
304 else {
305 // right clicks
306 _popup.show(this, e.getX(), e.getY());
307 }
308 }
309
310 /**
311 * Called by clicking on popup menu to change the view
312 * @param inType selected chart type
313 */
314 private void changeView(ChartType inType)
315 {
316 if (inType == ChartType.ALTITUDE && !(_data instanceof AltitudeData))
317 {
318 _data = new AltitudeData(_track);
319 }
320 else if (inType == ChartType.SPEED && !(_data instanceof SpeedData)) {
321 _data = new SpeedData(_track);
322 }
323 _data.init();
324 repaint();
325 }
326
327 /**
328 * mouse enter events ignored
329 */
330 public void mouseEntered(MouseEvent e)
331 {}
332
333 /**
334 * mouse exit events ignored
335 */
336 public void mouseExited(MouseEvent e)
337 {}
338
339 /**
340 * ignore mouse pressed for now too
341 */
342 public void mousePressed(MouseEvent e)
343 {}
344
345 /**
346 * and also ignore mouse released
347 */
348 public void mouseReleased(MouseEvent e)
349 {}
350 }
0 package tim.prune.gui.profile;
1
2 import tim.prune.data.Track;
3
4 /**
5 * Abstract class for all sources of profile data,
6 * including altitudes and speeds
7 */
8 public abstract class ProfileData
9 {
10 /** Track object */
11 protected final Track _track;
12 /** Flag for availability of any data */
13 protected boolean _hasData = false;
14 /** Array of booleans for data per point */
15 protected boolean[] _pointHasData = null;
16 /** Array of values per point */
17 protected double[] _pointValues = null;
18 /** Minimum value for track */
19 protected double _minValue = 0.0;
20 /** Maximum value for track */
21 protected double _maxValue = 0.0;
22
23 /**
24 * Constructor giving track object
25 * @param inTrack track object
26 */
27 public ProfileData(Track inTrack)
28 {
29 _track = inTrack;
30 }
31
32 /**
33 * @return true if this source has any data at all
34 */
35 public boolean hasData() {
36 return _hasData;
37 }
38
39 /**
40 * @param inPointNum index of point
41 * @return true if that point has data
42 */
43 public boolean hasData(int inPointNum)
44 {
45 return (_hasData && _pointHasData != null && inPointNum >= 0
46 && inPointNum < _pointHasData.length && _pointHasData[inPointNum]);
47 }
48
49 /**
50 * @param inPointNum index of point
51 * @return value corresponding to that point
52 */
53 public double getData(int inPointNum)
54 {
55 if (!hasData(inPointNum)) {return 0.0;}
56 return _pointValues[inPointNum];
57 }
58
59 /**
60 * @return minimum value
61 */
62 public double getMinValue() {
63 return _minValue;
64 }
65
66 /**
67 * @return maximum value
68 */
69 public double getMaxValue() {
70 return _maxValue;
71 }
72
73 /**
74 * Get the data from the track and populate the value arrays
75 */
76 public abstract void init();
77
78 /**
79 * @return text for label including units
80 */
81 public abstract String getLabel();
82
83 /**
84 * @return key for message when no data available
85 */
86 public abstract String getNoDataKey();
87
88 /**
89 * Initialise the data arrays
90 */
91 protected void initArrays()
92 {
93 int numTrackPoints = _track.getNumPoints();
94 if (_pointHasData == null || _pointHasData.length != numTrackPoints)
95 {
96 _pointHasData = new boolean[numTrackPoints];
97 _pointValues = new double[numTrackPoints];
98 }
99 }
100 }
0 package tim.prune.gui.profile;
1
2 import tim.prune.I18nManager;
3 import tim.prune.config.Config;
4 import tim.prune.data.DataPoint;
5 import tim.prune.data.Distance;
6 import tim.prune.data.Track;
7 import tim.prune.data.Distance.Units;
8
9 /**
10 * Class to provide a source of speed data for the profile chart
11 */
12 public class SpeedData extends ProfileData
13 {
14 /** Flag for metric units */
15 private boolean _metric = true;
16
17 /**
18 * Constructor
19 * @param inTrack track object
20 */
21 public SpeedData(Track inTrack) {
22 super(inTrack);
23 }
24
25 /**
26 * Get the data and populate the instance arrays
27 */
28 public void init()
29 {
30 initArrays();
31 _metric = Config.getConfigBoolean(Config.KEY_METRIC_UNITS);
32 _hasData = false;
33 _minValue = _maxValue = 0.0;
34 if (_track != null) {
35 DataPoint prevPrevPoint = null, prevPoint = null, point = null;
36 for (int i=0; i<_track.getNumPoints(); i++)
37 {
38 point = _track.getPoint(i);
39 if (prevPrevPoint != null && prevPrevPoint.hasTimestamp()
40 && prevPoint != null && prevPoint.hasTimestamp()
41 && point != null && point.hasTimestamp())
42 {
43 // All three points have timestamps
44 double seconds = point.getTimestamp().getSecondsSince(prevPrevPoint.getTimestamp());
45 if (seconds > 0)
46 {
47 double distInRads = DataPoint.calculateRadiansBetween(prevPrevPoint, prevPoint)
48 + DataPoint.calculateRadiansBetween(prevPoint, point);
49 double dist = Distance.convertRadiansToDistance(distInRads, _metric?Units.KILOMETRES:Units.MILES);
50 // Store the value and maintain max and min values
51 double value = dist / seconds * 60.0 * 60.0;
52 _pointValues[i-1] = value;
53 if (value < _minValue || _minValue == 0.0) {_minValue = value;}
54 if (value > _maxValue) {_maxValue = value;}
55
56 _hasData = true;
57 _pointHasData[i-1] = true;
58 }
59 }
60 // Exchange points
61 prevPrevPoint = prevPoint;
62 prevPoint = point;
63 }
64 }
65 }
66
67 /**
68 * @return text description including units
69 */
70 public String getLabel()
71 {
72 return I18nManager.getText("fieldname.speed") + " ("
73 + I18nManager.getText(_metric?"units.kmh":"units.mph") + ")";
74 }
75
76 /**
77 * @return key for message when no speeds present
78 */
79 public String getNoDataKey() {
80 return "display.notimestamps";
81 }
82 }
1010 * This is required by Debian to divert Exif handling
1111 * to the external libmetadata-extractor-java library
1212 * instead of the included modified routines.
13 *
13 *
1414 * To use the internal routines, set the USE_INTERNAL_LIBRARY flag to true
1515 * and include the internal classes in the compiled jar.
1616 * To use the external library, set the USE_INTERNAL_LIBRARY flag to false
22
33 # Menu entries
44 menu.file=L\u00eaer
5 menu.file.open=Open L\u00eaer
65 menu.file.addphotos=Voeg Fotos By
76 menu.file.save=Stoor
87 menu.file.exit=Gaan Uit
9 menu.edit=Redigeer
10 menu.edit.undo=Herroep
11 menu.edit.clearundo=Herroep Lys Skoonmaak
12 menu.edit.editpoint=Redigeer Punt
13 menu.edit.deletepoint=Punt Uitvee
14 menu.edit.deleterange=Reeks Uitvee
15 menu.edit.deletemarked=Gemerkde Punt Uitvee
16 menu.edit.interpolate=Interpoleer
17 menu.edit.average=Gemiddelde Seleksie
18 menu.edit.reverse=Reeks Omkeer
19 menu.edit.mergetracksegments=Saamvoeg van spoor segmente
20 menu.edit.rearrange=Herrangskik bakens
21 menu.edit.rearrange.start=Bakens na begin van l\u00eaer
22 menu.edit.rearrange.end=Bakens na einde van l\u00eaer
23 menu.edit.rearrange.nearest=Beweeg elk na naaste spoor punt
24 menu.edit.cutandmove=Sny en skuif seleksie
25 menu.select=Selekteer
26 menu.select.all=Selekteer Alles
27 menu.select.none=Selekteer Niks
28 menu.select.start=Stel Reeks Begin
29 menu.select.end=Stel Reeks Einde
8 menu.track.undo=Herroep
9 menu.track.clearundo=Herroep Lys Skoonmaak
10 menu.point.editpoint=Redigeer Punt
11 menu.point.deletepoint=Punt Uitvee
12 menu.range.deleterange=Reeks Uitvee
13 menu.track.deletemarked=Gemerkde Punt Uitvee
14 menu.range.interpolate=Interpoleer
15 menu.range.average=Gemiddelde Seleksie
16 menu.range.reverse=Reeks Omkeer
17 menu.range.mergetracksegments=Saamvoeg van spoor segmente
18 menu.track.rearrange=Herrangskik bakens
19 menu.track.rearrange.start=Bakens na begin van l\u00eaer
20 menu.track.rearrange.end=Bakens na einde van l\u00eaer
21 menu.track.rearrange.nearest=Beweeg elk na naaste spoor punt
22 menu.range.cutandmove=Sny en skuif seleksie
23 menu.range=Reeks
24 menu.point=Punt
25 menu.range.all=Selekteer Alles
26 menu.range.none=Selekteer Niks
27 menu.range.start=Stel Reeks Begin
28 menu.range.end=Stel Reeks Einde
3029 menu.photo=Foto
3130 menu.photo.saveexif=Stoor na EXIF
3231 menu.photo.connect=Las foto by huidige punt
3938 menu.view.browser.mapquest=Mapquest
4039 menu.view.browser.yahoo=Yahoo Kaarte
4140 menu.view.browser.bing=Bing Kaarte
41 menu.settings=Stellings
4242 menu.help=Hulp
4343 # Popup menu for map
4444 menu.map.zoomin=Zoom in
4949 menu.map.autopan=Automatiese Skuif van Kyk Venster
5050 menu.map.showmap=Wys Kaart
5151
52 # Alt keys for menus
53 altkey.menu.file=L
54 altkey.menu.range=R
55 altkey.menu.point=P
56 altkey.menu.view=K
57 altkey.menu.photo=F
58 altkey.menu.settings=S
59 altkey.menu.help=H
60
61 # Ctrl shortcuts for menu items
62 shortcut.menu.file.open=O
63 shortcut.menu.file.load=L
64 shortcut.menu.file.save=S
65 shortcut.menu.track.undo=Z
66 shortcut.menu.edit.compress=C
67 shortcut.menu.range.all=A
68 shortcut.menu.help.help=H
69
5270 # Functions
71 function.open=Open L\u00eaer
5372 function.loadfromgps=Laai van GPS data
5473 function.sendtogps=Stuur van GPS data
5574 function.exportkml=KML Uitvoer
22
33 # Menu entries
44 menu.file=Datei
5 menu.file.open=Datei öffnen
65 menu.file.addphotos=Fotos laden
76 menu.file.save=Speichern
87 menu.file.exit=Beenden
98 menu.track=Track
10 menu.edit.undo=Rückgängig
11 menu.edit.clearundo=Liste der letzten Änderungen löschen
12 menu.edit.editpoint=Punkt bearbeiten
13 menu.edit.deletepoint=Punkt löschen
14 menu.edit.deleterange=Bereich löschen
15 menu.edit.deletemarked=Komprimierte Punkte löschen
16 menu.edit.interpolate=Interpolieren
17 menu.edit.average=Durchschnitt berechnen
18 menu.edit.reverse=Bereich umkehren
19 menu.edit.mergetracksegments=Trackabschnitte verbinden
20 menu.edit.rearrange=Wegpunkte reorganisieren
21 menu.edit.rearrange.start=Alle Wegpunkte zum Anfang
22 menu.edit.rearrange.end=Alle Wegpunkte ans Ende
23 menu.edit.rearrange.nearest=Jeden Wegpunkt zum nächsten Trackpunkt verschieben
24 menu.edit.cutandmove=Schneiden und verschieben
9 menu.track.undo=Rückgängig
10 menu.track.clearundo=Liste der letzten Änderungen löschen
11 menu.track.deletemarked=Komprimierte Punkte löschen
12 menu.track.rearrange=Wegpunkte reorganisieren
13 menu.track.rearrange.start=Alle Wegpunkte zum Anfang
14 menu.track.rearrange.end=Alle Wegpunkte ans Ende
15 menu.track.rearrange.nearest=Jeden Wegpunkt zum nächsten Trackpunkt verschieben
2516 menu.range=Bereich
17 menu.range.all=Alles markieren
18 menu.range.none=Nichts markieren
19 menu.range.start=Startpunkt setzen
20 menu.range.end=Endpunkt setzen
21 menu.range.deleterange=Bereich löschen
22 menu.range.interpolate=Interpolieren
23 menu.range.average=Durchschnitt berechnen
24 menu.range.reverse=Bereich umkehren
25 menu.range.mergetracksegments=Trackabschnitte verbinden
26 menu.range.cutandmove=Schneiden und verschieben
2627 menu.point=Punkt
27 menu.select.all=Alles markieren
28 menu.select.none=Nichts markieren
29 menu.select.start=Startpunkt setzen
30 menu.select.end=Endpunkt setzen
28 menu.point.editpoint=Punkt bearbeiten
29 menu.point.deletepoint=Punkt löschen
3130 menu.photo=Foto
3231 menu.photo.saveexif=Exif Daten speichern
3332 menu.photo.connect=Mit Punkt verknüpfen
3635 menu.view=Ansicht
3736 menu.view.browser=Karte in Browser
3837 menu.settings=Einstellungen
38 menu.settings.onlinemode=Karten aus dem Internet laden
3939 menu.help=Hilfe
4040 # Popup menu for map
4141 menu.map.zoomin=Hineinzoomen
6161 shortcut.menu.file.open=O
6262 shortcut.menu.file.load=L
6363 shortcut.menu.file.save=S
64 shortcut.menu.edit.undo=Z
64 shortcut.menu.track.undo=Z
6565 shortcut.menu.edit.compress=K
66 shortcut.menu.select.all=A
66 shortcut.menu.range.all=A
6767 shortcut.menu.help.help=H
6868
6969 # Functions
70 function.open=Datei öffnen
7071 function.loadfromgps=Vom GPS laden
7172 function.sendtogps=zum GPS schicken
7273 function.exportkml=KML exportieren
8990 function.setcolours=Farben einstellen
9091 function.setlanguage=Sprache einstellen
9192 function.getgpsies=Gpsies Tracks holen
93 function.lookupsrtm=Höhendaten von SRTM holen
9294 function.duplicatepoint=Punkt verdoppeln
9395 function.correlatephotos=Fotos korrelieren
9496 function.rearrangephotos=Fotos reorganisieren
100102 function.about=Ãœber Prune
101103 function.checkversion=Nach neuen Versionen suchen
102104 function.saveconfig=Einstellungen speichern
105 function.diskcache=Karten auf Disk speichern
103106
104107 # Dialogs
105108 dialog.exit.confirm.title=Prune beenden
125128 dialog.openoptions.deliminfo.fields=Feldern
126129 dialog.openoptions.deliminfo.norecords=Keine Rekords
127130 dialog.openoptions.altitudeunits=Höhe Maßeinheiten
131 dialog.open.contentsdoubled=Diese Datei enthält zwei Kopien von jedem Punkt,\neinmal als Waypoint und einmal als Trackpunkt.
128132 dialog.jpegload.subdirectories=Unterordner mit durchsuchen
129133 dialog.jpegload.loadjpegswithoutcoords=Auch Fotos ohne Koordinaten laden
130134 dialog.jpegload.loadjpegsoutsidearea=Auch Fotos ausserhalb vom Track laden
232236 dialog.distances.currentpoint=Aktueller Punkt
233237 dialog.distances.toofewpoints=Diese Funktion braucht Wegpunkte um die Distanzen zu berechnen
234238 dialog.fullrangedetails.intro=Hier sind die Details vom markierten Bereich
235 dialog.setmapbg.cyclemap=Fahrradkarte
236 dialog.setmapbg.other=Andere
237 dialog.setmapbg.server=Server URL
239 dialog.setmapbg.intro=Eine von den Quellen auswählen, oder eine neue hinzufügen
240 dialog.addmapsource.title=Neue Kartequelle hinzufügen
241 dialog.addmapsource.sourcename=Sourcename
242 dialog.addmapsource.layer1url=URL für erste Ebene
243 dialog.addmapsource.layer2url=URL für obere Ebene (falls nötig)
244 dialog.addmapsource.maxzoom=Maximales Zoom
245 dialog.addmapsource.cloudstyle=Stilnummer
246 dialog.addmapsource.noname=Unbenannt
238247 dialog.gpsies.column.name=Track Name
239248 dialog.gpsies.column.length=Länge
240249 dialog.gpsies.description=Beschreibung
321330 dialog.checkversion.releasedate2=veröffentlicht worden.
322331 dialog.checkversion.download=Um die neue Version herunterzuladen, gehen Sie zu http://activityworkshop.net/software/prune/download.html.
323332 dialog.keys.intro=Anstatt die Maus können Sie diesen Taste-Kombinationen nutzen
324 dialog.keys.keylist=<table><tr><td>Pfeil Tasten</td><td>Karte verschieben</td></tr><tr><td>Strg + links, rechts Pfeil</td><td>Vorherigen oder nächsten Punkt markieren</td></tr><tr><td>Strg + auf, abwärts Pfeil</td><td>Ein- oder Auszoomen</td></tr><tr><td>Entf</td><td>Aktuellen Punkt entfernen</td></tr></table>
333 dialog.keys.keylist=<table><tr><td>Pfeil Tasten</td><td>Karte verschieben</td></tr><tr><td>Strg + links, rechts Pfeil</td><td>Vorherigen oder nächsten Punkt markieren</td></tr><tr><td>Strg + auf, abwärts Pfeil</td><td>Ein- oder Auszoomen</td></tr><tr><td>Strg + Bild auf, ab</td><td>Vorherigen oder nächsten Segment markieren</td></tr><tr><td>Strg + Pos1, Ende</td><td>Ersten oder letzten Punkt markieren</td></tr><tr><td>Entf</td><td>Aktuellen Punkt entfernen</td></tr></table>
325334 dialog.saveconfig.desc=Die folgende Einstellungen können gespeichert werden :
326335 dialog.saveconfig.prune.trackdirectory=Datenverzeichnis
327336 dialog.saveconfig.prune.photodirectory=Fotoverzeichnis
334343 dialog.saveconfig.prune.gnuplotpath=Gnuplot Pfad
335344 dialog.saveconfig.prune.gpsbabelpath=Gpsbabel Pfad
336345 dialog.saveconfig.prune.exiftoolpath=Exiftool Pfad
337 dialog.saveconfig.prune.mapserverindex=Kartenserver Index
338 dialog.saveconfig.prune.mapserverurl=Kartenserver URL
346 dialog.saveconfig.prune.mapsource=Kartenserver Index
347 dialog.saveconfig.prune.mapsourcelist=Kartenservers
348 dialog.saveconfig.prune.diskcache=Kartenordner
339349 dialog.saveconfig.prune.kmzimagewidth=Bildbreite in KMZ
340350 dialog.saveconfig.prune.kmzimageheight=Bildhöhe in KMZ
341351 dialog.saveconfig.prune.colourscheme=Farbenschema
342352 dialog.saveconfig.prune.kmltrackcolour=KML Trackfarbe
343353 dialog.setpaths.intro=Sie können hier die Pfade für externe Applikationen setzen:
354 dialog.setpaths.found=Pfad gefunden?
344355 dialog.addaltitude.noaltitudes=Der markierten Bereich enthält keine Höhenangaben
345356 dialog.addaltitude.desc=Höhenverschiebung aufzurechnen
346357 dialog.setcolours.intro=Klicken Sie auf einer Farbe um sie zu ändern
361372 dialog.setlanguage.language=Sprache
362373 dialog.setlanguage.languagefile=Sprache Datei
363374 dialog.setlanguage.endmessage=Nun speichern Sie Ihre Einstellungen und starten Sie Prune neu\num die neue Sprache zu verwenden.
375 dialog.diskcache.save=Karten zum Disk speichern
376 dialog.diskcache.dir=Kartenordner
377 dialog.diskcache.createdir=Ordner kreieren
378 dialog.diskcache.nocreate=Ordner wurde nicht kreiert
364379
365380 # 3d window
366381 dialog.3d.title=Prune 3D Ansicht
397412 confirm.createpoint=Punkt kreiert
398413 confirm.rotatephoto=Foto umgedreht
399414 confirm.running=In Bearbeitung ...
415 confirm.lookupsrtm1=Es wurde
416 confirm.lookupsrtm2=Höhenwerte gefunden
400417
401418 # Buttons
402419 button.ok=OK
426443 button.check=Prüfen
427444 button.resettodefaults=Zurücksetzen
428445 button.browse=Durchsuchen...
446 button.addnew=Hinzufügen
447 button.delete=Entfernen
429448
430449 # File types
431450 filetype.txt=TXT Dateien
440459 # Display components
441460 display.nodata=Keine Daten geladen
442461 display.noaltitudes=Track enthält keine Höhenangaben
462 display.notimestamps=Track enthält keine Zeitstempeln
443463 details.trackdetails=Details vom Track
444464 details.notrack=Kein Track geladen
445465 details.track.points=Punkte
465485 display.range.time.days=T
466486 details.range.avespeed=Geschwindigkeit
467487 details.range.avemovingspeed=Geschwindigkeit unterwegs
488 details.range.maxspeed=Höchstgeschwindigkeit
468489 details.range.numsegments=Anzahl Abschnitte
469490 details.range.pace=Tempo
470491 details.range.gradient=Gefälle
539560 undo.rotatephoto=Foto umdrehen
540561 undo.createpoint=Punkt erzeugen
541562 undo.convertnamestotimes=Namen in Zeitstempeln verwandeln
563 undo.lookupsrtm=Höhendaten von SRTM holen
542564
543565 # Error messages
544566 error.save.dialogtitle=Fehler beim Speichern
576598 error.osmimage.failed=Laden von Karten-Bildern fehlgeschlagen. Bitte prüfen Sie die Internetverbindung.
577599 error.language.wrongfile=Die ausgewählte Datei scheint keine Sprache-Datei für Prune zu sein
578600 error.convertnamestotimes.nonames=Keine Namen konnten verwandelt werden
601 error.lookupsrtm.none=Keine Höhendaten gefunden
22
33 # Menu entries
44 menu.file=File
5 menu.file.open=File öffne
65 menu.file.addphotos=Fötelis innätue
76 menu.file.save=Speichere
87 menu.file.exit=Beände
98 menu.track=Track
10 menu.edit.undo=Undo
11 menu.edit.clearundo=Undo-Liste lösche
12 menu.edit.editpoint=Punkt editiere
13 menu.edit.deletepoint=Punkt lösche
14 menu.edit.deleterange=Beriich lösche
15 menu.edit.deletemarked=Komprimierte Punkte lösche
16 menu.edit.interpolate=Interpoliere
17 menu.edit.average=Durchschnitt uusrächne
18 menu.edit.reverse=Beriich umdrähie
19 menu.edit.mergetracksegments=Track Segmänte merge
20 menu.edit.rearrange=Waypoints reorganisiere
21 menu.edit.rearrange.start=Alli zum Aafang
22 menu.edit.rearrange.end=Alli zum Ände
23 menu.edit.rearrange.nearest=Jede zum nöchsti Trackpunkt
24 menu.edit.cutandmove=Schniide und move
9 menu.track.undo=Undo
10 menu.track.clearundo=Undo-Liste lösche
11 menu.track.deletemarked=Komprimierte Punkte lösche
12 menu.track.rearrange=Waypoints reorganisiere
13 menu.track.rearrange.start=Alli zum Aafang
14 menu.track.rearrange.end=Alli zum Ände
15 menu.track.rearrange.nearest=Jede zum nöchsti Trackpunkt
2516 menu.range=Beriich
17 menu.range.all=Alles selektiere
18 menu.range.none=Nüüt selektiere
19 menu.range.start=Start setzä
20 menu.range.end=Stopp setzä
21 menu.range.deleterange=Beriich lösche
22 menu.range.interpolate=Interpoliere
23 menu.range.average=Durchschnitt uusrächne
24 menu.range.reverse=Beriich umdrähie
25 menu.range.mergetracksegments=Track Segmänte merge
26 menu.range.cutandmove=Schniide und move
2627 menu.point=Punkt
27 menu.select.all=Alles selektiere
28 menu.select.none=Nüüt selektiere
29 menu.select.start=Start setzä
30 menu.select.end=Stopp setzä
28 menu.point.editpoint=Punkt editiere
29 menu.point.deletepoint=Punkt lösche
3130 menu.photo=Föteli
3231 menu.photo.saveexif=Exif Date speicherä
3332 menu.photo.connect=Mitem Punkt verbindä
3635 menu.view=Aasicht
3736 menu.view.browser=Karte inem Browser
3837 menu.settings=Iistellige
38 menu.settings.onlinemode=Karte uusem Internet lade
3939 menu.help=Hilfe
4040 # Popup menu for map
4141 menu.map.zoomin=Innezoome
6161 shortcut.menu.file.open=O
6262 shortcut.menu.file.load=L
6363 shortcut.menu.file.save=S
64 shortcut.menu.edit.undo=Z
64 shortcut.menu.track.undo=Z
6565 shortcut.menu.edit.compress=K
66 shortcut.menu.select.all=A
66 shortcut.menu.range.all=A
6767 shortcut.menu.help.help=H
6868
6969 # Functions
70 function.open=File öffne
7071 function.loadfromgps=uusem GPS lade
7172 function.sendtogps=zum GPS schicke
7273 function.exportkml=KML exportierä
8586 function.fullrangedetails=Zuesätzlichi Beriichinfos
8687 function.setmapbg=Karte Hintegrund setzä
8788 function.getgpsies=Gpsies Tracks holä
89 function.lookupsrtm=Höhendate vonem SRTM hole
8890 function.duplicatepoint=Punkt verdopplä
8991 function.correlatephotos=Fötelis korrelierä
9092 function.rearrangephotos=Fötelis reorganisierä
100102 function.about=Ãœber Prune
101103 function.checkversion=Pruef nach ne noie Version
102104 function.saveconfig=Iistellige speichere
105 function.diskcache=Karte uufem Disk speichere
103106
104107 # Dialogs
105108 dialog.exit.confirm.title=Prune beände
125128 dialog.openoptions.deliminfo.fields=Fäldere
126129 dialog.openoptions.deliminfo.norecords=Kei Rekords
127130 dialog.openoptions.altitudeunits=Höchi Masseiheite
131 dialog.open.contentsdoubled=Dieses File hät zwei Kopien von jädem Punkt,\neimol als Waypoint und eimol als Trackpunkt.
128132 dialog.jpegload.subdirectories=Subordnern au
129133 dialog.jpegload.loadjpegswithoutcoords=Au Fötelis ohni Koordinate
130134 dialog.jpegload.loadjpegsoutsidearea=Au Fötelis uuserhalb vonem Track
232236 dialog.distances.currentpoint=Aktuelli Punkt
233237 dialog.distances.toofewpoints=d'Funktion bruucht Waypoints um die Dischtanze z berächne
234238 dialog.fullrangedetails.intro=Hier sind die Infos vonem aktuelli Beriich
235 dialog.setmapbg.cyclemap=Velokarte
236 dialog.setmapbg.other=Anderi
237 dialog.setmapbg.server=Server URL
239 dialog.setmapbg.intro=Eini von den Quällen uuswähle, oder eini neui hinzuefüge
240 dialog.addmapsource.title=Neui Kartequälle hinzuefüge
241 dialog.addmapsource.sourcename=Sourcename
242 dialog.addmapsource.layer1url=URL für erschti Ebene
243 dialog.addmapsource.layer2url=URL für oberi Ebene (falls nötig)
244 dialog.addmapsource.maxzoom=Maximali Zoom
245 dialog.addmapsource.cloudstyle=Stilnummere
246 dialog.addmapsource.noname=Unbenannt
238247 dialog.gpsies.column.name=Track Name
239248 dialog.gpsies.column.length=Länge
240249 dialog.gpsies.description=Beschriebig
321330 dialog.checkversion.releasedate2=ussecho.
322331 dialog.checkversion.download=Um die noii Version runterzlade, schauet Sie na http://activityworkshop.net/software/prune/download.html.
323332 dialog.keys.intro=Aastatt d'Muus könnet Sie diese Tastekombinationen nutze
324 dialog.keys.keylist=<table><tr><td>Pfiil Taste</td><td>Karte verschiebe</td></tr><tr><td>Strg + links, rächts Pfiil</td><td>Vorherigi oder nöchsti Punkt markiere</td></tr><tr><td>Strg + uuf, aba Pfiil</td><td>Ii- oder Uusezoome</td></tr><tr><td>Entf</td><td>Aktuelli Punkt lösche</td></tr></table>
333 dialog.keys.keylist=<table><tr><td>Pfiil Taste</td><td>Karte verschiebe</td></tr><tr><td>Strg + links, rächts Pfiil</td><td>Vorherigi oder nöchsti Punkt markiere</td></tr><tr><td>Strg + uuf, aba Pfiil</td><td>Ii- oder Uusezoome</td></tr><tr><td>Strg + Bild uuf, ab</td><td>Vorherigi oder nöchsti Segmänt markiere</td></tr><tr><td>Strg + Pos1, Ende</td><td>Erschti oder letschti Punkt markiere</td></tr><tr><td>Entf</td><td>Aktuelli Punkt lösche</td></tr></table>
325334 dialog.saveconfig.desc=Die folgendi Iinstellige könne gspeicheret werde :
326335 dialog.saveconfig.prune.trackdirectory=Trackverzeichnis
327336 dialog.saveconfig.prune.photodirectory=Föteliverzeichnis
334343 dialog.saveconfig.prune.gnuplotpath=Gnuplot Pfad
335344 dialog.saveconfig.prune.gpsbabelpath=Gpsbabel Pfad
336345 dialog.saveconfig.prune.exiftoolpath=Exiftool Pfad
337 dialog.saveconfig.prune.mapserverindex=Kartenserver Index
338 dialog.saveconfig.prune.mapserverurl=Kartenserver URL
346 dialog.saveconfig.prune.mapsource=Kartenserver Index
347 dialog.saveconfig.prune.mapsourcelist=Kartenservers
348 dialog.saveconfig.prune.diskcache=Kartenordner
339349 dialog.saveconfig.prune.kmzimagewidth=Bildbreiti im KMZ
340350 dialog.saveconfig.prune.kmzimageheight=Bildhöchi im KMZ
341351 dialog.saveconfig.prune.colourscheme=Farbeschema
342352 dialog.saveconfig.prune.kmltrackcolour=KML Trackfarb
343353 dialog.setpaths.intro=Sie könnet dann die Pfade für dia Applikatione setzä:
354 dialog.setpaths.found=Pfad gfunde?
344355 dialog.addaltitude.noaltitudes=Dr seläktierte Beriich hät keini Höchiinformation
345356 dialog.addaltitude.desc=Höchiverschiebig zuzutue
346357 dialog.setcolours.intro=Klicket Sie uuf ne Farb um sie z'verändere
361372 dialog.setlanguage.language=Sproch
362373 dialog.setlanguage.languagefile=Sproch Datei
363374 dialog.setlanguage.endmessage=Jetze speicheret Sie Ihri Iistellige und startet Sie Prune neu\num t noii Sproch z' verwände.
375 dialog.diskcache.save=Karten uufem Disk speichere
376 dialog.diskcache.dir=Kartenordner
377 dialog.diskcache.createdir=Ordner kreiere
378 dialog.diskcache.nocreate=Ordner isch nöd kreiert worde
364379
365380 # 3d window
366381 dialog.3d.title=Prune Drüü-d Aasicht
397412 confirm.createpoint=Punkt kreiert worde
398413 confirm.rotatephoto=Föteli umgedräit worde
399414 confirm.running=Am Laufe ...
415 confirm.lookupsrtm1=Es sin
416 confirm.lookupsrtm2=Höhenwerte gfunde
400417
401418 # Buttons
402419 button.ok=OK
426443 button.check=Prüefa
427444 button.resettodefaults=Zurücksetzä
428445 button.browse=Durasuechä...
446 button.addnew=Hinzuefügä
447 button.delete=Entfärnä
429448
430449 # File types
431450 filetype.txt=TXT Dateie
440459 # Display components
441460 display.nodata=Kei Date glade worde
442461 display.noaltitudes=Track hät kei Höhi Date
462 display.notimestamps=Track hät kei Ziitstämple
443463 details.trackdetails=Details vom Track
444464 details.notrack=Kei Track glade worde
445465 details.track.points=Punkte
465485 display.range.time.days=T
466486 details.range.avespeed=Gschwindikeit
467487 details.range.avemovingspeed=Gschwindikeit ufem Wäg
488 details.range.maxspeed=Höchstgschwindikeit
468489 details.range.numsegments=Aazahl Segmänte
469490 details.range.pace=Tempo
470491 details.range.gradient=Gefälle
539560 undo.createpoint=Punkt kreierä
540561 undo.rotatephoto=Föteli umadräya
541562 undo.convertnamestotimes=Name ins Ziitstämple verwondlä
563 undo.lookupsrtm=Höhendate vonem SRTM hole
542564
543565 # Error messages
544566 error.save.dialogtitle=Fähle bim Speichere
576598 error.osmimage.failed=Map Bildli könne nöd glade werde. Gits ne Internet Verbindig?
577599 error.language.wrongfile=Die uusgewählti Datei scheint kei Sproch-Datei für Prune z'sii
578600 error.convertnamestotimes.nonames=Kei Namen han könnet verwondlet werde
601 error.lookupsrtm.none=Kei Höhendate gfunde
22
33 # Menu entries
44 menu.file=File
5 menu.file.open=Open file
65 menu.file.addphotos=Add photos
76 menu.file.save=Save
87 menu.file.exit=Exit
98 menu.track=Track
10 menu.edit.undo=Undo
11 menu.edit.clearundo=Clear undo list
12 menu.edit.editpoint=Edit point
13 menu.edit.deletepoint=Delete point
14 menu.edit.deleterange=Delete range
15 menu.edit.deletemarked=Delete marked points
16 menu.edit.interpolate=Interpolate
17 menu.edit.average=Average selection
18 menu.edit.reverse=Reverse range
19 menu.edit.mergetracksegments=Merge track segments
20 menu.edit.rearrange=Rearrange waypoints
21 menu.edit.rearrange.start=All to start of file
22 menu.edit.rearrange.end=All to end of file
23 menu.edit.rearrange.nearest=Each to nearest track point
24 menu.edit.cutandmove=Cut and move selection
9 menu.track.undo=Undo
10 menu.track.clearundo=Clear undo list
11 menu.track.deletemarked=Delete marked points
12 menu.track.rearrange=Rearrange waypoints
13 menu.track.rearrange.start=All to start of file
14 menu.track.rearrange.end=All to end of file
15 menu.track.rearrange.nearest=Each to nearest track point
2516 menu.range=Range
17 menu.range.all=Select all
18 menu.range.none=Select none
19 menu.range.start=Set range start
20 menu.range.end=Set range end
21 menu.range.deleterange=Delete range
22 menu.range.interpolate=Interpolate
23 menu.range.average=Average selection
24 menu.range.reverse=Reverse range
25 menu.range.mergetracksegments=Merge track segments
26 menu.range.cutandmove=Cut and move selection
2627 menu.point=Point
27 menu.select.all=Select all
28 menu.select.none=Select none
29 menu.select.start=Set range start
30 menu.select.end=Set range end
28 menu.point.editpoint=Edit point
29 menu.point.deletepoint=Delete point
3130 menu.photo=Photo
3231 menu.photo.saveexif=Save to Exif
3332 menu.photo.connect=Connect to point
4140 menu.view.browser.yahoo=Yahoo maps
4241 menu.view.browser.bing=Bing maps
4342 menu.settings=Settings
43 menu.settings.onlinemode=Load maps from internet
4444 menu.help=Help
4545 # Popup menu for map
4646 menu.map.zoomin=Zoom in
6666 shortcut.menu.file.open=O
6767 shortcut.menu.file.load=L
6868 shortcut.menu.file.save=S
69 shortcut.menu.edit.undo=Z
69 shortcut.menu.track.undo=Z
7070 shortcut.menu.edit.compress=C
71 shortcut.menu.select.all=A
71 shortcut.menu.range.all=A
7272 shortcut.menu.help.help=H
7373
7474 # Functions
75 function.open=Open file
7576 function.loadfromgps=Load data from GPS
7677 function.sendtogps=Send data to GPS
7778 function.exportkml=Export KML
8990 function.distances=Distances
9091 function.fullrangedetails=Full range details
9192 function.getgpsies=Get Gpsies tracks
93 function.lookupsrtm=Get altitudes from SRTM
9294 function.duplicatepoint=Duplicate point
9395 function.correlatephotos=Correlate photos
9496 function.rearrangephotos=Rearrange photos
105107 function.about=About Prune
106108 function.checkversion=Check for new version
107109 function.saveconfig=Save settings
110 function.diskcache=Save maps to disk
108111
109112 # Dialogs
110113 dialog.exit.confirm.title=Exit Prune
130133 dialog.openoptions.deliminfo.fields=fields
131134 dialog.openoptions.deliminfo.norecords=No records
132135 dialog.openoptions.altitudeunits=Altitude units
136 dialog.open.contentsdoubled=This file contains two copies of each point,\nonce as waypoints and once as track points.
133137 dialog.jpegload.subdirectories=Include subdirectories
134138 dialog.jpegload.loadjpegswithoutcoords=Include photos without coordinates
135139 dialog.jpegload.loadjpegsoutsidearea=Include photos outside current area
237241 dialog.distances.currentpoint=Current point
238242 dialog.distances.toofewpoints=This function needs waypoints in order to calculate the distances between them
239243 dialog.fullrangedetails.intro=Here are the details for the selected range
240 dialog.setmapbg.mapnik=Mapnik (default)
241 dialog.setmapbg.osma=Osma
242 dialog.setmapbg.cyclemap=Cyclemap
243 dialog.setmapbg.other=Other
244 dialog.setmapbg.server=Server URL
244 dialog.setmapbg.intro=Select one of the map sources, or add a new one
245 dialog.addmapsource.title=Add new map source
246 dialog.addmapsource.sourcename=Name of source
247 dialog.addmapsource.layer1url=URL of first layer
248 dialog.addmapsource.layer2url=Optional URL of second layer
249 dialog.addmapsource.maxzoom=Maximum zoom level
250 dialog.addmapsource.cloudstyle=Style number
251 dialog.addmapsource.noname=Unnamed
245252 dialog.gpsies.column.name=Track name
246253 dialog.gpsies.column.length=Length
247254 dialog.gpsies.description=Description
328335 dialog.checkversion.releasedate2=.
329336 dialog.checkversion.download=To download the new version, go to http://activityworkshop.net/software/prune/download.html.
330337 dialog.keys.intro=You can use the following shortcut keys instead of using the mouse
331 dialog.keys.keylist=<table><tr><td>Arrow keys</td><td>Pan map left right, up, down</td></tr><tr><td>Ctrl + left, right arrow</td><td>Select previous or next point</td></tr><tr><td>Ctrl + up, down arrow</td><td>Zoom in or out</td></tr><tr><td>Del</td><td>Delete current point</td></tr></table>
338 dialog.keys.keylist=<table><tr><td>Arrow keys</td><td>Pan map left right, up, down</td></tr><tr><td>Ctrl + left, right arrow</td><td>Select previous or next point</td></tr><tr><td>Ctrl + up, down arrow</td><td>Zoom in or out</td></tr><tr><td>Ctrl + PgUp, PgDown</td><td>Select previous, next segment</td></tr><tr><td>Ctrl + Home, End</td><td>Select first, last point</td></tr><tr><td>Del</td><td>Delete current point</td></tr></table>
332339 dialog.saveconfig.desc=The following settings can be saved to a configuration file :
333340 dialog.saveconfig.prune.trackdirectory=Track directory
334341 dialog.saveconfig.prune.photodirectory=Photo directory
341348 dialog.saveconfig.prune.gnuplotpath=Path to gnuplot
342349 dialog.saveconfig.prune.gpsbabelpath=Path to gpsbabel
343350 dialog.saveconfig.prune.exiftoolpath=Path to exiftool
344 dialog.saveconfig.prune.mapserverindex=Index of map server
345 dialog.saveconfig.prune.mapserverurl=URL of map server
351 dialog.saveconfig.prune.mapsource=Selected map source
352 dialog.saveconfig.prune.mapsourcelist=Map sources
353 dialog.saveconfig.prune.diskcache=Map cache
346354 dialog.saveconfig.prune.kmzimagewidth=KMZ image width
347355 dialog.saveconfig.prune.kmzimageheight=KMZ image height
348356 dialog.saveconfig.prune.colourscheme=Colour scheme
349357 dialog.saveconfig.prune.kmltrackcolour=KML track colour
350358 dialog.setpaths.intro=If you need to, you can choose the paths to the external applications:
359 dialog.setpaths.found=Path found?
351360 dialog.addaltitude.noaltitudes=The selected range does not contain altitudes
352361 dialog.addaltitude.desc=Altitude offset to add
353362 dialog.setcolours.intro=Click on a colour patch to change the colour
368377 dialog.setlanguage.language=Language
369378 dialog.setlanguage.languagefile=Language file
370379 dialog.setlanguage.endmessage=Now save your settings and restart Prune\nfor the language change to take effect.
380 dialog.diskcache.save=Save map images to disk
381 dialog.diskcache.dir=Cache directory
382 dialog.diskcache.createdir=Create directory
383 dialog.diskcache.nocreate=Cache directory not created
371384
372385 # 3d window
373386 dialog.3d.title=Prune Three-d view
404417 confirm.rotatephoto=photo rotated
405418 confirm.createpoint=point created
406419 confirm.running=Running ...
420 confirm.lookupsrtm1=Found
421 confirm.lookupsrtm2=altitude values
407422
408423 # Buttons
409424 button.ok=OK
433448 button.check=Check
434449 button.resettodefaults=Reset to defaults
435450 button.browse=Browse...
451 button.addnew=Add new
452 button.delete=Delete
436453
437454 # File types
438455 filetype.txt=TXT files
447464 # Display components
448465 display.nodata=No data loaded
449466 display.noaltitudes=Track data does not include altitudes
467 display.notimestamps=Track data does not include timestamps
450468 details.trackdetails=Track details
451469 details.notrack=No track loaded
452470 details.track.points=Points
471489 display.range.time.hours=h
472490 display.range.time.days=d
473491 details.range.avespeed=Ave speed
474 details.range.avemovingspeed=Moving ave
492 details.range.avemovingspeed=Moving average
493 details.range.maxspeed=Maximum speed
475494 details.range.numsegments=Number of segments
476495 details.range.pace=Pace
477496 details.range.gradient=Gradient
552571 undo.rotatephoto=rotate photo
553572 undo.createpoint=create point
554573 undo.convertnamestotimes=convert names to times
574 undo.lookupsrtm=lookup altitudes from SRTM
555575
556576 # Error messages
557577 error.save.dialogtitle=Error saving data
589609 error.osmimage.failed=Failed to load map images. Please check internet connection.
590610 error.language.wrongfile=The selected file doesn't appear to be a language file for Prune
591611 error.convertnamestotimes.nonames=No names could be converted into times
612 error.lookupsrtm.none=No altitude values found
22
33 # Menu entries
44 menu.file=Archivo
5 menu.file.open=Abrir archivo
65 menu.file.addphotos=Cargar fotos
76 menu.file.save=Guardar
87 menu.file.exit=Salir
9 menu.edit=Editar
108 menu.track=Track
11 menu.edit.undo=Deshacer
12 menu.edit.clearundo=Despejar la lista de deshacer
13 menu.edit.editpoint=Editar punto
14 menu.edit.deletepoint=Eliminar punto
15 menu.edit.deleterange=Eliminar rango
16 menu.edit.deletemarked=Eliminar puntos marcados
17 menu.edit.interpolate=Interpolar
18 menu.edit.average=Crear punto a la media del rango
19 menu.edit.reverse=Invertir rango
20 menu.edit.mergetracksegments=Unir los segmentos de track
21 menu.edit.rearrange=Reorganizar waypoints
22 menu.edit.rearrange.start=Volver al comienzo
23 menu.edit.rearrange.end=Ir al final
24 menu.edit.rearrange.nearest=Ir al m\u00e1s pr\u00f3ximo
25 menu.edit.cutandmove=Cortar y mover selecci\u00f3n
26 menu.select=Seleccionar
9 menu.track.undo=Deshacer
10 menu.track.clearundo=Despejar la lista de deshacer
11 menu.track.deletemarked=Eliminar puntos marcados
12 menu.track.rearrange=Reorganizar waypoints
13 menu.track.rearrange.start=Volver al comienzo
14 menu.track.rearrange.end=Ir al final
15 menu.track.rearrange.nearest=Ir al m\u00e1s pr\u00f3ximo
2716 menu.range=Rango
17 menu.range.all=Seleccionar todo
18 menu.range.none=No seleccionar nada
19 menu.range.start=Fijar comienzo
20 menu.range.end=Fijar final
21 menu.range.deleterange=Eliminar rango
22 menu.range.interpolate=Interpolar
23 menu.range.average=Crear punto a la media del rango
24 menu.range.reverse=Invertir rango
25 menu.range.mergetracksegments=Unir los segmentos de track
26 menu.range.cutandmove=Cortar y mover selecci\u00f3n
2827 menu.point=Punto
29 menu.select.all=Seleccionar todo
30 menu.select.none=No seleccionar nada
31 menu.select.start=Fijar comienzo
32 menu.select.end=Fijar final
28 menu.point.editpoint=Editar punto
29 menu.point.deletepoint=Eliminar punto
3330 menu.photo=Foto
3431 menu.photo.saveexif=Guardar Exif
3532 menu.photo.connect=Conectar con punto
5653
5754 # Alt keys for menus
5855 altkey.menu.file=A
59 altkey.menu.edit=E
60 altkey.menu.select=S
6156 altkey.menu.track=T
6257 altkey.menu.range=R
6358 altkey.menu.point=U
7065 shortcut.menu.file.open=A
7166 shortcut.menu.file.load=C
7267 shortcut.menu.file.save=G
73 shortcut.menu.edit.undo=Z
68 shortcut.menu.track.undo=Z
7469 shortcut.menu.edit.compress=C
75 shortcut.menu.select.all=T
70 shortcut.menu.range.all=T
7671 shortcut.menu.help.help=H
7772
7873 # Functions
74 function.open=Abrir archivo
7975 function.loadfromgps=Cargar datos del GPS
8076 function.sendtogps=Enviar datos al GPS
8177 function.exportkml=Exportar KML
213209 dialog.addtimeoffset.notimestamps=No se puede a\u00f1adir tiempo de puesta a esta selecci\u00f3n si \u00e9sta no contiene ninguna informaci\u00f3n de "timestamp"
214210 dialog.findwaypoint.intro=Ingresar parte del nombre de "waypoint"
215211 dialog.findwaypoint.search=Buscar
216 dialog.connect.title=Conectar foto
217 dialog.connectphoto.clonepoint=Este punto ya tiene una foto.\n Quisiera usted hacer una copia de este?
218212 dialog.saveexif.title=Guardar Exif
219213 dialog.saveexif.intro=Seleccione fotos a guardar
220214 dialog.saveexif.nothingtosave=Coordenadas no modificadas, nada que guardar
242236 dialog.distances.currentpoint=Punto actual
243237 dialog.distances.toofewpoints=Esta funcion necesita "waypoints" para poder calcular las distancias entre ellos
244238 dialog.fullrangedetails.intro=Aqui estan los detalles para la selecci\u00f3n de rangos
245 dialog.setmapbg.mapnik=Mapnik (predeterminado)
246 dialog.setmapbg.other=Otro
247 dialog.setmapbg.server=Direcci\u00f3n URL del servidor
239 dialog.addmapsource.sourcename=Nombre de la fuente
240 dialog.addmapsource.cloudstyle=N\u00famero del estilo
241 dialog.addmapsource.noname=Innominada
248242 dialog.gpsies.column.name=Nombre del track
249243 dialog.gpsies.column.length=Distancia
250244 dialog.gpsies.description=Descripci\u00f3n
303297 dialog.about.systeminfo.exiftool=Exiftool instalado
304298 dialog.about.systeminfo.gpsbabel=Gpsbabel instalado
305299 dialog.about.systeminfo.gnuplot=Gnuplot instalado
300 dialog.about.systeminfo.exiflib=Bibliotheca exif
301 dialog.about.systeminfo.exiflib.internal=Interna
302 dialog.about.systeminfo.exiflib.internal.failed=Interna (no encontrada)
303 dialog.about.systeminfo.exiflib.external=Externa
304 dialog.about.systeminfo.exiflib.external.failed=Externa (no encontrada)
306305 dialog.about.yes=Si
307306 dialog.about.no=No
308307 dialog.about.credits=Creditos
336335 dialog.saveconfig.prune.exiftoolpath=Camino a exiftool
337336 dialog.saveconfig.prune.mapserverindex=\u00cdndice de mapa del servidor
338337 dialog.saveconfig.prune.mapserverurl=Direcci\u00f3n URL de mapa del servidor
338 dialog.saveconfig.prune.mapsourcelist=Fuentes de cartas
339 dialog.saveconfig.prune.diskcache=Directorio de cartas
339340 dialog.saveconfig.prune.kmzimagewidth=Ancho de im\u00e1genes en kmz
340341 dialog.saveconfig.prune.kmzimageheight=Alto de im\u00e1genes en kmz
341342 dialog.saveconfig.prune.colourscheme=Color de esquema
361362 dialog.setlanguage.language=Lenguaje
362363 dialog.setlanguage.languagefile=Archivo de lenguaje
363364 dialog.setlanguage.endmessage=Ahora salve su configuraci\u00f3n y reinicie Prune\npara que los cambios tomen efecto.
365 dialog.diskcache.save=Cargar cartas
366 dialog.diskcache.dir=Directorio de cartas
367 dialog.diskcache.createdir=Crear directorio
364368
365369 # 3d window
366370 dialog.3d.title=Prune vista 3-D
422426 button.showwebpage=Mostrar p\u00e1gina web
423427 button.check=Verificar
424428 button.resettodefaults=Restablecer valores a los predeterminados
429 button.delete=Eliminar
425430
426431 # File types
427432 filetype.txt=Archivos TXT
436441 # Display components || These are all for the side panels showing point/range details
437442 display.nodata=Ning\u00fan dato cargado
438443 display.noaltitudes=Los datos del track no incluyen altitudes
444 display.notimestamps=Los datos del track no incluyen tiempos
439445 details.trackdetails=Detalles del track
440446 details.notrack=Ning\u00fan track cargado
441447 details.track.points=Puntos
461467 display.range.time.days=d
462468 details.range.avespeed=Velocidad media
463469 details.range.avemovingspeed=Moviendo promedio
470 details.range.maxspeed=Velocidad m\u00e1xima
464471 details.range.numsegments=N\u00famero de segmentos
465472 details.range.gradient=Gradiente
466473 details.waypointsphotos.waypoints=Waypoints
533540 undo.connectphoto=conectar foto
534541 undo.disconnectphoto=desconectar foto
535542 undo.correlate=correlacionar fotos
543 undo.createpoint=crear punto
536544 undo.rotatephoto=girar foto
537 undo.createpoint=crear punto
538545
539546 # Error messages
540547 error.save.dialogtitle=Fallo al guardar datos
22
33 # Menu entries
44 menu.file=Fichier
5 menu.file.open=Ouvrir fichier
65 menu.file.addphotos=Ajouter photos
76 menu.file.save=Enregistrer
87 menu.file.exit=Quitter
9 menu.edit=\u00c9dition
108 menu.track=Trace
11 menu.edit.undo=Annuler
12 menu.edit.clearundo=Purger la liste d'annulation
13 menu.edit.editpoint=Editer le point
14 menu.edit.deletepoint=Supprimer le point
15 menu.edit.deleterange=Supprimer l'\u00e9tendue
16 menu.edit.deletemarked=Supprimer les points marqu\u00e9s
17 menu.edit.interpolate=Interpoler
18 menu.edit.average=Cr\u00e9er un point pour la s\u00e9lection
19 menu.edit.reverse=Inverser l'\u00e9tendue
20 menu.edit.mergetracksegments=Fusionner les segments de trace
21 menu.edit.rearrange=R\u00e9arranger les waypoints
22 menu.edit.rearrange.start=Tous au d\u00e9but du fichier
23 menu.edit.rearrange.end=Tous \u00e0 la fin du fichier
24 menu.edit.rearrange.nearest=Chacun au point de trace le plus proche
25 menu.edit.cutandmove=Couper et bouger la s\u00e9lection
26 menu.select=S\u00e9lectionner
9 menu.track.undo=Annuler
10 menu.track.clearundo=Purger la liste d'annulation
11 menu.track.deletemarked=Supprimer les points marqu\u00e9s
12 menu.track.rearrange=R\u00e9arranger les waypoints
13 menu.track.rearrange.start=Tous au d\u00e9but du fichier
14 menu.track.rearrange.end=Tous \u00e0 la fin du fichier
15 menu.track.rearrange.nearest=Chacun au point de trace le plus proche
2716 menu.range=\u00c9tendue
17 menu.range.all=Tout s\u00e9lectionner
18 menu.range.none=Rien s\u00e9lectionner
19 menu.range.start=D\u00e9finir le d\u00e9but de l'\u00e9tendue
20 menu.range.end=D\u00e9finir la fin de l'\u00e9tendue
21 menu.range.deleterange=Supprimer l'\u00e9tendue
22 menu.range.interpolate=Interpoler
23 menu.range.average=Cr\u00e9er un point pour la s\u00e9lection
24 menu.range.reverse=Inverser l'\u00e9tendue
25 menu.range.mergetracksegments=Fusionner les segments de trace
26 menu.range.cutandmove=Couper et bouger la s\u00e9lection
2827 menu.point=Point
29 menu.select.all=Tout s\u00e9lectionner
30 menu.select.none=Rien s\u00e9lectionner
31 menu.select.start=D\u00e9finir le d\u00e9but de l'\u00e9tendue
32 menu.select.end=D\u00e9finir la fin de l'\u00e9tendue
28 menu.point.editpoint=Editer le point
29 menu.point.deletepoint=Supprimer le point
3330 menu.photo=Photo
3431 menu.photo.saveexif=Enregistrer dans les Exif
3532 menu.photo.connect=Relier au point
4340 menu.view.browser.yahoo=Yahoo maps
4441 menu.view.browser.bing=Cartes dans Bing
4542 menu.settings=Pr\u00e9f\u00e9rences
46 menu.settings.showpace=Montrer allure dans les d\u00e9tails
43 menu.settings.onlinemode=Charger une carte depuis internet
4744 menu.help=Aide
4845 # Popup menu for map
4946 menu.map.zoomin=Zoom avant
5754
5855 # Alt keys for menus
5956 altkey.menu.file=F
60 altkey.menu.edit=E
61 altkey.menu.select=S
6257 altkey.menu.track=T
6358 altkey.menu.range=E
6459 altkey.menu.point=P
7166 shortcut.menu.file.open=O
7267 shortcut.menu.file.load=T
7368 shortcut.menu.file.save=E
74 shortcut.menu.edit.undo=Z
69 shortcut.menu.track.undo=Z
7570 shortcut.menu.edit.compress=C
76 shortcut.menu.select.all=S
71 shortcut.menu.range.all=S
7772 shortcut.menu.help.help=A
7873
7974 # Functions
80 function.loadfromgps=T\u00e9l\u00e9charger du GPS
81 function.sendtogps=Envoyer au GPS
75 function.open=Ouvrir fichier
76 function.loadfromgps=T\u00e9l\u00e9charger donn\u00e9es du GPS
77 function.sendtogps=Envoyer donn\u00e9es au GPS
8278 function.exportkml=Exporter en KML
8379 function.exportgpx=Exporter en GPX
8480 function.exportpov=Exporter en POV
9793 function.setkmzimagesize=D\u00e9finir la taille de l'image KMZ
9894 function.setpaths=D\u00e9finir les chemins des programmes
9995 function.getgpsies=R\u00e9cup\u00e9rer les traces Gpsies
96 function.lookupsrtm=R\u00e9cup\u00e9rer les altitudes depuis SRTM
10097 function.duplicatepoint=Duppliquer le point
10198 function.setcolours=R\u00e9gler les couleurs
10299 function.setlanguage=R\u00e9gler la langue
110107 function.about=À propos de Prune
111108 function.checkversion=Chercher une mise \u00e0 jour
112109 function.saveconfig=Enregistrer les pr\u00e9f\u00e9rences
110 function.diskcache=Enregistrer les cartes sur le disque
113111
114112 # Dialogs
115113 dialog.exit.confirm.title=Quitter Prune
120118 dialog.deletepoint.deletephoto=Effacer la photo attach\u00e9e \u00e0 ce point ?
121119 dialog.deletephoto.title=Effacer la photo
122120 dialog.deletephoto.deletepoint=Effacer le point attach\u00e9 \u00e0 cette photo ?
123 dialog.openoptions.title=Ouvrir options
124 dialog.openoptions.filesnippet=Extrait de fichier
121 dialog.openoptions.title=Options d'ouverture
122 dialog.openoptions.filesnippet=Extraire vers le fichier
125123 dialog.load.table.field=Champ
126124 dialog.load.table.datatype=Type de donn\u00e9e
127125 dialog.load.table.description=Description
128 dialog.delimiter.label=S\u00e9parateur de texte
126 dialog.delimiter.label=S\u00e9parateur de champ
129127 dialog.delimiter.comma=Virgule ,
130128 dialog.delimiter.tab=Tabulation
131129 dialog.delimiter.space=Espace
137135 dialog.openoptions.altitudeunits=Unit\u00e9s d'altitude
138136 dialog.jpegload.subdirectories=Inclure les sous-dossiers
139137 dialog.jpegload.loadjpegswithoutcoords=Inclure les photos sans coordonn\u00e9es
140 dialog.jpegload.loadjpegsoutsidearea=Inclure des photos en dehors de l'endroit actuel
138 dialog.jpegload.loadjpegsoutsidearea=Inclure des photos en dehors de la zone actuel
141139 dialog.jpegload.progress.title=Chargement des photos
142140 dialog.jpegload.progress=Veuillez patienter pendant la recherche des photos
143141 dialog.gpsload.nogpsbabel=Gpsbabel introuvable. Continuer ?
152150 dialog.saveoptions.title=Enregistrer le fichier
153151 dialog.save.fieldstosave=Champs \u00e0 enregistrer
154152 dialog.save.table.field=Champ
155 dialog.save.table.hasdata=Poss\u00e8de une information
153 dialog.save.table.hasdata=Contient une donn\u00e9e
156154 dialog.save.table.save=Enregistrer
157 dialog.save.headerrow=Ent\u00eates
155 dialog.save.headerrow=En-t\u00eates
158156 dialog.save.coordinateunits=Unit\u00e9s des coordonn\u00e9es
159157 dialog.save.altitudeunits=Unit\u00e9s d'altitude
160158 dialog.save.timestampformat=Format de l'heure
162160 dialog.save.overwrite.text=Ce fichier existe d\u00e9j\u00e0. \u00cates-vous s\u00fbr de vouloir \u00e9craser ce fichier ?
163161 dialog.save.notypesselected=Aucun type de point n\u2019a \u00e9t\u00e9 s\u00e9lectionn\u00e9
164162 dialog.exportkml.text=Titre pour les donn\u00e9es
165 dialog.exportkml.altitude=Absolues altitudes (pour aviation)
163 dialog.exportkml.altitude=Altitudes absolues (pour l'aviation)
166164 dialog.exportkml.kmz=Compresser au format kmz
167165 dialog.exportkml.exportimages=Exporter les vignettes au format kmz
168166 dialog.exportkml.trackcolour=Couleur de la trace
169167 dialog.exportgpx.name=Nom
170168 dialog.exportgpx.desc=L\u00e9gende
171169 dialog.exportgpx.includetimestamps=Inclure l'heure pour chaque point
172 dialog.exportgpx.copysource=Copier le XML source
170 dialog.exportgpx.copysource=Copier la source xml
173171 dialog.exportpov.text=Entrez les param\u00e8tres pour l'export POV
174172 dialog.exportpov.font=Police
175173 dialog.exportpov.camerax=Cam\u00e9ra X
215213 dialog.addtimeoffset.notimestamps=Ne peut pas d\u00e9caler l'heure; cette s\u00e9lection ne contient pas de donn\u00e9es d'heure
216214 dialog.findwaypoint.intro=Entrez une partie du nom de waypoint
217215 dialog.findwaypoint.search=Chercher
218 dialog.connect.title=Lier la photo au point
219 dialog.connectphoto.clonepoint=Ce point est d\u00e9j\u00e0 li\u00e9 \u00e0 une photo.\nVoulez-vous faire une copie de ce point ?
220216 dialog.saveexif.title=Enregistrer Exif
221217 dialog.saveexif.intro=S\u00e9lectionner les photos \u00e0 sauver \u00e0 l'aide des cases \u00e0 cocher
222218 dialog.saveexif.nothingtosave=Coordonn\u00e9es inchang\u00e9es, rien \u00e0 enregistrer
244240 dialog.distances.currentpoint=Point courant
245241 dialog.distances.toofewpoints=Cette fonction a besoin de waypoints pour calculer les distances entre eux
246242 dialog.fullrangedetails.intro=Voici les d\u00e9tails pour l\u2019\u00e9tendue s\u00e9lectionn\u00e9e
247 dialog.setmapbg.mapnik=Mapnik (d\u00e9faut)
248 dialog.setmapbg.osma=Osma
249 dialog.setmapbg.cyclemap=Cyclemap
250 dialog.setmapbg.other=Autres
251 dialog.setmapbg.server=URL du serveur
243 dialog.setmapbg.intro=S\u00e9lectionnez une source de cartes, ou ajoutez-en une nouvelle
244 dialog.addmapsource.title=Ajouter une nouvelle source de cartes
245 dialog.addmapsource.sourcename=Nom de la source
246 dialog.addmapsource.layer1url=URL de la premi\u00e8re couche
247 dialog.addmapsource.layer2url=URL optionnelle de la deuxi\u00e8me couche
248 dialog.addmapsource.maxzoom=Niveau de zoom maximum
249 dialog.addmapsource.cloudstyle=Taille
250 dialog.addmapsource.noname=Sans-titre
252251 dialog.gpsies.column.name=Nom de trace
253252 dialog.gpsies.column.length=Distance
254253 dialog.gpsies.description=Description
299298 dialog.about.build=Build
300299 dialog.about.summarytext1=Prune est un programme pour charger, afficher et \u00e9diter des donn\u00e9es de r\u00e9cepteurs GPS.
301300 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.
302 dialog.about.summarytext3=Consultez la page <code style``=``"font-weight:bold">http://activityworkshop.net/</code> pour plus de d\u00e9tails et des manuels utilisateur.
301 dialog.about.summarytext3=Consultez la page <code style="font-weight:bold">http://activityworkshop.net/</code> pour plus de d\u00e9tails et des manuels utilisateur.
303302 dialog.about.languages=Langues disponibles
304 dialog.about.translatedby=Texte en fran\u00e7ais par Petrovsk et theYinYeti.
303 dialog.about.translatedby=Texte en fran\u00e7ais par Petrovsk, theYinYeti et R\u00e9mi.
305304 dialog.about.systeminfo=Info Syst\u00e8me
306305 dialog.about.systeminfo.os=Syst\u00e8me d'exploitation
307306 dialog.about.systeminfo.java=Java Runtime
310309 dialog.about.systeminfo.exiftool=Exiftool install\u00e9
311310 dialog.about.systeminfo.gpsbabel=Gpsbabel install\u00e9
312311 dialog.about.systeminfo.gnuplot=Gnuplot install\u00e9
312 dialog.about.systeminfo.exiflib=Librairie Exif
313 dialog.about.systeminfo.exiflib.internal=Interne
314 dialog.about.systeminfo.exiflib.internal.failed=Interne (non-trouv\u00e9)
315 dialog.about.systeminfo.exiflib.external=Externe
316 dialog.about.systeminfo.exiflib.external.failed=Externe (non-trouv\u00e9)
313317 dialog.about.yes=Oui
314318 dialog.about.no=Non
315319 dialog.about.credits=Cr\u00e9dits
339343 dialog.saveconfig.prune.gpsdevice=Chemin du p\u00e9riph\u00e9rique GPS
340344 dialog.saveconfig.prune.gpsformat=Format GPS
341345 dialog.saveconfig.prune.povrayfont=Police povray
342 dialog.saveconfig.prune.metricunits=Utiliser le syst\u00e8me m\u00e9trique?
346 dialog.saveconfig.prune.metricunits=Utiliser le syst\u00e8me m\u00e9trique ?
343347 dialog.saveconfig.prune.gnuplotpath=Chemin gnuplot
344348 dialog.saveconfig.prune.gpsbabelpath=Chemin gpsbabel
345349 dialog.saveconfig.prune.exiftoolpath=Chemin exiftool
346350 dialog.saveconfig.prune.mapserverindex=Index du serveur de carte
347351 dialog.saveconfig.prune.mapserverurl=URL du serveur de carte
348 dialog.saveconfig.prune.showpace=Montrer l'allure
352 dialog.saveconfig.prune.mapsource=Carte source s\u00e9lectionn\u00e9e
353 dialog.saveconfig.prune.mapsourcelist=Sources de cartes
354 dialog.saveconfig.prune.diskcache=Cache de carte
349355 dialog.saveconfig.prune.kmzimagewidth=Largeur de l'image KMZ
350356 dialog.saveconfig.prune.kmzimageheight=Hauteur de l'image KMZ
351357 dialog.saveconfig.prune.colourscheme=Mod\u00e8le de couleurs
352358 dialog.saveconfig.prune.kmltrackcolour=Couleur de la trace KML
353359 dialog.setpaths.intro=Si vous le souhaitez, vous pouvez d\u00e9finir les chemins des applications externes:
360 dialog.setpaths.found=Chemin trouv\u00e9 ?
354361 dialog.addaltitude.noaltitudes=L'\u00e9tendue s\u00e9lectionn\u00e9e de contient pas d'altitudes
355362 dialog.addaltitude.desc=D\u00e9callage d'altitude \u00e0 ajouter
356363 dialog.setcolours.intro=Cliquez sur une couleur pour la changer
366373 dialog.colourchooser.red=Rouge
367374 dialog.colourchooser.green=Vert
368375 dialog.colourchooser.blue=Bleu
376 dialog.setlanguage.firstintro=Vous pouvez s\u00e9lectionner l'une des langues disponibles,<p> ou bien un fichier de langue \u00e0 utiliser.
377 dialog.setlanguage.secondintro=Vous devez sauvegarder vos param\u00e8tres puis<p>red\u00e9marrer Prune pour changer de langue.
369378 dialog.setlanguage.language=Langue
370379 dialog.setlanguage.languagefile=Fichier de langue
380 dialog.setlanguage.endmessage=Enregistrez vos r\u00e9glages et red\u00e9marrez Prune\npour que le changement de langue soit effectif.
381 dialog.diskcache.save=Enregistrer les images de carte sur le disque
382 dialog.diskcache.dir=R\u00e9pertoire cache
383 dialog.diskcache.createdir=Cr\u00e9er r\u00e9pertoire
384 dialog.diskcache.nocreate=Le r\u00e9pertoire cache n'est pas cr\u00e9\u00e9
371385
372386 # 3d window
373387 dialog.3d.title=Vue 3D de Prune
391405 confirm.rearrangephotos=Photos r\u00e9arrang\u00e9es
392406 confirm.cutandmove=S\u00e9lection d\u00e9plac\u00e9e
393407 confirm.convertnamestotimes=Noms de waypoints convertis
394 confirm.saveexif.ok1=Enregistrement de
408 confirm.saveexif.ok1=Enregistr\u00e9
395409 confirm.saveexif.ok2=fichiers photo
396410 confirm.undo.single=op\u00e9ration annul\u00e9e
397411 confirm.undo.multi=op\u00e9rations annul\u00e9es
404418 confirm.createpoint=Point cr\u00e9\u00e9
405419 confirm.rotatephoto=Photo tourn\u00e9e
406420 confirm.running=En cours...
421 confirm.lookupsrtm1=Trouv\u00e9
422 confirm.lookupsrtm2=valeurs d'altitude
407423
408424 # Buttons || These are all the texts for buttons
409425 button.ok=OK
432448 button.showwebpage=Montrer page web
433449 button.check=V\u00e9rifier
434450 button.resettodefaults=Revenir aux valeurs par d\u00e9faut
451 button.browse=Naviguer...
452 button.addnew=Ajouter nouveau...
453 button.delete=Supprimer
435454
436455 # File types
437456 filetype.txt=Fichiers TXT
446465 # Display components || These are all for the side panels showing point/range details
447466 display.nodata=Pas de donn\u00e9es charg\u00e9es
448467 display.noaltitudes=La trace ne comporte pas d'information d'altitude
468 display.notimestamps=La trace ne comporte pas d'information de temps
449469 details.trackdetails=D\u00e9tails de la trace
450470 details.notrack=Pas de trace charg\u00e9e
451471 details.track.points=Points
471491 display.range.time.days=j
472492 details.range.avespeed=Vitesse moyenne
473493 details.range.avemovingspeed=Moyenne continue
494 details.range.maxspeed=Vitesse maximum
474495 details.range.numsegments=Nombre de segments
475496 details.range.pace=Allure
476497 details.range.gradient=Pente
551572 undo.createpoint=ajouter un point
552573 undo.rotatephoto=Tourner la photo
553574 undo.convertnamestotimes=Convertir les noms en points
575 undo.lookupsrtm=Rechercher les altitudes depuis SRTM
554576
555577 # Error messages
556578 error.save.dialogtitle=Erreur \u00e0 l'enregistrement des donn\u00e9es
574596 error.jpegload.nojpegsfound=Aucun fichier jpeg trouv\u00e9
575597 error.jpegload.noexiffound=Aucune information EXIF trouv\u00e9e
576598 error.jpegload.nogpsfound=Aucune information GPS trouv\u00e9e
599 error.jpegload.exifreadfailed=Information EXIF illisible. Aucune information EXIF ne peut \u00eatre lue\nsans une librairie interne ou externe.
577600 error.gpsload.unknown=Erreur inconnue
578601 error.undofailed.title=Echec de l'annulation
579602 error.undofailed.text=Echec de l'op\u00e9ration d'annulation
585608 error.readme.notfound=Fichier Lisez-moi introuvable
586609 error.osmimage.dialogtitle=Erreur au chargement des portions de cartes
587610 error.osmimage.failed=Erreur du chargement des portions de cartes. V\u00e9rifiez votre connexion internet.
611 error.language.wrongfile=Le fichier s\u00e9lectionn\u00e9 n'est pas un fichier de langue pour Prune
612 error.convertnamestotimes.nonames=Aucun nom n'a pu \u00eatre converti en horaire
613 error.lookupsrtm.none=Aucune valeur d'altitude trouv\u00e9e
22
33 # Menu entries
44 menu.file=Berkas
5 menu.file.open=Buka
65 menu.file.addphotos=Muat foto
76 menu.file.save=Simpan
87 menu.file.exit=Keluar
9 #menu.edit=Ubah
108 menu.track=Track
11 menu.edit.undo=Batal
12
13 menu.edit.editpoint=Perbaiki titik
14 menu.edit.deletepoint=Hapus titik
15 menu.edit.deleterange=Hapus jarak
16 #menu.select=Pilih
9 menu.track.undo=Batal
10 menu.point.editpoint=Perbaiki titik
11 menu.point.deletepoint=Hapus titik
12 menu.range.deleterange=Hapus jarak
1713 menu.range=Jangkauan
1814 menu.point=Titik
19 menu.select.all=Pilih semua
20 menu.select.none=Tidak memilih
15 menu.range.all=Pilih semua
16 menu.range.none=Tidak memilih
2117 menu.photo=Foto
2218 menu.photo.saveexif=Simpan ke Exif
2319 menu.photo.connect=Hubungkan ke titik
3632
3733 # Alt keys for menus
3834 altkey.menu.file=B
39 #altkey.menu.edit=U
40 #altkey.menu.select=P
4135 altkey.menu.track=T
4236 altkey.menu.range=J
4337 altkey.menu.point=K
5044 shortcut.menu.file.open=B
5145 shortcut.menu.file.load=M
5246 shortcut.menu.file.save=S
53 shortcut.menu.edit.undo=Z
47 shortcut.menu.track.undo=Z
5448 shortcut.menu.edit.compress=P
55 shortcut.menu.select.all=-
49 shortcut.menu.range.all=-
5650 shortcut.menu.help.help=-
5751
5852 # Functions
53 function.open=Buka
5954 function.loadfromgps=Muat data dari GPS
6055 function.sendtogps=Kirim data ke GPS
6156 function.exportkml=Ekspor KML
6358 function.exportpov=Ekspor POV
6459 function.editwaypointname=Perbaiki Nama waypoint
6560 function.compress=Padatkan jalur
66
6761 function.findwaypoint=Menemukan waypoint
6862 function.charts=Grafik
6963 function.show3d=Lihat tiga-D
7064 function.distances=Jarak
71
7265 function.correlatephotos=Korelasikan foto
7366 function.help=Bantuan
7467 function.about=Tentang Prune
22
33 # Menu entries
44 menu.file=File
5 menu.file.open=Apri file
65 menu.file.addphotos=Aggiungi foto
76 menu.file.save=Salva
87 menu.file.exit=Esci
9 menu.edit=Edita
108 menu.track=Traccia
11 menu.edit.undo=Annulla
12 menu.edit.clearundo=Cancella lista ultime modifiche
13 menu.edit.editpoint=Edita punto
14 menu.edit.deletepoint=Cancella punto
15 menu.edit.deleterange=Cancella la serie
16 menu.edit.deletemarked=Cancella punti marcati
17 menu.edit.interpolate=Interpola
18 menu.edit.average=Crea punto medio della selezione
19 menu.edit.reverse=Inverti la serie
20 menu.edit.mergetracksegments=Unisci segmenti traccia
21 menu.edit.rearrange=Riorganizza waypoint
22 menu.edit.rearrange.start=Tutti all'inizio del file
23 menu.edit.rearrange.end=Tutti alla fine del file
24 menu.edit.rearrange.nearest=Sul punto pi\u00f9 vicino
25 menu.edit.cutandmove=Taglia e muovi la selezione
26 menu.select=Seleziona
9 menu.track.undo=Annulla
10 menu.track.clearundo=Cancella lista ultime modifiche
11 menu.point.editpoint=Edita punto
12 menu.point.deletepoint=Cancella punto
13 menu.range.deleterange=Cancella la serie
14 menu.track.deletemarked=Cancella punti marcati
15 menu.range.interpolate=Interpola
16 menu.range.average=Crea punto medio della selezione
17 menu.range.reverse=Inverti la serie
18 menu.range.mergetracksegments=Unisci segmenti traccia
19 menu.track.rearrange=Riorganizza waypoint
20 menu.track.rearrange.start=Tutti all'inizio del file
21 menu.track.rearrange.end=Tutti alla fine del file
22 menu.track.rearrange.nearest=Sul punto pi\u00f9 vicino
23 menu.range.cutandmove=Taglia e muovi la selezione
2724 menu.range=Serie
2825 menu.point=Punto
29 menu.select.all=Seleziona tutto
30 menu.select.none=Deseleziona tutto
31 menu.select.start=Imposta inizio serie
32 menu.select.end=Imposta fine serie
26 menu.range.all=Seleziona tutto
27 menu.range.none=Deseleziona tutto
28 menu.range.start=Imposta inizio serie
29 menu.range.end=Imposta fine serie
3330 menu.photo=Foto
3431 menu.photo.saveexif=Salva su Exif
3532 menu.photo.connect=Collega al punto
4340 menu.view.browser.yahoo=mappe Yahoo
4441 menu.view.browser.bing=mappe Bing
4542 menu.settings=Preferenze
46 menu.settings.showpace=Mostra passo nel display serie
4743 menu.help=Aiuto
4844 # Popup menu for map
4945 menu.map.zoomin=Zoom +
5753
5854 # Alt keys for menus
5955 altkey.menu.file=F
60 altkey.menu.edit=E
61 altkey.menu.select=S
6256 altkey.menu.track=T
6357 altkey.menu.range=S
6458 altkey.menu.point=P
7165 shortcut.menu.file.open=A
7266 shortcut.menu.file.load=C
7367 shortcut.menu.file.save=S
74 shortcut.menu.edit.undo=Z
68 shortcut.menu.track.undo=Z
7569 shortcut.menu.edit.compress=C
76 shortcut.menu.select.all=T
70 shortcut.menu.range.all=T
7771 shortcut.menu.help.help=H
7872
7973 # Functions
74 function.open=Apri file
8075 function.loadfromgps=Carica dati da GPS
8176 function.sendtogps=Invia dati al GPS
8277 function.exportkml=Esporta in KML
200195 dialog.addtimeoffset.notimestamps=Non posso aggiungere uno scarto temporale a questa selezione perch\u00e9 non contiene informazioni temporali
201196 dialog.findwaypoint.intro=Inserisci parte del nome del waypoint
202197 dialog.findwaypoint.search=Cerca
203 dialog.connect.title=Collega la foto al punto
204 dialog.connectphoto.clonepoint=Questo punto ha gi\u00e0 una foto collegata.\nVuoi fare una copia del punto?
205198 dialog.saveexif.title=Salva Exif
206199 dialog.saveexif.intro=Seleziona le foto da salvare usando le caselle di spunta
207200 dialog.saveexif.nothingtosave=Le coordinate non sono cambiate, niente da registrare
317310 dialog.saveconfig.prune.exiftoolpath=Path exiftool
318311 dialog.saveconfig.prune.mapserverindex=Indice server mappe
319312 dialog.saveconfig.prune.mapserverurl=URL del server mappe
320 dialog.saveconfig.prune.showpace=Mostra passo
321313 dialog.saveconfig.prune.kmzimagewidth=larghezza immagine KMZ
322314 dialog.saveconfig.prune.kmzimageheight=altezza immagine KMZ
323315 dialog.setpaths.intro=Se necessario, puoi indicare il percorso delle applicazioni esterne:
22
33 # Menu entries
44 menu.file=\u30d5\u30a1\u30a4\u30eb
5 menu.file.open=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
65 menu.file.addphotos=\u5199\u771f\u3092\u8ffd\u52a0
76 menu.file.save=\u4fdd\u5b58
87 menu.file.exit=\u7d42\u4e86
9 menu.edit=\u7de8\u96c6
108 menu.track=\u30c8\u30e9\u30c3\u30af
11 menu.edit.undo=\u30a2\u30f3\u30c9\u30a5
12 menu.edit.clearundo=\u30a2\u30f3\u30c9\u30a5\u30ea\u30b9\u30c8\u3092\u7a7a\u306b\u3059\u308b
13 menu.edit.editpoint=\u70b9\u3092\u7de8\u96c6
14 menu.edit.deletepoint=\u70b9\u3092\u524a\u9664
15 menu.edit.deleterange=\u7bc4\u56f2\u3092\u524a\u9664
16 menu.edit.deletemarked=\u5370\u306e\u4ed8\u3044\u305f\u70b9\u3092\u524a\u9664
17 menu.edit.interpolate=\u88dc\u5b8c
18 menu.edit.average=\u9078\u629e\u7bc4\u56f2\u3092\u5e73\u5747\u5316
19 menu.edit.reverse=\u7bc4\u56f2\u3092\u53cd\u8ee2
20 menu.edit.mergetracksegments=\u30c8\u30e9\u30c3\u30af\u30bb\u30b0\u30e1\u30f3\u30c8\u3092\u7d71\u5408
21 menu.edit.rearrange=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u3092\u4e26\u3079\u66ff\u3048
22 menu.edit.rearrange.start=\u5168\u3066\u3092\u30d5\u30a1\u30a4\u30eb\u306e\u59cb\u70b9\u306b
23 menu.edit.rearrange.end=\u5168\u3066\u3092\u30d5\u30a1\u30a4\u30eb\u306e\u7d42\u70b9\u306b
24 menu.edit.rearrange.nearest=\u305d\u308c\u305e\u308c\u3092\u6700\u8fd1\u306e\u30c8\u30e9\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u306b
25 menu.edit.cutandmove=\u9078\u629e\u7bc4\u56f2\u3092\u79fb\u52d5
26 menu.select=\u9078\u629e
9 menu.track.undo=\u30a2\u30f3\u30c9\u30a5
10 menu.track.clearundo=\u30a2\u30f3\u30c9\u30a5\u30ea\u30b9\u30c8\u3092\u7a7a\u306b\u3059\u308b
11 menu.point.editpoint=\u70b9\u3092\u7de8\u96c6
12 menu.point.deletepoint=\u70b9\u3092\u524a\u9664
13 menu.range.deleterange=\u7bc4\u56f2\u3092\u524a\u9664
14 menu.track.deletemarked=\u5370\u306e\u4ed8\u3044\u305f\u70b9\u3092\u524a\u9664
15 menu.range.interpolate=\u88dc\u5b8c
16 menu.range.average=\u9078\u629e\u7bc4\u56f2\u3092\u5e73\u5747\u5316
17 menu.range.reverse=\u7bc4\u56f2\u3092\u53cd\u8ee2
18 menu.range.mergetracksegments=\u30c8\u30e9\u30c3\u30af\u30bb\u30b0\u30e1\u30f3\u30c8\u3092\u7d71\u5408
19 menu.track.rearrange=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u3092\u4e26\u3079\u66ff\u3048
20 menu.track.rearrange.start=\u5168\u3066\u3092\u30d5\u30a1\u30a4\u30eb\u306e\u59cb\u70b9\u306b
21 menu.track.rearrange.end=\u5168\u3066\u3092\u30d5\u30a1\u30a4\u30eb\u306e\u7d42\u70b9\u306b
22 menu.track.rearrange.nearest=\u305d\u308c\u305e\u308c\u3092\u6700\u8fd1\u306e\u30c8\u30e9\u30c3\u30af\u30dd\u30a4\u30f3\u30c8\u306b
23 menu.range.cutandmove=\u9078\u629e\u7bc4\u56f2\u3092\u79fb\u52d5
2724 menu.range=\u7bc4\u56f2
2825 menu.point=\u70b9
29 menu.select.all=\u5168\u3066\u9078\u629e
30 menu.select.none=\u9078\u629e\u89e3\u9664
31 menu.select.start=\u958b\u59cb\u70b9\u3092\u7f6e\u304f
32 menu.select.end=\u7d42\u4e86\u70b9\u3092\u7f6e\u304f
26 menu.range.all=\u5168\u3066\u9078\u629e
27 menu.range.none=\u9078\u629e\u89e3\u9664
28 menu.range.start=\u958b\u59cb\u70b9\u3092\u7f6e\u304f
29 menu.range.end=\u7d42\u4e86\u70b9\u3092\u7f6e\u304f
3330 menu.photo=\u5199\u771f
3431 menu.photo.saveexif=Exif\u306b\u4fdd\u5b58
3532 menu.photo.connect=\u70b9\u306b\u63a5\u7d9a
4340 menu.view.browser.yahoo=Yahoo \u5730\u56f3
4441 menu.view.browser.bing=Bing \u5730\u56f3
4542 menu.settings=\u8a2d\u5b9a
46 menu.settings.showpace=\u8868\u793a\u7bc4\u56f2\u306e\u901f\u5ea6\u3092\u8868\u793a
4743 menu.help=\u30d8\u30eb\u30d7
4844 # Popup menu for map
4945 menu.map.zoomin=\u62e1\u5927
5652 menu.map.showscalebar=\u7e2e\u5c3a\u8868\u793a
5753
5854 # Functions
55 function.open=\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f
5956 function.loadfromgps=GPS\u304b\u3089\u30c7\u30fc\u30bf\u3092\u8aad\u3080
6057 function.sendtogps=GPS\u3078\u4fdd\u5b58
6158 function.exportkml=KML\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8
194191 dialog.addtimeoffset.notimestamps=\u3053\u306e\u9078\u629e\u7bc4\u56f2\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3092\u6301\u3063\u3066\u306a\u3044\u306e\u3067\u3001\u504f\u4f4d\u3092\u8db3\u305b\u307e\u305b\u3093\u3002
195192 dialog.findwaypoint.intro=\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u540d\u306e\u4e00\u90e8\u3092\u5165\u529b
196193 dialog.findwaypoint.search=\u691c\u7d22
197 dialog.connect.title=\u70b9\u306b\u5199\u771f\u3092\u63a5\u7d9a
198 dialog.connectphoto.clonepoint=\u3053\u306e\u70b9\u306f\u65e2\u306b\u5199\u771f\u3092\u6301\u3063\u3066\u307e\u3059\u3002\n\u30a6\u30a7\u30a4\u30dd\u30a4\u30f3\u30c8\u3092\u30b3\u30d4\u30fc\u3057\u307e\u3059\u304b\uff1f
199194 dialog.saveexif.title=EXIF\u3092\u4fdd\u5b58
200195 dialog.saveexif.intro=\u30c1\u30a7\u30c3\u30af\u30dc\u30c3\u30af\u30b9\u3092\u4f7f\u3063\u3066\u3001\u4fdd\u5b58\u3059\u308b\u5199\u771f\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002
201196 dialog.saveexif.nothingtosave=\u5ea7\u6a19\u60c5\u5831\u306f\u7121\u5909\u66f4\u3067\u3059\u3002\u4fdd\u5b58\u3059\u308b\u3082\u306e\u306f\u3042\u308a\u307e\u305b\u3093\u3002
324319 dialog.saveconfig.prune.exiftoolpath=exiftool\u3078\u306e\u30d1\u30b9
325320 dialog.saveconfig.prune.mapserverindex=\u80cc\u666f\u5730\u56f3\u30b5\u30fc\u30d0\u30fc\u306e\u7d22\u5f15(1-4)
326321 dialog.saveconfig.prune.mapserverurl=\u5730\u56f3\u30b5\u30fc\u30d0\u30fc\u306eURL
327 dialog.saveconfig.prune.showpace=\u30da\u30fc\u30b9\u3092\u8868\u793a
328322 dialog.saveconfig.prune.kmzimagewidth=KML \u753b\u50cf\u5e45
329323 dialog.saveconfig.prune.kmzimageheight=KML \u753b\u50cf\u9ad8
330324 dialog.saveconfig.prune.colourscheme=\u8272\u306e\u30b9\u30ad\u30fc\u30e0
22
33 # Menu entries
44 menu.file=Plik
5 menu.file.open=Otw\u00f3rz
65 menu.file.addphotos=Dodaj zdj\u0119cia
76 menu.file.save=Zapisz
87 menu.file.exit=Zako\u0144cz
98 menu.track=\u015acie\u017cka
10 menu.edit.undo=Cofnij
11 menu.edit.clearundo=Wyczy\u015b\u0107 list\u0119 zmian
12 menu.edit.editpoint=Edytuj punkt
13 menu.edit.deletepoint=Usu\u0144 punkt
14 menu.edit.deleterange=Usu\u0144 zakres
15 menu.edit.deletemarked=Usu\u0144 zaznaczone punkty
16 menu.edit.interpolate=Wstaw pomi\u0119dzy
17 menu.edit.average=U\u015brednij zaznaczenie
18 menu.edit.reverse=Odwr\u00f3\u0107 zakres
19 menu.edit.mergetracksegments=Po\u0142\u0105cz fragmenty \u015bcie\u017cek
20 menu.edit.rearrange=Zmie\u0144 kolejno\u015b\u0107 punkt\u00f3w po\u015brednich
21 menu.edit.rearrange.start=Wszystkie na pocz\u0105tek \u015bcie\u017cki
22 menu.edit.rearrange.end=Wszystkie na koniec \u015bcie\u017cki
23 menu.edit.rearrange.nearest=Do najbli\u017cszego punktu
24 menu.edit.cutandmove=Wytnij i przesu\u0144 zaznaczenie
9 menu.track.undo=Cofnij
10 menu.track.clearundo=Wyczy\u015b\u0107 list\u0119 zmian
11 menu.track.deletemarked=Usu\u0144 zaznaczone punkty
12 menu.track.rearrange=Zmie\u0144 kolejno\u015b\u0107 punkt\u00f3w po\u015brednich
13 menu.track.rearrange.start=Wszystkie na pocz\u0105tek \u015bcie\u017cki
14 menu.track.rearrange.end=Wszystkie na koniec \u015bcie\u017cki
15 menu.track.rearrange.nearest=Do najbli\u017cszego punktu
2516 menu.range=Zakres
17 menu.range.all=Zaznacz wszystko
18 menu.range.none=Usu\u0144 zaznaczenie
19 menu.range.start=Zaznacz pocz\u0105tek zakresu
20 menu.range.end=Zaznacz koniec zakresu
21 menu.range.deleterange=Usu\u0144 zakres
22 menu.range.interpolate=Wstaw pomi\u0119dzy
23 menu.range.average=U\u015brednij zaznaczenie
24 menu.range.reverse=Odwr\u00f3\u0107 zakres
25 menu.range.mergetracksegments=Po\u0142\u0105cz fragmenty \u015bcie\u017cek
26 menu.range.cutandmove=Wytnij i przesu\u0144 zaznaczenie
2627 menu.point=Punkt
27 menu.select.all=Zaznacz wszystko
28 menu.select.none=Usu\u0144 zaznaczenie
29 menu.select.start=Zaznacz pocz\u0105tek zakresu
30 menu.select.end=Zaznacz koniec zakresu
28 menu.point.editpoint=Edytuj punkt
29 menu.point.deletepoint=Usu\u0144 punkt
3130 menu.photo=Zdj\u0119cie
3231 menu.photo.saveexif=Zapisz Exif
3332 menu.photo.connect=Przy\u0142\u0105cz do punktu
4140 menu.view.browser.yahoo=Mapy Yahoo
4241 menu.view.browser.bing=Mapy Bing
4342 menu.settings=Ustawienia
43 menu.settings.onlinemode=\u0141aduj mapy z sieci
4444 menu.help=Pomoc
4545 # Popup menu for map
4646 menu.map.zoomin=Powi\u0119ksz
6666 shortcut.menu.file.open=O
6767 shortcut.menu.file.load=L
6868 shortcut.menu.file.save=S
69 shortcut.menu.edit.undo=Z
69 shortcut.menu.track.undo=Z
7070 shortcut.menu.edit.compress=C
71 shortcut.menu.select.all=A
71 shortcut.menu.range.all=A
7272 shortcut.menu.help.help=H
7373
7474 # Functions
75 function.open=Otw\u00f3rz
7576 function.loadfromgps=\u0141aduj z GPS
7677 function.sendtogps=Wy\u015blij dane do urz\u0105dzenia GPS
7778 function.exportkml=Eksportuj KML
9293 function.setkmzimagesize=Ustaw rozmiar zdj\u0119\u0107 w KMZ
9394 function.setpaths=Ustaw \u015bcie\u017cki do program\u00f3w
9495 function.getgpsies=Pobierz \u015bcie\u017cki z Gpsies
96 function.lookupsrtm=Pobierz wysoko\u015bci z SRTM
9597 function.duplicatepoint=Duplikuj plik
9698 function.setcolours=Ustaw kolory
9799 function.setlanguage=Zmie\u0144 j\u0119zyk
105107 function.about=O Prune
106108 function.checkversion=Sprawd\u017a czy jest nowa wersja
107109 function.saveconfig=Zapisz ustawienia
110 function.diskcache=Zapisz mapy na dysk
108111
109112 # Dialogs
110113 dialog.exit.confirm.title=Zako\u0144cz Prune
117120 dialog.deletephoto.deletepoint=Usun\u0105\u0107 punkt do\u0142\u0105czony do tego zdj\u0119cia?
118121 dialog.openoptions.title=Otw\u00f3rz opcje
119122 dialog.openoptions.filesnippet=Fragment z pliku
123 dialog.open.contentsdoubled=Ten plik zawiera dwie kopie ka\u017cdego punktu.\nRaz jako punkt po\u015bredni, a raz jako punkt \u015bcie\u017cki.
120124 dialog.load.table.field=Pole
121125 dialog.load.table.datatype=Typ danych
122126 dialog.load.table.description=Opis
237241 dialog.distances.currentpoint=Wybrany punkt
238242 dialog.distances.toofewpoints=Ta funkcja wymaga przynajmniej dw\u00f3ch punkt\u00f3w po\u015brednich, aby mo\u017cna by\u0142o obliczy\u0107 odleg\u0142o\u015bci
239243 dialog.fullrangedetails.intro=Szczeg\u00f3\u0142y wybranego zakresu
240 dialog.setmapbg.mapnik=Mapnik (domy\u015blny)
241 dialog.setmapbg.osma=Osma
242 dialog.setmapbg.cyclemap=Cyclemap
243 dialog.setmapbg.other=Inne
244 dialog.setmapbg.server=Adres URL serwera
244 dialog.setmapbg.intro=Wybierz dostawc\u0119 map t\u0142a lub dodaj nowego
245 dialog.addmapsource.title=Dodaj dostawc\u0119 map
246 dialog.addmapsource.sourcename=Nazwa dostawcy
247 dialog.addmapsource.layer1url=URL pierwszej warstwy
248 dialog.addmapsource.layer2url=Opcjonalny URL drugiej warstwy
249 dialog.addmapsource.maxzoom=Maksymalny poziom zbli\u017cenia
250 dialog.addmapsource.cloudstyle=Numer stylu
251 dialog.addmapsource.noname=Nienazwane
245252 dialog.gpsies.column.name=Nazwa \u015bcie\u017cki
246253 dialog.gpsies.column.length=D\u0142ugo\u015b\u0107
247254 dialog.gpsies.description=Opis
303310 dialog.about.systeminfo.exiftool=Exiftool zainstalowany
304311 dialog.about.systeminfo.gpsbabel=Gpsbabel zainstalowany
305312 dialog.about.systeminfo.gnuplot=Gnuplot zainstalowany
313 dialog.about.systeminfo.exiflib=Biblioteka Exif
314 dialog.about.systeminfo.exiflib.internal=Wewn\u0119trzny
315 dialog.about.systeminfo.exiflib.internal.failed=Wewn\u0119trzny (nie znaleziony)
316 dialog.about.systeminfo.exiflib.external=Zewn\u0119trzny
317 dialog.about.systeminfo.exiflib.external.failed=Zewn\u0119trzny (nie znaleziony)
306318 dialog.about.yes=Tak
307319 dialog.about.no=Nie
308320 dialog.about.credits=Podzi\u0119kowania
338350 dialog.saveconfig.prune.exiftoolpath=\u015bcie\u017cka do exiftool
339351 dialog.saveconfig.prune.mapserverindex=kolejny numer serwera map
340352 dialog.saveconfig.prune.mapserverurl=URL serwera map
353 dialog.saveconfig.prune.mapsource=Wybrany dostawca map
354 dialog.saveconfig.prune.mapsourcelist=Dostawcy map
355 dialog.saveconfig.prune.diskcache=Pami\u0119\u0107 podr\u0119czna map
341356 dialog.saveconfig.prune.kmzimagewidth=szeroko\u015b\u0107 obrazka w KMZ
342357 dialog.saveconfig.prune.kmzimageheight=wysoko\u015b\u0107 obrazka w KMZ
343358 dialog.saveconfig.prune.colourscheme=Schemat kolor\u00f3w
344359 dialog.saveconfig.prune.kmltrackcolour=Kolor \u015bcie\u017cki w pliku KML
345360 dialog.setpaths.intro=Je\u015bli zachodzi tak potrzeba, mo\u017cesz wybra\u0107 \u015bcie\u017cki do aplikacji zewn\u0119trznych
361 dialog.setpaths.found=Znalezione \u015bcie\u017cki?
346362 dialog.addaltitude.noaltitudes=Wybrany zakres nie zawiera danych o wysoko\u015bciach
347363 dialog.addaltitude.desc=Warto\u015b\u0107 przesuni\u0119cia wysoko\u015bci
348364 dialog.setcolours.intro=Kliknij na kolor by go wybra\u0107
363379 dialog.setlanguage.language=J\u0119zyk
364380 dialog.setlanguage.languagefile=Plik t\u0142umaczenia
365381 dialog.setlanguage.endmessage=Zapisz ustawienia i zrestartuj Prune\n by zmiana j\u0119zyka odnios\u0142a skutek.
382 dialog.diskcache.save=Zapisz mapy na dysk
383 dialog.diskcache.dir=katalog pami\u0119ci podr\u0119cznej
384 dialog.diskcache.createdir=stw\u00f3rz katalog
385 dialog.diskcache.nocreate=Nie utworzono katalogu pami\u0119ci podr\u0119cznej
366386
367387 # 3d window
368388 dialog.3d.title=Prune widok tr\u00f3jwymiarowy
387407 confirm.cutandmove=Przesuni\u0119to zaznaczenie
388408 confirm.convertnamestotimes=Zmieniono nazwy punkt\u00f3w po\u015brednich
389409 confirm.saveexif.ok1=Zapisano
390 confirm.saveexif.ok2=pliki zdj\u0119\u0107
410 confirm.saveexif.ok2=plik(\u00f3w) zdj\u0119\u0107
391411 confirm.undo.single=cofni\u0119to operacj\u0119
392412 confirm.undo.multi=operacje zosta\u0142y cofni\u0119te
393413 confirm.jpegload.single=dodano zdj\u0119cie
399419 confirm.createpoint=stworzono punkt
400420 confirm.rotatephoto=obr\u00f3cono zdj\u0119cie
401421 confirm.running=Przetwarzam dane ...
422 confirm.lookupsrtm1=Znaleziono
423 confirm.lookupsrtm2=warto\u015bci wysoko\u015bci
402424
403425 # Buttons || These are all the texts for buttons
404426 button.ok=OK
428450 button.check=Sprawd\u017a
429451 button.resettodefaults=Przywr\u00f3\u0107 domy\u015blne
430452 button.browse=Przegl\u0105daj...
453 button.addnew=Dodaj nowy
454 button.delete=Usu\u0144
431455
432456 # File types
433457 filetype.txt=Pliki TXT
442466 # Display components || These are all for the side panels showing point/range details
443467 display.nodata=Nie za\u0142adowano danych
444468 display.noaltitudes=\u015acie\u017cki nie zawieraj\u0105 informacji o wysoko\u015bci
469 display.notimestamps=\u015acie\u017cki nie zawieraj\u0105 informacji o czasie
445470 details.trackdetails=Szczeg\u00f3\u0142y \u015bcie\u017cki
446471 details.notrack=Brak za\u0142adowanych \u015bcie\u017cek
447472 details.track.points=Punkty
467492 display.range.time.days=d
468493 details.range.avespeed=\u015arednia pr\u0119dko\u015b\u0107
469494 details.range.avemovingspeed=\u015arednie przesuni\u0119cie
495 details.range.maxspeed=Pr\u0119dko\u015b\u0107 maksymalna
470496 details.range.numsegments=Liczba segment\u00f3w
471497 details.range.pace=Tempo
472498 details.range.gradient=Nachylenie
547573 undo.createpoint=stw\u00f3rz punkt
548574 undo.rotatephoto=obr\u00f3\u0107 zdj\u0119cie
549575 undo.convertnamestotimes=zamie\u0144 nazwy punkt\u00f3w
576 undo.lookupsrtm=szukaj wysoko\u015bci w SRTM
550577
551578 # Error messages
552579 error.save.dialogtitle=B\u0142\u0105d zapisu danych
570597 error.jpegload.nojpegsfound=Nie znaleziono plik\u00f3w jpeg
571598 error.jpegload.noexiffound=Nie znaleziono informacji EXIF
572599 error.jpegload.nogpsfound=Nie znaleziono informacji GPS
600 error.jpegload.exifreadfailed=Nie powiod\u0142o si\u0119 odczytanie informacji EXIF\nInformacji tych nie mo\u017cna przeczyta\u0107 bez wewn\u0119trznej lub zewn\u0119trznej biblioteki.
573601 error.gpsload.unknown=Nieznany b\u0142\u0105d
574602 error.undofailed.title=Cofnij nie powiod\u0142o si\u0119
575603 error.undofailed.text=Nie mo\u017cna cofn\u0105\u0107
583611 error.osmimage.failed=B\u0142\u0105d przy \u0142adowaniu obraz\u00f3w map. Sprawd\u017a po\u0142\u0105czenie z internetem.
584612 error.language.wrongfile=Wybrany plik nie jest plikiem z t\u0142umaczeniem dla Prune
585613 error.convertnamestotimes.nonames=\u017badne nazwy nie mog\u0142y zosta\u0107 zmienione na czas
614 error.lookupsrtm.none=Nie znaleziono danych o wysoko\u015bci.
22
33 # Menu entries
44 menu.file=Arquivo
5 menu.file.open=Abrir
65 menu.file.addphotos=Adicionar fotos
76 menu.file.save=Salvar
87 menu.file.exit=Sair
9 menu.edit=Editar
108 menu.track=Track
11 menu.edit.undo=Desfazer
12 menu.edit.clearundo=Limpar lista de desfazer
13 menu.edit.editpoint=Editar ponto
14 menu.edit.deletepoint=Remover ponto
15 menu.edit.deleterange=Remover intervalo
16 menu.edit.deletemarked=Remover pontos marcados
17 menu.edit.interpolate=Interpolar
18 menu.edit.average=Sele\u00e7\u00e3o m\u00e9dia
19 menu.edit.reverse=Reverter intervalo
20 menu.edit.mergetracksegments=Mesclar trechos da rota
21 menu.edit.rearrange=Rearrumar pontos
22 menu.edit.rearrange.start=Tudo para o in\u00edcio do arquivo
23 menu.edit.rearrange.end=Tudo para o fim do arquivo
24 menu.edit.rearrange.nearest=Cada um para o ponto da rota mais pr\u00f3ximo
25 menu.edit.cutandmove=Recortar e mover sele\u00e7\u00e3o
26 menu.select=Selecionar
9 menu.track.undo=Desfazer
10 menu.track.clearundo=Limpar lista de desfazer
11 menu.point.editpoint=Editar ponto
12 menu.point.deletepoint=Remover ponto
13 menu.range.deleterange=Remover intervalo
14 menu.track.deletemarked=Remover pontos marcados
15 menu.range.interpolate=Interpolar
16 menu.range.average=Sele\u00e7\u00e3o m\u00e9dia
17 menu.range.reverse=Reverter intervalo
18 menu.range.mergetracksegments=Mesclar trechos da rota
19 menu.track.rearrange=Rearrumar pontos
20 menu.track.rearrange.start=Tudo para o in\u00edcio do arquivo
21 menu.track.rearrange.end=Tudo para o fim do arquivo
22 menu.track.rearrange.nearest=Cada um para o ponto da rota mais pr\u00f3ximo
23 menu.range.cutandmove=Recortar e mover sele\u00e7\u00e3o
2724 menu.range=Intervalo
2825 menu.point=Ponto
29 menu.select.all=Selectionar tudo
30 menu.select.none=N\u00e3o selecionar nenhuns
31 menu.select.start=Definir in\u00edcio do intervalo
32 menu.select.end=Definir fim do intervalo
26 menu.range.all=Selectionar tudo
27 menu.range.none=N\u00e3o selecionar nenhuns
28 menu.range.start=Definir in\u00edcio do intervalo
29 menu.range.end=Definir fim do intervalo
3330 menu.photo=Foto
3431 menu.photo.saveexif=Salvar para Exif
3532 menu.photo.connect=Conectar ao ponto
5653
5754 # Alt keys for menus
5855 altkey.menu.file=A
59 altkey.menu.edit=E
60 altkey.menu.select=S
6156 altkey.menu.track=T
6257 altkey.menu.range=I
6358 altkey.menu.point=P
7065 shortcut.menu.file.open=A
7166 shortcut.menu.file.load=C
7267 shortcut.menu.file.save=S
73 shortcut.menu.edit.undo=Z
68 shortcut.menu.track.undo=Z
7469 shortcut.menu.edit.compress=C
75 shortcut.menu.select.all=T
70 shortcut.menu.range.all=T
7671 shortcut.menu.help.help=J
7772
7873 # Functions
74 function.open=Abrir
7975 function.loadfromgps=Carregar dados do GPS
8076 function.sendtogps=Enviar dados para o GPS
8177 function.exportkml=Exportar para KML
214210 dialog.addtimeoffset.notimestamps=N\u00e3o foi poss\u00edvel adicionar uma diferen\u00e7a de tempo uma vez que esta sele\u00e7\u00e3o n\u00e3o possui nenhuma informa\u00e7\u00e3o de data-hora
215211 dialog.findwaypoint.intro=Insira parte do nome do ponto
216212 dialog.findwaypoint.search=Pesquisar
217 dialog.connect.title=Conectar foto ao ponto
218 dialog.connectphoto.clonepoint=Este ponto j\u00e1 possui uma foto.\n Voc\u00ea deseja fazer uma c\u00f3pia deste ponto?
219213 dialog.saveexif.title=Salvar Exif
220214 dialog.saveexif.intro=Selecionar as fotos para salvar usando as caixas de sele\u00e7\u00e3o
221215 dialog.saveexif.nothingtosave=Dados das coordenadas n\u00e3o foram alterados, nada para salvar
22
33 # Menu entries
44 menu.file=Fi\u015fier
5 menu.file.open=Deschidere fi\u015fier
65 menu.file.addphotos=Adaugare foto
76 menu.file.save=Salvare
87 menu.file.exit=Iesire
98 menu.track=Traseu
10 menu.edit=Editare
11 menu.edit.undo=Anulare
12 menu.edit.clearundo=\u015etergere lista de anulari
13 menu.edit.editpoint=Editare punct
14 menu.edit.deletepoint=\u015etergere punct
15 menu.edit.deleterange=\u015etergere gama
16 menu.edit.deletemarked=\u015etergere puncte marcate
17 menu.edit.interpolate=Interpolare
18 menu.edit.average=Mediere selectie
19 menu.edit.reverse=Inversare selectie
20 menu.edit.mergetracksegments=Unire segmente traseu
21 menu.edit.rearrange=Rearanjare waypoint
22 menu.edit.rearrange.start=Toate la inceputul fisierului
23 menu.edit.rearrange.end=Toate la sfarsitul fisierului
24 menu.edit.rearrange.nearest=Fiecare la punctul cel mai apropiat al traseului
25 menu.edit.cutandmove=Taiere si mutare selectie
9 menu.track.undo=Anulare
10 menu.track.clearundo=\u015etergere lista de anulari
11 menu.point.editpoint=Editare punct
12 menu.point.deletepoint=\u015etergere punct
13 menu.range.deleterange=\u015etergere gama
14 menu.track.deletemarked=\u015etergere puncte marcate
15 menu.range.interpolate=Interpolare
16 menu.range.average=Mediere selectie
17 menu.range.reverse=Inversare selectie
18 menu.range.mergetracksegments=Unire segmente traseu
19 menu.track.rearrange=Rearanjare waypoint
20 menu.track.rearrange.start=Toate la inceputul fisierului
21 menu.track.rearrange.end=Toate la sfarsitul fisierului
22 menu.track.rearrange.nearest=Fiecare la punctul cel mai apropiat al traseului
23 menu.range.cutandmove=Taiere si mutare selectie
2624 menu.point=Punct
27 menu.select=Selectare
28 menu.select.all=Selectare toate
29 menu.select.none=Nu selecta niciun punct
30 menu.select.start=Seteaza inceputul selectiei
31 menu.select.end=Seteaza sfarsitul selectiei
25 menu.range.all=Selectare toate
26 menu.range.none=Nu selecta niciun punct
27 menu.range.start=Seteaza inceputul selectiei
28 menu.range.end=Seteaza sfarsitul selectiei
3229 menu.photo=Foto
3330 menu.photo.saveexif=Salveaza la Exif
3431 menu.photo.connect=Conecteaza la punct
6259 # Ctrl shortcuts for menu items
6360 shortcut.menu.file.open=D
6461 shortcut.menu.file.save=S
65 shortcut.menu.edit.undo=Z
66 shortcut.menu.select.all=T
62 shortcut.menu.track.undo=Z
63 shortcut.menu.range.all=T
6764
6865 # Functions
66 function.open=Deschidere fi\u015fier
6967 function.loadfromgps=\u00cencarc\u0103 date de la GPS
7068 function.sendtogps=Trimite date spre GPS
7169 function.exportkml=Export\u0103 \u00eentr-un fi\u015fier KML
128126 dialog.charts.xaxis=Axa X
129127 dialog.charts.yaxis=Axa Y
130128 dialog.distances.currentpoint=Punct curent
131 dialog.setmapbg.mapnik=Mapnik (implicit)
132 dialog.setmapbg.server=Adres\u0103 server
133129 dialog.gpsies.column.length=Lungime
134130 dialog.gpsies.description=Descriere
135131 dialog.gpsies.nodescription=Fara descriere
22
33 # Menu entries
44 menu.file=Dosya
5 menu.file.open=Dosya a\u00e7
65 menu.file.addphotos=Foto ekle
76 menu.file.save=Kaydet
87 menu.file.exit=Ç\u0131k\u0131\u015f
9 menu.edit=D\u00fczenle
108 menu.track=\u0130z
11 menu.edit.undo=Geri al
12 menu.edit.clearundo=Geri alma listesi s\u0131f\u0131rla
13 menu.edit.editpoint=Nokta d\u00fczenle
14 menu.edit.deletepoint=Noktay\u0131 sil
15 menu.edit.deleterange=S\u0131ray\u0131 sil
16 menu.edit.deletemarked=Se\u00e7ili noktalar\u0131 sil
17 menu.edit.interpolate=\u0130nterpolasyon
18 menu.edit.average=Se\u00e7me ortala
19 menu.edit.reverse=S\u0131ra tersine \u00e7evir
20 menu.edit.mergetracksegments=\u0130z par\u00e7alar\u0131 birle\u015ftir
21 menu.edit.rearrange=Yol noktalar\u0131 yeniden diz
22 menu.edit.rearrange.start=Hepsini dosyan\u0131n ba\u015f\u0131na
23 menu.edit.rearrange.end=Hepsini dosyan\u0131n sonuna
24 menu.edit.rearrange.nearest=En yak\u0131n iz noktaya
25 menu.edit.cutandmove=Se\u00e7me kes ve ta\u015f\u0131
26 menu.select=Se\u00e7
9 menu.track.undo=Geri al
10 menu.track.clearundo=Geri alma listesi s\u0131f\u0131rla
11 menu.point.editpoint=Nokta d\u00fczenle
12 menu.point.deletepoint=Noktay\u0131 sil
13 menu.range.deleterange=S\u0131ray\u0131 sil
14 menu.track.deletemarked=Se\u00e7ili noktalar\u0131 sil
15 menu.range.interpolate=\u0130nterpolasyon
16 menu.range.average=Se\u00e7me ortala
17 menu.range.reverse=S\u0131ra tersine \u00e7evir
18 menu.range.mergetracksegments=\u0130z par\u00e7alar\u0131 birle\u015ftir
19 menu.track.rearrange=Yol noktalar\u0131 yeniden diz
20 menu.track.rearrange.start=Hepsini dosyan\u0131n ba\u015f\u0131na
21 menu.track.rearrange.end=Hepsini dosyan\u0131n sonuna
22 menu.track.rearrange.nearest=En yak\u0131n iz noktaya
23 menu.range.cutandmove=Se\u00e7me kes ve ta\u015f\u0131
2724 menu.range=S\u0131ra
2825 menu.point=Nokta
29 menu.select.all=Hepsini se\u00e7
30 menu.select.none=Hi\u00e7 se\u00e7
31 menu.select.start=S\u0131ran\u0131n ba\u015fkang\u0131c\u0131 se\u00e7
32 menu.select.end=S\u0131ran\u0131n sonu se\u00e7
26 menu.range.all=Hepsini se\u00e7
27 menu.range.none=Hi\u00e7 se\u00e7
28 menu.range.start=S\u0131ran\u0131n ba\u015fkang\u0131c\u0131 se\u00e7
29 menu.range.end=S\u0131ran\u0131n sonu se\u00e7
3330 menu.photo=Foto
3431 menu.photo.saveexif=Exif'te kaydet
3532 menu.photo.connect=Noktaya ba\u011flan
4340 menu.view.browser.yahoo=Yahoo haritalar\u0131
4441 menu.view.browser.bing=Bing haritalar\u0131
4542 menu.settings=Ayarlar
46 menu.settings.showpace=H\u0131z\u0131 g\u00f6r\u00fcnt\u00fcle
4743 menu.help=Yard\u0131m
4844 # Popup menu for map
4945 menu.map.zoomin=Yak\u0131nla\u015ft\u0131r
5551
5652 # Alt keys for menus
5753 altkey.menu.file=D
58 altkey.menu.edit=Z
59 altkey.menu.select=S
6054 altkey.menu.track=Z
6155 altkey.menu.range=S
6256 altkey.menu.point=N
6963 shortcut.menu.file.open=A
7064 shortcut.menu.file.load=L
7165 shortcut.menu.file.save=K
72 shortcut.menu.edit.undo=Z
66 shortcut.menu.track.undo=Z
7367 shortcut.menu.edit.compress=C
74 shortcut.menu.select.all=A
68 shortcut.menu.range.all=A
7569 shortcut.menu.help.help=Y
7670
7771 # Functions
72 function.open=Dosya a\u00e7
7873 function.loadfromgps=GPS'den veri al
7974 function.sendtogps=GPS'e veri g\u00f6nder
8075 function.exportkml=Ver KML olarak
269264 dialog.saveconfig.prune.exiftoolpath=exiftool'un yeriyolu
270265 dialog.saveconfig.prune.mapserverindex=Harita sunucunun index
271266 dialog.saveconfig.prune.mapserverurl=Harita sunucunun adresi
272 dialog.saveconfig.prune.showpace=H\u0131z\u0131 g\u00f6r\u00fcnt\u00fcle
273267 dialog.saveconfig.prune.kmzimagewidth=KMZ resim geni\u015fli\u011fi
274268 dialog.saveconfig.prune.kmzimageheight=KMZ resim y\u00fcksekli\u011fi
275269 dialog.setpaths.intro=\u0130ste\u011fe ba\u011fl\u0131 a\u015fa\u011f\u0131daki uygulamalar\u0131n veriyolu kaydedebilirsin:
22
33 # Menu entries
44 menu.file=\u6587\u4ef6
5 menu.file.open=\u6253\u5f00
65 menu.file.addphotos=\u6dfb\u52a0\u76f8\u7247
76 menu.file.save=\u4fdd\u5b58
87 menu.file.exit=\u9000\u51fa
9 menu.edit=\u7f16\u8f91
10 menu.edit.undo=\u64a4\u9500
11 menu.edit.clearundo=\u6e05\u9664\u64a4\u9500\u6e05\u5355
12 menu.edit.editpoint=\u7f16\u8f91\u8f68\u8ff9\u70b9
13 menu.edit.deletepoint=\u5220\u9664\u8f68\u8ff9\u70b9
14 menu.edit.deleterange=\u5220\u9664\u8f68\u8ff9\u70b9\u6bb5
15 menu.edit.deletemarked=\u5220\u9664\u5df2\u6807\u793a\u8f68\u8ff9\u70b9
16 menu.edit.interpolate=\u63d2\u5165\u8f68\u8ff9\u70b9
17 menu.edit.average=\u8bbe\u7f6e\u5e73\u5747\u8f68\u8ff9\u70b9
18 menu.edit.reverse=\u8f68\u8ff9\u70b9\u53cd\u5411
19 menu.edit.mergetracksegments=\u5408\u5e76\u8f68\u8ff9\u6bb5
20 menu.edit.rearrange=\u822a\u70b9\u91cd\u7f6e
21 menu.edit.rearrange.start=\u81f3\u8d77\u59cb\u4f4d\u7f6e
22 menu.edit.rearrange.end=\u81f3\u672b\u4f4d\u7f6e
23 menu.edit.rearrange.nearest=\u81f3\u6700\u8fd1\u8f68\u8ff9\u70b9
24 menu.edit.cutandmove=\u79fb\u52a8
25 menu.select=\u9009\u62e9
26 menu.select.all=\u5168\u9009
27 menu.select.none=\u64a4\u9500\u9009\u62e9
28 menu.select.start=\u8bbe\u7f6e\u8d77\u70b9
29 menu.select.end=\u8bbe\u7f6e\u672b\u70b9
8 menu.track.undo=\u64a4\u9500
9 menu.track.clearundo=\u6e05\u9664\u64a4\u9500\u6e05\u5355
10 menu.point.editpoint=\u7f16\u8f91\u8f68\u8ff9\u70b9
11 menu.point.deletepoint=\u5220\u9664\u8f68\u8ff9\u70b9
12 menu.range.deleterange=\u5220\u9664\u8f68\u8ff9\u70b9\u6bb5
13 menu.track.deletemarked=\u5220\u9664\u5df2\u6807\u793a\u8f68\u8ff9\u70b9
14 menu.range.interpolate=\u63d2\u5165\u8f68\u8ff9\u70b9
15 menu.range.average=\u8bbe\u7f6e\u5e73\u5747\u8f68\u8ff9\u70b9
16 menu.range.reverse=\u8f68\u8ff9\u70b9\u53cd\u5411
17 menu.range.mergetracksegments=\u5408\u5e76\u8f68\u8ff9\u6bb5
18 menu.track.rearrange=\u822a\u70b9\u91cd\u7f6e
19 menu.track.rearrange.start=\u81f3\u8d77\u59cb\u4f4d\u7f6e
20 menu.track.rearrange.end=\u81f3\u672b\u4f4d\u7f6e
21 menu.track.rearrange.nearest=\u81f3\u6700\u8fd1\u8f68\u8ff9\u70b9
22 menu.range.cutandmove=\u79fb\u52a8
23 menu.range.all=\u5168\u9009
24 menu.range.none=\u64a4\u9500\u9009\u62e9
25 menu.range.start=\u8bbe\u7f6e\u8d77\u70b9
26 menu.range.end=\u8bbe\u7f6e\u672b\u70b9
3027 menu.photo=\u76f8\u7247
3128 menu.photo.saveexif=\u5750\u6807\u4fdd\u5b58\u81f3Exif
3229 menu.photo.connect=\u94fe\u63a5\u76f8\u7247
3936 menu.view.browser.mapquest=Mapquest\u5730\u56fe
4037 menu.view.browser.yahoo=Yahoo\u5730\u56fe
4138 menu.settings=\u8bbe\u7f6e
42 menu.settings.showpace=\u663e\u793a\u6b65\u901f
4339 menu.help=\u5e2e\u52a9
4440 # Popup menu for map
4541 menu.map.zoomin=\u653e\u5927
5248 menu.map.showscalebar=\u663e\u793a\u6bd4\u4f8b\u5c3a
5349
5450 # Functions
51 function.open=\u6253\u5f00
5552 function.loadfromgps=\u4eceGPS\u5bfc\u5165
5653 function.sendtogps=\u53d1\u9001\u81f3GPS
5754 function.exportkml=\u8f93\u51faKML\u6587\u4ef6
175172 dialog.addtimeoffset.notimestamps=\u4e0d\u80fd\u6dfb\u52a0\u65f6\u95f4\u56e0\u4e3a\u6b64\u6bb5\u4e0d\u542b\u65f6\u95f4\u4fe1\u606f
176173 dialog.findwaypoint.intro=\u8f93\u5165\u90e8\u5206\u822a\u70b9\u540d
177174 dialog.findwaypoint.search=\u641c\u7d22
178 dialog.connect.title=\u94fe\u63a5\u7167\u7247\u548c\u822a\u70b9
179 dialog.connectphoto.clonepoint=\u6b64\u8f68\u8ff9\u70b9\u5df2\u6709\u50cf\u7247\n\u662f\u5426\u590d\u5236\u822a\u70b9\uff1f
180175 dialog.saveexif.title=\u4fdd\u5b58Exif
181176 dialog.saveexif.intro=\u9009\u62e9\u8981\u4fdd\u5b58\u7684\u76f8\u7247
182177 dialog.saveexif.nothingtosave=\u5750\u6807\u672a\u6539\u53d8\uff0c\u65e0\u4fdd\u5b58\u5185\u5bb9
291286 dialog.saveconfig.prune.exiftoolpath=exiftool\u8def\u5f84
292287 dialog.saveconfig.prune.mapserverindex=\u80cc\u666f\u5730\u56fe\u7801(1-4)
293288 dialog.saveconfig.prune.mapserverurl=\u90094\u65f6\u5730\u56fe\u670d\u52a1\u5668URL
294 dialog.saveconfig.prune.showpace=\u663e\u793a\u6b65\u901f
295289 dialog.saveconfig.prune.kmzimagewidth=KMZ\u56fe\u50cf\u5bbd\u5ea6
296290 dialog.saveconfig.prune.kmzimageheight=KMZ\u56fe\u50cf\u9ad8\u5ea6
297291 dialog.setpaths.intro=\u82e5\u9700\u8981\uff0c\u53ef\u8bbe\u5b9a\u5916\u6302\u7a0b\u5e8f\u8def\u5f84
2020 import tim.prune.config.Config;
2121 import tim.prune.data.Altitude;
2222 import tim.prune.data.DataPoint;
23 import tim.prune.data.Field;
2324 import tim.prune.data.LatLonRectangle;
2425 import tim.prune.data.Latitude;
2526 import tim.prune.data.Longitude;
252253 }
253254 // Try to get information out of exif
254255 JpegData jpegData = ExifGateway.getJpegData(inFile);
256 Timestamp timestamp = null;
255257 if (jpegData != null)
256258 {
257259 if (jpegData.getExifDataPresent())
258260 {_fileCounts[2]++;} // exif found
259261 if (jpegData.isGpsValid())
260262 {
261 photo.setTimestamp(createTimestamp(jpegData.getGpsDatestamp(), jpegData.getGpsTimestamp()));
263 timestamp = createTimestamp(jpegData.getGpsDatestamp(), jpegData.getGpsTimestamp());
262264 // Make DataPoint and attach to Photo
263265 DataPoint point = createDataPoint(jpegData);
264266 point.setPhoto(photo);
268270 _fileCounts[3]++;
269271 }
270272 // Use exif timestamp if gps timestamp not available
271 if (photo.getTimestamp() == null && jpegData.getOriginalTimestamp() != null)
272 {
273 photo.setTimestamp(createTimestamp(jpegData.getOriginalTimestamp()));
273 if (timestamp == null && jpegData.getOriginalTimestamp() != null) {
274 timestamp = createTimestamp(jpegData.getOriginalTimestamp());
274275 }
275276 photo.setExifThumbnail(jpegData.getThumbnailImage());
276277 // Also extract orientation tag for setting rotation state of photo
277278 photo.setRotation(jpegData.getRequiredRotation());
278279 }
279280 // Use file timestamp if exif timestamp isn't available
280 if (photo.getTimestamp() == null) {
281 photo.setTimestamp(new Timestamp(inFile.lastModified()));
281 if (timestamp == null) {
282 timestamp = new Timestamp(inFile.lastModified());
283 }
284 // Apply timestamp to photo and its point (if any)
285 photo.setTimestamp(timestamp);
286 if (photo.getDataPoint() != null) {
287 photo.getDataPoint().setFieldValue(Field.TIMESTAMP, timestamp.getText(Timestamp.FORMAT_ISO_8601), false);
282288 }
283289 // Check the criteria for adding the photo - check whether the photo has coordinates and if so if they're within the rectangle
284290 if ( (photo.getDataPoint() != null || _noExifCheckbox.isSelected())
3535 {
3636 BufferedReader reader = null;
3737 ArrayList<NmeaMessage> messages = new ArrayList<NmeaMessage>();
38 String lastDate = null;
3839 try
3940 {
4041 reader = new BufferedReader(new FileReader(inFile));
4546 // Try to make an NmeaMessage object for each line of file
4647 if (currLine.trim().length() > 0)
4748 {
48 NmeaMessage message = processLine(currLine);
49 NmeaMessage message = processGGA(currLine);
4950 if (message != null)
5051 {
51 if (message.hasFix()) {
52 if (message.hasFix())
53 {
5254 message.setSegment(newSegment);
55 message.setDate(lastDate);
5356 // add message to list
5457 messages.add(message);
5558 }
5659 // Start a new segment if fix lost
5760 newSegment = !message.hasFix();
61 }
62 else {
63 String date = getDateFromRMC(currLine);
64 if (date != null)
65 {
66 if (lastDate == null && !messages.isEmpty()) {
67 // Backfill first few messages received before the first date
68 for (int m=0; m<messages.size(); m++) {
69 messages.get(m).setDate(date);
70 }
71 }
72 lastDate = date;
73 }
5874 }
5975 }
6076 // Read next line, if any
6783 finally
6884 {
6985 // close file ignoring errors
70 try
71 {
86 try {
7287 if (reader != null) reader.close();
7388 }
7489 catch (Exception e) {}
8196 }
8297
8398 /**
84 * Process the given NMEA line and return the message
99 * Process the given GGA sentence and return the message
85100 * @param inLine line to process
86101 * @return message object
87102 */
88 private static NmeaMessage processLine(String inLine)
103 private static NmeaMessage processGGA(String inLine)
89104 {
90105 // Only consider lines which are long enough and begin with the GPS position sentence
91106 if (inLine == null || inLine.length() < 20 || !inLine.startsWith("$GPGGA")) {
92107 return null;
93108 }
94 // TODO: May be possible to pull date out of GPRMC messages, but then need to back-populate
95109 // Assume comma delimiter, split into array
96110 String[] splitLine = inLine.split(",");
97111 if (splitLine != null && splitLine.length >= 10)
101115 splitLine[9], // altitude
102116 splitLine[1], // timestamp
103117 splitLine[6]); // fix
118 }
119 // Couldn't parse it, return null
120 return null;
121 }
122
123 /**
124 * Process the given MRC sentence and return the date
125 * @param inLine line to process
126 * @return date, if any
127 */
128 private static String getDateFromRMC(String inLine)
129 {
130 // Only consider lines which are long enough and begin with the RMC sentence
131 if (inLine == null || inLine.length() < 20 || !inLine.startsWith("$GPRMC")) {
132 return null;
133 }
134 // Assume comma delimiter, split into array
135 String[] splitLine = inLine.split(",");
136 if (splitLine != null && splitLine.length >= 10)
137 {
138 return splitLine[9]; // date in position 9
104139 }
105140 // Couldn't parse it, return null
106141 return null;
1010 private String _longitude = null;
1111 private String _altitude = null;
1212 private String _timestamp = null;
13 private String _date = null;
1314 private boolean _fix = false;
1415 private boolean _segment = false;
1516
4445 public void setSegment(boolean inSegment)
4546 {
4647 _segment = inSegment;
48 }
49
50 /**
51 * @param inDate date from MRC sentence
52 */
53 public void setDate(String inDate) {
54 _date = inDate;
4755 }
4856
4957 /**
8290 try
8391 {
8492 Calendar cal = Calendar.getInstance();
93 // use date if available (today if not)
94 if (_date != null && _date.length() == 6) {
95 try {
96 cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(_date.substring(0, 2)));
97 cal.set(Calendar.MONTH, Integer.parseInt(_date.substring(2, 4))-1); // month starts at zero
98 int year = Integer.parseInt(_date.substring(4, 6));
99 if (year < 80) {year += 2000;} else {year += 1900;} // two-digit year hack
100 cal.set(Calendar.YEAR, year);
101 }
102 catch (Exception e) {} // ignore exceptions for date, still take time
103 }
85104 cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(_timestamp.substring(0, 2)));
86105 cal.set(Calendar.MINUTE, Integer.parseInt(_timestamp.substring(2, 4)));
87106 cal.set(Calendar.SECOND, Integer.parseInt(_timestamp.substring(4, 6)));
7979 }
8080 }
8181 catch (Exception e) {
82 System.err.println("Error: " + e.getClass().getName() + " -message= " + e.getMessage());
82 System.err.println("ZipFile Error: " + e.getClass().getName() + " -message= " + e.getMessage());
8383 }
8484 }
8585
124124 }
125125 }
126126 catch (Exception e) {
127 System.err.println("Error: " + e.getClass().getName() + " -message= " + e.getMessage());
127 System.err.println("ZipStream Error: " + e.getClass().getName() + " -message= " + e.getMessage());
128128 }
129129 }
130130 }
0 Prune version 9
1 ===============
0 Prune version 10
1 ================
22
33 Prune is an application for viewing, editing and managing coordinate data from GPS systems,
44 including format conversion, charting and photo correlation.
1616 =======
1717
1818 To run Prune from the jar file, simply call it from a command prompt or shell:
19 java -jar prune_09.jar
19 java -jar prune_10.jar
2020
2121 If the jar file is saved in a different directory, you will need to include the path.
2222 Depending on your system settings, you may be able to click or double-click on the jar file
2424 or other link can of course be made should you wish.
2525
2626 To specify a language other than the default, use an additional parameter, eg:
27 java -jar prune_09.jar --lang=DE
27 java -jar prune_10.jar --lang=DE
28
29 New with version 10
30 ===================
31
32 The following features were added since version 9:
33 - Function to lookup altitudes using SRTM data from the Space Shuttle
34 - Choice between altitude profile and speed profile in main view
35 - Caching of map tiles to disk for faster access
36 - Offline mode where maps are only retrieved from disk
37 - Storage of multiple custom map sources, not just one custom one
38 - Use of maps with multiple layers (like maps-for-free)
39 - Use of cloudmade maps
2840
2941 New with version 9
3042 ==================
5555 saxParser.parse(new GZIPInputStream(new FileInputStream(inInfo.getFile())), this);
5656 }
5757 else {
58 System.out.println("Unrecognised file type: " + inInfo.getFile().getName());
58 System.out.println("GpxCacher unrecognised file type: " + inInfo.getFile().getName());
5959 }
6060 } catch (Exception e) {
6161 // TODO: Handle errors here with a list of warnings?
0 package tim.prune.undo;
1
2 import tim.prune.I18nManager;
3 import tim.prune.UpdateMessageBroker;
4 import tim.prune.data.DataPoint;
5 import tim.prune.data.Field;
6 import tim.prune.data.Track;
7 import tim.prune.data.TrackInfo;
8
9 /**
10 * Undo lookup of altitudes from SRTM data
11 */
12 public class UndoLookupSrtm implements UndoOperation
13 {
14 /** DataPoint objects which didn't have altitudes before */
15 private DataPoint[] _points;
16
17
18 /**
19 * Constructor
20 * @param inTrackInfo track info object
21 */
22 public UndoLookupSrtm(TrackInfo inTrackInfo)
23 {
24 Track track = inTrackInfo.getTrack();
25 int numPoints = track.getNumPoints();
26 // Make array of points without altitudes
27 _points = new DataPoint[numPoints];
28 for (int i=0; i<numPoints; i++) {
29 DataPoint point = track.getPoint(i);
30 if (!point.hasAltitude()) {
31 _points[i] = point;
32 }
33 }
34 }
35
36
37 /**
38 * @return description of operation
39 */
40 public String getDescription()
41 {
42 return I18nManager.getText("undo.lookupsrtm");
43 }
44
45
46 /**
47 * Perform the undo operation on the given Track
48 * @param inTrackInfo TrackInfo object on which to perform the operation
49 */
50 public void performUndo(TrackInfo inTrackInfo) throws UndoException
51 {
52 // Loop through points again, and reset altitudes if they have one
53 final int numPoints = _points.length;
54 for (int i=0; i<numPoints; i++) {
55 DataPoint point = _points[i];
56 if (point != null && point.hasAltitude()) {
57 point.setFieldValue(Field.ALTITUDE, null, true);
58 }
59 }
60 _points = null;
61 UpdateMessageBroker.informSubscribers();
62 }
63 }