package com.revolsys.record.io.format.geojson; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.util.Arrays; import java.util.LinkedHashSet; import java.util.Set; import java.util.TreeSet; import com.revolsys.geometry.io.GeometryReader; import com.revolsys.io.FileUtil; import com.revolsys.record.io.GeometryRecordReaderFactory; import com.revolsys.record.io.RecordWriter; import com.revolsys.record.io.RecordWriterFactory; import com.revolsys.record.io.format.cogojson.CogoJson; import com.revolsys.record.schema.RecordDefinition; import com.revolsys.spring.resource.Resource; public class GeoJson extends GeometryRecordReaderFactory implements RecordWriterFactory { public static final String COORDINATES = "coordinates"; public static final String CRS = "crs"; public static final String EPSG = "EPSG:"; public static final String FEATURE = "Feature"; public static final String FEATURE_COLLECTION = "FeatureCollection"; public static final String FEATURES = "features"; public static final String GEOMETRIES = "geometries"; public static final String GEOMETRY = "geometry"; public static final String GEOMETRY_COLLECTION = "GeometryCollection"; public static final String LINE_STRING = "LineString"; public static final String MULTI_LINE_STRING = "MultiLineString"; public static final String MULTI_POINT = "MultiPoint"; public static final String MULTI_POLYGON = "MultiPolygon"; public static final String NAME = "name"; public static final String POINT = "Point"; public static final String POLYGON = "Polygon"; public static final String PROPERTIES = "properties"; public static final String TYPE = "type"; public static final String URN_OGC_DEF_CRS_EPSG = "urn:ogc:def:crs:EPSG::"; public static final Set<String> GEOMETRY_TYPE_NAMES = new LinkedHashSet<>( Arrays.asList(POINT, LINE_STRING, POLYGON, MULTI_POINT, MULTI_LINE_STRING, MULTI_POLYGON, GEOMETRY_COLLECTION, CogoJson.COGO_LINE_STRING, CogoJson.COGO_MULTI_LINE_STRING, CogoJson.COGO_POLYGON, CogoJson.COGO_MULTI_POLYGON)); public static final Set<String> OBJECT_TYPE_NAMES = new TreeSet<>( Arrays.asList(FEATURE, FEATURE_COLLECTION, POINT, LINE_STRING, POLYGON, MULTI_POINT, MULTI_LINE_STRING, MULTI_POLYGON, GEOMETRY_COLLECTION)); public GeoJson() { super("GeoJSON"); addMediaTypeAndFileExtension("application/vnd.geo+json", "geojson"); addMediaType("application/x-geo+json"); } @Override public boolean isReadFromZipFileSupported() { return true; } @Override public GeometryReader newGeometryReader(final Resource resource) { final GeoJsonGeometryReader iterator = new GeoJsonGeometryReader(resource); return iterator; } @Override public RecordWriter newRecordWriter(final String baseName, final RecordDefinition recordDefinition, final OutputStream outputStream, final Charset charset) { final OutputStreamWriter writer = FileUtil.newUtf8Writer(outputStream); return new GeoJsonRecordWriter(writer, recordDefinition); } }