/** * Parses a sequence of coordinates array expressed as * * [ [100.0, 0.0], [101.0, 1.0] ] * * @param jp * @throws IOException * @throws SQLException * @return Coordinate[] */ private Coordinate[] parseCoordinates(JsonParser jp) throws IOException { jp.nextToken(); // START_ARRAY [ to parse the each positions ArrayList<Coordinate> coords = new ArrayList<Coordinate>(); while (jp.getCurrentToken() != JsonToken.END_ARRAY) { coords.add(parseCoordinate(jp)); } return coords.toArray(new Coordinate[coords.size()]); }
/** * * Parse the array of positions. * * Syntax: * * { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } * * @param jsParser */ private LineString parseLinestring(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ coordinates LineString line = GF.createLineString(parseCoordinates(jp)); jp.nextToken();//END_OBJECT } geometry return line; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
return parsePoint(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTIPOINT)) { return parseMultiPoint(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.LINESTRING)) { return parseLinestring(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTILINESTRING)) { return parseMultiLinestring(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.POLYGON)) { return parsePolygon(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTIPOLYGON)) { return parseMultiPolygon(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.GEOMETRYCOLLECTION)) { return parseGeometryCollection(jsParser); } else { throw new SQLException("Unsupported geometry : " + geomType);
/** * Convert a geojson geometry to geometry. * * @param geojson * @return * @throws java.io.IOException * @throws java.sql.SQLException */ public static Geometry geomFromGeoJSON(String geojson) throws IOException, SQLException { if (geojson == null) { return null; } if (jsFactory == null) { jsFactory = new JsonFactory(); jsFactory.configure(JsonParser.Feature.ALLOW_COMMENTS, true); jsFactory.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); jsFactory.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true); reader = new GJGeometryReader(new GeometryFactory()); } JsonParser jp = jsFactory.createParser(geojson); return reader.parseGeometry(jp); } }
/** * Each element in the geometries array of a GeometryCollection is one of * the geometry objects described above: * * { "type": "GeometryCollection", "geometries": [ { "type": "Point", * "coordinates": [100.0, 0.0] }, { "type": "LineString", "coordinates": [ * [101.0, 0.0], [102.0, 1.0] ] } ]} * * @param jp * * @throws IOException * @throws SQLException * @return GeometryCollection */ private GeometryCollection parseGeometryCollection(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME geometries String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.GEOMETRIES)) { jp.nextToken();//START array //jp.nextToken();//START object ArrayList<Geometry> geometries = new ArrayList<Geometry>(); while (jp.getCurrentToken() != JsonToken.END_ARRAY) { geometries.add(parseGeometry(jp)); } jp.nextToken();//END_OBJECT } geometry return GF.createGeometryCollection(geometries.toArray(new Geometry[0])); } else { throw new SQLException("Malformed GeoJSON file. Expected 'geometries', found '" + coordinatesField + "'"); } }
/** * Convert a geojson geometry to geometry. * * @param geojson * @return * @throws java.io.IOException * @throws java.sql.SQLException */ public static Geometry geomFromGeoJSON(String geojson) throws IOException, SQLException { if (geojson == null) { return null; } if (jsFactory == null) { jsFactory = new JsonFactory(); jsFactory.configure(JsonParser.Feature.ALLOW_COMMENTS, true); jsFactory.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); jsFactory.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true); reader = new GJGeometryReader(new GeometryFactory()); } JsonParser jp = jsFactory.createParser(geojson); return reader.parseGeometry(jp); } }
/** * Each element in the geometries array of a GeometryCollection is one of * the geometry objects described above: * * { "type": "GeometryCollection", "geometries": [ { "type": "Point", * "coordinates": [100.0, 0.0] }, { "type": "LineString", "coordinates": [ * [101.0, 0.0], [102.0, 1.0] ] } ]} * * @param jp * * @throws IOException * @throws SQLException * @return GeometryCollection */ private GeometryCollection parseGeometryCollection(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME geometries String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.GEOMETRIES)) { jp.nextToken();//START array //jp.nextToken();//START object ArrayList<Geometry> geometries = new ArrayList<Geometry>(); while (jp.getCurrentToken() != JsonToken.END_ARRAY) { geometries.add(parseGeometry(jp)); } jp.nextToken();//END_OBJECT } geometry return GF.createGeometryCollection(geometries.toArray(new Geometry[geometries.size()])); } else { throw new SQLException("Malformed GeoJSON file. Expected 'geometries', found '" + coordinatesField + "'"); } }
return parsePoint(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTIPOINT)) { return parseMultiPoint(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.LINESTRING)) { return parseLinestring(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTILINESTRING)) { return parseMultiLinestring(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.POLYGON)) { return parsePolygon(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTIPOLYGON)) { return parseMultiPolygon(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.GEOMETRYCOLLECTION)) { return parseGeometryCollection(jsParser); } else { throw new SQLException("Unsupported geometry : " + geomType);
/** * * Parse the array of positions. * * Syntax: * * { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } * * @param jsParser */ private LineString parseLinestring(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ coordinates LineString line = GF.createLineString(parseCoordinates(jp)); jp.nextToken();//END_OBJECT } geometry return line; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
/** * Convert a geojson geometry to geometry. * * @param geojson * @return * @throws java.io.IOException * @throws java.sql.SQLException */ public static Geometry geomFromGeoJSON(String geojson) throws IOException, SQLException { if (geojson == null) { return null; } if (jsFactory == null) { jsFactory = new JsonFactory(); jsFactory.configure(JsonParser.Feature.ALLOW_COMMENTS, true); jsFactory.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); jsFactory.configure(JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS, true); reader = new GJGeometryReader(new GeometryFactory()); } JsonParser jp = jsFactory.createParser(geojson); return reader.parseGeometry(jp); } }
/** * Parses a sequence of coordinates array expressed as * * [ [100.0, 0.0], [101.0, 1.0] ] * * @param jp * @throws IOException * @throws SQLException * @return Coordinate[] */ private Coordinate[] parseCoordinates(JsonParser jp) throws IOException { jp.nextToken(); // START_ARRAY [ to parse the each positions ArrayList<Coordinate> coords = new ArrayList<Coordinate>(); while (jp.getCurrentToken() != JsonToken.END_ARRAY) { coords.add(parseCoordinate(jp)); } return coords.toArray(new Coordinate[coords.size()]); }
/** * Each element in the geometries array of a GeometryCollection is one of * the geometry objects described above: * * { "type": "GeometryCollection", "geometries": [ { "type": "Point", * "coordinates": [100.0, 0.0] }, { "type": "LineString", "coordinates": [ * [101.0, 0.0], [102.0, 1.0] ] } ]} * * @param jp * * @throws IOException * @throws SQLException * @return GeometryCollection */ private GeometryCollection parseGeometryCollection(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME geometries String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.GEOMETRIES)) { jp.nextToken();//START array //jp.nextToken();//START object ArrayList<Geometry> geometries = new ArrayList<Geometry>(); while (jp.getCurrentToken() != JsonToken.END_ARRAY) { geometries.add(parseGeometry(jp)); } jp.nextToken();//END_OBJECT } geometry return GF.createGeometryCollection(geometries.toArray(new Geometry[geometries.size()])); } else { throw new SQLException("Malformed GeoJSON file. Expected 'geometries', found '" + coordinatesField + "'"); } }
return parsePoint(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTIPOINT)) { return parseMultiPoint(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.LINESTRING)) { return parseLinestring(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTILINESTRING)) { return parseMultiLinestring(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.POLYGON)) { return parsePolygon(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.MULTIPOLYGON)) { return parseMultiPolygon(jsParser); } else if (geomType.equalsIgnoreCase(GeoJsonField.GEOMETRYCOLLECTION)) { return parseGeometryCollection(jsParser); } else { throw new SQLException("Unsupported geometry : " + geomType);
/** * Parses an array of positions * * Syntax: * * { "type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } * * @param jsParser * @throws IOException * @return MultiPoint */ private MultiPoint parseMultiPoint(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ coordinates MultiPoint mPoint = GF.createMultiPoint(parseCoordinates(jp)); jp.nextToken();//END_OBJECT } geometry return mPoint; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
/** * Parses a sequence of coordinates array expressed as * * [ [100.0, 0.0], [101.0, 1.0] ] * * @param jp * @throws IOException * @throws SQLException * @return Coordinate[] */ private Coordinate[] parseCoordinates(JsonParser jp) throws IOException { jp.nextToken(); // START_ARRAY [ to parse the each positions ArrayList<Coordinate> coords = new ArrayList<Coordinate>(); while (jp.getCurrentToken() != JsonToken.END_ARRAY) { coords.add(parseCoordinate(jp)); } return coords.toArray(new Coordinate[0]); }
/** * Parses an array of positions * * Syntax: * * { "type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } * * @param jsParser * @throws IOException * @return MultiPoint */ private MultiPoint parseMultiPoint(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ coordinates MultiPoint mPoint = GF.createMultiPoint(parseCoordinates(jp)); jp.nextToken();//END_OBJECT } geometry return mPoint; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
/** * Parses one position * * Syntax: * * { "type": "Point", "coordinates": [100.0, 0.0] } * * @param jsParser * @throws IOException * @return Point */ private Point parsePoint(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ to parse the coordinate Point point = GF.createPoint(parseCoordinate(jp)); jp.nextToken(); return point; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
/** * * Parse the array of positions. * * Syntax: * * { "type": "LineString", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } * * @param jsParser */ private LineString parseLinestring(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ coordinates LineString line = GF.createLineString(parseCoordinates(jp)); jp.nextToken();//END_OBJECT } geometry return line; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
/** * Parses one position * * Syntax: * * { "type": "Point", "coordinates": [100.0, 0.0] } * * @param jsParser * @throws IOException * @return Point */ private Point parsePoint(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ to parse the coordinate Point point = GF.createPoint(parseCoordinate(jp)); jp.nextToken(); return point; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }
/** * Parses an array of positions * * Syntax: * * { "type": "MultiPoint", "coordinates": [ [100.0, 0.0], [101.0, 1.0] ] } * * @param jsParser * @throws IOException * @return MultiPoint */ private MultiPoint parseMultiPoint(JsonParser jp) throws IOException, SQLException { jp.nextToken(); // FIELD_NAME coordinates String coordinatesField = jp.getText(); if (coordinatesField.equalsIgnoreCase(GeoJsonField.COORDINATES)) { jp.nextToken(); // START_ARRAY [ coordinates MultiPoint mPoint = GF.createMultiPoint(parseCoordinates(jp)); jp.nextToken();//END_OBJECT } geometry return mPoint; } else { throw new SQLException("Malformed GeoJSON file. Expected 'coordinates', found '" + coordinatesField + "'"); } }