public GuessSchema getGuessSchema()

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();
  }