diff --git a/grails-app/controllers/au/org/ala/ecodata/AdminController.groovy b/grails-app/controllers/au/org/ala/ecodata/AdminController.groovy index 67a21b83a..7772d7d6c 100644 --- a/grails-app/controllers/au/org/ala/ecodata/AdminController.groovy +++ b/grails-app/controllers/au/org/ala/ecodata/AdminController.groovy @@ -272,7 +272,8 @@ class AdminController { dateFormat.setTimeZone(timeZoneUTC) def isMERIT = params.getBoolean('isMERIT', true) Date startDate = params.getDate("startDate", ["yyyy", "yyyy-MM-dd"]) ?: dateFormat.parse(defaultStartDate) - List siteIds = params.get("siteId")?.split(",") + List siteIds = params.get("siteId")?.split(",") ?: [] + List projectIds = params.get("projectId")?.split(",") ?: [] def code = 'success' def total = 0 def offset = 0 @@ -281,8 +282,14 @@ class AdminController { List defaultFids = metadataService.getSpatialLayerIdsToIntersect() log.debug("Number of fids to intersect: ${defaultFids.size()}; they are - ${defaultFids}") def totalSites - List projectIds = [] - if (siteIds) { + if (projectIds) { + projectIds.each { + siteIds.addAll(siteService.findAllSiteIdsForProject(it)) + } + + totalSites = siteIds.size() + } + else if (siteIds) { totalSites = siteIds.size() } else if (isMERIT) { diff --git a/grails-app/services/au/org/ala/ecodata/SpatialService.groovy b/grails-app/services/au/org/ala/ecodata/SpatialService.groovy index 82e3391a1..e48b1af84 100644 --- a/grails-app/services/au/org/ala/ecodata/SpatialService.groovy +++ b/grails-app/services/au/org/ala/ecodata/SpatialService.groovy @@ -4,10 +4,7 @@ import grails.core.GrailsApplication import grails.plugin.cache.Cacheable import groovy.json.JsonParserType import groovy.json.JsonSlurper -import org.locationtech.jts.geom.Coordinate -import org.locationtech.jts.geom.Geometry -import org.locationtech.jts.geom.GeometryCollection -import org.locationtech.jts.geom.GeometryFactory +import org.locationtech.jts.geom.* import org.locationtech.jts.io.WKTReader import static ParatooService.deepCopy @@ -73,8 +70,17 @@ class SpatialService { correctGeometry = geometryCollection.buffer(0) } - Geometry convexHullGeometry = correctGeometry.union().convexHull() - wkt = convexHullGeometry.toText() + Geometry convexHullGeometry + try { + convexHullGeometry = correctGeometry.union().convexHull() + } + catch (TopologyException e) { + log.error("Error creating convex hull for geometry collection") + convexHullGeometry = correctGeometry.buffer(0).union().convexHull() + } + finally { + wkt = convexHullGeometry?.toText() + } } String url = grailsApplication.config.getProperty('spatial.baseUrl')+WKT_INTERSECT_URL_PREFIX