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);
    }

}
War es hilfreich?

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

http://svn.openstreetMap.Org / Anwendungen / Viewer / JMAPViewer / Releases / 2011-02-19 / JMAPViewer.zip

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.

einfach und elegant.Alles, was Sie brauchen, sind einige Osm-Fliesen, die lokal gespeichert sind, die ich davon ausnommen, dass Sie bereits haben.

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;

http://josm.openstreetmap.de/doc/Org / OpenStreetMap / GUI / JMAPViewer / OsmFilecachetileloader.html

Es ist super einfach zu bedienen. generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top