Package org.openstreetmap.josm.io
Class GeoJSONReader
- java.lang.Object
-
- org.openstreetmap.josm.io.AbstractReader
-
- org.openstreetmap.josm.io.GeoJSONReader
-
public class GeoJSONReader extends AbstractReader
Reader that reads GeoJSON files. See RFC7946 for more information.- Since:
- 15424
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.openstreetmap.josm.io.AbstractReader
AbstractReader.CommonReader, AbstractReader.NodeReader, AbstractReader.ParserWorker, AbstractReader.RelationReader, AbstractReader.WayReader
-
-
Field Summary
Fields Modifier and Type Field Description private static String
COORDINATES
private static String
CRS
private static String
FEATURES
private static String
GEOMETRY
private static String
LINK
private static String
NAME
private Projection
projection
private static String
PROPERTIES
private static byte
RECORD_SEPARATOR_BYTE
The record separator is 0x1E per RFC 7464private static String
TYPE
-
Fields inherited from class org.openstreetmap.josm.io.AbstractReader
cancel, ds, externalIdMap, relations, uploadChangeset, ways
-
-
Constructor Summary
Constructors Constructor Description GeoJSONReader()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private Node
createNode(LatLon latlon)
private Optional<Way>
createWay(javax.json.JsonArray coordinates, boolean autoClose)
protected DataSet
doParseDataSet(InputStream source, ProgressMonitor progressMonitor)
private static void
fillTagsFromFeature(javax.json.JsonObject feature, OsmPrimitive primitive)
Merge existing tags in primitive (if any) with the values given in the GeoJSON feature.private LatLon
getLatLon(javax.json.JsonArray coordinates)
private static TagCollection
getTags(javax.json.JsonObject feature)
private static boolean
isLineDelimited(InputStream source)
Check if the inputstream follows RFC 7464private static TagCollection
mergeAllTagValues(OsmPrimitive primitive, TagCollection featureTags)
private void
mergeEqualMultipolygonWays()
Import may create duplicate ways were one is member of a multipolygon and untagged and the other is tagged.private void
parse(javax.json.stream.JsonParser parser)
private static double
parseCoordinate(javax.json.JsonValue coordinate)
private void
parseCrs(javax.json.JsonObject crs)
Parse CRS as per https://geojson.org/geojson-spec.html#coordinate-reference-system-objects.static DataSet
parseDataSet(InputStream source, ProgressMonitor progressMonitor)
Parse the given input source and return the dataset.private void
parseFeature(javax.json.JsonObject feature)
private void
parseFeatureCollection(javax.json.JsonArray features)
private void
parseGeometry(javax.json.JsonObject feature, javax.json.JsonObject geometry)
private void
parseGeometryCollection(javax.json.JsonObject feature, javax.json.JsonObject geometry)
private void
parseLineString(javax.json.JsonObject feature, javax.json.JsonArray coordinates)
private void
parseMultiLineString(javax.json.JsonObject feature, javax.json.JsonObject geometry)
private void
parseMultiPoint(javax.json.JsonObject feature, javax.json.JsonObject geometry)
private void
parseMultiPolygon(javax.json.JsonObject feature, javax.json.JsonObject geometry)
private void
parseNonGeometryFeature(javax.json.JsonObject feature, javax.json.JsonObject properties)
private static void
parseNullGeometry(javax.json.JsonObject feature)
private void
parsePoint(javax.json.JsonObject feature, javax.json.JsonArray coordinates)
private void
parsePolygon(javax.json.JsonObject feature, javax.json.JsonArray coordinates)
private void
parseRoot(javax.json.JsonObject object)
private static void
parseUnknown(javax.json.JsonObject object)
-
Methods inherited from class org.openstreetmap.josm.io.AbstractReader
buildPrimitive, callPostProcessors, deregisterPostprocessor, doParseDataSet, getDataSet, getLong, parseAction, parseBounds, parseChangeset, parseChangeset, parseDownloadPolicy, parseId, parseLocked, parseNode, parseNode, parseRelation, parseRelationMember, parseRelationMember, parseTag, parseTimestamp, parseUploadPolicy, parseUser, parseUser, parseVersion, parseVersion, parseVersion, parseVisible, parseWay, prepareDataSet, processChangesetAfterParsing, processNodesAfterParsing, processRelationsAfterParsing, processWaysAfterParsing, registerPostprocessor
-
-
-
-
Field Detail
-
CRS
private static final String CRS
- See Also:
- Constant Field Values
-
NAME
private static final String NAME
- See Also:
- Constant Field Values
-
LINK
private static final String LINK
- See Also:
- Constant Field Values
-
COORDINATES
private static final String COORDINATES
- See Also:
- Constant Field Values
-
FEATURES
private static final String FEATURES
- See Also:
- Constant Field Values
-
PROPERTIES
private static final String PROPERTIES
- See Also:
- Constant Field Values
-
GEOMETRY
private static final String GEOMETRY
- See Also:
- Constant Field Values
-
TYPE
private static final String TYPE
- See Also:
- Constant Field Values
-
RECORD_SEPARATOR_BYTE
private static final byte RECORD_SEPARATOR_BYTE
The record separator is 0x1E per RFC 7464- See Also:
- Constant Field Values
-
projection
private Projection projection
-
-
Constructor Detail
-
GeoJSONReader
GeoJSONReader()
-
-
Method Detail
-
parse
private void parse(javax.json.stream.JsonParser parser) throws IllegalDataException
- Throws:
IllegalDataException
-
parseRoot
private void parseRoot(javax.json.JsonObject object) throws IllegalDataException
- Throws:
IllegalDataException
-
parseCrs
private void parseCrs(javax.json.JsonObject crs) throws IllegalDataException
Parse CRS as per https://geojson.org/geojson-spec.html#coordinate-reference-system-objects. CRS are obsolete in RFC7946 but still allowed for interoperability with older applications. Only named CRS are supported.- Parameters:
crs
- CRS JSON object- Throws:
IllegalDataException
- in case of error
-
parseFeatureCollection
private void parseFeatureCollection(javax.json.JsonArray features)
-
parseFeature
private void parseFeature(javax.json.JsonObject feature)
-
parseNonGeometryFeature
private void parseNonGeometryFeature(javax.json.JsonObject feature, javax.json.JsonObject properties)
-
parseGeometryCollection
private void parseGeometryCollection(javax.json.JsonObject feature, javax.json.JsonObject geometry)
-
parseGeometry
private void parseGeometry(javax.json.JsonObject feature, javax.json.JsonObject geometry)
-
parseCoordinate
private static double parseCoordinate(javax.json.JsonValue coordinate)
-
parsePoint
private void parsePoint(javax.json.JsonObject feature, javax.json.JsonArray coordinates)
-
parseMultiPoint
private void parseMultiPoint(javax.json.JsonObject feature, javax.json.JsonObject geometry)
-
parseLineString
private void parseLineString(javax.json.JsonObject feature, javax.json.JsonArray coordinates)
-
parseMultiLineString
private void parseMultiLineString(javax.json.JsonObject feature, javax.json.JsonObject geometry)
-
parsePolygon
private void parsePolygon(javax.json.JsonObject feature, javax.json.JsonArray coordinates)
-
parseMultiPolygon
private void parseMultiPolygon(javax.json.JsonObject feature, javax.json.JsonObject geometry)
-
createNode
private Node createNode(LatLon latlon)
-
fillTagsFromFeature
private static void fillTagsFromFeature(javax.json.JsonObject feature, OsmPrimitive primitive)
Merge existing tags in primitive (if any) with the values given in the GeoJSON feature.- Parameters:
feature
- the GeoJSON featureprimitive
- the OSM primitive
-
mergeAllTagValues
private static TagCollection mergeAllTagValues(OsmPrimitive primitive, TagCollection featureTags)
-
parseUnknown
private static void parseUnknown(javax.json.JsonObject object)
-
parseNullGeometry
private static void parseNullGeometry(javax.json.JsonObject feature)
-
getTags
private static TagCollection getTags(javax.json.JsonObject feature)
-
isLineDelimited
private static boolean isLineDelimited(InputStream source)
Check if the inputstream follows RFC 7464- Parameters:
source
- The source to check (should be at the beginning)- Returns:
true
if the initial character isRECORD_SEPARATOR_BYTE
.
-
doParseDataSet
protected DataSet doParseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException
- Specified by:
doParseDataSet
in classAbstractReader
- Throws:
IllegalDataException
-
mergeEqualMultipolygonWays
private void mergeEqualMultipolygonWays()
Import may create duplicate ways were one is member of a multipolygon and untagged and the other is tagged. Try to merge them here.
-
parseDataSet
public static DataSet parseDataSet(InputStream source, ProgressMonitor progressMonitor) throws IllegalDataException
Parse the given input source and return the dataset.- Parameters:
source
- the source input stream. Must not be null.progressMonitor
- the progress monitor. If null,NullProgressMonitor.INSTANCE
is assumed- Returns:
- the dataset with the parsed data
- Throws:
IllegalDataException
- if an error was found while parsing the data from the sourceIllegalArgumentException
- if source is null
-
-