Start Dijkstra Shortest Path using JMapViewer
As mentioned in the last post to JMapViewer, I want to show you how to start the Dijkstra shortest path algorithm using JMapViewer. Based on this Gist, I will briefly explain how to call Dijkstra and visualise the shortest path.
In fact, you just have to add the following code to connect your JMapViewer instance to your Graph:
map().addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
map().getAttribution().handleAttribution(e.getPoint(), true);
ICoordinate position = map().getPosition(e.getPoint());
// save point by using:
// position.getLat();
// position.getLon();
// add a map marker to the map
map().addMapMarker(new MapMarkerDot(position.getLat(), position.getLon()));
if (...) {
// if you have saved two points, then call your Dijkstra
// dijkstra.getShortestPath(startPoint, endPoint);
List shortestPath = ; // get list of single nodes between start and end point from dijkstra
Layer routeLayer = new Layer("Name of your path, so you can hide it later in the map.");
for (Node node : shortestPath) {
// add a marker for each point, so you can visualise the shortest path
MapMarkerDot marker = new MapMarkerDot(routeLayer, node.getLat(), node.getLon());
map().addMapMarker(marker);
}
}
}
}
});
-
Line 1: Adding a mouse listener listens for every mouse click
-
Line 4: This line checks that the left mouse has been clicked.
-
Line 5-6: Now you have to retrieve the position of the mouse click.
-
Line 9-10: With the position, you can get latitude or longitude values. You should store these position information somewhere, e.g. in a class property.
-
Line 13: In order to support the users view, you should add a MapMarker to the map. This shows the user where he has clicked.
-
Line 15: If you have stored two points (i.e a user has clicked twice), then you can forward your points to Dijkstra.
-
Line 17: Calling Dijkstra is done within the if-body.
-
Line 21-26: If you have retrieved a shortest path, you should the single nodes (points) of the path in the map. This can be established by iterating through the node list and adding a MapMarker for each node.
Thatโs it. Very easy. If you have used a Layer for the path nodes, you can easily show/hide the path in your map. Just (un-)select the layer in your application.
Related Articles
Set up JMapViewer for OSM data
Set up JMapViewer for OpenStreetMap data in Java Swing applications. Add Maven dependencies, configure map tiles, and implement mouse interactions for map markers.

Using Spring Boot On AWS Lambda: Clever or Dumb?
Should you run Spring Boot on AWS Lambda? Detailed analysis of advantages, disadvantages, cold start impact, and GraalVM alternatives for Java serverless functions.

Using DynamoDB Local and Testcontainers in Java within Bitbucket Pipelines
Automate DynamoDB testing with Testcontainers and DynamoDB Local in Bitbucket Pipelines. Complete setup guide including Ryuk configuration and AWS SDK settings.

Visiting JavaLand 2019
JavaLand 2019 key takeaways: microservices transactions with SAGA pattern, Domain Driven Design principles, and Web API design best practices for Java developers.