All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.osmdroid.mtp.ui.OSMMapTilePackagerUI Maven / Gradle / Ivy

There is a newer version: 6.1.20
Show newest version
// Created by plusminus on 11:39:40 AM - Apr 8, 2009
package org.osmdroid.mtp.ui;

import org.osmdroid.mtp.OSMMapTilePackager;

import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URI;

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class OSMMapTilePackagerUI extends JFrame {
    // ===========================================================
    // Constants
    // ===========================================================

    private static final long serialVersionUID = 749039680990304151L;

    // ===========================================================
    // Fields
    // ===========================================================
    private final JPanel mainPanel;
    private final JLabel lblURL = new JLabel("URL:");

    private final JLabel lblDestination = new JLabel("Destination File (.zip, .gemf, or .sqlite):");
    private final JTextField txtDestination = new JTextField();
    private final JButton cmdDestinationBrowse = new JButton("Browse");
    private final JLabel lblTempFolder = new JLabel("Temp-Folder (and tile source name):");
    private final JTextField txtTempFolder = new JTextField();
    private final JButton cmdTempFolderBrowse = new JButton("Browse");
    private final JTextField txtURL = new JTextField("https://b.tile.openstreetmap.org/%d/%d/%d.png");
    private final JButton cmdURLTest = new JButton("Test");

    private final JButton cmdExecute = new JButton("Execute");

    private final JLabel lblMinZoom = new JLabel("MinZoom:");
    private final JLabel lblMaxZoom = new JLabel("MaxZoom:");
    private final JSlider sliMinZoom = new JSlider();
    private final JSlider sliMaxZoom = new JSlider();

    private final JLabel lblNorth = new JLabel("North:");
    private final JTextField txtNorth = new JTextField();

    private final JLabel lblEast = new JLabel("East:");
    private final JTextField txtEast = new JTextField();

    private final JLabel lblSouth = new JLabel("South:");
    private final JTextField txtSouth = new JTextField();

    private final JLabel lblWest = new JLabel("West:");
    private final JTextField txtWest = new JTextField();

    private final JLabel lblFileAppendix = new JLabel("FileAppendix:");
    private final JTextField txtFileAppendix = new JTextField("");
    private final JCheckBox chkForce = new JCheckBox("Force");
    private final JLabel lblForce = new JLabel("(Will not ask on problems.)");
    private final JLabel lblStatus = new JLabel("Status:");

    // ===========================================================
    // Constructors
    // ===========================================================
    public static void main(final String[] args) {
        final JFrame j = new OSMMapTilePackagerUI();
        j.setPreferredSize(new Dimension(640, 400));
        j.setDefaultCloseOperation(EXIT_ON_CLOSE);
        j.pack();
        j.setVisible(true);
    }

    public OSMMapTilePackagerUI() {
        mainPanel = new JPanel();
        this.add(this.mainPanel);
        final GridBagLayout gbpanel0 = new GridBagLayout();
        final GridBagConstraints gbcpanel0 = new GridBagConstraints();
        mainPanel.setLayout(gbpanel0);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 0;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblURL, gbcpanel0);
        mainPanel.add(lblURL);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 1;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblDestination, gbcpanel0);
        mainPanel.add(lblDestination);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 1;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtDestination, gbcpanel0);
        mainPanel.add(txtDestination);

        gbcpanel0.gridx = 2;
        gbcpanel0.gridy = 1;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(cmdDestinationBrowse, gbcpanel0);
        cmdDestinationBrowse.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                final JFileChooser jfc = new JFileChooser();
                jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
                jfc.setAcceptAllFileFilterUsed(true);

                final int result = jfc.showSaveDialog(null);
                if (result == JFileChooser.APPROVE_OPTION) {
                    final String absolutePath = jfc.getSelectedFile().getAbsolutePath();
                    if (absolutePath.endsWith(".zip")) {
                        txtDestination.setText(absolutePath);
                    } else {
                        txtDestination.setText(absolutePath + ".zip");
                    }
                }
            }
        });
        mainPanel.add(cmdDestinationBrowse);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 2;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblTempFolder, gbcpanel0);
        mainPanel.add(lblTempFolder);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 2;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtTempFolder, gbcpanel0);
        mainPanel.add(txtTempFolder);

        gbcpanel0.gridx = 2;
        gbcpanel0.gridy = 2;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(cmdTempFolderBrowse, gbcpanel0);
        cmdTempFolderBrowse.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                final JFileChooser jfc = new JFileChooser();
                jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
                jfc.setAcceptAllFileFilterUsed(false);

                final int result = jfc.showSaveDialog(null);
                if (result == JFileChooser.APPROVE_OPTION) {
                    txtTempFolder.setText(jfc.getSelectedFile().getAbsolutePath());
                }
            }
        });
        mainPanel.add(cmdTempFolderBrowse);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 0;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtURL, gbcpanel0);
        mainPanel.add(txtURL);

        gbcpanel0.gridx = 2;
        gbcpanel0.gridy = 0;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(cmdURLTest, gbcpanel0);
        cmdURLTest.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                if (Desktop.isDesktopSupported()) {
                    try {
                        Desktop.getDesktop().browse(new URI(String.format(txtURL.getText(), 0, 0, 0)));
                    } catch (final Throwable t) {
                        t.printStackTrace();
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Could not open browser.");
                }
            }
        });
        mainPanel.add(cmdURLTest);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 3;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblMinZoom, gbcpanel0);
        mainPanel.add(lblMinZoom);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 4;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblMaxZoom, gbcpanel0);
        mainPanel.add(lblMaxZoom);

        sliMinZoom.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                lblMinZoom.setText("MinZoom: (" + sliMinZoom.getValue() + ")");
            }
        });
        sliMinZoom.setMinimum(0);
        sliMinZoom.setMaximum(22);
        sliMinZoom.setMajorTickSpacing(1);
        sliMinZoom.setMinorTickSpacing(1);
        sliMinZoom.setValue(0);
        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 3;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(sliMinZoom, gbcpanel0);
        mainPanel.add(sliMinZoom);

        sliMaxZoom.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                lblMaxZoom.setText("MaxZoom: (" + sliMaxZoom.getValue() + ")");
            }
        });
        sliMaxZoom.setMaximum(22);
        sliMaxZoom.setMinimum(0);
        sliMaxZoom.setValue(10);
        sliMaxZoom.setMajorTickSpacing(1);
        sliMaxZoom.setMinorTickSpacing(1);
        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 4;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(sliMaxZoom, gbcpanel0);
        mainPanel.add(sliMaxZoom);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 5;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblNorth, gbcpanel0);
        mainPanel.add(lblNorth);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 5;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtNorth, gbcpanel0);
        txtNorth.setText("90.0");
        mainPanel.add(txtNorth);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 6;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblEast, gbcpanel0);
        mainPanel.add(lblEast);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 6;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtEast, gbcpanel0);
        txtEast.setText("180.0");
        mainPanel.add(txtEast);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 7;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblSouth, gbcpanel0);
        mainPanel.add(lblSouth);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 7;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtSouth, gbcpanel0);
        txtSouth.setText("-90.0");
        mainPanel.add(txtSouth);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 9;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblFileAppendix, gbcpanel0);

        mainPanel.add(lblFileAppendix);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 8;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtWest, gbcpanel0);
        txtWest.setText("-180.0");
        mainPanel.add(txtWest);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 8;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 0;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblWest, gbcpanel0);
        mainPanel.add(lblWest);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 9;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(txtFileAppendix, gbcpanel0);

        mainPanel.add(txtFileAppendix);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 10;
        gbcpanel0.gridwidth = 1;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(chkForce, gbcpanel0);
        mainPanel.add(chkForce);

        gbcpanel0.gridx = 1;
        gbcpanel0.gridy = 10;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblForce, gbcpanel0);
        mainPanel.add(lblForce);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 11;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(cmdExecute, gbcpanel0);
        mainPanel.add(cmdExecute);

        gbcpanel0.gridx = 0;
        gbcpanel0.gridy = 12;
        gbcpanel0.gridwidth = 2;
        gbcpanel0.gridheight = 1;
        gbcpanel0.fill = GridBagConstraints.BOTH;
        gbcpanel0.weightx = 1;
        gbcpanel0.weighty = 0;
        gbcpanel0.anchor = GridBagConstraints.NORTH;
        gbpanel0.setConstraints(lblStatus, gbcpanel0);
        mainPanel.add(lblStatus);

        cmdExecute.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(final ActionEvent e) {
                //TODO validate user input
                //Start the process
                final double north = Double.parseDouble(txtNorth.getText());
                final double south = Double.parseDouble(txtSouth.getText());
                final double east = Double.parseDouble(txtEast.getText());
                final double west = Double.parseDouble(txtWest.getText());
                final int minzoom = sliMinZoom.getValue();
                final int maxzoom = sliMaxZoom.getValue();
                final String url = txtURL.getText();
                final String destination = txtDestination.getText();
                final String temp = txtTempFolder.getText();
                final String appendix = txtFileAppendix.getText();
                final int threads = Runtime.getRuntime().availableProcessors();

                final int count = OSMMapTilePackager.runFileExpecter(minzoom, maxzoom, north, south, east, west);

                int dialogButton = JOptionPane.showConfirmDialog(null, "This will download " + count + " tiles. OK?", "Warning", JOptionPane.YES_NO_OPTION);

                if (dialogButton == JOptionPane.YES_OPTION) {
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            OSMMapTilePackager.execute(url, destination, temp, threads, appendix, minzoom, maxzoom, north, south, east, west, new OSMMapTilePackager.ProgressNotification() {
                                @Override
                                public void updateProgress(String msg) {
                                    lblStatus.setText(msg);
                                }
                            });

                            int dialogButton2 = JOptionPane.showConfirmDialog(null, "All done, do you want delete the tile cache?", "Warning", JOptionPane.YES_NO_OPTION);

                            if (dialogButton2 == JOptionPane.YES_OPTION) {
                                OSMMapTilePackager.runCleanup(temp, false);

                            }
                            lblStatus.setText("Done");
                        }
                    }).start();

                }
            }
        });

    }

    // ===========================================================
    // Getter & Setter
    // ===========================================================
    // ===========================================================
    // Methods from SuperClass/Interfaces
    // ===========================================================
    // ===========================================================
    // Methods
    // ===========================================================
    // ===========================================================
    // Inner and Anonymous Classes
    // ===========================================================
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy