[josm-plugins] 231/369: Imported Upstream version 0.0.svn25527
Bas Couwenberg
sebastic at xs4all.nl
Sat Oct 18 12:03:46 UTC 2014
This is an automated email from the git hooks/post-receive script.
sebastic-guest pushed a commit to branch master
in repository josm-plugins.
commit 5b75e147a08104b821fbf7c567d9c73c02412aab
Author: David Paleino <dapal at debian.org>
Date: Tue Mar 8 09:49:24 2011 +0100
Imported Upstream version 0.0.svn25527
---
DirectUpload/build.xml | 4 +-
cadastre-fr/build.xml | 4 +-
cadastre-fr/src/cadastre_fr/Address.java | 110 ++++++----
cadastre-fr/src/cadastre_fr/CacheControl.java | 3 +-
cadastre-fr/src/cadastre_fr/CadastreInterface.java | 2 +
cadastre-fr/src/cadastre_fr/CadastrePlugin.java | 10 +-
.../src/cadastre_fr/DownloadSVGBuilding.java | 7 +-
cadastre-fr/src/cadastre_fr/DownloadSVGTask.java | 7 +-
.../src/cadastre_fr/DownloadWMSPlanImage.java | 21 +-
.../src/cadastre_fr/DownloadWMSVectorImage.java | 17 +-
cadastre-fr/src/cadastre_fr/GeorefImage.java | 17 +-
cadastre-fr/src/cadastre_fr/GrabThread.java | 237 +++++++++++++++++++++
.../src/cadastre_fr/MenuActionCancelGrab.java | 29 +++
.../src/cadastre_fr/MenuActionGrabPlanImage.java | 20 +-
.../src/cadastre_fr/MenuActionLoadFromCache.java | 2 +-
.../src/cadastre_fr/MenuActionNewLocation.java | 5 -
.../src/cadastre_fr/MenuActionResetCookie.java | 2 +-
.../src/cadastre_fr/MenuActionSaveRasterAs.java | 2 +-
cadastre-fr/src/cadastre_fr/WMSAdjustAction.java | 6 +-
cadastre-fr/src/cadastre_fr/WMSLayer.java | 196 +++++++++--------
colorscheme/build.xml | 2 +-
editgpx/build.xml | 2 +-
.../josm/plugins/editgpx/data/EditGpxTrack.java | 10 +-
lakewalker/build.xml | 4 +-
livegps/build.xml | 4 +-
measurement/build.xml | 4 +-
.../plugins/measurement/MeasurementDialog.java | 8 +-
.../josm/plugins/measurement/MeasurementLayer.java | 20 +-
openvisible/build.xml | 4 +-
routing/build.xml | 2 +-
surveyor/build.xml | 2 +-
svn-info.xml | 8 +-
32 files changed, 535 insertions(+), 236 deletions(-)
diff --git a/DirectUpload/build.xml b/DirectUpload/build.xml
index 16c1ea7..f1c96cd 100644
--- a/DirectUpload/build.xml
+++ b/DirectUpload/build.xml
@@ -27,7 +27,7 @@
<project name="DirectUpload" default="dist" basedir=".">
<property name="commit.message" value="applied JOSM Ticket 4498 (patch by ax) - oauth support for gpx upload (I accidentally committed parts of the path in [24236])" />
- <property name="plugin.main.version" value="3338" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
<property name="plugin.dist.dir" value="../../dist"/>
@@ -54,7 +54,7 @@
<attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.DirectUpload.UploadDataGuiPlugin"/>
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
<attribute name="Plugin-Description" value="This plugin directly upload GPS Traces from current active layer in JOSM to openstreetmap.org."/>
- <attribute name="Plugin-Icon" value="images/UploadAction.png"/>
+ <attribute name="Plugin-Icon" value="images/UploadAction.png"/>
<attribute name="Plugin-Link" value="http://wiki.openstreetmap.org/index.php/User:Subhodip/GSoC_Doc#DirectUpload_Plugin_in_JOSM_:"/>
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
diff --git a/cadastre-fr/build.xml b/cadastre-fr/build.xml
index f8d743f..4d6175f 100644
--- a/cadastre-fr/build.xml
+++ b/cadastre-fr/build.xml
@@ -33,7 +33,7 @@
<property name="commit.message" value="Changed constructor for Plugin" />
- <property name="plugin.main.version" value="3408" />
+ <property name="plugin.main.version" value="3835" />
<target name="init">
<mkdir dir="${plugin.build.dir}"/>
@@ -55,7 +55,7 @@
<attribute name="Plugin-Class" value="cadastre_fr.CadastrePlugin"/>
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
<attribute name="Plugin-Description" value="A special handler for the French land registry WMS server."/>
- <attribute name="Plugin-Icon" value="images/preferences/cadastrewms.gif"/>
+ <attribute name="Plugin-Icon" value="images/preferences/cadastrewms.gif"/>
<attribute name="Plugin-Link" value="http://wiki.openstreetmap.org/wiki/FR:JOSM/Fr:Plugin/Cadastre"/>
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
<attribute name="Plugin-Stage" value="60"/>
diff --git a/cadastre-fr/src/cadastre_fr/Address.java b/cadastre-fr/src/cadastre_fr/Address.java
index d0cff1d..71710d2 100644
--- a/cadastre-fr/src/cadastre_fr/Address.java
+++ b/cadastre-fr/src/cadastre_fr/Address.java
@@ -131,38 +131,50 @@ public class Address extends MapMode implements MouseListener, MouseMotionListen
// click on existing node
setNewSelection(currentMouseNode);
String num = currentMouseNode.get(tagHouseNumber);
- if (num != null) {
- try {
- // add new address
- Integer.parseInt(num);
- inputNumber.setText(num);
- applyInputNumberChange();
- } catch (NumberFormatException en) {
- System.out.println("Unable to parse house number \"" + num + "\"");
- }
- }
- if (currentMouseNode.get(tagHouseStreet) != null) {
- inputStreet.setText(currentMouseNode.get(tagHouseStreet));
- if (ctrl) {
- Collection<Command> cmds = new LinkedList<Command>();
- addAddrToPrimitive(currentMouseNode, cmds);
- if (num == null)
+ if (num != null //
+ && currentMouseNode.get(tagHouseStreet) == null //
+ && findWayInRelationAddr(currentMouseNode) == null //
+ && !inputStreet.getText().equals("")) {
+ // address already present but not linked to a street
+ Collection<Command> cmds = new LinkedList<Command>();
+ addStreetNameOrRelation(currentMouseNode, cmds);
+ Command c = new SequenceCommand("Add node address", cmds);
+ Main.main.undoRedo.add(c);
+ setNewSelection(currentMouseNode);
+ } else {
+ if (num != null) {
+ try {
+ // add new address
+ Integer.parseInt(num);
+ inputNumber.setText(num);
applyInputNumberChange();
+ } catch (NumberFormatException en) {
+ System.out.println("Unable to parse house number \"" + num + "\"");
+ }
}
- setSelectedWay((Way)null);
- } else {
- // check if the node belongs to an associatedStreet relation
- Way wayInRelationAddr = findWayInRelationAddr(currentMouseNode);
- if (wayInRelationAddr == null) {
- // node exists but doesn't carry address information : add tags like a new node
+ if (currentMouseNode.get(tagHouseStreet) != null) {
+ inputStreet.setText(currentMouseNode.get(tagHouseStreet));
if (ctrl) {
- applyInputNumberChange();
+ Collection<Command> cmds = new LinkedList<Command>();
+ addAddrToPrimitive(currentMouseNode, cmds);
+ if (num == null)
+ applyInputNumberChange();
}
- Collection<Command> cmds = new LinkedList<Command>();
- addAddrToPrimitive(currentMouseNode, cmds);
+ setSelectedWay((Way)null);
} else {
- inputStreet.setText(wayInRelationAddr.get(tagHighwayName));
- setSelectedWay(wayInRelationAddr);
+ // check if the node belongs to an associatedStreet relation
+ Way wayInRelationAddr = findWayInRelationAddr(currentMouseNode);
+ if (wayInRelationAddr == null) {
+ // node exists but doesn't carry address information : add tags like a new node
+ if (ctrl) {
+ applyInputNumberChange();
+ }
+ Collection<Command> cmds = new LinkedList<Command>();
+ addAddrToPrimitive(currentMouseNode, cmds);
+ } else {
+ inputStreet.setText(wayInRelationAddr.get(tagHighwayName));
+ setSelectedWay(wayInRelationAddr);
+ }
}
}
} else {
@@ -233,7 +245,29 @@ public class Address extends MapMode implements MouseListener, MouseMotionListen
}
}
- cmds.add(new ChangePropertyCommand(osm, tagHouseNumber, inputNumber.getText()));
+ cmds.add(new ChangePropertyCommand(osm, tagHouseNumber, inputNumber.getText()));
+ addStreetNameOrRelation(osm, cmds);
+ try {
+ applyInputNumberChange();
+ Command c = new SequenceCommand("Add node address", cmds);
+ Main.main.undoRedo.add(c);
+ setNewSelection(osm);
+ } catch (NumberFormatException en) {
+ System.out.println("Unable to parse house number \"" + inputNumber.getText() + "\"");
+ }
+ }
+
+ private Relation findRelationAddr(Way w) {
+ List<OsmPrimitive> l = w.getReferrers();
+ for (OsmPrimitive osm : l) {
+ if (osm instanceof Relation && osm.hasKey("type") && osm.get("type").equals(relationAddrType)) {
+ return (Relation)osm;
+ }
+ }
+ return null;
+ }
+
+ private void addStreetNameOrRelation(OsmPrimitive osm, Collection<Command> cmds) {
if (Main.pref.getBoolean("cadastrewms.addr.dontUseRelation", false)) {
cmds.add(new ChangePropertyCommand(osm, tagHouseStreet, inputStreet.getText()));
} else if (selectedWay != null) {
@@ -254,26 +288,8 @@ public class Address extends MapMode implements MouseListener, MouseMotionListen
cmds.add(new AddCommand(newRel));
}
}
- try {
- applyInputNumberChange();
- Command c = new SequenceCommand("Add node address", cmds);
- Main.main.undoRedo.add(c);
- setNewSelection(osm);
- } catch (NumberFormatException en) {
- System.out.println("Unable to parse house number \"" + inputNumber.getText() + "\"");
- }
- }
-
- private Relation findRelationAddr(Way w) {
- List<OsmPrimitive> l = w.getReferrers();
- for (OsmPrimitive osm : l) {
- if (osm instanceof Relation && osm.hasKey("type") && osm.get("type").equals(relationAddrType)) {
- return (Relation)osm;
- }
- }
- return null;
}
-
+
private Node createNewNode(MouseEvent e, Collection<Command> cmds) {
// DrawAction.mouseReleased() but without key modifiers
Node n = new Node(Main.map.mapView.getLatLon(e.getX(), e.getY()));
diff --git a/cadastre-fr/src/cadastre_fr/CacheControl.java b/cadastre-fr/src/cadastre_fr/CacheControl.java
index 770c7ea..ca14762 100644
--- a/cadastre-fr/src/cadastre_fr/CacheControl.java
+++ b/cadastre-fr/src/cadastre_fr/CacheControl.java
@@ -152,7 +152,7 @@ public class CacheControl implements Runnable {
}
if (successfulRead && wmsLayer.isRaster()) {
// serialized raster bufferedImage hangs-up on Java6. Recreate them here
- wmsLayer.images.get(0).image = RasterImageModifier.fixRasterImage(wmsLayer.images.get(0).image);
+ wmsLayer.getImage(0).image = RasterImageModifier.fixRasterImage(wmsLayer.getImage(0).image);
}
return successfulRead;
}
@@ -171,7 +171,6 @@ public class CacheControl implements Runnable {
public synchronized void run() {
for (;;) {
imagesLock.lock();
- //ArrayList<GeorefImage> images = new ArrayList<GeorefImage>(imagesToSave);
int size = imagesToSave.size();
imagesLock.unlock();
if (size > 0) {
diff --git a/cadastre-fr/src/cadastre_fr/CadastreInterface.java b/cadastre-fr/src/cadastre_fr/CadastreInterface.java
index dafa977..0af2e74 100644
--- a/cadastre-fr/src/cadastre_fr/CadastreInterface.java
+++ b/cadastre-fr/src/cadastre_fr/CadastreInterface.java
@@ -72,6 +72,8 @@ public class CadastreInterface {
boolean isCookieExpired = isCookieExpired();
if (wmsLayer.getName().equals(lastWMSLayerName) && !isCookieExpired)
return true;
+ if (!wmsLayer.getName().equals(lastWMSLayerName))
+ interfaceRef = null;
// open the session with the French Cadastre web front end
downloadCancelled = false;
try {
diff --git a/cadastre-fr/src/cadastre_fr/CadastrePlugin.java b/cadastre-fr/src/cadastre_fr/CadastrePlugin.java
index e8cbd76..05e7cad 100644
--- a/cadastre-fr/src/cadastre_fr/CadastrePlugin.java
+++ b/cadastre-fr/src/cadastre_fr/CadastrePlugin.java
@@ -111,20 +111,22 @@ import org.openstreetmap.josm.data.projection.*;
* 1.9 05-Apr-2010 - added a scroll bar in preferences
* - download cancellation improved
* - last deployment for Java1.5 compatibility
- * 2.0 xx-xxx-xxxx - update projection for "La Reunion" departement to RGR92, UTM40S.
+ * 2.0 07-Jul-2010 - update projection for "La Reunion" departement to RGR92, UTM40S.
* - add 'departement' as option in the municipality selection
* - fixed bug in cache directory size control (and disabled by default)
* - add map mode for addressing
* - from Nicolas Dumoulin:
* - add "tableau d'assemblage" in raster images for georeferencing (as option)
+ * 2.1 14-Jan-2011 - add GrabThread moving the grab to a separate thread
+ * - the divided BBox mode starts from the central square and loads the next in a spiral
+ * - move the grabber from CadastrPlugin singleton to each wmsLayer instance to allow grabbing
+ * of multiple municipalities in parallel.
*/
public class CadastrePlugin extends Plugin {
- static String VERSION = "2.0";
+ static String VERSION = "2.1";
static JMenu cadastreJMenu;
- public static CadastreGrabber cadastreGrabber = new CadastreGrabber();
-
public static String source = "";
// true if the checkbox "auto-sourcing" is set in the plugin menu
diff --git a/cadastre-fr/src/cadastre_fr/DownloadSVGBuilding.java b/cadastre-fr/src/cadastre_fr/DownloadSVGBuilding.java
index 7ac3339..121d804 100644
--- a/cadastre-fr/src/cadastre_fr/DownloadSVGBuilding.java
+++ b/cadastre-fr/src/cadastre_fr/DownloadSVGBuilding.java
@@ -36,7 +36,6 @@ import org.openstreetmap.josm.io.ProgressInputStream;
public class DownloadSVGBuilding extends PleaseWaitRunnable {
private WMSLayer wmsLayer;
- private CadastreGrabber grabber = CadastrePlugin.cadastreGrabber;
private CadastreInterface wmsInterface;
private String svg = null;
private static EastNorthBound currentView = null;
@@ -48,7 +47,7 @@ public class DownloadSVGBuilding extends PleaseWaitRunnable {
super(tr("Downloading {0}", wmsLayer.getName()));
this.wmsLayer = wmsLayer;
- this.wmsInterface = grabber.getWmsInterface();
+ this.wmsInterface = wmsLayer.grabber.getWmsInterface();
}
@Override
@@ -69,13 +68,13 @@ public class DownloadSVGBuilding extends PleaseWaitRunnable {
System.err.println("removed a duplicated layer");
} catch (WMSException e) {
errorMessage = e.getMessage();
- grabber.getWmsInterface().resetCookie();
+ wmsLayer.grabber.getWmsInterface().resetCookie();
}
}
@Override
protected void cancel() {
- grabber.getWmsInterface().cancel();
+ wmsLayer.grabber.getWmsInterface().cancel();
}
@Override
diff --git a/cadastre-fr/src/cadastre_fr/DownloadSVGTask.java b/cadastre-fr/src/cadastre_fr/DownloadSVGTask.java
index 925d4e7..b30e816 100644
--- a/cadastre-fr/src/cadastre_fr/DownloadSVGTask.java
+++ b/cadastre-fr/src/cadastre_fr/DownloadSVGTask.java
@@ -41,7 +41,6 @@ import org.openstreetmap.josm.io.ProgressInputStream;
public class DownloadSVGTask extends PleaseWaitRunnable {
private WMSLayer wmsLayer;
- private CadastreGrabber grabber = CadastrePlugin.cadastreGrabber;
private CadastreInterface wmsInterface;
private String svg = null;
private EastNorthBound viewBox = null;
@@ -51,7 +50,7 @@ public class DownloadSVGTask extends PleaseWaitRunnable {
super(tr("Downloading {0}", wmsLayer.getName()));
this.wmsLayer = wmsLayer;
- this.wmsInterface = grabber.getWmsInterface();
+ this.wmsInterface = wmsLayer.grabber.getWmsInterface();
}
@Override
@@ -74,13 +73,13 @@ public class DownloadSVGTask extends PleaseWaitRunnable {
System.err.println("removed a duplicated layer");
} catch (WMSException e) {
errorMessage = e.getMessage();
- grabber.getWmsInterface().resetCookie();
+ wmsLayer.grabber.getWmsInterface().resetCookie();
}
}
@Override
protected void cancel() {
- grabber.getWmsInterface().cancel();
+ wmsLayer.grabber.getWmsInterface().cancel();
}
@Override
diff --git a/cadastre-fr/src/cadastre_fr/DownloadWMSPlanImage.java b/cadastre-fr/src/cadastre_fr/DownloadWMSPlanImage.java
index c31c982..27f45a2 100644
--- a/cadastre-fr/src/cadastre_fr/DownloadWMSPlanImage.java
+++ b/cadastre-fr/src/cadastre_fr/DownloadWMSPlanImage.java
@@ -23,7 +23,6 @@ public class DownloadWMSPlanImage {
private static String errorMessage;
private class Task extends PleaseWaitRunnable {
- private CadastreGrabber grabber = CadastrePlugin.cadastreGrabber;
public Task(WMSLayer wmsLayer, Bounds bounds) {
super(tr("Downloading {0}", wmsLayer.getName()));
}
@@ -33,8 +32,8 @@ public class DownloadWMSPlanImage {
progressMonitor.indeterminateSubTask(tr("Contacting cadastre WMS ..."));
errorMessage = null;
try {
- if (grabber.getWmsInterface().retrieveInterface(wmsLayer)) {
- if (!wmsLayer.images.isEmpty()) {
+ if (wmsLayer.grabber.getWmsInterface().retrieveInterface(wmsLayer)) {
+ if (!wmsLayer.getImages().isEmpty()) {
//JOptionPane.showMessageDialog(Main.parent,tr("Image already loaded"));
JOptionPane pane = new JOptionPane(
tr("Image already loaded")
@@ -45,12 +44,12 @@ public class DownloadWMSPlanImage {
dialog.setVisible(true);
// till here
dontGeoreference = true;
- } else if (grabber.getWmsInterface().downloadCancelled){
+ } else if (wmsLayer.grabber.getWmsInterface().downloadCancelled){
// do nothing
} else {
// first time we grab an image for this layer
if (CacheControl.cacheEnabled) {
- if (wmsLayer.getCacheControl().loadCacheIfExist()) {
+ if (wmsLayer.grabThread.getCacheControl().loadCacheIfExist()) {
dontGeoreference = true;
Main.map.mapView.repaint();
return;
@@ -58,12 +57,12 @@ public class DownloadWMSPlanImage {
}
if (wmsLayer.isRaster()) {
// set raster image commune bounding box based on current view (before adjustment)
- grabber.getWmsInterface().retrieveCommuneBBox(wmsLayer);
+ wmsLayer.grabber.getWmsInterface().retrieveCommuneBBox(wmsLayer);
wmsLayer.setRasterBounds(bounds);
// grab new images from wms server into active layer
- wmsLayer.grab(grabber, bounds);
- if (grabber.getWmsInterface().downloadCancelled) {
- wmsLayer.images.clear();
+ wmsLayer.grab(bounds);
+ if (wmsLayer.grabber.getWmsInterface().downloadCancelled) {
+ wmsLayer.clearImages();
Main.map.mapView.repaint();
} else {
// next steps follow in method finish() when download is terminated
@@ -88,13 +87,13 @@ public class DownloadWMSPlanImage {
System.err.println("removed a duplicated layer");
} catch (WMSException e) {
errorMessage = e.getMessage();
- grabber.getWmsInterface().resetCookie();
+ wmsLayer.grabber.getWmsInterface().resetCookie();
}
}
@Override
protected void cancel() {
- grabber.getWmsInterface().cancel();
+ wmsLayer.grabber.getWmsInterface().cancel();
dontGeoreference = true;
}
diff --git a/cadastre-fr/src/cadastre_fr/DownloadWMSVectorImage.java b/cadastre-fr/src/cadastre_fr/DownloadWMSVectorImage.java
index 2e2cb34..cac4311 100644
--- a/cadastre-fr/src/cadastre_fr/DownloadWMSVectorImage.java
+++ b/cadastre-fr/src/cadastre_fr/DownloadWMSVectorImage.java
@@ -16,7 +16,6 @@ public class DownloadWMSVectorImage extends PleaseWaitRunnable {
private WMSLayer wmsLayer;
private Bounds bounds;
- private CadastreGrabber grabber = CadastrePlugin.cadastreGrabber;
private static String errorMessage;
public DownloadWMSVectorImage(WMSLayer wmsLayer, Bounds bounds) {
@@ -31,11 +30,11 @@ public class DownloadWMSVectorImage extends PleaseWaitRunnable {
progressMonitor.indeterminateSubTask(tr("Contacting WMS Server..."));
errorMessage = null;
try {
- if (grabber.getWmsInterface().retrieveInterface(wmsLayer)) {
- if (wmsLayer.images.isEmpty()) {
+ if (wmsLayer.grabber.getWmsInterface().retrieveInterface(wmsLayer)) {
+ if (wmsLayer.getImages().isEmpty()) {
// first time we grab an image for this layer
if (CacheControl.cacheEnabled) {
- if (wmsLayer.getCacheControl().loadCacheIfExist()) {
+ if (wmsLayer.grabThread.getCacheControl().loadCacheIfExist()) {
Main.map.mapView.zoomTo(wmsLayer.getCommuneBBox().toBounds());
//Main.map.mapView.repaint();
return;
@@ -49,26 +48,26 @@ public class DownloadWMSVectorImage extends PleaseWaitRunnable {
return;
} else {
// set vectorized commune bounding box by opening the standard web window
- grabber.getWmsInterface().retrieveCommuneBBox(wmsLayer);
+ wmsLayer.grabber.getWmsInterface().retrieveCommuneBBox(wmsLayer);
}
}
// grab new images from wms server into active layer
- wmsLayer.grab(grabber, bounds);
+ wmsLayer.grab(bounds);
}
} catch (DuplicateLayerException e) {
// we tried to grab onto a duplicated layer (removed)
System.err.println("removed a duplicated layer");
} catch (WMSException e) {
errorMessage = e.getMessage();
- grabber.getWmsInterface().resetCookie();
+ wmsLayer.grabber.getWmsInterface().resetCookie();
}
}
@Override
protected void cancel() {
- grabber.getWmsInterface().cancel();
+ wmsLayer.grabber.getWmsInterface().cancel();
if (wmsLayer != null)
- wmsLayer.cancelled = true;
+ wmsLayer.grabThread.setCancelled(true);
}
@Override
diff --git a/cadastre-fr/src/cadastre_fr/GeorefImage.java b/cadastre-fr/src/cadastre_fr/GeorefImage.java
index 5560880..a3dd8aa 100644
--- a/cadastre-fr/src/cadastre_fr/GeorefImage.java
+++ b/cadastre-fr/src/cadastre_fr/GeorefImage.java
@@ -22,7 +22,7 @@ import javax.imageio.ImageIO;
import org.openstreetmap.josm.data.coor.EastNorth;
import org.openstreetmap.josm.gui.NavigatableComponent;
-public class GeorefImage implements Serializable, ImageObserver {
+public class GeorefImage implements Serializable, ImageObserver, Cloneable {
private static final long serialVersionUID = 1L;
// bbox of the georeferenced image (the nice horizontal and vertical box)
@@ -45,7 +45,7 @@ public class GeorefImage implements Serializable, ImageObserver {
public GeorefImage(BufferedImage img, EastNorth min, EastNorth max) {
image = img;
-
+
this.min = min;
this.max = max;
this.orgRaster[0] = min;
@@ -140,9 +140,9 @@ public class GeorefImage implements Serializable, ImageObserver {
*/
}
}
- g.drawImage(image, minPt.x, maxPt.y, maxPt.x, minPt.y, // dest
- 0, 0, image.getWidth(), image.getHeight(), // src
- null);
+ g.drawImage(image, minPt.x, maxPt.y, maxPt.x, minPt.y, // dest
+ 0, 0, image.getWidth(), image.getHeight(), // src
+ null);
if (backgroundTransparent && transparency < 1.0f)
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1.0f));
}
@@ -236,8 +236,11 @@ public class GeorefImage implements Serializable, ImageObserver {
out.writeDouble(orgCroppedRaster[1].getX()); out.writeDouble(orgCroppedRaster[1].getY());
out.writeDouble(orgCroppedRaster[2].getX()); out.writeDouble(orgCroppedRaster[2].getY());
out.writeDouble(orgCroppedRaster[3].getX()); out.writeDouble(orgCroppedRaster[3].getY());
- out.writeInt(imageOriginalHeight);
- out.writeInt(imageOriginalWidth);
+ // Write image as a format 3 if cache was loaded with this format to avoid incompatibilities.
+ if (WMSLayer.currentFormat >= 4) {
+ out.writeInt(imageOriginalHeight);
+ out.writeInt(imageOriginalWidth);
+ }
ImageIO.write(image, "png", ImageIO.createImageOutputStream(out));
}
diff --git a/cadastre-fr/src/cadastre_fr/GrabThread.java b/cadastre-fr/src/cadastre_fr/GrabThread.java
new file mode 100644
index 0000000..65c5b27
--- /dev/null
+++ b/cadastre-fr/src/cadastre_fr/GrabThread.java
@@ -0,0 +1,237 @@
+// License: GPL. v2 and later. Copyright 2008-2009 by Pieren <pieren3 at gmail.com> and others
+package cadastre_fr;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Point;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
+import org.openstreetmap.josm.Main;
+import org.openstreetmap.josm.data.coor.EastNorth;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.io.OsmTransferException;
+
+public class GrabThread extends Thread {
+
+ private boolean cancelled;
+
+ private CadastreGrabber grabber;
+
+ private WMSLayer wmsLayer;
+
+ private Lock lockImagesToGrag = new ReentrantLock();
+
+ private ArrayList<EastNorthBound> imagesToGrab = new ArrayList<EastNorthBound>();
+
+ private CacheControl cacheControl = null;
+
+ private EastNorthBound currentGrabImage;
+
+ private Lock lockCurrentGrabImage = new ReentrantLock();
+
+ /**
+ * Call directly grabber for raster images or prepare thread for vector images
+ * @param moreImages
+ */
+ public void addImages(ArrayList<EastNorthBound> moreImages) {
+ lockImagesToGrag.lock();
+ imagesToGrab.addAll(moreImages);
+ lockImagesToGrag.unlock();
+ synchronized(this) {
+ this.notify();
+ }
+ System.out.println("Added " + moreImages.size() + " to the grab thread");
+ if (wmsLayer.isRaster()) {
+ waitNotification();
+ }
+ }
+
+ public int getImagesToGrabSize() {
+ lockImagesToGrag.lock();
+ int size = imagesToGrab.size();
+ lockImagesToGrag.unlock();
+ return size;
+ }
+
+ public ArrayList<EastNorthBound> getImagesToGrabCopy() {
+ ArrayList<EastNorthBound> copyList = new ArrayList<EastNorthBound>();
+ lockImagesToGrag.lock();
+ for (EastNorthBound img : imagesToGrab) {
+ EastNorthBound imgCpy = new EastNorthBound(img.min, img.max);
+ copyList.add(imgCpy);
+ }
+ lockImagesToGrag.unlock();
+ return copyList;
+ }
+
+ public void clearImagesToGrab() {
+ lockImagesToGrag.lock();
+ imagesToGrab.clear();
+ lockImagesToGrag.unlock();
+ }
+
+ @Override
+ public void run() {
+ for (;;) {
+ while (getImagesToGrabSize() > 0) {
+ lockImagesToGrag.lock();
+ lockCurrentGrabImage.lock();
+ currentGrabImage = imagesToGrab.get(0);
+ lockCurrentGrabImage.unlock();
+ imagesToGrab.remove(0);
+ lockImagesToGrag.unlock();
+ if (cancelled) {
+ break;
+ } else {
+ GeorefImage newImage;
+ try {
+ Main.map.repaint(); // paint the current grab box
+ newImage = grabber.grab(wmsLayer, currentGrabImage.min, currentGrabImage.max);
+ } catch (IOException e) {
+ System.out
+ .println("Download action cancelled by user or server did not respond");
+ setCancelled(true);
+ break;
+ } catch (OsmTransferException e) {
+ System.out.println("OSM transfer failed");
+ setCancelled(true);
+ break;
+ }
+ if (grabber.getWmsInterface().downloadCancelled) {
+ System.out.println("Download action cancelled by user");
+ setCancelled(true);
+ break;
+ }
+ try {
+ if (CadastrePlugin.backgroundTransparent) {
+ wmsLayer.imagesLock.lock();
+ for (GeorefImage img : wmsLayer.getImages()) {
+ if (img.overlap(newImage))
+ // mask overlapping zone in already grabbed image
+ img.withdraw(newImage);
+ else
+ // mask overlapping zone in new image only when new image covers completely the
+ // existing image
+ newImage.withdraw(img);
+ }
+ wmsLayer.imagesLock.unlock();
+ }
+ wmsLayer.addImage(newImage);
+ Main.map.mapView.repaint();
+ saveToCache(newImage);
+ } catch (NullPointerException e) {
+ System.out.println("Layer destroyed. Cancel grab thread");
+ setCancelled(true);
+ }
+ }
+ }
+ System.out.println("grab thread list empty");
+ lockCurrentGrabImage.lock();
+ currentGrabImage = null;
+ lockCurrentGrabImage.unlock();
+ if (cancelled) {
+ clearImagesToGrab();
+ cancelled = false;
+ }
+ if (wmsLayer.isRaster()) {
+ notifyWaiter();
+ }
+ waitNotification(); }
+ }
+
+ public void saveToCache(GeorefImage image) {
+ if (CacheControl.cacheEnabled && !wmsLayer.isRaster()) {
+ getCacheControl().saveCache(image);
+ }
+ }
+
+ public void saveNewCache() {
+ if (CacheControl.cacheEnabled) {
+ getCacheControl().deleteCacheFile();
+ wmsLayer.imagesLock.lock();
+ for (GeorefImage image : wmsLayer.getImages())
+ getCacheControl().saveCache(image);
+ wmsLayer.imagesLock.unlock();
+ }
+ }
+
+ public void cancel() {
+ clearImagesToGrab();
+ if (cacheControl != null) {
+ while (!cacheControl.isCachePipeEmpty()) {
+ System.out
+ .println("Try to close a WMSLayer which is currently saving in cache : wait 1 sec.");
+ CadastrePlugin.safeSleep(1000);
+ }
+ }
+ }
+
+ public CacheControl getCacheControl() {
+ if (cacheControl == null)
+ cacheControl = new CacheControl(wmsLayer);
+ return cacheControl;
+ }
+
+ public GrabThread(WMSLayer wmsLayer) {
+ this.wmsLayer = wmsLayer;
+ }
+
+ public void paintBoxesToGrab(Graphics g, MapView mv) {
+ if (getImagesToGrabSize() > 0) {
+ ArrayList<EastNorthBound> imagesToGrab = getImagesToGrabCopy();
+ for (EastNorthBound img : imagesToGrab) {
+ paintBox(g, mv, img, Color.red);
+ }
+ }
+ lockCurrentGrabImage.lock();
+ if (currentGrabImage != null) {
+ paintBox(g, mv, currentGrabImage, Color.orange);
+ }
+ lockCurrentGrabImage.unlock();
+ }
+
+ private void paintBox(Graphics g, MapView mv, EastNorthBound img, Color color) {
+ Point[] croppedPoint = new Point[5];
+ croppedPoint[0] = mv.getPoint(img.min);
+ croppedPoint[1] = mv.getPoint(new EastNorth(img.min.east(), img.max.north()));
+ croppedPoint[2] = mv.getPoint(img.max);
+ croppedPoint[3] = mv.getPoint(new EastNorth(img.max.east(), img.min.north()));
+ croppedPoint[4] = croppedPoint[0];
+ for (int i=0; i<4; i++) {
+ g.setColor(color);
+ g.drawLine(croppedPoint[i].x, croppedPoint[i].y, croppedPoint[i+1].x, croppedPoint[i+1].y);
+ }
+ }
+
+ public boolean isCancelled() {
+ return cancelled;
+ }
+
+ public void setCancelled(boolean cancelled) {
+ this.cancelled = cancelled;
+ }
+
+ public CadastreGrabber getGrabber() {
+ return grabber;
+ }
+
+ public void setGrabber(CadastreGrabber grabber) {
+ this.grabber = grabber;
+ }
+
+ private synchronized void notifyWaiter() {
+ this.notify();
+ }
+
+ private synchronized void waitNotification() {
+ try {
+ wait();
+ } catch (InterruptedException e) {
+ e.printStackTrace(System.out);
+ }
+ }
+
+}
diff --git a/cadastre-fr/src/cadastre_fr/MenuActionCancelGrab.java b/cadastre-fr/src/cadastre_fr/MenuActionCancelGrab.java
new file mode 100644
index 0000000..4373a0a
--- /dev/null
+++ b/cadastre-fr/src/cadastre_fr/MenuActionCancelGrab.java
@@ -0,0 +1,29 @@
+package cadastre_fr;
+
+import static org.openstreetmap.josm.tools.I18n.tr;
+
+import java.awt.event.ActionEvent;
+
+import org.openstreetmap.josm.actions.JosmAction;
+
+ at SuppressWarnings("serial")
+public class MenuActionCancelGrab extends JosmAction {
+
+ public static String name = "Cancel current grab";
+
+ private WMSLayer wmsLayer;
+
+ public MenuActionCancelGrab(WMSLayer wmsLayer) {
+ super(tr(name), null, tr("Cancel current grab (only vector images)"), null, false);
+ this.wmsLayer = wmsLayer;
+ }
+
+
+ @Override
+ public void actionPerformed(ActionEvent arg0) {
+ if (wmsLayer.grabThread.getImagesToGrabSize() > 0) {
+ wmsLayer.grabThread.cancel();
+ }
+ }
+
+}
diff --git a/cadastre-fr/src/cadastre_fr/MenuActionGrabPlanImage.java b/cadastre-fr/src/cadastre_fr/MenuActionGrabPlanImage.java
index b406e1b..0aa025a 100644
--- a/cadastre-fr/src/cadastre_fr/MenuActionGrabPlanImage.java
+++ b/cadastre-fr/src/cadastre_fr/MenuActionGrabPlanImage.java
@@ -105,7 +105,7 @@ public class MenuActionGrabPlanImage extends JosmAction implements Runnable, Mou
boolean loadedFromCache = downloadWMSPlanImage.waitFinished();
if (loadedFromCache) {
Main.map.repaint();
- } else if (wmsLayer.images.size() == 0) {
+ } else if (wmsLayer.getImages().size() == 0) {
// action cancelled or image loaded from cache (and already georeferenced)
actionInterrupted();
} else {
@@ -148,8 +148,8 @@ public class MenuActionGrabPlanImage extends JosmAction implements Runnable, Mou
} else {
countMouseClicked++;
// ignore clicks outside the image
- if (ea.east() < wmsLayer.images.get(0).min.east() || ea.east() > wmsLayer.images.get(0).max.east()
- || ea.north() < wmsLayer.images.get(0).min.north() || ea.north() > wmsLayer.images.get(0).max.north())
+ if (ea.east() < wmsLayer.getImage(0).min.east() || ea.east() > wmsLayer.getImage(0).max.east()
+ || ea.north() < wmsLayer.getImage(0).min.north() || ea.north() > wmsLayer.getImage(0).max.north())
return;
if (mode == cGetCorners) {
if (countMouseClicked == 1) {
@@ -258,7 +258,7 @@ public class MenuActionGrabPlanImage extends JosmAction implements Runnable, Mou
private void endGeoreferencing() {
Main.map.mapView.removeMouseListener(this);
affineTransform(ea1, ea2, georefpoint1, georefpoint2);
- wmsLayer.saveNewCache();
+ wmsLayer.grabThread.saveNewCache();
Main.map.mapView.repaint();
actionCompleted();
clickOnTheMap = false;
@@ -377,24 +377,24 @@ public class MenuActionGrabPlanImage extends JosmAction implements Runnable, Mou
// move
double dx = dst1.getX() - org1.getX();
double dy = dst1.getY() - org1.getY();
- wmsLayer.images.get(0).shear(dx, dy);
+ wmsLayer.getImage(0).shear(dx, dy);
org1 = org1.add(dx, dy); // org1=dst1 now
org2 = org2.add(dx, dy);
// rotate : org1(=dst1 now) is anchor for rotation and scale
- wmsLayer.images.get(0).rotate(dst1, angle);
+ wmsLayer.getImage(0).rotate(dst1, angle);
org2 = org2.rotate(dst1, angle);
// scale image from anchor org1(=dst1 now)
- wmsLayer.images.get(0).scale(dst1, proportion);
+ wmsLayer.getImage(0).scale(dst1, proportion);
}
private void transformGeoreferencedImg() {
georefpoint1 = new EastNorth(wmsLayer.X0, wmsLayer.Y0);
georefpoint2 = new EastNorth(wmsLayer.X0+wmsLayer.fX*wmsLayer.communeBBox.max.getX(),
wmsLayer.Y0+wmsLayer.fY*wmsLayer.communeBBox.max.getX());
- ea1 = new EastNorth(wmsLayer.images.get(0).min.east(), wmsLayer.images.get(0).max.north());
- EastNorth ea2 = wmsLayer.images.get(0).max;
+ ea1 = new EastNorth(wmsLayer.getImage(0).min.east(), wmsLayer.getImage(0).max.north());
+ EastNorth ea2 = wmsLayer.getImage(0).max;
affineTransform(ea1, ea2, georefpoint1, georefpoint2);
- wmsLayer.saveNewCache();
+ wmsLayer.grabThread.saveNewCache();
Main.map.mapView.repaint();
}
diff --git a/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java b/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java
index f280908..a7de7ba 100644
--- a/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java
+++ b/cadastre-fr/src/cadastre_fr/MenuActionLoadFromCache.java
@@ -74,7 +74,7 @@ public class MenuActionLoadFromCache extends JosmAction {
}
// create layer and load cache
WMSLayer wmsLayer = new WMSLayer("", "", Integer.parseInt(ext)-1);
- if (wmsLayer.getCacheControl().loadCache(file, layoutZone)) {
+ if (wmsLayer.grabThread.getCacheControl().loadCache(file, layoutZone)) {
CadastrePlugin.addWMSLayer(wmsLayer);
}
}
diff --git a/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java b/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java
index 06913e7..5072639 100644
--- a/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java
+++ b/cadastre-fr/src/cadastre_fr/MenuActionNewLocation.java
@@ -64,7 +64,6 @@ public class MenuActionNewLocation extends JosmAction {
String location = "";
String codeDepartement = "";
String codeCommune = "";
- boolean changeInterface = false;
JLabel labelSectionNewLocation = new JLabel(tr("Add a new municipality layer"));
JPanel p = new JPanel(new GridBagLayout());
JLabel labelLocation = new JLabel(tr("Commune"));
@@ -104,7 +103,6 @@ public class MenuActionNewLocation extends JosmAction {
if (!inputTown.getText().equals("")) {
location = inputTown.getText().toUpperCase();
codeDepartement = departements[inputDepartement.getSelectedIndex()*2];
- changeInterface = true;
Main.pref.put("cadastrewms.location", location);
Main.pref.put("cadastrewms.codeCommune", codeCommune);
Main.pref.put("cadastrewms.codeDepartement", codeDepartement);
@@ -129,11 +127,8 @@ public class MenuActionNewLocation extends JosmAction {
System.out.println("Add new layer with Location:" + inputTown.getText());
} else if (existingLayers != null && existingLayers.size() > 0 && Main.map.mapView.getActiveLayer() instanceof WMSLayer) {
wmsLayer = (WMSLayer)Main.map.mapView.getActiveLayer();
- changeInterface = true;
}
- if (changeInterface)
- CadastrePlugin.cadastreGrabber.getWmsInterface().resetInterfaceRefIfNewLayer(wmsLayer.getName());
return wmsLayer;
}
diff --git a/cadastre-fr/src/cadastre_fr/MenuActionResetCookie.java b/cadastre-fr/src/cadastre_fr/MenuActionResetCookie.java
index bf50dbf..2d10235 100644
--- a/cadastre-fr/src/cadastre_fr/MenuActionResetCookie.java
+++ b/cadastre-fr/src/cadastre_fr/MenuActionResetCookie.java
@@ -19,6 +19,6 @@ public class MenuActionResetCookie extends JosmAction {
}
public void actionPerformed(ActionEvent e) {
- CadastrePlugin.cadastreGrabber.getWmsInterface().resetCookie();
+ //CadastrePlugin.cadastreGrabber.getWmsInterface().resetCookie();
}
}
diff --git a/cadastre-fr/src/cadastre_fr/MenuActionSaveRasterAs.java b/cadastre-fr/src/cadastre_fr/MenuActionSaveRasterAs.java
index 13d9cf4..cafae80 100644
--- a/cadastre-fr/src/cadastre_fr/MenuActionSaveRasterAs.java
+++ b/cadastre-fr/src/cadastre_fr/MenuActionSaveRasterAs.java
@@ -55,7 +55,7 @@ public class MenuActionSaveRasterAs extends JosmAction {
file = fc.getSelectedFile();
if (!file.getName().endsWith(".png"))
file = new File(file.getParent(), file.getName()+".png");
- BufferedImage bi = wmsLayer.images.get(0).image;
+ BufferedImage bi = wmsLayer.getImage(0).image;
try {
ImageIO.write(bi, "png", file);
/*
diff --git a/cadastre-fr/src/cadastre_fr/WMSAdjustAction.java b/cadastre-fr/src/cadastre_fr/WMSAdjustAction.java
index 28d265a..0dc8e29 100644
--- a/cadastre-fr/src/cadastre_fr/WMSAdjustAction.java
+++ b/cadastre-fr/src/cadastre_fr/WMSAdjustAction.java
@@ -164,9 +164,9 @@ public class WMSAdjustAction extends MapMode implements
double startAngle = Math.atan2(start.east()-pivot.east(), start.north()-pivot.north());
double endAngle = Math.atan2(end.east()-pivot.east(), end.north()-pivot.north());
double rotationAngle = endAngle - startAngle;
- if (selectedLayer.images.get(0).orgCroppedRaster != null) {
+ if (selectedLayer.getImage(0).orgCroppedRaster != null) {
for (int i=0; i<4; i++) {
- croppedRaster[i] = selectedLayer.images.get(0).orgCroppedRaster[i].rotate(pivot, rotationAngle);
+ croppedRaster[i] = selectedLayer.getImage(0).orgCroppedRaster[i].rotate(pivot, rotationAngle);
}
croppedRaster[4] = croppedRaster[0];
}
@@ -197,7 +197,7 @@ public class WMSAdjustAction extends MapMode implements
private void saveModifiedLayers() {
for (WMSLayer wmsLayer : modifiedLayers) {
- wmsLayer.saveNewCache();
+ wmsLayer.grabThread.saveNewCache();
}
}
}
diff --git a/cadastre-fr/src/cadastre_fr/WMSLayer.java b/cadastre-fr/src/cadastre_fr/WMSLayer.java
index e779d43..8b6e03a 100644
--- a/cadastre-fr/src/cadastre_fr/WMSLayer.java
+++ b/cadastre-fr/src/cadastre_fr/WMSLayer.java
@@ -19,6 +19,8 @@ import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Vector;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
import javax.swing.Action;
import javax.swing.Icon;
@@ -33,7 +35,6 @@ import org.openstreetmap.josm.gui.MapView;
import org.openstreetmap.josm.gui.dialogs.LayerListDialog;
import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
import org.openstreetmap.josm.gui.layer.Layer;
-import org.openstreetmap.josm.io.OsmTransferException;
/**
* This is a layer that grabs the current screen from the French cadastre WMS
@@ -44,10 +45,14 @@ public class WMSLayer extends Layer implements ImageObserver {
private int lambertZone = -1;
+ public CadastreGrabber grabber = new CadastreGrabber();
+
protected static final Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(
CadastrePlugin.class.getResource("/images/cadastre_small.png")));
- protected Vector<GeorefImage> images = new Vector<GeorefImage>();
+ private Vector<GeorefImage> images = new Vector<GeorefImage>();
+
+ public Lock imagesLock = new ReentrantLock();
/**
* v1 to v2 = not supported
@@ -60,8 +65,6 @@ public class WMSLayer extends Layer implements ImageObserver {
private ArrayList<EastNorthBound> dividedBbox = new ArrayList<EastNorthBound>();
- private CacheControl cacheControl = null;
-
private String location = "";
private String departement = "";
@@ -70,8 +73,6 @@ public class WMSLayer extends Layer implements ImageObserver {
public EastNorthBound communeBBox = new EastNorthBound(new EastNorth(0,0), new EastNorth(0,0));
- public boolean cancelled;
-
private boolean isRaster = false;
private boolean isAlreadyGeoreferenced = false;
public double X0, Y0, angle, fX, fY;
@@ -83,9 +84,12 @@ public class WMSLayer extends Layer implements ImageObserver {
private Action saveAsPng;
- public boolean adjustModeEnabled;
+ private Action cancelGrab;
+ public boolean adjustModeEnabled;
+ public GrabThread grabThread;
+
public WMSLayer() {
this(tr("Blank Layer"), "", -1);
}
@@ -95,6 +99,8 @@ public class WMSLayer extends Layer implements ImageObserver {
this.location = location;
this.codeCommune = codeCommune;
this.lambertZone = lambertZone;
+ grabThread = new GrabThread(this);
+ grabThread.start();
// enable auto-sourcing option
CadastrePlugin.pluginUsed = true;
}
@@ -102,12 +108,8 @@ public class WMSLayer extends Layer implements ImageObserver {
@Override
public void destroy() {
// if the layer is currently saving the images in the cache, wait until it's finished
- if (cacheControl != null) {
- while (!cacheControl.isCachePipeEmpty()) {
- System.out.println("Try to close a WMSLayer which is currently saving in cache : wait 1 sec.");
- CadastrePlugin.safeSleep(1000);
- }
- }
+ grabThread.cancel();
+ grabThread = null;
super.destroy();
images = null;
dividedBbox = null;
@@ -125,8 +127,9 @@ public class WMSLayer extends Layer implements ImageObserver {
return buildName(this.location.toUpperCase(), this.codeCommune);
}
- public void grab(CadastreGrabber grabber, Bounds b) throws IOException {
- cancelled = false;
+ public void grab(Bounds b) throws IOException {
+ grabThread.setCancelled(false);
+ grabThread.setGrabber(grabber);
// if it is the first layer, use the communeBBox as grab bbox (and not divided)
if (Main.map.mapView.getAllLayers().size() == 1 ) {
b = this.getCommuneBBox().toBounds();
@@ -140,47 +143,11 @@ public class WMSLayer extends Layer implements ImageObserver {
} else
divideBbox(b, Integer.parseInt(Main.pref.get("cadastrewms.scale", Scale.X1.toString())));
}
-
- int lastSavedImage = images.size();
- for (EastNorthBound n : dividedBbox) {
- if (cancelled)
- return;
- GeorefImage newImage;
- try {
- newImage = grabber.grab(this, n.min, n.max);
- } catch (IOException e) {
- System.out.println("Download action cancelled by user or server did not respond");
- break;
- } catch (OsmTransferException e) {
- System.out.println("OSM transfer failed");
- break;
- }
- if (grabber.getWmsInterface().downloadCancelled) {
- System.out.println("Download action cancelled by user");
- break;
- }
- if (CadastrePlugin.backgroundTransparent) {
- for (GeorefImage img : images) {
- if (img.overlap(newImage))
- // mask overlapping zone in already grabbed image
- img.withdraw(newImage);
- else
- // mask overlapping zone in new image only when new
- // image covers completely the existing image
- newImage.withdraw(img);
- }
- }
- images.add(newImage);
- Main.map.mapView.repaint();
- }
- if (!cancelled) {
- for (int i=lastSavedImage; i < images.size(); i++)
- saveToCache(images.get(i));
- }
+ grabThread.addImages(dividedBbox);
}
/**
- * Divides the bounding box in smaller polygons.
+ * Divides the bounding box in smaller squares. Their size (and quantity) is configurable in Preferences.
*
* @param b the original bbox, usually the current bbox on screen
* @param factor 1 = source bbox 1:1
@@ -205,14 +172,54 @@ public class WMSLayer extends Layer implements ImageObserver {
}
} else {
// divide to fixed size squares
- int cSquare = Integer.parseInt(Main.pref.get("cadastrewms.squareSize", "100"));
- minEast = minEast - minEast % cSquare;
- minNorth = minNorth - minNorth % cSquare;
- for (int xEast = (int)minEast; xEast < lambertMax.east(); xEast+=cSquare)
- for (int xNorth = (int)minNorth; xNorth < lambertMax.north(); xNorth+=cSquare) {
- dividedBbox.add(new EastNorthBound(new EastNorth(xEast, xNorth),
- new EastNorth(xEast + cSquare, xNorth + cSquare)));
+ // grab all square in a spiral starting from the center (usually the most interesting place)
+ int c = Integer.parseInt(Main.pref.get("cadastrewms.squareSize", "100"));
+ lambertMin = lambertMin.add(- minEast%c, - minNorth%c);
+ lambertMax = lambertMax.add(c - lambertMax.east()%c, c - lambertMax.north()%c);
+ EastNorth mid = lambertMax.getCenter(lambertMin);
+ mid = mid.add(-1, 1); // in case the boxes side is a pair, select the one one top,left to follow the rotation
+ mid = mid.add(- mid.east()%c, - mid.north()%c);
+ int x = (int)(lambertMax.east() - lambertMin.east())/100;
+ int y = (int)(lambertMax.north() - lambertMin.north())/100;
+ int dx[] = {+1, 0,-1, 0};
+ int dy[] = {0,-1, 0,+1};
+ int currDir = -1, lDir = 1, i = 1, j = 0, k = -1;
+ if (x == 1)
+ currDir = 0;
+ dividedBbox.add(new EastNorthBound(mid, new EastNorth(mid.east()+c, mid.north()+c)));
+ while (i < (x*y)) {
+ i++;
+ j++;
+ if (j >= lDir) {
+ k++;
+ if (k > 1) {
+ lDir++;
+ k = 0;
+ }
+ j = 0;
+ currDir = (currDir+1)%4;
+ } else if (currDir >= 0 && j >= (currDir == 0 || currDir == 2 ? x-1 : y-1)) {
+ // the overall is a rectangle, not a square. Jump to the other side to grab next square.
+ k++;
+ if (k > 1) {
+ lDir++;
+ k = 0;
+ }
+ j = lDir-1;
+ currDir = (currDir+1)%4;
+ mid = new EastNorth(mid.east() + dx[currDir]*c*(lDir-1), mid.north() + dy[currDir]*c*(lDir-1));
+ }
+ mid = new EastNorth(mid.east() + dx[currDir]*c, mid.north() + dy[currDir]*c);
+ dividedBbox.add(new EastNorthBound(mid, new EastNorth(mid.east()+c, mid.north()+c)));
}
+// // simple algorithm to grab all squares
+// minEast = minEast - minEast % cSquare;
+// minNorth = minNorth - minNorth % cSquare;
+// for (int xEast = (int)minEast; xEast < lambertMax.east(); xEast+=cSquare)
+// for (int xNorth = (int)minNorth; xNorth < lambertMax.north(); xNorth+=cSquare) {
+// dividedBbox.add(new EastNorthBound(new EastNorth(xEast, xNorth),
+// new EastNorth(xEast + cSquare, xNorth + cSquare)));
+// }
}
}
@@ -254,16 +261,17 @@ public class WMSLayer extends Layer implements ImageObserver {
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
else
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
- synchronized(this){
- for (GeorefImage img : images)
- img.paint(g, mv, CadastrePlugin.backgroundTransparent,
- CadastrePlugin.transparency, CadastrePlugin.drawBoundaries);
- }
+ imagesLock.lock();
+ for (GeorefImage img : images)
+ img.paint(g, mv, CadastrePlugin.backgroundTransparent,
+ CadastrePlugin.transparency, CadastrePlugin.drawBoundaries);
+ imagesLock.unlock();
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, savedInterpolation);
}
if (this.isRaster) {
paintCrosspieces(g, mv);
}
+ grabThread.paintBoxesToGrab(g, mv);
if (this.adjustModeEnabled) {
WMSAdjustAction.paintAdjustFrames(g, mv);
}
@@ -286,11 +294,14 @@ public class WMSLayer extends Layer implements ImageObserver {
public Action[] getMenuEntries() {
saveAsPng = new MenuActionSaveRasterAs(this);
saveAsPng.setEnabled(isRaster);
+ cancelGrab = new MenuActionCancelGrab(this);
+ cancelGrab.setEnabled(!isRaster && grabThread.getImagesToGrabSize() > 0);
return new Action[] {
LayerListDialog.getInstance().createShowHideLayerAction(),
LayerListDialog.getInstance().createDeleteLayerAction(),
new MenuActionLoadFromCache(),
saveAsPng,
+ cancelGrab,
new LayerListPopup.InfoAction(this),
};
@@ -319,26 +330,6 @@ public class WMSLayer extends Layer implements ImageObserver {
return false;
}
- public void saveToCache(GeorefImage image) {
- if (CacheControl.cacheEnabled && !isRaster()) {
- getCacheControl().saveCache(image);
- }
- }
-
- public void saveNewCache() {
- if (CacheControl.cacheEnabled) {
- getCacheControl().deleteCacheFile();
- for (GeorefImage image : images)
- getCacheControl().saveCache(image);
- }
- }
-
- public CacheControl getCacheControl() {
- if (cacheControl == null)
- cacheControl = new CacheControl(this);
- return cacheControl;
- }
-
/**
* Convert the eastNorth input coordinates to raster coordinates.
* The original raster size is [0,0,12286,8730] where 0,0 is the upper left corner and
@@ -426,6 +417,7 @@ public class WMSLayer extends Layer implements ImageObserver {
* @throws IOException
*/
public void write(ObjectOutputStream oos) throws IOException {
+ currentFormat = this.serializeFormatVersion;
oos.writeInt(this.serializeFormatVersion);
oos.writeObject(this.location); // String
oos.writeObject(this.codeCommune); // String
@@ -641,4 +633,38 @@ public class WMSLayer extends Layer implements ImageObserver {
}
}
+ public GeorefImage getImage(int index) {
+ imagesLock.lock();
+ GeorefImage img = null;
+ try {
+ img = this.images.get(index);
+ } catch (ArrayIndexOutOfBoundsException e) {
+ e.printStackTrace(System.out);
+ }
+ imagesLock.unlock();
+ return img;
+ }
+
+ public Vector<GeorefImage> getImages() {
+ return this.images;
+ }
+
+ public void addImage(GeorefImage img) {
+ imagesLock.lock();
+ this.images.add(img);
+ imagesLock.unlock();
+ }
+
+ public void setImages(Vector<GeorefImage> images) {
+ imagesLock.lock();
+ this.images = images;
+ imagesLock.unlock();
+ }
+
+ public void clearImages() {
+ imagesLock.lock();
+ this.images.clear();
+ imagesLock.unlock();
+ }
+
}
diff --git a/colorscheme/build.xml b/colorscheme/build.xml
index c06e3b9..c804c2d 100644
--- a/colorscheme/build.xml
+++ b/colorscheme/build.xml
@@ -28,7 +28,7 @@
<property name="commit.message" value="Uses new constructor for Plugin" />
- <property name="plugin.main.version" value="2830" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
<property name="plugin.dist.dir" value="../../dist"/>
diff --git a/editgpx/build.xml b/editgpx/build.xml
index 0810b6a..b81c587 100644
--- a/editgpx/build.xml
+++ b/editgpx/build.xml
@@ -28,7 +28,7 @@
<property name="commit.message" value="Changed constructor signature of plugin main class" />
- <property name="plugin.main.version" value="3408" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
diff --git a/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxTrack.java b/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxTrack.java
index 7388e3a..c8b4fda 100644
--- a/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxTrack.java
+++ b/editgpx/src/org/openstreetmap/josm/plugins/editgpx/data/EditGpxTrack.java
@@ -42,14 +42,22 @@ public class EditGpxTrack {
if (anonTime) {
// convert to anonymous time
for (WayPoint w : points) {
- w.attr.put("time", "1970-00-00T00:00:00.000Z");
+ w.attr.put("time", "1970-01-01T00:00:00.000Z");
w.setTime();
+ if (w.attr.containsKey("name")) {
+ w.attr.put("name", "anon"); //time information can also be in "name" field. so delete time information
+ }
}
}
wayPoints.add(points);
}
}
}
+ if (anonTime) {
+ if (attributes.containsKey("name")) {
+ attributes.put("name", "anon");//time information can also be in "name" field. so delete time information
+ }
+ }
return new ImmutableGpxTrack(wayPoints, attributes);
}
diff --git a/lakewalker/build.xml b/lakewalker/build.xml
index 17d82be..032d74b 100644
--- a/lakewalker/build.xml
+++ b/lakewalker/build.xml
@@ -27,7 +27,7 @@
<project name="lakewalker" default="dist" basedir=".">
<property name="commit.message" value="Changed the constructor signature of the plugin main class" />
- <property name="plugin.main.version" value="2830" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
<property name="plugin.dist.dir" value="../../dist"/>
@@ -55,7 +55,7 @@
<attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.lakewalker.LakewalkerPlugin" />
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
<attribute name="Plugin-Description" value="Helps vectorizing WMS images." />
- <attribute name="Plugin-Icon" value="images/lakewalker-sml.png"/>
+ <attribute name="Plugin-Icon" value="images/lakewalker-sml.png"/>
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
</manifest>
diff --git a/livegps/build.xml b/livegps/build.xml
index e915efe..2ab917d 100644
--- a/livegps/build.xml
+++ b/livegps/build.xml
@@ -27,7 +27,7 @@
<project name="livegps" default="dist" basedir=".">
<property name="commit.message" value="Changed the constructor signature of the plugin main class" />
- <property name="plugin.main.version" value="3119" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
@@ -55,7 +55,7 @@
<attribute name="Plugin-Class" value="livegps.LiveGpsPlugin"/>
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
<attribute name="Plugin-Description" value="Support live GPS input (moving dot) through a connection to gpsd server."/>
- <attribute name="Plugin-Icon" value="images/dialogs/livegps.png"/>
+ <attribute name="Plugin-Icon" value="images/dialogs/livegps.png"/>
<attribute name="Plugin-Link" value="http://wiki.openstreetmap.org/index.php/JOSM/Plugins/LiveGPS"/>
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
<attribute name="Plugin-Stage" value="50"/>
diff --git a/measurement/build.xml b/measurement/build.xml
index 47ef8c2..9dcd049 100644
--- a/measurement/build.xml
+++ b/measurement/build.xml
@@ -27,7 +27,7 @@
<project name="measurement" default="dist" basedir=".">
<property name="commit.message" value="Changed the constructor signature of the plugin main class" />
- <property name="plugin.main.version" value="3408" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
@@ -55,7 +55,7 @@
<attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.measurement.MeasurementPlugin"/>
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
<attribute name="Plugin-Description" value="Provide a measurement dialog and a layer to measure length and angle of segments, area surrounded by a (simple) closed way and create measurement paths (which also can be imported from a gps layer)."/>
- <attribute name="Plugin-Icon" value="images/dialogs/measure.png"/>
+ <attribute name="Plugin-Icon" value="images/dialogs/measure.png"/>
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
</manifest>
diff --git a/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java b/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java
index 288d4ee..ed3aa31 100644
--- a/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java
+++ b/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementDialog.java
@@ -103,7 +103,8 @@ public class MeasurementDialog extends ToggleDialog implements ActionListener
this.setPreferredSize(new Dimension(0, 92));
final MeasurementDialog dlg = this;
- DataSet.selListeners.add(new SelectionChangedListener() {
+ DataSet.addSelectionListener(new SelectionChangedListener() {
+ @Override
public void selectionChanged(Collection<? extends OsmPrimitive> arg0) {
double length = 0.0;
double segAngle = 0.0;
@@ -116,7 +117,7 @@ public class MeasurementDialog extends ToggleDialog implements ActionListener
if(lastNode == null) {
lastNode = n;
} else {
- length += MeasurementLayer.calcDistance(lastNode.getCoor(), n.getCoor());
+ length += lastNode.getCoor().greatCircleDistance(n.getCoor());
segAngle = MeasurementLayer.angleBetween(lastNode.getCoor(), n.getCoor());
lastNode = n;
}
@@ -125,7 +126,7 @@ public class MeasurementDialog extends ToggleDialog implements ActionListener
Node lastN = null;
for(Node n: w.getNodes()) {
if(lastN != null) {
- length += MeasurementLayer.calcDistance(lastN.getCoor(), n.getCoor());
+ length += lastN.getCoor().greatCircleDistance(n.getCoor());
//http://local.wasp.uwa.edu.au/~pbourke/geometry/polyarea/
area += (MeasurementLayer.calcX(n.getCoor()) * MeasurementLayer.calcY(lastN.getCoor()))
- (MeasurementLayer.calcY(n.getCoor()) * MeasurementLayer.calcX(lastN.getCoor()));
@@ -147,6 +148,7 @@ public class MeasurementDialog extends ToggleDialog implements ActionListener
});
}
+ @Override
public void actionPerformed(ActionEvent e)
{
String actionCommand = e.getActionCommand();
diff --git a/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementLayer.java b/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementLayer.java
index 087a52a..e728d1a 100644
--- a/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementLayer.java
+++ b/measurement/src/org/openstreetmap/josm/plugins/measurement/MeasurementLayer.java
@@ -143,23 +143,6 @@ public class MeasurementLayer extends Layer {
MeasurementPlugin.measurementDialog.pathLengthLabel.setText(pathLength < 800?nf2.format(pathLength) + " m":nf.format(pathLength/1000) + " km");
}
- public static double calcDistance(LatLon p1, LatLon p2){
- double lat1, lon1, lat2, lon2;
- double dlon, dlat;
-
- lat1 = p1.lat() * Math.PI / 180.0;
- lon1 = p1.lon() * Math.PI / 180.0;
- lat2 = p2.lat() * Math.PI / 180.0;
- lon2 = p2.lon() * Math.PI / 180.0;
-
- dlon = lon2 - lon1;
- dlat = lat2 - lat1;
-
- double a = (Math.pow(Math.sin(dlat/2), 2) + Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dlon/2), 2));
- double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
- return 6367000 * c;
- }
-
public static double calcX(LatLon p1){
double lat1, lon1, lat2, lon2;
double dlon, dlat;
@@ -195,7 +178,7 @@ public class MeasurementLayer extends Layer {
}
public static double calcDistance(WayPoint p1, WayPoint p2){
- return calcDistance(p1.getCoor(), p2.getCoor());
+ return p1.getCoor().greatCircleDistance(p2.getCoor());
}
public static double angleBetween(WayPoint p1, WayPoint p2){
@@ -259,6 +242,7 @@ public class MeasurementLayer extends Layer {
super(tr("Import path from GPX layer"), ImageProvider.get("dialogs", "edit")); // TODO: find better image
}
+ @Override
public void actionPerformed(ActionEvent e) {
Box panel = Box.createVerticalBox();
final JList layerList = new JList(model);
diff --git a/openvisible/build.xml b/openvisible/build.xml
index 0672a7c..dc0dff3 100644
--- a/openvisible/build.xml
+++ b/openvisible/build.xml
@@ -32,7 +32,7 @@
<!-- enter the SVN commit message -->
<property name="commit.message" value="Changed the constructor signature of the plugin main class; updated build.xml" />
<!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
- <property name="plugin.main.version" value="2830" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
<property name="plugin.dist.dir" value="../../dist"/>
@@ -60,7 +60,7 @@
<attribute name="Plugin-Date" value="${version.entry.commit.date}"/>
<attribute name="Plugin-Dependencies" value="jgrapht-jdk1.5"/>
<attribute name="Plugin-Description" value="Allows opening gpx/osm files that intersect the currently visible screen area"/>
- <attribute name="Plugin-Icon" value="images/openvisible.png"/>
+ <attribute name="Plugin-Icon" value="images/openvisible.png"/>
<attribute name="Plugin-Mainversion" value="${plugin.main.version}"/>
<attribute name="Plugin-Stage" value="50"/>
<attribute name="Plugin-Version" value="${version.entry.commit.revision}"/>
diff --git a/routing/build.xml b/routing/build.xml
index 72ae19d..82e63a7 100644
--- a/routing/build.xml
+++ b/routing/build.xml
@@ -27,7 +27,7 @@
<project name="routing" default="dist" basedir=".">
<property name="commit.message" value="Changed the constructor signature of the plugin main class" />
- <property name="plugin.main.version" value="3600" />
+ <property name="plugin.main.version" value="3835" />
<!-- Define some properties -->
<property name="josm" location="../../core/dist/josm-custom.jar"/>
diff --git a/surveyor/build.xml b/surveyor/build.xml
index fee1e4f..b2748d6 100644
--- a/surveyor/build.xml
+++ b/surveyor/build.xml
@@ -32,7 +32,7 @@
<!-- enter the SVN commit message -->
<property name="commit.message" value="Changed the constructor signature of the plugin main class" />
<!-- enter the *lowest* JOSM version this plugin is currently compatible with -->
- <property name="plugin.main.version" value="2907" />
+ <property name="plugin.main.version" value="3835" />
<property name="josm" location="../../core/dist/josm-custom.jar"/>
diff --git a/svn-info.xml b/svn-info.xml
index 230e96b..212a54c 100644
--- a/svn-info.xml
+++ b/svn-info.xml
@@ -3,16 +3,16 @@
<entry
kind="dir"
path="plugins"
- revision="24926">
+ revision="25537">
<url>http://svn.openstreetmap.org/applications/editors/josm/plugins</url>
<repository>
<root>http://svn.openstreetmap.org</root>
<uuid>b9d5c4c9-76e1-0310-9c85-f3177eceb1e4</uuid>
</repository>
<commit
- revision="24925">
-<author>malcolmh</author>
-<date>2010-12-31T15:46:49.494500Z</date>
+ revision="25527">
+<author>stoecker</author>
+<date>2011-03-06T14:57:08.379261Z</date>
</commit>
</entry>
</info>
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/josm-plugins.git
More information about the Pkg-grass-devel
mailing list