in streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParser.java [53:136]
public GuessSchema getGuessSchema(InputStream inputStream) {
Feature geoFeature = null;
try {
geoFeature = new ObjectMapper().readValue(inputStream, Feature.class);
} catch (IOException e) {
throw new ParseException("Could not parse geo json into a feature type", e);
}
List<EventProperty> eventProperties = new LinkedList<>();
var sampleValues = new HashMap<String, Object>();
if (geoFeature.getGeometry() instanceof Point) {
Point point = (Point) geoFeature.getGeometry();
eventProperties.add(
getEventPropertyGeoJson(
GeoJsonConstants.LONGITUDE,
point.getCoordinates().getLongitude(),
Geo.LNG));
eventProperties.add(
getEventPropertyGeoJson(
GeoJsonConstants.LATITUDE,
point.getCoordinates().getLatitude(),
Geo.LAT));
sampleValues.put(GeoJsonConstants.LONGITUDE,
point.getCoordinates().getLongitude());
sampleValues.put(GeoJsonConstants.LATITUDE,
point.getCoordinates().getLatitude());
if (point.getCoordinates().hasAltitude()) {
eventProperties.add(
getEventPropertyGeoJson(GeoJsonConstants.ALTITUDE, point.getCoordinates().getAltitude(), SO.ALTITUDE));
point.getCoordinates().getAltitude();
}
} else if (geoFeature.getGeometry() instanceof LineString) {
LineString lineString = (LineString) geoFeature.getGeometry();
eventProperties.add(
JsonEventProperty.getEventProperty(GeoJsonConstants.COORDINATES_LINE_STRING, lineString.getCoordinates()));
sampleValues.put(GeoJsonConstants.COORDINATES_LINE_STRING,
lineString.getCoordinates());
} else if (geoFeature.getGeometry() instanceof Polygon) {
Polygon polygon = (Polygon) geoFeature.getGeometry();
eventProperties.add(
JsonEventProperty.getEventProperty(GeoJsonConstants.COORDINATES_POLYGON, polygon.getCoordinates()));
sampleValues.put(GeoJsonConstants.COORDINATES_POLYGON,
polygon.getCoordinates());
} else if (geoFeature.getGeometry() instanceof MultiPoint) {
MultiPoint multiPoint = (MultiPoint) geoFeature.getGeometry();
eventProperties.add(
JsonEventProperty.getEventProperty(GeoJsonConstants.COORDINATES_MULTI_POINT, multiPoint.getCoordinates()));
sampleValues.put(GeoJsonConstants.COORDINATES_MULTI_POINT,
multiPoint.getCoordinates());
} else if (geoFeature.getGeometry() instanceof MultiLineString) {
MultiLineString multiLineString = (MultiLineString) geoFeature.getGeometry();
eventProperties.add(
JsonEventProperty.getEventProperty(GeoJsonConstants.COORDINATES_LINE_STRING,
multiLineString.getCoordinates()));
sampleValues.put(GeoJsonConstants.COORDINATES_LINE_STRING,
multiLineString.getCoordinates());
} else if (geoFeature.getGeometry() instanceof MultiPolygon) {
MultiPolygon multiPolygon = (MultiPolygon) geoFeature.getGeometry();
eventProperties.add(JsonEventProperty.getEventProperty(GeoJsonConstants.COORDINATES_MULTI_POLYGON,
multiPolygon.getCoordinates()));
sampleValues.put(GeoJsonConstants.COORDINATES_MULTI_POLYGON,
multiPolygon.getCoordinates());
} else {
LOG.error("No geometry field found in geofeature: " + geoFeature.toString());
}
for (Map.Entry<String, Object> entry : geoFeature.getProperties().entrySet()) {
EventProperty p = JsonEventProperty.getEventProperty(entry.getKey(), entry.getValue());
eventProperties.add(p);
sampleValues.put(p.getRuntimeName(),
entry.getValue());
}
var schemaBuilder = GuessSchemaBuilder.create();
eventProperties.forEach(schemaBuilder::property);
sampleValues.forEach(schemaBuilder::sample);
return schemaBuilder.build();
}