OpenStreetMap in Java-Anwendungen
Im Moment arbeite ich mit einem Kommilitonen an einem Projekt, bei dem wir das Problem des Handlungdreisenden (TSP) mit einem genetischen Algorithmus bearbeiten. Als Visualisierung finde ich OpenStreetMap ganz schick! Bei der Suche nach einer Bibliothek oder etwas ähnlichem, bin ich sehr schnell auf die SwingLabs aufmerksam geworden, die mit JXMapKit eine Swing Componente bereitstellt, die bereits eine scrollbare Karte und viele weitere Funktionen breit stellt.

Der folgende Code ware für die Realisiernug auf dem obigen Screenshot ausreichend. Damit das Beispiel ausgeführt werden kann, werden die zwei Libraries swingx.jar und swingx-ws.jar benötigt, die sich im Downloadbereich der SwingLabs finden.
import javax.swing.JFrame;
import org.jdesktop.swingx.JXMapKit;
import org.jdesktop.swingx.JXMapKit.DefaultProviders;
public class MapFrame extends JFrame {
public MapFrame() {
setTitle("Cool Map Frame");
JXMapKit mapKit = new JXMapKit();
mapKit.setDefaultProvider(DefaultProviders.OpenStreetMaps);
mapKit.setDataProviderCreditShown(true);
mapKit.setVisible(true);
/* Markierung immer an aktuelle Mouse-Position setzen */
mapKit.getMainMap().addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent evt) {
mapKit.setAddressLocation((mapKit.getMainMap().convertPointToGeoPosition(evt.getPoint())));
}
});
add(mapKit);
}
public static void main ( String [] args ) {
MapFrame mf = new MapFrame();
mf.setVisible(true);
mf.pack();
}
}
Hoffentlich hilft dieses keinst Beispiel anderen Interessierten, die nach einem ersten kleinen Einstieg gesucht haben. Übrigens bietet MapKit auch die möglichkeit andere Dienste als OpenStreetMap einzubinden. Darauf werde ich aber nicht weiter eingehen.
Übrigens beendete Softonaut.com (offline) meine lange Suche nach einem einfachen ausführbaren Beispiel. Dort finden sich auch noch weitere Beispiele, um z.B. Routen anzuzeigen usw. Danke!
[EDIT] Nachdem der Softonaut im Moment (08.09) offline ist, findet sich ein von mir geschriebenes Beispiel in einem seperaten Artikel.
Hallo Timo,
schön mal noch jemanden zu finden, der sich auch mit dem JXMapKit auseinandersetzt.
Ich wollte mal nachfragen, ob du dich etwas mit der Verarbeitung von Mouse-Eingaben auf der Karte beschäftigst hat. Momentan habe ich das Problem, dass ich mehrere Polygone auf der Karte habe, diese aber nicht anklicken kann, da man auf einen Painter kein addMouseListener() anwenden kann. Hattest du mal ein ähnliches Problem?
mfg Daniel
Vieleicht solltest du die Flächen ausserhalb von dem Painter halten. Dann kannst du einen MouseListener zur MainMap hinzufügen. Die Position der Maus kannst du dir dann von den Fensterkoordinaten in die Kartenkoordinaten umgrechnen und darauf aufbauend dann eben dein Polygon bestimmen.
public void mouseClicked(MouseEvent e) {
mapKit.getMainMap().convertPointToGeoPosition(e.getPoint())));
}
In den nächsten Tagen veröffentliche ich hier ein Video mit der fertigen Anwendung und werde dann auch etwas Source-Code nachschieben. Vieleicht hilft dir der dann.
Grüße
Vielen Dank schonmal.
Ich melde mich mal, wenn ich es hinkommen habe.
Hallo Timo,
auch von meiner Seite vielen Dank. Du machst mir Mut, es als Newbie mal
mit MapApplikationen zu versuchen.
Gruß
Dieter
Hallo Timo,
bin noch mal zu deiner Seite zurückgekommen, weil ich den Softonaut – Link nicht notiert hatte.
Offensichtlich ist aber der Link nicht mehr zu erreichen. Irgendeine Idee?
Dieter
Ja! Habe gerade einen entsprechenden Artiken dazu verfasst.
Viel Spaß damit
Timo
Track’n'Mash: Openstreetmap Karten in Java/Swing mit JXMapViewer…
Technologien und Services zur Darstellung und Integration von Karten in Applikationen, haben sich in den letzten Jahren stark verbreitet. Neben dem Platzhirsch Google Maps gibt es u.a. noch Yahoo! Maps oder Bing Maps (früher Windows Live Maps).
Die dre…