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}