Wegpunkte mit JXMapKit zeichnen

Im Artikel “Erste Schritte mit JavaX JXMapKit” habe ich schon kurz beschrieben, wie man mit NetBeans und SwingX-WS schnell und einfach eine Kartendarestllung á la GoogleMaps in Java bauen kann.

Wenn man nicht nur eine Karte anzeigen sondern auch Punkte einzeichnen will, hat man die Möglichkeiten, per jXMapKit.setAddressLocation(new GeoPosition(lat, lon)); die Koordinaten setzen, zeichnen und die Karte dorthin zentrieren. Allerdings wird die Karte damit auch immer gleich zentriert und vor allem kann man nur einen einzelnen Punkt setzen.

Mehrere Wegpunkte setzt man mithilfe des WaypointPainters:

Set set = new HashSet();
WaypointPainter waypointPainter = new WaypointPainter();
waypointPainter.setWaypoints(set);
set.add(new Waypoint(47.76098, 11.55932));
jXMapKit.getMainMap().setOverlayPainter(waypointPainter);
repaint();

Das repaint() am Ende sollte immer erfolgen, wenn neue Punkte in das Set gesetzt werden, damit die Änderung auch sofort sichtbar ist. Andernfalls muss man die Karte etwas verschieben um ein repaint zu erzwingen. Will man jetzt noch die Darstellung der Wegpunkte verändern, muss man sich noch mit dem WaypointRenderer beschäftigen.

8 thoughts on “Wegpunkte mit JXMapKit zeichnen”

  1. Hallo,

    zuerst einmal vielen Dank über deine gut verständlichen Ausführungen bezüglich des Umgangs mit dem JXMapViewer. Zurzeit entwickle ich an einer JavaDesktopapplikation mit einer Mapfunktion. Auf dieser Map sollen dem Anwender unterschiedliche und viele Wegpunkte angezeigt werden, die in einer Datenbank hinterlegt sind. Das klappt auch alles soweit, allerdings ist mir aufgefallen, dass
    1. nicht alle 200 Einträge der Datenbank angezeigt werden und
    2. es immer unterschiedlich ist, welcher WP angezeigt wird und welcher nicht.
    Fehlermeldungen bleiben aus. Die WPS’s lese ich in eine List ein und schiebe sie anschließend nochmal mit einem besonderen Icon in ein HashSet. Durch Probeausgaben komme ich leider auch nicht weiter, am Ende des ganzen Vorgangs befinden sich trotzdem noch alle WP’s in der Liste. Änderungen im Zoomlevel haben auch nichts gebracht. Sobald ich die Karte einfach erneut aufrufe werden wir andere WP’s angezeigt. Ist dir eventuell eine maximale Anzahl von WP’s bekannt? Im Internet konnte ich zu diesem Problem leider rein gar nichts finden..

    LG und schon einmal Danke

    1. Hi,
      nein soetwas ist mir nicht bekannt. Ich würde folgendes checken:

      1. wieviele WPs sollen gezeichnet werden.
      2. Sind die WPs auch alle in dem HashSet (HashSet vs. Liste?)
      3. Werden diese WPs im entsprechenden Painter alle gezeichnet?
      4. Ja: werde sie übereinander oder ausserhalb des Viewports gezeichnet? Werden die Objekte verändert?
      5. Nein: irgendjemand verändert das Hashset. Entweder prüfen wo noch schreibende Zugriffe herkommen oder das HashSet ersetzen durch Collections.unmodifiable….

      Happy debugging.

  2. Hi,
    danke für den kurzen einblick in die Punkterstellung, war sehr hilfreich und läuft bei mir jetzt auch, nur frag ich mich gerade ob man mit JXMapkit auch genrell verschiedne arten von wegpunkten bauen kann, also neben diesen mit dem Blauen Zeiger noch andere “Modele” etc, würd ja in der Doku schauen aber die Seite is ja leider grade nicht erreichbar wo die Doku steht. kurz als randinfo wir sollen fürs Studium eine Wanderapp bauen und müssen dafür halt au verschiedene arten von Wegpunkten festlegen, ATM sind wir aber erstmal am Desktop teil der App.
    danke schonmal

    1. org.jdesktop.swingx.mapviewer.WaypointPainter könnte dir helfen.
      Eine Alternative könnte die Map-Komponente von JOSM sein – die muss man aber evtl erst extrahieren.
      Oder eine Webview mit OpenLayers zur Anzeige.
      Richtig glücklich bin ich jedenfalls mit JXMapkit auch nicht.

  3. Hi, vielen Dank für die Tutorials mit dem JXMapKit. Ich habe allerdings noch eine Frage, ich weiß jedoch nicht, ob sie hier an der richtigen Stelle ist. Oben wir auf ein “repaint()” eingegangen. Kurz zur Beschreibung meines Problems. Ich schreibe gerade eine Java Anwendung, welche einfache Wegpunkte anzeigen soll. Diese Wegpunkte habe ich mit dem “WaypointRenderer” für meine Zwecke passend dargestellt. Soweit funktioniert auch alles. Ein Problem gibt es jedoch noch, nämlich wenn ich rein oder raus zomme, werden die Wegpunkte an der falschen Position gezeichnet. Erst wenn ich die Karte mit der Maus wieder bewege werden sie wieder an der richtigen Stelle gezeichnet. Ich habe schon alles Mögliche probiert, jedoch finde ich keine Lösung für dieses Problem.
    Vielen Dank im Vorraus

    1. Uff, ist natürlich so leicht nicht zu sagen, was hier das Problem ist ohne den Code live zu haben.
      Klingt irgendwie nach einem klassischen repaint-problem.
      Wenn du irgendwo zoom/move-events abfängst und verarbeitest kann das der Grund sein. Ansonsten könntest du nur mal versuchen zu debuggen oder einen ganz einfachen Fall erstellen, bei dem das Problem auftritt.

    1. Das kommt drauf an.
      Ich hatte den Code in der Swing Komponente, in der auch die Map instanziert und verwendet wird.
      Du brauchst ja nur Zugriff auf das jxMapkit. Das repaint() muss nur auf der Swing Komponente ausgeführt werden.

Leave a Reply

Your email address will not be published.