Search in sources :

Example 1 with ExtentSpatial

use of com.baremaps.model.ExtentSpatial in project baremaps by baremaps.

the class ImportResource method uploadData.

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("studio/import")
public Response uploadData(@FormDataParam("file") InputStream fileInputStream, @FormDataParam("file") FormDataContentDisposition fileMetaData) throws Exception {
    // Read FeatureCollection
    FeatureJSON fjson = new FeatureJSON();
    var fc = fjson.readFeatureCollection(fileInputStream);
    // Setup Collection
    String fileName = fileMetaData.getFileName();
    Collection collection = new Collection().id(UUID.randomUUID()).title(fileName.substring(0, fileName.lastIndexOf(".") - 1)).extent(new Extent().spatial(new ExtentSpatial().bbox(List.of(List.of(fc.getBounds().getMinX(), fc.getBounds().getMinY(), fc.getBounds().getMaxX(), fc.getBounds().getMaxY()))))).count(fc.size()).created(new Date()).geometryType(fc.getSchema().getGeometryDescriptor().getType().getBinding().getSimpleName());
    // Load data
    jdbi.useTransaction(handle -> {
        // Create collection
        handle.createUpdate("insert into collections (id, collection) values (:id, CAST(:collection AS jsonb))").bind("id", collection.getId()).bindByType("collection", collection, COLLECTION).execute();
        // Create table
        handle.execute(String.format("create table \"%s\" (id serial, tags hstore, geom geometry)", collection.getId()));
        // Insert features
        var features = fc.features();
        while (features.hasNext()) {
            SimpleFeature feature = (SimpleFeature) features.next();
            HashMap<String, String> properties = new HashMap<>();
            feature.getProperties().stream().filter(property -> !property.getName().getLocalPart().equals("geometry")).forEach(property -> properties.put(property.getName().getLocalPart(), property.getValue().toString()));
            Object geom = feature.getDefaultGeometryProperty().getValue();
            handle.createUpdate(String.format("insert into \"%s\" (tags, geom) values (:tags, ST_Transform(ST_SetSRID(CAST(:geom as geometry), 4326), 3857))", collection.getId())).bind("tags", properties).bind("geom", geom.toString()).execute();
        }
    });
    return Response.created(URI.create("collections/" + collection.getId())).build();
}
Also used : Jdbi(org.jdbi.v3.core.Jdbi) POST(javax.ws.rs.POST) FormDataContentDisposition(org.glassfish.jersey.media.multipart.FormDataContentDisposition) ExtentSpatial(com.baremaps.model.ExtentSpatial) Date(java.util.Date) Path(javax.ws.rs.Path) HashMap(java.util.HashMap) UUID(java.util.UUID) Singleton(javax.inject.Singleton) Collection(com.baremaps.model.Collection) Json(org.jdbi.v3.json.Json) Inject(javax.inject.Inject) List(java.util.List) MediaType(javax.ws.rs.core.MediaType) FormDataParam(org.glassfish.jersey.media.multipart.FormDataParam) Consumes(javax.ws.rs.Consumes) Response(javax.ws.rs.core.Response) SimpleFeature(org.opengis.feature.simple.SimpleFeature) FeatureJSON(org.geotools.geojson.feature.FeatureJSON) Extent(com.baremaps.model.Extent) URI(java.net.URI) QualifiedType(org.jdbi.v3.core.qualifier.QualifiedType) InputStream(java.io.InputStream) FeatureJSON(org.geotools.geojson.feature.FeatureJSON) Extent(com.baremaps.model.Extent) HashMap(java.util.HashMap) ExtentSpatial(com.baremaps.model.ExtentSpatial) Collection(com.baremaps.model.Collection) Date(java.util.Date) SimpleFeature(org.opengis.feature.simple.SimpleFeature) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes)

Aggregations

Collection (com.baremaps.model.Collection)1 Extent (com.baremaps.model.Extent)1 ExtentSpatial (com.baremaps.model.ExtentSpatial)1 InputStream (java.io.InputStream)1 URI (java.net.URI)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 List (java.util.List)1 UUID (java.util.UUID)1 Inject (javax.inject.Inject)1 Singleton (javax.inject.Singleton)1 Consumes (javax.ws.rs.Consumes)1 POST (javax.ws.rs.POST)1 Path (javax.ws.rs.Path)1 MediaType (javax.ws.rs.core.MediaType)1 Response (javax.ws.rs.core.Response)1 FeatureJSON (org.geotools.geojson.feature.FeatureJSON)1 FormDataContentDisposition (org.glassfish.jersey.media.multipart.FormDataContentDisposition)1 FormDataParam (org.glassfish.jersey.media.multipart.FormDataParam)1 Jdbi (org.jdbi.v3.core.Jdbi)1