-->

JMapViewer ADD瓷砖用于脱机查看(JMapViewer ADD tiles for of

2019-09-17 08:37发布

你好,我使用此示例中的Java,试图加载开放街道地图离线瓷砖,

比如我有基于C我的瓷砖:/ OSM /瓷砖/

但我需要知道如何添加在地图(JMapViewer)类信息在本地加载瓷砖。

非常感谢您的帮助,这是我的源:

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

}

Answer 1:

一个更好的替代方案,不需要修改JMapViewer和重新编译它提供自己的TileSource实现,如图所示这里 。

抓住OfflineOsmTileSource ,而像博客文章说使用它。

古朴典雅。 所有你需要的是本地存储的一些OSM瓦片,我以为你已经离开。



Answer 2:

至于我记得JMapViewer设计为仅使用在线地图的工作。

改变这种行为接缝复杂。 可能是你可以通过实现自己实现这个org.openstreetmap.gui.jmapviewer.TileLoader实例。 实现只需要能够创建加载一个特定的瓷砖进入TileCache并告知注册TileLoaderListener那瓦装载完成运行实例。



Answer 3:

我编译通过直接的来源和变化

\组织\ OpenStreetMap的\ GUI \ jmapviewer \ tilesources \ AbstractOsmTileSource.java

这里是内部JMapViewer.zip/JMapViewer_src.jar的源代码解压JAR文件,并在邮件源代码文件夹复制文件夹/组织

http://svn.openstreetmap.org/applications/viewer/jmapviewer/releases/2011-02-19/JMapViewer.zip

并改变未来

 public AbstractOsmTileSource(String name, String base_url, String attr_img_url) {
        this.name = name;
     // this.baseUrl = base_url;
        this.baseUrl = "file:///C:/OSM/tiles";
        attrImgUrl = attr_img_url;
    }


Answer 4:

我不知道,如果这种做法是不支持背部,当此线程发生的事情,但对于缓存离线图块他们提供OsmFileCacheTileLoader;

http://josm.openstreetmap.de/doc/org/openstreetmap/gui/jmapviewer/OsmFileCacheTileLoader.html

这是超级好用。

this.mapViewer = new JMapViewer();
OsmFileCacheTileLoader ofctl;
try {
    File cacheDir = new File(System.getProperty("user.home"), "OpenStreetMapTileCache");
    logger.info("Home Directory = " + System.getProperty("user.home") + ", cacheDir=" + cacheDir);
    cacheDir.mkdirs();
    ofctl = new OsmFileCacheTileLoader(mapViewer, cacheDir);
    this.mapViewer.setTileLoader(ofctl);
} catch (IOException ex) {
    Logger.getLogger(MapDisplayPanel.class.getName()).log(Level.SEVERE, "Exception creating OsmFileCacheTileLoader" + ex, ex);
}


文章来源: JMapViewer ADD tiles for offline view