001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.io.importexport;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.io.File;
007import java.io.IOException;
008import java.io.Writer;
009import java.nio.charset.StandardCharsets;
010import java.nio.file.Files;
011
012import org.openstreetmap.josm.actions.ExtensionFileFilter;
013import org.openstreetmap.josm.data.osm.DataSet;
014import org.openstreetmap.josm.gui.layer.Layer;
015import org.openstreetmap.josm.gui.layer.OsmDataLayer;
016import org.openstreetmap.josm.io.GeoJSONWriter;
017
018/**
019 * Exporter to write map data to a GeoJSON file.
020 * @since 4886
021 */
022public class GeoJSONExporter extends FileExporter {
023
024    /** File extension filter for .geojson files */
025    public static final ExtensionFileFilter FILE_FILTER = new ExtensionFileFilter(
026            "geojson,json", "geojson", tr("GeoJSON Files") + " (*.geojson *.json)");
027
028    /**
029     * Constructs a new {@code GeoJSONExporter} with WGS84 projection.
030     */
031    public GeoJSONExporter() {
032        super(FILE_FILTER);
033    }
034
035    @Override
036    public void exportData(File file, Layer layer) throws IOException {
037        if (layer instanceof OsmDataLayer) {
038            DataSet data = ((OsmDataLayer) layer).data;
039            try (Writer out = Files.newBufferedWriter(file.toPath(), StandardCharsets.UTF_8)) {
040                new GeoJSONWriter(data).write(true, out);
041            }
042        } else {
043            throw new IllegalArgumentException(tr("Layer ''{0}'' not supported", layer.getClass().toString()));
044        }
045    }
046}