Changeset 5670 in josm for trunk/src/org/openstreetmap/josm/io
- Timestamp:
- 2013-01-25T22:34:19+01:00 (11 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/io/session
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/io/session/SessionReader.java
r5572 r5670 33 33 34 34 import org.openstreetmap.josm.Main; 35 import org.openstreetmap.josm.data.coor.EastNorth; 36 import org.openstreetmap.josm.data.coor.LatLon; 37 import org.openstreetmap.josm.data.projection.Projection; 38 import org.openstreetmap.josm.data.projection.Projections; 35 39 import org.openstreetmap.josm.gui.ExtendedDialog; 40 import org.openstreetmap.josm.gui.NavigatableComponent.ViewportData; 36 41 import org.openstreetmap.josm.gui.layer.Layer; 37 42 import org.openstreetmap.josm.gui.progress.NullProgressMonitor; … … 84 89 private List<Layer> layers = new ArrayList<Layer>(); 85 90 private List<Runnable> postLoadTasks = new ArrayList<Runnable>(); 91 private ViewportData viewport; 86 92 87 93 /** … … 97 103 public List<Runnable> getPostLoadTasks() { 98 104 return postLoadTasks; 105 } 106 107 /** 108 * Return the viewport (map position and scale). 109 * @return The viewport. Can be null when no viewport info is found in the file. 110 */ 111 public ViewportData getViewport() { 112 return viewport; 99 113 } 100 114 … … 277 291 } 278 292 279 NodeList layersNL = root.getElementsByTagName("layers"); 280 if (layersNL.getLength() == 0) return; 281 282 Element layersEl = (Element) layersNL.item(0); 293 Element viewportEl = getElementByTagName(root, "viewport"); 294 if (viewportEl != null) { 295 EastNorth center = null; 296 Element centerEl = getElementByTagName(viewportEl, "center"); 297 if (centerEl != null && centerEl.hasAttribute("lat") && centerEl.hasAttribute("lon")) { 298 try { 299 LatLon centerLL = new LatLon(Double.parseDouble(centerEl.getAttribute("lat")), Double.parseDouble(centerEl.getAttribute("lon"))); 300 center = Projections.project(centerLL); 301 } catch (NumberFormatException ex) {} 302 } 303 if (center != null) { 304 Element scaleEl = getElementByTagName(viewportEl, "scale"); 305 if (scaleEl != null && scaleEl.hasAttribute("meter-per-pixel")) { 306 try { 307 Double meterPerPixel = Double.parseDouble(scaleEl.getAttribute("meter-per-pixel")); 308 Projection proj = Main.getProjection(); 309 // Get a "typical" distance in east/north units that 310 // corresponds to a couple of pixels. Shouldn't be too 311 // large, to keep it within projection bounds and 312 // not too small to avoid rounding errors. 313 double dist = 0.01 * proj.getDefaultZoomInPPD(); 314 LatLon ll1 = proj.eastNorth2latlon(new EastNorth(center.east() - dist, center.north())); 315 LatLon ll2 = proj.eastNorth2latlon(new EastNorth(center.east() + dist, center.north())); 316 double meterPerEasting = ll1.greatCircleDistance(ll2) / dist / 2; 317 double scale = meterPerPixel / meterPerEasting; // unit: easting per pixel 318 viewport = new ViewportData(center, scale); 319 } catch (NumberFormatException ex) {} 320 } 321 } 322 } 323 324 Element layersEl = getElementByTagName(root, "layers"); 325 if (layersEl == null) return; 283 326 284 327 MultiMap<Integer, Integer> deps = new MultiMap<Integer, Integer>(); … … 532 575 } 533 576 577 private static Element getElementByTagName(Element root, String name) { 578 NodeList els = root.getElementsByTagName(name); 579 if (els.getLength() == 0) return null; 580 return (Element) els.item(0); 581 } 582 534 583 } -
trunk/src/org/openstreetmap/josm/io/session/SessionWriter.java
r5551 r5670 28 28 import javax.xml.transform.stream.StreamResult; 29 29 30 import org.openstreetmap.josm.Main; 31 import org.openstreetmap.josm.data.coor.EastNorth; 32 import org.openstreetmap.josm.data.coor.LatLon; 33 import org.openstreetmap.josm.data.projection.Projections; 30 34 import org.openstreetmap.josm.gui.layer.GpxLayer; 31 35 import org.openstreetmap.josm.gui.layer.Layer; … … 161 165 root.setAttribute("version", "0.1"); 162 166 doc.appendChild(root); 167 168 Element viewportEl = doc.createElement("viewport"); 169 root.appendChild(viewportEl); 170 Element centerEl = doc.createElement("center"); 171 viewportEl.appendChild(centerEl); 172 EastNorth center = Main.map.mapView.getCenter(); 173 LatLon centerLL = Projections.inverseProject(center); 174 centerEl.setAttribute("lat", Double.toString(centerLL.lat())); 175 centerEl.setAttribute("lon", Double.toString(centerLL.lon())); 176 Element scale = doc.createElement("scale"); 177 viewportEl.appendChild(scale); 178 double dist100px = Main.map.mapView.getDist100Pixel(); 179 scale.setAttribute("meter-per-pixel", Double.toString(dist100px / 100)); 163 180 164 181 Element layersEl = doc.createElement("layers");
Note:
See TracChangeset
for help on using the changeset viewer.