JMapViewer fügt Kacheln für die Offline-Ansicht hinzu
-
11-12-2019 - |
Frage
Hallo, ich verwende dieses Beispiel in Java, um zu versuchen, OpenStreetMaps-Offline-Kacheln zu laden.
zum Beispiel habe ich meine Kacheln auf C:/OSM/tiles/
Ich muss jedoch wissen, wie ich diese Informationen in der Kartenklasse (JMapViewer) hinzufügen kann, um Kacheln lokal zu laden.
Vielen Dank für Ihre Hilfe. Dies ist meine Quelle:
//License: GPL. Copyright 2008 by Jan Peter Stotz
import org.openstreetmap.gui.jmapviewer.JMapViewer;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
*
* Demonstrates the usage of {@link JMapViewer}
*
* @author Jan Peter Stotz
*
*/
public class Demo extends JFrame {
public Demo() {
super("JMapViewer Demo");
setSize(400, 400);
final JMapViewer map = new JMapViewer();
setLayout(new BorderLayout());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setExtendedState(JFrame.MAXIMIZED_BOTH);
JPanel panel = new JPanel();
add(panel, BorderLayout.NORTH);
final JCheckBox showMapMarker = new JCheckBox("Map markers visible");
showMapMarker.setSelected(map.getMapMarkersVisible());
showMapMarker.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setMapMarkerVisible(showMapMarker.isSelected());
}
});
panel.add(showMapMarker);
final JCheckBox showTileGrid = new JCheckBox("Tile grid visible");
showTileGrid.setSelected(map.isTileGridVisible());
showTileGrid.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setTileGridVisible(showTileGrid.isSelected());
}
});
panel.add(showTileGrid);
final JCheckBox showZoomControls = new JCheckBox("Show zoom controls");
showZoomControls.setSelected(map.getZoomContolsVisible());
showZoomControls.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
map.setZoomContolsVisible(showZoomControls.isSelected());
}
});
panel.add(showZoomControls);
add(map, BorderLayout.CENTER);
//
// map.addMapMarker(new MapMarkerDot(49.814284999, 8.642065999));
// map.addMapMarker(new MapMarkerDot(49.91, 8.24));
// map.addMapMarker(new MapMarkerDot(49.71, 8.64));
// map.addMapMarker(new MapMarkerDot(48.71, -1));
// map.addMapMarker(new MapMarkerDot(49.807, 8.644));
map.setDisplayPositionByLatLon(-0.223056, -78.5126, 11);
}
/**
* @param args
*/
public static void main(String[] args) {
new Demo().setVisible(true);
}
}
Lösung 3
i Kompilieren Sie direkt von der Quelle direkt und wechseln Sie
\ \ org \ openstreetmap \ gui \ jmapviewer \ triechenoursources \ abstractosmtilesource.java
Hier ist der Quellcode in jmapviewer.zip/jmapviewer_src.jar Extrahieren der JAR-Datei und kopieren Sie den Ordner / Org in den Ordner E-Mail-Code-Ordner
und ändern Sie die nächste generasacodicetagpre.
Andere Tipps
Eine viel bessere Alternative, die keine Änderung von JMAPViewer und neu kompilieren muss, ist, Ihre eigene TLIEBEURCE-Implementierung bereitzustellen, wie gezeigt hier .
packen Sie den offlineosmtilesource und verwenden Sie es, wie der Blog-Beitrag sagt.
Soweit ich mich erinnere, ist JMapViewer nur für die Verwendung von Online-Karten konzipiert.
Dieses Verhalten zu ändern scheint kompliziert zu sein.Vielleicht können Sie dies erreichen, indem Sie Ihre eigenen implementieren org.openstreetmap.gui.jmapviewer.TileLoader
Beispiel.Die Implementierung muss lediglich in der Lage sein, Runnable-Instanzen zu erstellen, die eine bestimmte Kachel in den TileCache laden und den registrierten TileLoaderListener darüber informieren, dass das Laden einer Kachel abgeschlossen ist.
Ich habe keine Ahnung, ob dieser Ansatz nicht unterstützt wurde, wenn dieser Thread passiert ist, aber zum Zwischenspeichern von Offline-Fliesen bieten sie OsmFilecachetileloader;
Es ist super einfach zu bedienen. generasacodicetagpre.