Changeset 36085 in osm for applications/editors/josm/plugins/routing
- Timestamp:
- 2023-05-26T16:46:48+02:00 (20 months ago)
- Location:
- applications/editors/josm/plugins/routing
- Files:
-
- 13 edited
Legend:
- Unmodified
- Added
- Removed
-
applications/editors/josm/plugins/routing/build.xml
r35978 r36085 12 12 <property name="plugin.icon" value="images/preferences/routing.png"/> 13 13 <property name="plugin.link" value="https://wiki.openstreetmap.org/index.php/JOSM/Plugins/Routing"/> 14 <property name="plugin.requires" value="log4j"/>15 14 16 15 <!-- -
applications/editors/josm/plugins/routing/src/com/innovant/josm/jrt/core/RoutingGraph.java
r34187 r36085 5 5 import java.util.Arrays; 6 6 import java.util.Collection; 7 import java.util.Collections; 7 8 import java.util.List; 8 9 import java.util.Map; 9 10 10 import org.apache.log4j.Logger;11 11 import org.jgrapht.Graph; 12 12 import org.jgrapht.alg.BellmanFordShortestPath; … … 21 21 import com.innovant.josm.plugin.routing.RoutingLayer; 22 22 import com.innovant.josm.plugin.routing.RoutingModel; 23 import org.openstreetmap.josm.gui.layer.Layer; 24 import org.openstreetmap.josm.tools.Logging; 23 25 24 26 /** … … 61 63 private final DataSet data; 62 64 63 /** 64 * Logger. 65 */ 66 static Logger logger = Logger.getLogger(RoutingGraph.class); 67 68 private static Collection<String> excludedHighwayValues = Arrays.asList(new String[]{ 69 "bus_stop", "traffic_signals", "street_lamp", "stop", "construction", 70 "platform", "give_way", "proposed", "milestone", "speed_camera", "abandoned" 71 }); 65 private static final Collection<String> excludedHighwayValues = Arrays.asList("bus_stop", "traffic_signals", "street_lamp", "stop", 66 "construction", "platform", "give_way", "proposed", "milestone", "speed_camera", "abandoned"); 72 67 73 68 /** … … 84 79 // private WeightedMultigraph<Node, OsmEdge> graph; 85 80 private Graph<Node, OsmEdge> graph; 86 private RoutingGraphDelegator rgDelegator = null; 87 81 private RoutingGraphDelegator rgDelegator; 88 82 89 83 /** … … 94 88 } 95 89 90 @SuppressWarnings("squid:S2234") 96 91 private void addEdgeBidirectional(Way way, Node from, Node to) { 97 92 addEdge(way, from, to); … … 99 94 } 100 95 96 @SuppressWarnings("squid:S2234") 101 97 private void addEdgeReverseOneway(Way way, Node from, Node to) { 102 98 addEdge(way, to, from); … … 114 110 /** 115 111 * Default Constructor. 112 * @param data The data to use for the graph 116 113 */ 117 114 public RoutingGraph(DataSet data) { … … 123 120 routingProfile.setOnewayUse(true); // Don't ignore oneways by default 124 121 this.setWaySpeeds(routingProfile.getWaySpeeds()); 125 logger.debug("Created RoutingGraph");122 Logging.trace("Created RoutingGraph"); 126 123 } 127 124 … … 130 127 */ 131 128 public void createGraph() { 132 133 logger.debug("Creating Graph..."); 129 Logging.trace("Creating Graph..."); 134 130 graph = new DirectedWeightedMultigraph<>(OsmEdge.class); 135 131 rgDelegator = new RoutingGraphDelegator(graph); … … 140 136 // skip way if not suitable for routing. 141 137 if (way == null || way.isDeleted() || !this.isvalidWay(way) 142 || way.getNodes ().size() < 1) continue;138 || way.getNodesCount() == 0) continue; 143 139 144 140 // INIT … … 146 142 Node to = null; 147 143 List<Node> nodes = way.getNodes(); 148 int nodes _count = nodes.size();144 int nodesCount = nodes.size(); 149 145 150 146 /* … … 166 162 */ 167 163 168 String oneway _val = way.get("oneway"); /* get (oneway=?) tag for this way. */169 String junction _val = way.get("junction"); /* get (junction=?) tag for this way. */164 String onewayVal = way.get("oneway"); /* get (oneway=?) tag for this way. */ 165 String junctionVal = way.get("junction"); /* get (junction=?) tag for this way. */ 170 166 171 167 from = nodes.get(0); /* 1st node A */ 172 168 graph.addVertex(from); /* add vertex A */ 173 169 174 for (int i = 1; i < nodes _count; i++) { /* loop from B until E */170 for (int i = 1; i < nodesCount; i++) { /* loop from B until E */ 175 171 176 172 to = nodes.get(i); /* 2nd node B */ … … 185 181 addEdgeBidirectional(way, from, to); 186 182 187 } else if (oneway _val == null &&junction_val =="roundabout") {183 } else if (onewayVal == null && "roundabout".equals(junctionVal)) { 188 184 //Case (roundabout): oneway=implicit yes 189 185 addEdgeNormalOneway(way, from, to); 190 186 191 } else if (oneway _val == null ||oneway_val =="false"|| oneway_val == "no" || oneway_val == "0") {187 } else if (onewayVal == null || Arrays.asList("false", "no", "0").contains(onewayVal)) { 192 188 //Case (bi-way): oneway=false OR oneway=unset OR oneway=0 OR oneway=no 193 189 addEdgeBidirectional(way, from, to); 194 190 195 } else if ( oneway_val == "-1") {191 } else if ("-1".equals(onewayVal)) { 196 192 //Case (oneway reverse): oneway=-1 197 193 addEdgeReverseOneway(way, from, to); 198 194 199 } else if ( oneway_val == "1" || oneway_val == "yes" || oneway_val =="true") {195 } else if (Arrays.asList("1", "yes", "true").contains(onewayVal)) { 200 196 //Case (oneway normal): oneway=yes OR 1 OR true 201 197 addEdgeNormalOneway(way, from, to); … … 209 205 } // end of looping thru ways 210 206 211 logger.debug("End Create Graph");212 logger.debug("Vertex:"+graph.vertexSet().size());213 logger.debug("Edges:"+graph.edgeSet().size());207 Logging.trace("End Create Graph"); 208 Logging.trace("Vertex: {0}", graph.vertexSet().size()); 209 Logging.trace("Edges: {0}", graph.edgeSet().size()); 214 210 } 215 211 … … 229 225 double weight = getWeight(way, length); 230 226 setWeight(edge, length); 231 logger.debug("edge for way " + way.getId() 232 + "(from node " + from.getId() + " to node " 233 + to.getId() + ") has weight: " + weight); 227 Logging.trace("edge for way {0} (from node {1} to node {2}) has weight: {3}", way.getId(), from.getId(), to.getId(), weight); 234 228 ((DirectedWeightedMultigraph<Node, OsmEdge>) graph).setEdgeWeight(edge, weight); 235 229 } … … 240 234 * in routing. 241 235 * 242 * @param way236 * @param osmedge 243 237 * the way. 244 238 */ … … 273 267 if (this.waySpeeds.containsKey(way.get("highway"))) 274 268 speed = this.waySpeeds.get(way.get("highway")); 275 logger.debug("Speed="+speed);269 Logging.trace("Speed={0}", speed); 276 270 break; 277 271 default: … … 315 309 Graph<Node, OsmEdge> g; 316 310 double totalWeight = 0; 317 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 311 final Layer editLayer = MainApplication.getLayerManager().getEditLayer(); 312 final RoutingLayer layer = MainApplication.getLayerManager().getLayersOfType(RoutingLayer.class) 313 .stream().filter(rLayer -> rLayer.getDataLayer() == editLayer).findFirst().orElse(null); 314 if (layer == null) { 315 return Collections.emptyList(); 316 } 318 317 RoutingModel routingModel = layer.getRoutingModel(); 319 318 320 319 if (graph == null || routingModel.getOnewayChanged()) 321 320 this.createGraph(); 322 logger.debug("apply algorithm between nodes ");321 Logging.trace("apply algorithm between nodes "); 323 322 324 323 for (Node node : nodes) { 325 logger.debug(node.getId());324 Logging.trace(Long.toString(node.getId())); 326 325 } 327 logger.debug("-----------------------------------");326 Logging.trace("-----------------------------------"); 328 327 329 328 // Assign the graph to g … … 332 331 switch (algorithm) { 333 332 case ROUTING_ALG_DIJKSTRA: 334 logger.debug("Using Dijkstra algorithm");333 Logging.trace("Using Dijkstra algorithm"); 335 334 DijkstraShortestPath<Node, OsmEdge> routingk = null; 336 335 for (int index = 1; index < nodes.size(); ++index) { … … 338 337 .get(index - 1), nodes.get(index)); 339 338 if (routingk.getPathEdgeList() == null) { 340 logger.debug("no path found!");339 Logging.trace("no path found!"); 341 340 break; 342 341 } … … 346 345 break; 347 346 case ROUTING_ALG_BELLMANFORD: 348 logger.debug("Using Bellman Ford algorithm");347 Logging.trace("Using Bellman Ford algorithm"); 349 348 for (int index = 1; index < nodes.size(); ++index) { 350 349 path = BellmanFordShortestPath.findPathBetween(rgDelegator, nodes 351 350 .get(index - 1), nodes.get(index)); 352 if (path == null) { 353 logger.debug("no path found!");354 return null;351 if (path == null || path.isEmpty()) { 352 Logging.trace("no path found!"); 353 return Collections.emptyList(); 355 354 } 356 355 } 357 356 break; 358 357 default: 359 logger.debug("Wrong algorithm");358 Logging.trace("Wrong algorithm"); 360 359 break; 361 360 } 362 361 363 logger.debug("shortest path found: " + path + "\nweight: " 364 + totalWeight); 362 Logging.trace("shortest path found: {0}\nweight: {1}", path, totalWeight); 365 363 return path; 366 364 } … … 389 387 * @param routeType the routeType to set 390 388 */ 391 public void setTypeRoute(RouteType route type) {392 this.routeType = route type;393 this.rgDelegator.setRouteType(route type);389 public void setTypeRoute(RouteType routeType) { 390 this.routeType = routeType; 391 this.rgDelegator.setRouteType(routeType); 394 392 } 395 393 -
applications/editors/josm/plugins/routing/src/com/innovant/josm/jrt/core/RoutingGraphDelegator.java
r32768 r36085 2 2 package com.innovant.josm.jrt.core; 3 3 4 import org.apache.log4j.Logger;5 4 import org.jgrapht.Graph; 6 5 import org.jgrapht.graph.GraphDelegator; … … 15 14 */ 16 15 public class RoutingGraphDelegator extends GraphDelegator<Node, OsmEdge> { 17 18 /**19 * Logger.20 */21 static Logger logger = Logger.getLogger(RoutingGraphDelegator.class);22 23 16 /** 24 17 * -
applications/editors/josm/plugins/routing/src/com/innovant/josm/jrt/core/RoutingProfile.java
r34554 r36085 5 5 import java.util.Map; 6 6 7 import org.apache.log4j.Logger;8 7 import org.openstreetmap.josm.data.Preferences; 9 8 import org.openstreetmap.josm.tools.Logging; 10 9 11 10 /** … … 30 29 */ 31 30 public class RoutingProfile { 32 /**33 * logger34 */35 static Logger logger = Logger.getLogger(RoutingProfile.class);36 31 /** 37 32 * True if oneway is used for routing (i.e. for cars). … … 74 69 */ 75 70 public RoutingProfile(String name) { 76 logger.debug("Init RoutingProfile with name:"+name);71 Logging.trace("Init RoutingProfile with name: {0}", name); 77 72 this.name = name; 78 73 waySpeeds = new HashMap<>(); 79 74 Map<String, String> prefs = Preferences.main().getAllPrefix("routing.profile."+name+".speed"); 80 for ( String key:prefs.keySet()) {81 waySpeeds.put(( key.split("\\.")[4]), Double.valueOf(prefs.get(key)));75 for (Map.Entry<String, String> entry : prefs.entrySet()) { 76 waySpeeds.put((entry.getKey().split("\\.")[4]), Double.valueOf(entry.getValue())); 82 77 } 83 for ( String key:waySpeeds.keySet()) {84 logger.debug(key+ "-- speed:"+waySpeeds.get(key));78 for (Map.Entry<String, Double> entry : waySpeeds.entrySet()) { 79 Logging.trace("{0}-- speed: {1}", entry.getKey(), entry.getValue()); 85 80 } 86 logger.debug("End init RoutingProfile with name:"+name);81 Logging.trace("End init RoutingProfile with name: {0}", name); 87 82 } 88 83 -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/RoutingLayer.java
r34554 r36085 20 20 import javax.swing.Icon; 21 21 22 import org.apache.log4j.Logger;23 22 import org.openstreetmap.josm.actions.RenameLayerAction; 24 23 import org.openstreetmap.josm.data.Bounds; … … 39 38 40 39 import com.innovant.josm.jrt.osm.OsmEdge; 41 40 import org.openstreetmap.josm.tools.Logging; 42 41 43 42 /** … … 54 53 KEY_ROUTE_SELECT("routing.route.select"); 55 54 56 p ublicfinal String key;55 private final String key; 57 56 PreferencesKeys(String key) { 58 57 this.key = key; … … 65 64 66 65 /** 67 * Logger68 */69 static Logger logger = Logger.getLogger(RoutingLayer.class);70 71 /**72 66 * Constant 73 67 */ … … 77 71 * Routing Model 78 72 */ 79 private RoutingModel routingModel; 73 private final RoutingModel routingModel; 80 74 81 75 /** 82 76 * Start, Middle and End icons 83 77 */ 84 private Icon startIcon, middleIcon, endIcon; 78 private final Icon startIcon; 79 private final Icon middleIcon; 80 private final Icon endIcon; 85 81 86 82 /** 87 83 * Associated OSM layer 88 84 */ 89 private OsmDataLayer dataLayer; 85 private final OsmDataLayer dataLayer; 90 86 91 87 /** 92 88 * Default constructor 93 89 * @param name Layer name. 90 * @param dataLayer The datalayer to use for routing 94 91 */ 95 92 public RoutingLayer(String name, OsmDataLayer dataLayer) { 96 93 super(name); 97 logger.debug("Creating Routing Layer...");98 if (startIcon == null)startIcon = ImageProvider.get("routing", "startflag");99 if (middleIcon == null)middleIcon = ImageProvider.get("routing", "middleflag");100 if (endIcon == null)endIcon = ImageProvider.get("routing", "endflag");94 Logging.trace("Creating Routing Layer..."); 95 this.startIcon = ImageProvider.get("routing", "startflag"); 96 this.middleIcon = ImageProvider.get("routing", "middleflag"); 97 this.endIcon = ImageProvider.get("routing", "endflag"); 101 98 this.dataLayer = dataLayer; 102 99 this.routingModel = new RoutingModel(dataLayer.data); 103 logger.debug("Routing Layer created."); 104 100 Logging.trace("Routing Layer created."); 105 101 106 102 this.routingModel.routingGraph.createGraph(); /* construct the graph right after we we create the layer */ … … 138 134 if (n.isDeleted() || n.isIncomplete()) continue; 139 135 140 Point P = MainApplication.getMap().mapView.getPoint(n); 141 double dist = p.distance(P); 142 if (dist < snapDistance) { 143 if ((nearest == null) || (dist < minDist)) { 144 nearest = n; 145 minDist = dist; 146 } 136 Point point = MainApplication.getMap().mapView.getPoint(n); 137 double dist = p.distance(point); 138 if (dist < snapDistance && ((nearest == null) || (dist < minDist))) { 139 nearest = n; 140 minDist = dist; 147 141 } 148 142 } … … 153 147 @Override 154 148 public Icon getIcon() { 155 Icon icon = ImageProvider.get("layer", "routing_small"); 156 return icon; 149 return ImageProvider.get("layer", "routing_small"); 157 150 } 158 151 159 152 @Override 160 153 public Object getInfoComponent() { 161 String info ="<html>"154 return "<html>" 162 155 + "<body>" 163 156 +"Graph Vertex: "+this.routingModel.routingGraph.getVertexCount()+"<br/>" … … 165 158 + "</body>" 166 159 + "</html>"; 167 return info;168 160 } 169 161 … … 183 175 @Override 184 176 public String getToolTipText() { 185 String tooltip =this.routingModel.routingGraph.getVertexCount() + " vertices, "177 return this.routingModel.routingGraph.getVertexCount() + " vertices, " 186 178 + this.routingModel.routingGraph.getEdgeCount() + " edges"; 187 return tooltip;188 179 } 189 180 … … 208 199 Color color; 209 200 if (isActiveLayer) { 210 color = new NamedColorProperty(PreferencesKeys.KEY_ACTIVE_ROUTE_COLOR. key, Color.RED).get();201 color = new NamedColorProperty(PreferencesKeys.KEY_ACTIVE_ROUTE_COLOR.getKey(), Color.RED).get(); 211 202 } else { 212 color = new NamedColorProperty(PreferencesKeys.KEY_INACTIVE_ROUTE_COLOR. key, Color.decode("#dd2222")).get();203 color = new NamedColorProperty(PreferencesKeys.KEY_INACTIVE_ROUTE_COLOR.getKey(), Color.decode("#dd2222")).get(); 213 204 } 214 205 215 206 // Get path stroke width from preferences 216 String widthString = Config.getPref().get(PreferencesKeys.KEY_ROUTE_WIDTH. key);207 String widthString = Config.getPref().get(PreferencesKeys.KEY_ROUTE_WIDTH.getKey()); 217 208 if (widthString.length() == 0) { 218 209 widthString = "2"; /* I think 2 is better */ … … 223 214 224 215 // draw our graph 225 if (isActiveLayer) { 226 if (routingModel != null) { 227 if (routingModel.routingGraph != null && routingModel.routingGraph.getGraph() != null) { 228 Set<OsmEdge> graphEdges = routingModel.routingGraph.getGraph().edgeSet(); 229 if (!graphEdges.isEmpty()) { 230 Color color2 = ColorHelper.html2color("#00ff00"); /* just green for now */ 231 OsmEdge firstedge = (OsmEdge) graphEdges.toArray()[0]; 232 Point from = mv.getPoint(firstedge.fromEastNorth()); 233 g.drawRect(from.x-4, from.y+4, from.x+4, from.y-4); 234 for (OsmEdge edge : graphEdges) { 235 drawGraph(g, mv, edge, color2, width); 236 } 237 } 216 if (isActiveLayer && routingModel.routingGraph != null && routingModel.routingGraph.getGraph() != null) { 217 Set<OsmEdge> graphEdges = routingModel.routingGraph.getGraph().edgeSet(); 218 if (!graphEdges.isEmpty()) { 219 Color color2 = ColorHelper.html2color("#00ff00"); /* just green for now */ 220 OsmEdge firstedge = (OsmEdge) graphEdges.toArray()[0]; 221 Point from = mv.getPoint(firstedge.fromEastNorth()); 222 g.drawRect(from.x - 4, from.y + 4, from.x + 4, from.y - 4); 223 for (OsmEdge edge : graphEdges) { 224 drawGraph(g, mv, edge, color2, width); 238 225 } 239 226 } … … 241 228 242 229 243 if (nodes == null || nodes. size() == 0) return;230 if (nodes == null || nodes.isEmpty()) return; 244 231 245 232 // Paint routing path … … 289 276 * Draw a line with the given color. 290 277 */ 291 private void drawEdge(Graphics g, MapView mv, OsmEdge edge, Color col, int width, 278 private static void drawEdge(Graphics g, MapView mv, OsmEdge edge, Color col, int width, 292 279 boolean showDirection) { 293 280 g.setColor(col); … … 310 297 } 311 298 312 private void drawGraph(Graphics g, MapView mv, OsmEdge edge, Color col, int width) { 299 private static void drawGraph(Graphics g, MapView mv, OsmEdge edge, Color col, int width) { 313 300 g.setColor(col); 314 301 Point from; -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/RoutingModel.java
r32768 r36085 5 5 import java.util.List; 6 6 7 import org.apache.log4j.Logger;8 7 import org.openstreetmap.josm.data.osm.DataSet; 9 8 import org.openstreetmap.josm.data.osm.Node; … … 12 11 import com.innovant.josm.jrt.core.RoutingGraph.Algorithm; 13 12 import com.innovant.josm.jrt.osm.OsmEdge; 14 13 import org.openstreetmap.josm.tools.Logging; 15 14 16 15 /** … … 21 20 */ 22 21 public class RoutingModel { 23 24 /**25 * Logger26 */27 static Logger logger = Logger.getLogger(RoutingModel.class);28 29 22 /** 30 23 * Graph to calculate route 31 24 */ 32 public RoutingGraph routingGraph = null;25 public final RoutingGraph routingGraph; 33 26 34 27 /** 35 28 * List of nodes that the route has to traverse 36 29 */ 37 private List<Node> nodes = null;30 private List<Node> nodes; 38 31 39 private List<OsmEdge> path = null;32 private List<OsmEdge> path; 40 33 41 34 /** 42 35 * Flag to advise about changes in the selected nodes. 43 36 */ 44 private boolean changeNodes = false;37 private boolean changeNodes; 45 38 46 39 /** 47 40 * Flag to advise about changes in ways. 48 41 */ 49 private boolean changeOneway = false;42 private boolean changeOneway; 50 43 51 44 /** 52 45 * Default Constructor. 46 * @param data The data to use for the routing graph 53 47 */ 54 48 public RoutingModel(DataSet data) { 55 49 nodes = new ArrayList<>(); 56 System.out.println("gr " + data);50 Logging.trace("gr " + data); 57 51 routingGraph = new RoutingGraph(data); 58 52 } -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/RoutingPlugin.java
r33794 r36085 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.io.File;7 6 import java.util.ArrayList; 8 7 9 import org.apache.log4j.Logger; 10 import org.apache.log4j.xml.DOMConfigurator; 8 import com.innovant.josm.plugin.routing.actions.AddRouteNodeAction; 9 import com.innovant.josm.plugin.routing.actions.MoveRouteNodeAction; 10 import com.innovant.josm.plugin.routing.actions.RemoveRouteNodeAction; 11 import com.innovant.josm.plugin.routing.gui.RoutingDialog; 12 import com.innovant.josm.plugin.routing.gui.RoutingMenu; 13 import com.innovant.josm.plugin.routing.gui.RoutingPreferenceDialog; 11 14 import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent; 12 15 import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter; … … 27 30 import org.openstreetmap.josm.tools.Logging; 28 31 29 import com.innovant.josm.plugin.routing.actions.AddRouteNodeAction;30 import com.innovant.josm.plugin.routing.actions.MoveRouteNodeAction;31 import com.innovant.josm.plugin.routing.actions.RemoveRouteNodeAction;32 import com.innovant.josm.plugin.routing.gui.RoutingDialog;33 import com.innovant.josm.plugin.routing.gui.RoutingMenu;34 import com.innovant.josm.plugin.routing.gui.RoutingPreferenceDialog;35 36 32 /** 37 33 * The main class of the routing plugin … … 43 39 */ 44 40 public class RoutingPlugin extends Plugin implements LayerChangeListener, DataSetListenerAdapter.Listener { 45 /**46 * Logger47 */48 static Logger logger = Logger.getLogger(RoutingPlugin.class);49 41 50 42 /** … … 116 108 datasetAdapter = new DataSetListenerAdapter(this); 117 109 plugin = this; // Assign reference to the plugin class 118 File log4jConfigFile = new java.io.File("log4j.xml"); 119 if (log4jConfigFile.exists()) { 120 DOMConfigurator.configure(log4jConfigFile.getPath()); 121 } else { 122 System.err.println("Routing plugin warning: log4j configuration not found"); 123 } 124 logger.debug("Loading routing plugin..."); 110 Logging.trace("Loading routing plugin..."); 125 111 preferenceSettings = new RoutingPreferenceDialog(); 126 112 // Initialize layers list … … 131 117 MainApplication.getLayerManager().addLayerChangeListener(this); 132 118 DatasetEventManager.getInstance().addDatasetListener(datasetAdapter, FireMode.IN_EDT_CONSOLIDATED); 133 logger.debug("Finished loading plugin");119 Logging.trace("Finished loading plugin"); 134 120 } 135 121 … … 178 164 // Enable menu 179 165 menu.enableStartItem(); 180 newFrame.addToggleDialog(routingDialog = new RoutingDialog()); 166 routingDialog = new RoutingDialog(); 167 newFrame.addToggleDialog(routingDialog); 181 168 } else { 182 169 addRouteNodeAction = null; … … 218 205 // Set layer on top and select layer, also refresh toggleDialog to reflect selection 219 206 MainApplication.getMap().mapView.moveLayer(newLayer, 0); 220 logger.debug("Added routing layer.");207 Logging.trace("Added routing layer."); 221 208 } 222 209 } … … 232 219 menu.disableRestOfItems(); 233 220 layers.remove(oldLayer); 234 logger.debug("Removed routing layer.");221 Logging.trace("Removed routing layer."); 235 222 } else if (oldLayer instanceof OsmDataLayer) { 236 223 // Remove all associated routing layers … … 238 225 // FIXME: can't remove associated routing layers without triggering exceptions in some cases 239 226 RoutingLayer[] layersArray = layers.toArray(new RoutingLayer[0]); 240 for ( int i = 0; i <layersArray.length; i++) {241 if ( layersArray[i].getDataLayer().equals(oldLayer)) {227 for (RoutingLayer routingLayer : layersArray) { 228 if (routingLayer.getDataLayer().equals(oldLayer)) { 242 229 try { 243 230 // Remove layer 244 MainApplication.getLayerManager().removeLayer( layersArray[i]);231 MainApplication.getLayerManager().removeLayer(routingLayer); 245 232 } catch (IllegalArgumentException e) { 246 233 Logging.error(e); -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/actions/AddRouteNodeAction.java
r33794 r36085 6 6 import java.awt.event.MouseEvent; 7 7 8 import org.apache.log4j.Logger;9 8 import org.openstreetmap.josm.actions.mapmode.MapMode; 10 9 import org.openstreetmap.josm.data.osm.Node; … … 15 14 import com.innovant.josm.plugin.routing.RoutingLayer; 16 15 import com.innovant.josm.plugin.routing.RoutingPlugin; 16 import org.openstreetmap.josm.tools.Logging; 17 17 18 18 /** … … 24 24 */ 25 25 public class AddRouteNodeAction extends MapMode { 26 27 /**28 * Logger.29 */30 static Logger logger = Logger.getLogger(AddRouteNodeAction.class);31 32 26 /** 33 27 * Constructor 34 * @param mapFrame map frame35 28 */ 36 29 public AddRouteNodeAction() { … … 60 53 node = layer.getNearestHighwayNode(e.getPoint()); 61 54 if (node == null) { 62 logger.debug("no selected node");55 Logging.trace("no selected node"); 63 56 return; 64 57 } 65 logger.debug("selected node" +node);58 Logging.trace("selected node {0}", node); 66 59 layer.getRoutingModel().addNode(node); 67 60 RoutingPlugin.getInstance().getRoutingDialog().addNode(node); -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/actions/MoveRouteNodeAction.java
r33794 r36085 8 8 import java.util.List; 9 9 10 import org.apache.log4j.Logger;11 10 import org.openstreetmap.josm.actions.mapmode.MapMode; 12 11 import org.openstreetmap.josm.data.osm.Node; … … 19 18 import com.innovant.josm.plugin.routing.RoutingPlugin; 20 19 import com.innovant.josm.plugin.routing.gui.RoutingDialog; 20 import org.openstreetmap.josm.tools.Logging; 21 21 22 22 /** … … 35 35 36 36 /** 37 * Logger.38 */39 static Logger logger = Logger.getLogger(RoutingLayer.class);40 41 /**42 37 * Index of dragged node 43 38 */ … … 46 41 /** 47 42 * Constructor 48 * @param mapFrame map frame49 43 */ 50 44 public MoveRouteNodeAction() { … … 67 61 @Override public void mousePressed(MouseEvent e) { 68 62 // If left button is pressed 69 if (e.getButton() == MouseEvent.BUTTON1) { 70 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 71 requestFocusInMapView(); 72 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 73 RoutingModel routingModel = layer.getRoutingModel(); 74 // Search for the nearest node in the list 75 List<Node> nl = routingModel.getSelectedNodes(); 76 index = -1; 77 double dmax = DRAG_SQR_RADIUS; // maximum distance, in pixels 78 for (int i = 0; i < nl.size(); i++) { 79 Node node = nl.get(i); 80 double d = MainApplication.getMap().mapView.getPoint(node).distanceSq(e.getPoint()); 81 if (d < dmax) { 82 dmax = d; 83 index = i; 84 } 63 if (e.getButton() == MouseEvent.BUTTON1 && MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 64 requestFocusInMapView(); 65 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 66 RoutingModel routingModel = layer.getRoutingModel(); 67 // Search for the nearest node in the list 68 List<Node> nl = routingModel.getSelectedNodes(); 69 index = -1; 70 double dmax = DRAG_SQR_RADIUS; // maximum distance, in pixels 71 for (int i = 0; i < nl.size(); i++) { 72 Node node = nl.get(i); 73 double d = MainApplication.getMap().mapView.getPoint(node).distanceSq(e.getPoint()); 74 if (d < dmax) { 75 dmax = d; 76 index = i; 85 77 } 86 if (index >= 0)87 logger.debug("Moved from node " + nl.get(index));88 78 } 79 if (index >= 0) 80 Logging.trace("Moved from node {0}", nl.get(index)); 89 81 } 90 82 } … … 109 101 node = layer.getNearestHighwayNode(point); 110 102 if (node == null) { 111 logger.debug("Didn't found a close node to move to.");103 Logging.trace("Didn't found a close node to move to."); 112 104 return; 113 105 } 114 logger.debug("Moved to node" +node);106 Logging.trace("Moved to node {0}", node); 115 107 routingModel.removeNode(index); 116 108 routingDialog.removeNode(index); -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/actions/RemoveRouteNodeAction.java
r33794 r36085 7 7 import java.util.List; 8 8 9 import org.apache.log4j.Logger;10 9 import org.openstreetmap.josm.actions.mapmode.MapMode; 11 10 import org.openstreetmap.josm.data.osm.Node; … … 17 16 import com.innovant.josm.plugin.routing.RoutingModel; 18 17 import com.innovant.josm.plugin.routing.RoutingPlugin; 18 import org.openstreetmap.josm.tools.Logging; 19 19 20 20 /** … … 31 31 */ 32 32 private static final int REMOVE_SQR_RADIUS = 100; 33 34 /**35 * Logger.36 */37 static Logger logger = Logger.getLogger(RoutingLayer.class);38 33 39 34 public RemoveRouteNodeAction() { … … 56 51 @Override public void mouseClicked(MouseEvent e) { 57 52 // If left button is clicked 58 if (e.getButton() == MouseEvent.BUTTON1) { 59 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 60 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 61 RoutingModel routingModel = layer.getRoutingModel(); 62 // Search for the nearest node in the list 63 List<Node> nl = routingModel.getSelectedNodes(); 64 int index = -1; 65 double dmax = REMOVE_SQR_RADIUS; // maximum distance, in pixels 66 for (int i = 0; i < nl.size(); i++) { 67 Node node = nl.get(i); 68 double d = MainApplication.getMap().mapView.getPoint(node).distanceSq(e.getPoint()); 69 if (d < dmax) { 70 dmax = d; 71 index = i; 72 } 53 if (e.getButton() == MouseEvent.BUTTON1 && MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 54 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 55 RoutingModel routingModel = layer.getRoutingModel(); 56 // Search for the nearest node in the list 57 List<Node> nl = routingModel.getSelectedNodes(); 58 int index = -1; 59 double dmax = REMOVE_SQR_RADIUS; // maximum distance, in pixels 60 for (int i = 0; i < nl.size(); i++) { 61 Node node = nl.get(i); 62 double d = MainApplication.getMap().mapView.getPoint(node).distanceSq(e.getPoint()); 63 if (d < dmax) { 64 dmax = d; 65 index = i; 73 66 } 74 // If found a close node, remove it and recalculate route75 if (index >= 0) {76 // Remove node77 logger.debug("Removing node " + nl.get(index));78 routingModel.removeNode(index);79 RoutingPlugin.getInstance().getRoutingDialog().removeNode(index);80 MainApplication.getMap().repaint();81 } else {82 logger.debug("Can't find a node to remove.");83 }67 } 68 // If found a close node, remove it and recalculate route 69 if (index >= 0) { 70 // Remove node 71 Logging.trace("Removing node {0}", nl.get(index)); 72 routingModel.removeNode(index); 73 RoutingPlugin.getInstance().getRoutingDialog().removeNode(index); 74 MainApplication.getMap().repaint(); 75 } else { 76 Logging.trace("Can't find a node to remove."); 84 77 } 85 78 } -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingDialog.java
r33794 r36085 18 18 import com.innovant.josm.plugin.routing.RoutingLayer; 19 19 import com.innovant.josm.plugin.routing.RoutingModel; 20 21 20 22 21 /** -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingMenu.java
r33794 r36085 5 5 import static org.openstreetmap.josm.tools.I18n.tr; 6 6 7 import java.awt.event.ActionEvent;8 import java.awt.event.ActionListener;9 7 import java.awt.event.ItemEvent; 10 import java.awt.event.ItemListener;11 8 import java.awt.event.KeyEvent; 12 9 … … 17 14 import javax.swing.JRadioButtonMenuItem; 18 15 19 import org.openstreetmap.josm.gui.MainApplication;20 import org.openstreetmap.josm.gui.MainMenu;21 22 16 import com.innovant.josm.jrt.core.RoutingGraph.RouteType; 23 17 import com.innovant.josm.plugin.routing.RoutingLayer; 24 18 import com.innovant.josm.plugin.routing.RoutingModel; 25 19 import com.innovant.josm.plugin.routing.RoutingPlugin; 20 import org.openstreetmap.josm.gui.MainApplication; 21 import org.openstreetmap.josm.gui.MainMenu; 26 22 27 23 /** … … 51 47 52 48 startMI = new JMenuItem(tr("Add routing layer")); 53 startMI.addActionListener(new ActionListener() { 54 @Override 55 public void actionPerformed(ActionEvent e) { 56 RoutingPlugin.getInstance().addLayer(); 57 } 58 }); 49 startMI.addActionListener(e -> RoutingPlugin.getInstance().addLayer()); 59 50 menu.add(startMI); 60 51 … … 66 57 JRadioButtonMenuItem rshorter = new JRadioButtonMenuItem(tr("Shortest")); 67 58 rshorter.setSelected(true); 68 rshorter.addItemListener(new ItemListener() { 69 @Override 70 public void itemStateChanged(ItemEvent e) { 71 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 72 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 73 RoutingModel routingModel = layer.getRoutingModel(); 74 if (e.getStateChange() == ItemEvent.SELECTED) { 75 routingModel.routingGraph.setTypeRoute(RouteType.SHORTEST); 76 } else { 77 routingModel.routingGraph.setTypeRoute(RouteType.FASTEST); 78 } 79 // routingModel.routingGraph.resetGraph(); 80 // routingModel.routingGraph.createGraph(); 81 //TODO: Change this way 82 //FIXME: do not change node but recalculate routing. 83 routingModel.setNodesChanged(); 84 MainApplication.getMap().repaint(); 59 rshorter.addItemListener(e -> { 60 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 61 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 62 RoutingModel routingModel = layer.getRoutingModel(); 63 if (e.getStateChange() == ItemEvent.SELECTED) { 64 routingModel.routingGraph.setTypeRoute(RouteType.SHORTEST); 65 } else { 66 routingModel.routingGraph.setTypeRoute(RouteType.FASTEST); 85 67 } 68 // routingModel.routingGraph.resetGraph(); 69 // routingModel.routingGraph.createGraph(); 70 //TODO: Change this way 71 //FIXME: do not change node but recalculate routing. 72 routingModel.setNodesChanged(); 73 MainApplication.getMap().repaint(); 86 74 } 87 88 75 }); 89 76 … … 96 83 criteriaM.addSeparator(); 97 84 JCheckBoxMenuItem cbmi = new JCheckBoxMenuItem(tr("Ignore oneways")); 98 cbmi.addItemListener(new ItemListener() { 99 @Override 100 public void itemStateChanged(ItemEvent e) { 101 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 102 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 103 RoutingModel routingModel = layer.getRoutingModel(); 104 if (e.getStateChange() == ItemEvent.SELECTED) 105 routingModel.routingGraph.getRoutingProfile().setOnewayUse(false); 106 else 107 routingModel.routingGraph.getRoutingProfile().setOnewayUse(true); 108 routingModel.setNodesChanged(); 109 routingModel.setOnewayChanged(); 110 MainApplication.getMap().repaint(); 111 } 85 cbmi.addItemListener(e -> { 86 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 87 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 88 RoutingModel routingModel = layer.getRoutingModel(); 89 routingModel.routingGraph.getRoutingProfile().setOnewayUse(e.getStateChange() != ItemEvent.SELECTED); 90 routingModel.setNodesChanged(); 91 routingModel.setOnewayChanged(); 92 MainApplication.getMap().repaint(); 112 93 } 113 94 }); … … 117 98 menu.addSeparator(); 118 99 reverseMI = new JMenuItem(tr("Reverse route")); 119 reverseMI.addActionListener(new ActionListener() { 120 @Override 121 public void actionPerformed(ActionEvent e) { 122 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 123 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 124 RoutingModel routingModel = layer.getRoutingModel(); 125 routingModel.reverseNodes(); 126 MainApplication.getMap().repaint(); 127 } 100 reverseMI.addActionListener(e -> { 101 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 102 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 103 RoutingModel routingModel = layer.getRoutingModel(); 104 routingModel.reverseNodes(); 105 MainApplication.getMap().repaint(); 128 106 } 129 107 }); … … 131 109 132 110 clearMI = new JMenuItem(tr("Clear route")); 133 clearMI.addActionListener(new ActionListener() { 134 @Override 135 public void actionPerformed(ActionEvent e) { 136 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 137 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 138 RoutingModel routingModel = layer.getRoutingModel(); 139 // Reset routing nodes and paths 140 routingModel.reset(); 141 RoutingPlugin.getInstance().getRoutingDialog().clearNodes(); 142 MainApplication.getMap().repaint(); 143 } 111 clearMI.addActionListener(e -> { 112 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 113 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 114 RoutingModel routingModel = layer.getRoutingModel(); 115 // Reset routing nodes and paths 116 routingModel.reset(); 117 RoutingPlugin.getInstance().getRoutingDialog().clearNodes(); 118 MainApplication.getMap().repaint(); 144 119 } 145 120 }); … … 147 122 148 123 regraphMI = new JMenuItem(tr("Reconstruct Graph")); 149 regraphMI.addActionListener(new ActionListener() { 150 @Override 151 public void actionPerformed(ActionEvent e) { 152 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 153 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 154 RoutingModel routingModel = layer.getRoutingModel(); 155 routingModel.routingGraph.resetGraph(); 156 routingModel.routingGraph.createGraph(); 157 } 124 regraphMI.addActionListener(e -> { 125 if (MainApplication.getLayerManager().getActiveLayer() instanceof RoutingLayer) { 126 RoutingLayer layer = (RoutingLayer) MainApplication.getLayerManager().getActiveLayer(); 127 RoutingModel routingModel = layer.getRoutingModel(); 128 routingModel.routingGraph.resetGraph(); 129 routingModel.routingGraph.createGraph(); 158 130 } 159 131 }); -
applications/editors/josm/plugins/routing/src/com/innovant/josm/plugin/routing/gui/RoutingPreferenceDialog.java
r34554 r36085 7 7 import java.awt.Dimension; 8 8 import java.awt.GridBagLayout; 9 import java.awt.event.ActionEvent;10 import java.awt.event.ActionListener;11 9 import java.awt.event.MouseAdapter; 12 10 import java.awt.event.MouseEvent; … … 26 24 import javax.swing.table.DefaultTableModel; 27 25 28 import org.apache.log4j.Logger;26 import com.innovant.josm.jrt.osm.OsmWayTypes; 29 27 import org.openstreetmap.josm.data.Preferences; 30 28 import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting; … … 32 30 import org.openstreetmap.josm.spi.preferences.Config; 33 31 import org.openstreetmap.josm.tools.GBC; 34 35 import com.innovant.josm.jrt.osm.OsmWayTypes; 32 import org.openstreetmap.josm.tools.Logging; 36 33 37 34 public class RoutingPreferenceDialog extends DefaultTabPreferenceSetting { 38 35 39 /**40 * Logger41 */42 static Logger logger = Logger.getLogger(RoutingPreferenceDialog.class);43 36 44 37 private Map<String, String> orig; … … 81 74 p.add(Box.createHorizontalGlue(), GBC.std().fill(GBC.HORIZONTAL)); 82 75 p.add(add, GBC.std().insets(0, 5, 0, 0)); 83 add.addActionListener(new ActionListener() { 84 @Override 85 public void actionPerformed(ActionEvent e) { 86 JPanel p = new JPanel(new GridBagLayout()); 87 p.add(new JLabel(tr("Weight")), GBC.std().insets(0, 0, 5, 0)); 88 JComboBox<String> key = new JComboBox<>(); 89 for (OsmWayTypes pk : OsmWayTypes.values()) { 90 key.addItem(pk.getTag()); 91 } 92 JTextField value = new JTextField(10); 93 p.add(key, GBC.eop().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL)); 94 p.add(new JLabel(tr("Value")), GBC.std().insets(0, 0, 5, 0)); 95 p.add(value, GBC.eol().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL)); 96 int answer = JOptionPane.showConfirmDialog(gui, p, 97 tr("Enter weight values"), 98 JOptionPane.OK_CANCEL_OPTION); 99 if (answer == JOptionPane.OK_OPTION) { 100 model 101 .addRow(new String[] { 102 key.getSelectedItem().toString(), 103 value.getText() }); 104 } 76 add.addActionListener(e -> { 77 JPanel p1 = new JPanel(new GridBagLayout()); 78 p1.add(new JLabel(tr("Weight")), GBC.std().insets(0, 0, 5, 0)); 79 JComboBox<String> key = new JComboBox<>(); 80 for (OsmWayTypes pk : OsmWayTypes.values()) { 81 key.addItem(pk.getTag()); 82 } 83 JTextField value = new JTextField(10); 84 p1.add(key, GBC.eop().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL)); 85 p1.add(new JLabel(tr("Value")), GBC.std().insets(0, 0, 5, 0)); 86 p1.add(value, GBC.eol().insets(5, 0, 0, 0).fill(GBC.HORIZONTAL)); 87 int answer = JOptionPane.showConfirmDialog(gui, p1, 88 tr("Enter weight values"), 89 JOptionPane.OK_CANCEL_OPTION); 90 if (answer == JOptionPane.OK_OPTION) { 91 model 92 .addRow(new String[] { 93 key.getSelectedItem().toString(), 94 value.getText() }); 105 95 } 106 96 }); … … 108 98 JButton delete = new JButton(tr("Delete")); 109 99 p.add(delete, GBC.std().insets(0, 5, 0, 0)); 110 delete.addActionListener(new ActionListener() { 111 @Override 112 public void actionPerformed(ActionEvent e) { 113 if (list.getSelectedRow() == -1) 114 JOptionPane.showMessageDialog(gui, 115 tr("Please select the row to delete.")); 116 else { 117 Integer i; 118 while ((i = list.getSelectedRow()) != -1) { 119 model.removeRow(i); 120 } 100 delete.addActionListener(e -> { 101 if (list.getSelectedRow() == -1) 102 JOptionPane.showMessageDialog(gui, 103 tr("Please select the row to delete.")); 104 else { 105 int i; 106 while ((i = list.getSelectedRow()) != -1) { 107 model.removeRow(i); 121 108 } 122 109 } … … 125 112 JButton edit = new JButton(tr("Edit")); 126 113 p.add(edit, GBC.std().insets(5, 5, 5, 0)); 127 edit.addActionListener(new ActionListener() { 128 @Override 129 public void actionPerformed(ActionEvent e) { 130 edit(gui, list); 131 } 132 }); 114 edit.addActionListener(e -> edit(gui, list)); 133 115 134 JTabbedPane Opciones = new JTabbedPane();135 Opciones.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT);116 JTabbedPane options = new JTabbedPane(); 117 options.setComponentOrientation(ComponentOrientation.LEFT_TO_RIGHT); 136 118 137 Opciones.addTab("Profile", null, p, null);138 // Opciones.addTab("Preferences", new JPanel());119 options.addTab("Profile", null, p, null); 120 // options.addTab("Preferences", new JPanel()); 139 121 140 122 list.addMouseListener(new MouseAdapter() { … … 145 127 }); 146 128 147 principal.add( Opciones, GBC.eol().fill(GBC.BOTH));129 principal.add(options, GBC.eol().fill(GBC.BOTH)); 148 130 149 131 } … … 184 166 readPreferences(); 185 167 // Put these values in the model 186 for ( String tag: orig.keySet()) {187 model.addRow(new String[] { tag, orig.get(tag)});168 for (Map.Entry<String, String> entry : orig.entrySet()) { 169 model.addRow(new String[] {entry.getKey(), entry.getValue()}); 188 170 } 189 171 } … … 192 174 orig = Preferences.main().getAllPrefix("routing.profile.default.speed"); 193 175 if (orig.size() == 0) { // defaults 194 logger.debug("Loading Default Preferences.");176 Logging.trace("Loading Default Preferences."); 195 177 for (OsmWayTypes owt : OsmWayTypes.values()) { 196 178 Config.getPref().putInt("routing.profile.default.speed." … … 198 180 } 199 181 orig = Preferences.main().getAllPrefix("routing.profile.default.speed"); 200 } else logger.debug("Default preferences already exist.");182 } else Logging.trace("Default preferences already exist."); 201 183 } 202 184 /*
Note:
See TracChangeset
for help on using the changeset viewer.