diff --git a/indexer/src/main/java/au/org/aodn/esindexer/configuration/ForkJoinConfig.java b/indexer/src/main/java/au/org/aodn/esindexer/configuration/ForkJoinConfig.java new file mode 100644 index 00000000..1c1fc8f9 --- /dev/null +++ b/indexer/src/main/java/au/org/aodn/esindexer/configuration/ForkJoinConfig.java @@ -0,0 +1,22 @@ +package au.org.aodn.esindexer.configuration; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ForkJoinConfig { + + protected static Logger logger = LoggerFactory.getLogger(ForkJoinConfig.class); + + static { + // By default, ForkJoinPool set parallelism to core - 1, therefore 2 core still use 1 thread, we want to change + // this default utilize the resource better. Affect stream().parallel() or parllelStream() + String coreNum = String.valueOf(Runtime.getRuntime().availableProcessors()); + System.setProperty( + "java.util.concurrent.ForkJoinPool.common.parallelism", + coreNum + ); + logger.info("Set ForkJoin use number of cores = {}", coreNum); + } +} diff --git a/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java b/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java index d777c039..3028a417 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/service/StacCollectionMapperService.java @@ -12,9 +12,7 @@ import jakarta.xml.bind.JAXBElement; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.mapstruct.Mapper; -import org.mapstruct.Mapping; -import org.mapstruct.Named; +import org.mapstruct.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -39,11 +37,13 @@ @Service @Mapper(componentModel = "spring") public abstract class StacCollectionMapperService { - - public static final String REAL_TIME = "real-time"; + @BeforeMapping + void beforeMapping(MDMetadataType source) { + logger.info("Processing uuid: {}", CommonUtils.getUUID(source)); + } @Mapping(target="uuid", source = "source", qualifiedByName = "mapUUID") - @Mapping(target="title", source = "source", qualifiedByName = "mapTitle" ) + @Mapping(target="title", source = "source", qualifiedByName = "mapTitle") @Mapping(target="description", source = "source", qualifiedByName = "mapDescription") @Mapping(target="extent.bbox", source = "source", qualifiedByName = "mapExtentBbox") @Mapping(target="extent.temporal", source = "source", qualifiedByName = "mapExtentTemporal") @@ -68,7 +68,7 @@ public abstract class StacCollectionMapperService { @Mapping(target="summaries.revision", source = "source", qualifiedByName = "mapSummaries.revision") public abstract StacCollectionModel mapToSTACCollection(MDMetadataType source); - private static final Logger logger = LogManager.getLogger(StacCollectionMapperService.class); + protected static final Logger logger = LogManager.getLogger(StacCollectionMapperService.class); @Value("${spring.jpa.properties.hibernate.jdbc.time_zone}") private String timeZoneId; @@ -104,7 +104,7 @@ List createExtentTemporal(MDMetadataType source) { List items = MapperUtils.findMDDataIdentificationType(source); if (items.isEmpty()) { - logger.warn("Unable to find extent temporal information for metadata record: " + this.mapUUID(source)); + logger.warn("Unable to find extent temporal information for metadata record: {}", CommonUtils.getUUID(source)); return null; } @@ -128,13 +128,13 @@ List createExtentTemporal(MDMetadataType source) { if (pair0.isEmpty()) { pair0 = safeGet(() -> timePeriodType.getBeginPosition().getValue().get(0)); } - pair0.ifPresent(pair -> temporalPair[0] = convertDateToZonedDateTime(this.mapUUID(source), pair, true)); + pair0.ifPresent(pair -> temporalPair[0] = convertDateToZonedDateTime(CommonUtils.getUUID(source), pair, true)); var pair1 = safeGet(() -> timePeriodType.getEnd().getTimeInstant().getTimePosition().getValue().get(0)); if (pair1.isEmpty()) { pair1 = safeGet(() -> timePeriodType.getEndPosition().getValue().get(0)); } - pair1.ifPresent(pair -> temporalPair[1] = convertDateToZonedDateTime(this.mapUUID(source), pair, false)); + pair1.ifPresent(pair -> temporalPair[1] = convertDateToZonedDateTime(CommonUtils.getUUID(source), pair, false)); } result.add(temporalPair); @@ -381,7 +381,7 @@ Map createSummariesScope(MDMetadataType source) { } } - logger.warn("Unable to find scope metadata record: " + this.mapUUID(source)); + logger.warn("Unable to find scope metadata record: {}", CommonUtils.getUUID(source)); return null; } /** @@ -434,13 +434,15 @@ String mapUpdateFrequency(MDMetadataType source) { @Named("mapSummaries.datasetProvider") String mapDatasetOwner(MDMetadataType source) { List providers = mapProviders(source); - return providers.stream().anyMatch(p -> p.getName().contains("IMOS")) ? "IMOS" : null; + return providers.stream() + .filter(p -> p.getName() != null) + .anyMatch(p -> p.getName().contains("IMOS")) ? "IMOS" : null; } @Named("mapSummaries.datasetGroup") String mapGeoNetworkGroup(MDMetadataType source) { try { - String group = geoNetworkService.findGroupById(mapUUID(source)); + String group = geoNetworkService.findGroupById(CommonUtils.getUUID(source)); return group != null ? group.toLowerCase() : null; } catch (IOException e) { @@ -559,7 +561,7 @@ List mapThemes(MDMetadataType source) { for (MDDataIdentificationType i : items) { i.getDescriptiveKeywords().forEach(descriptiveKeyword -> { ThemesModel themesModel = ThemesModel.builder().build(); - String uuid = this.mapUUID(source); + String uuid = CommonUtils.getUUID(source); themesModel.setConcepts(mapThemesConcepts(descriptiveKeyword)); themesModel.setTitle(mapThemesTitle(descriptiveKeyword, uuid)); @@ -615,11 +617,11 @@ else if (LinkUtils.isWfs(protocol)) { } // Now add links for logos - geoNetworkService.getLogo(this.mapUUID(source)) + geoNetworkService.getLogo(CommonUtils.getUUID(source)) .ifPresent(results::add); // Thumbnail link - geoNetworkService.getThumbnail(this.mapUUID(source)) + geoNetworkService.getThumbnail(CommonUtils.getUUID(source)) .ifPresent(results::add); // full metadata link @@ -650,7 +652,7 @@ else if (LinkUtils.isWfs(protocol)) { } private List getAssociatedRecords(MDMetadataType source) { - var associatedRecordsData = geoNetworkService.getAssociatedRecords(mapUUID(source)); + var associatedRecordsData = geoNetworkService.getAssociatedRecords(CommonUtils.getUUID(source)); return AssociatedRecordsUtil.generateAssociatedRecords(associatedRecordsData); } @@ -742,7 +744,11 @@ List mapProviders(MDMetadataType source) { .ifPresent(p -> p.forEach(party -> { if(party.getAbstractCIParty().getValue() instanceof CIOrganisationType2 organisationType2) { ProviderModel providerModel = ProviderModel.builder().build(); - providerModel.setRoles(Collections.singletonList(ciResponsibility.getRole().getCIRoleCode().getCodeListValue())); + providerModel.setRoles(Collections.singletonList( + ciResponsibility.getRole().getCIRoleCode() != null ? + ciResponsibility.getRole().getCIRoleCode().getCodeListValue() : + null + )); providerModel.setName(organisationType2.getName() != null ? organisationType2.getName().getCharacterString().getValue().toString() : ""); organisationType2.getIndividual().forEach(individual -> individual.getCIIndividual().getContactInfo().forEach(contactInfo -> { @@ -763,12 +769,12 @@ else if(party.getAbstractCIParty().getValue() instanceof CIIndividualType2 indiv results.add(providerModel); } else { - logger.error("Unable to cast getAbstractCIParty().getValue() to CIOrganisationType2 or CIIndividualType2 for metadata record: {}", mapUUID(source)); + logger.error("Unable to cast getAbstractCIParty().getValue() to CIOrganisationType2 or CIIndividualType2 for metadata record: {}", CommonUtils.getUUID(source)); } })); } else { - logger.warn("getContact().getAbstractResponsibility() in mapProviders is not of type CIResponsibilityType2 for UUID {}", mapUUID(source)); + logger.warn("getContact().getAbstractResponsibility() in mapProviders is not of type CIResponsibilityType2 for UUID {}", CommonUtils.getUUID(source)); } })); return results; @@ -814,7 +820,7 @@ String mapLicense(MDMetadataType source) { if (!licenses.isEmpty()) { return String.join(" | ", licenses); } else { - logger.debug("Unable to find license information for metadata record: " + this.mapUUID(source)); + logger.debug("Unable to find license information for metadata record: {}", CommonUtils.getUUID(source)); return ""; } } @@ -859,7 +865,7 @@ List mapContacts(MDMetadataType source) { if (responsibilityType instanceof final CIResponsibilityType2 ciResponsibility) { if (ciResponsibility.getParty().isEmpty()) { - logger.warn("Unable to find contact info for metadata record: {}", this.mapUUID(source)); + logger.warn("Unable to find contact info for metadata record: {}", CommonUtils.getUUID(source)); } else { ciResponsibility.getParty().forEach(party -> { @@ -872,7 +878,7 @@ List mapContacts(MDMetadataType source) { } } else { - logger.warn("getAbstractResponsibility() is null in mapContact for metadata record: {}", mapUUID(source)); + logger.warn("getAbstractResponsibility() is null in mapContact for metadata record: {}", CommonUtils.getUUID(source)); } }); } @@ -918,7 +924,7 @@ List mapContacts(MDMetadataType source) { safeGet(() -> property.getCIResponsibility().getParty()) .ifPresent(parties -> { if (parties.isEmpty()) { - logger.warn("Unable to find citation contact info for metadata record: {}", this.mapUUID(source)); + logger.warn("Unable to find citation contact info for metadata record: {}", CommonUtils.getUUID(source)); } else { parties.forEach(party -> { var mappedContacts = MapperUtils.mapOrgContacts(ciResponsibility, party); @@ -950,7 +956,7 @@ protected List mapLanguages(MDMetadataType source) { case "eng" -> languageModel.setName("English"); case "fra" -> languageModel.setName("French"); default -> { - logger.warn("Unable to find language for metadata record: {}, default to eng", this.mapUUID(source)); + logger.warn("Unable to find language for metadata record: {}, default to eng", CommonUtils.getUUID(source)); languageModel.setCode("eng"); languageModel.setName("English"); } @@ -962,7 +968,6 @@ protected List mapLanguages(MDMetadataType source) { return results; } - /** * Special handle for MimeFileType object. * @param onlineResource diff --git a/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryBase.java b/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryBase.java index 95650106..12bc7fed 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryBase.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryBase.java @@ -84,7 +84,7 @@ else if(!r.isEmpty() && r.get(0) instanceof EXGeographicBoundingBoxType) { } protected static List findPolygonsFromEXBoundingPolygonType(String rawCRS, List rawInput) { - List polygons = new ArrayList<>(); + final List polygons = new ArrayList<>(); if(COORDINATE_SYSTEM_CRS84.equals(rawCRS)) { List> input = rawInput @@ -145,11 +145,15 @@ protected static List findPolygonsFromEXBoundingPolygonType(String raw items.add(coordinate); } } - - // We need to store it so that we can create the multi-array as told by spec - Polygon polygon = geoJsonFactory.createPolygon(items.toArray(new Coordinate[0])); - polygons.add(polygon); - logger.debug("MultiSurfaceType 2D Polygon added {}", polygon); + try { + // We need to store it so that we can create the multi-array as told by spec + Polygon polygon = geoJsonFactory.createPolygon(items.toArray(new Coordinate[0])); + polygons.add(polygon); + logger.debug("MultiSurfaceType 2D added (findPolygonsFromEXBoundingPolygonType) {}", polygon); + } + catch(IllegalArgumentException iae) { + logger.warn("Invalid geometry point for polygon", iae); + } } }); } @@ -195,12 +199,16 @@ protected static List findPolygonsFromEXBoundingPolygonType(String raw items.add(coordinate); } } + try { + // We need to store it so that we can create the multi-array as told by spec + Polygon polygon = geoJsonFactory.createPolygon(items.toArray(new Coordinate[0])); + polygons.add(polygon); - // We need to store it so that we can create the multi-array as told by spec - Polygon polygon = geoJsonFactory.createPolygon(items.toArray(new Coordinate[0])); - polygons.add(polygon); - - logger.debug("PolygonType 2D Polygon added {}", polygon); + logger.debug("LinearRingType added {}", polygon); + } + catch(IllegalArgumentException iae) { + logger.warn("Invalid LinearRingType", iae); + } } }); } diff --git a/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryUtils.java b/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryUtils.java index 9db7c343..068292df 100644 --- a/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryUtils.java +++ b/indexer/src/main/java/au/org/aodn/esindexer/utils/GeometryUtils.java @@ -12,6 +12,8 @@ import org.geotools.data.simple.SimpleFeatureIterator; import org.geotools.data.simple.SimpleFeatureSource; import org.geotools.geojson.geom.GeometryJSON; +import org.locationtech.jts.algorithm.Area; +import org.locationtech.jts.algorithm.Orientation; import org.locationtech.jts.geom.*; import org.locationtech.jts.operation.union.UnaryUnionOp; import org.locationtech.jts.simplify.DouglasPeuckerSimplifier; @@ -28,6 +30,12 @@ public class GeometryUtils { + public enum PointOrientation { + CLOCKWISE, + COUNTER_CLOCKWISE, + FLAT + } + protected static Logger logger = LogManager.getLogger(GeometryUtils.class); protected static GeometryFactory factory = new GeometryFactory(new PrecisionModel(), 4326); protected static ObjectMapper objectMapper = new ObjectMapper(); @@ -141,8 +149,10 @@ else if(geometry instanceof Point point) { GeometryCollection collection = new GeometryCollection(orientedPolygons.toArray(new Geometry[0]), factory); try (StringWriter writer = new StringWriter()) { - - GeometryJSON geometryJson = new GeometryJSON(); + // This must be hard code and cannot change, the geonetwork comes with some very long decimal coordinate + // if we do not preserve this, we will result polygon rejected by elastic due to not having 3 non-collinear + // points after rounding by the GeometryJson + GeometryJSON geometryJson = new GeometryJSON(15); geometryJson.write(collection, writer); Map values = objectMapper.readValue(writer.toString(), HashMap.class); @@ -170,14 +180,19 @@ else if(geometry instanceof Point point) { * @param coordinates Array of polygon coordinates. * @return True if vertices are ordered counterclockwise, False otherwise. */ - protected static boolean isCounterClockwise(Coordinate[] coordinates) { - double sum = 0.0; - for (int i = 0, n = coordinates.length; i < n - 1; i++) { - Coordinate current = coordinates[i]; - Coordinate next = coordinates[i + 1]; - sum += (next.x - current.x) * (next.y + current.y); + protected static PointOrientation orientation(Coordinate[] coordinates) { + // Computes the signed area for a ring. The signed area is positive if the ring is oriented CW, + // negative if the ring is oriented CCW, and zero if the ring is degenerate or flat. + double orientation = Area.ofRingSigned(coordinates); + if(orientation > 0) { + return PointOrientation.CLOCKWISE; + } + else if(orientation < 0) { + return PointOrientation.COUNTER_CLOCKWISE; + } + else { + return PointOrientation.FLAT; } - return sum < 0.0; } /** * Ensures that a polygon's vertices are ordered counterclockwise. @@ -192,21 +207,20 @@ protected static boolean isCounterClockwise(Coordinate[] coordinates) { protected static Polygon ensureCounterClockwise(Polygon polygon, GeometryFactory factory) { // Check and reorder exterior ring if necessary LinearRing shell = polygon.getExteriorRing(); - if (!isCounterClockwise(shell.getCoordinates())) { - shell = factory.createLinearRing(reverseCoordinates(shell.getCoordinates())); + if (orientation(shell.getCoordinates()) == PointOrientation.CLOCKWISE) { + shell = shell.reverse(); } // Check and reorder each interior ring (hole) if necessary LinearRing[] holes = new LinearRing[polygon.getNumInteriorRing()]; for (int i = 0; i < holes.length; i++) { LinearRing hole = polygon.getInteriorRingN(i); - if (isCounterClockwise(hole.getCoordinates())) { - hole = factory.createLinearRing(reverseCoordinates(hole.getCoordinates())); + if (orientation(hole.getCoordinates()) == PointOrientation.COUNTER_CLOCKWISE) { + hole = hole.reverse(); } holes[i] = hole; } - // Return a new polygon with the correctly ordered shell and holes return factory.createPolygon(shell, holes); } /** @@ -218,12 +232,8 @@ protected static Polygon ensureCounterClockwise(Polygon polygon, GeometryFactory * @return Array of coordinates in reversed order. */ protected static Coordinate[] reverseCoordinates(Coordinate[] coords) { - int n = coords.length; - Coordinate[] reversed = new Coordinate[n]; - for (int i = 0; i < n; i++) { - reversed[i] = coords[n - 1 - i]; - } - return reversed; + CoordinateArrays.reverse(coords); + return coords; } /** * Create a grid based on the area of the spatial extents. Once we have the grid, we can union the area @@ -285,7 +295,7 @@ protected static List convertToListGeometry(Geometry multipolygon) { * @return - A polygon the break into grid. */ protected static List breakLargeGeometryToGrid(final Geometry large) { - logger.debug("Start break down large geometry"); + logger.debug("Break down large geometry to grid {}", large); // Get the bounding box (extent) of the large polygon Envelope envelope = large.getEnvelopeInternal(); @@ -321,8 +331,6 @@ protected static List breakLargeGeometryToGrid(final Geometry large) { // Nothing to report } } - - logger.debug("End break down large geometry"); return intersectedPolygons; } @@ -343,6 +351,10 @@ protected static List> removeLandAreaFromGeometry(List geometries.stream() + .filter(Objects::nonNull) + // Try fixing it with buffer(0), which often fixes small topological errors + // it fixed the non-noded intersection issue + .map(geometry -> geometry.isValid() ? geometry : geometry.buffer(0)) .map(geometry -> geometry.difference(landGeometry)) .map(GeometryUtils::convertToListGeometry) .flatMap(Collection::stream) diff --git a/indexer/src/main/resources/application-dev.yaml b/indexer/src/main/resources/application-dev.yaml index 65649e05..885be539 100644 --- a/indexer/src/main/resources/application-dev.yaml +++ b/indexer/src/main/resources/application-dev.yaml @@ -22,6 +22,7 @@ logging: level: au.org.aodn.indexer: DEBUG au.org.aodn.ardcvocabs: DEBUG + au.org.aodn.esindexer.utils: DEBUG management: endpoints: diff --git a/indexer/src/test/java/au/org/aodn/esindexer/service/IndexerServiceTests.java b/indexer/src/test/java/au/org/aodn/esindexer/service/IndexerServiceTests.java index 39440309..698b3e00 100644 --- a/indexer/src/test/java/au/org/aodn/esindexer/service/IndexerServiceTests.java +++ b/indexer/src/test/java/au/org/aodn/esindexer/service/IndexerServiceTests.java @@ -250,7 +250,7 @@ public void verifyThumbnailLinkNullAdbbdedOnIndex() throws IOException { String test = String.valueOf(Objects.requireNonNull(objectNodeHit.source())); String expected = indexerObjectMapper.readTree(expectedData).toPrettyString(); String actual = indexerObjectMapper.readTree(test).toPrettyString(); - +logger.info("{}", actual); JSONAssert.assertEquals(expected, actual, JSONCompareMode.STRICT); } catch (JSONException e) { throw new RuntimeException(e); diff --git a/indexer/src/test/java/au/org/aodn/esindexer/service/StacCollectionMapperServiceTests.java b/indexer/src/test/java/au/org/aodn/esindexer/service/StacCollectionMapperServiceTests.java index 55d93188..e6a5674e 100644 --- a/indexer/src/test/java/au/org/aodn/esindexer/service/StacCollectionMapperServiceTests.java +++ b/indexer/src/test/java/au/org/aodn/esindexer/service/StacCollectionMapperServiceTests.java @@ -1,6 +1,7 @@ package au.org.aodn.esindexer.service; import au.org.aodn.esindexer.utils.GcmdKeywordUtils; +import au.org.aodn.esindexer.utils.GeometryUtils; import au.org.aodn.esindexer.utils.JaxbUtils; import au.org.aodn.metadata.iso19115_3_2018.MDMetadataType; import au.org.aodn.stac.model.StacCollectionModel; @@ -11,6 +12,7 @@ import co.elastic.clients.elasticsearch.core.search.HitsMetadata; import co.elastic.clients.elasticsearch.core.search.TotalHits; import co.elastic.clients.json.JsonData; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -31,6 +33,7 @@ import java.io.IOException; import java.util.Collections; import java.util.Map; +import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Function; @@ -74,7 +77,20 @@ public class StacCollectionMapperServiceTests { protected IndexerServiceImpl indexerService; + protected void verify(String expected) throws JsonProcessingException, JSONException { + Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); + String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); + log.info(out); + JSONAssert.assertEquals( + objectMapper.readTree(expected).toPrettyString(), + objectMapper.readTree(out.strip()).toPrettyString(), + JSONCompareMode.STRICT + ); + } + public StacCollectionMapperServiceTests() throws JAXBException { + GeometryUtils.setExecutorService(Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors())); + GeometryUtils.init(); } @AfterEach @@ -160,15 +176,7 @@ public void verifyPointOfContactCorrect() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample8_stac.json"); indexerService.indexMetadata(xml); - // We use a mock to pretend insert value into Elastic, there we store what is being send to elastic - // and now we can use it to compare expected result. - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -177,9 +185,7 @@ public void verifyMetadataContactCorrect() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample10_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals(objectMapper.readTree(expected).toPrettyString(), objectMapper.readTree(out.strip()).toPrettyString(), JSONCompareMode.STRICT); + verify(expected); } @Test @@ -189,30 +195,22 @@ public void verifyLicenseCorrect() throws IOException, JSONException { String xml1 = readResourceFile("classpath:canned/sample10.xml"); String expected1 = readResourceFile("classpath:canned/sample10_stac.json"); indexerService.indexMetadata(xml1); - Map content1 = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out1 = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content1); - JSONAssert.assertEquals(objectMapper.readTree(expected1).toPrettyString(), - objectMapper.readTree(out1.strip()).toPrettyString(), JSONCompareMode.STRICT); + + verify(expected1); // if license is not in citation block, it should try to find it in "other constraints" String xml2 = readResourceFile("classpath:canned/sample11.xml"); String expected2 = readResourceFile("classpath:canned/sample11_stac.json"); indexerService.indexMetadata(xml2); - Map content2 = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out2 = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content2); - JSONAssert.assertEquals(objectMapper.readTree(expected2).toPrettyString(), - objectMapper.readTree(out2.strip()).toPrettyString(), JSONCompareMode.STRICT); + + verify(expected2); // if both blocks all don't have license, it should return empty string String xml3 = readResourceFile("classpath:canned/sample7.xml"); String expected3 = readResourceFile("classpath:canned/sample7_stac_no_es.json"); indexerService.indexMetadata(xml3); - Map content3 = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out3 = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content3); - JSONAssert.assertEquals( - objectMapper.readTree(expected3).toPrettyString(), - objectMapper.readTree(out3.strip()).toPrettyString(), - JSONCompareMode.STRICT); + + verify(expected3); } @Test @@ -222,14 +220,7 @@ public void verifySummaryGeoCorrect1() throws IOException, JAXBException, JSONEx String expected = readResourceFile("classpath:canned/sample9_stac.json"); indexerService.indexMetadata(xml); - // We use a mock to pretend insert value into Elastic, there we store what is being send to elastic - // and now we can use it to compare expected result. - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals(objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT); + verify(expected); } @Test @@ -239,13 +230,7 @@ public void verifySummaryGeoCorrect2() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample10_stac.json"); indexerService.indexMetadata(xml); - // We use a mock to pretend insert value into Elastic, there we store what is being send to elastic - // and now we can use it to compare expected result. - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals(objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT); + verify(expected); } @Test @@ -254,14 +239,7 @@ public void verifyMultipleTemporal1Extents() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample_multiple_temporal1_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -270,13 +248,7 @@ public void verifyMultipleTemporal2Extents() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample_multiple_temporal2_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -285,14 +257,7 @@ public void verifyMultipleTemporalExtentsNull() throws IOException, JSONExceptio String expected = readResourceFile("classpath:canned/sample_multiple_temporal_null_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -301,13 +266,7 @@ public void verifyNullKeywords() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/keywords_null_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -316,13 +275,7 @@ public void verifyNullAbstractResponsibility() throws IOException, JSONException String expected = readResourceFile("classpath:canned/abstract_resposibilty_null_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } /** * @throws IOException @@ -333,14 +286,7 @@ public void verifyAbstractCIParty1() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample12_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -349,14 +295,7 @@ public void verifyAbstractResponsibilityNullWorks() throws IOException, JSONExce String expected = readResourceFile("classpath:canned/sample13_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } @Test @@ -365,13 +304,7 @@ public void verifyTitleFreeThemes() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample14_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } /** * During polygon construction, there are times that the XML do not provide the proper dimension, 2D or 3D. @@ -385,13 +318,25 @@ public void verifyPolygonMissingDimensionAttributeWorks() throws IOException, JS String expected = readResourceFile("classpath:canned/sample15_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); + } + + @Test + public void verifyProviderNameNullWorks() throws IOException, JSONException { + String xml = readResourceFile("classpath:canned/sample16.xml"); + String expected = readResourceFile("classpath:canned/sample16.json"); + indexerService.indexMetadata(xml); + + verify(expected); + } + + @Test + public void verifyCiRoleCodeNullWorks() throws IOException, JSONException { + String xml = readResourceFile("classpath:canned/sample17.xml"); + String expected = readResourceFile("classpath:canned/sample17.json"); + indexerService.indexMetadata(xml); + + verify(expected); } /** * Metadata have geometry which result in a point and not a polygon @@ -404,14 +349,7 @@ public void verifyHandleProjectionGeometry() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample_incorrect_projection_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } /** * Metadata have geometry which result in a point and not a polygon @@ -424,14 +362,7 @@ public void verifyAbstractCitationNullWorks() throws IOException, JSONException String expected = readResourceFile("classpath:canned/sample_abstract_citation_null_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); } /** * The date field contains year only or year-month only. We need to handle this case. @@ -444,13 +375,28 @@ public void verifyMalformDateTimeWorks() throws IOException, JSONException { String expected = readResourceFile("classpath:canned/sample_malform_date_stac.json"); indexerService.indexMetadata(xml); - Map content = objectMapper.readValue(lastRequest.get().document().toString(), Map.class); - String out = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(content); - log.info(out); - JSONAssert.assertEquals( - objectMapper.readTree(expected).toPrettyString(), - objectMapper.readTree(out.strip()).toPrettyString(), - JSONCompareMode.STRICT - ); + verify(expected); + } + /** + * Sample contains invalid polygon where only x coor is valid but y is NaN + * + * @throws IOException - Do not expect to throw + */ + @Test + public void verifyMalformCoordinateWorks() throws IOException, JSONException { + String xml = readResourceFile("classpath:canned/sample_invalid_polygon.xml"); + String expected = readResourceFile("classpath:canned/sample_invalid_polygon.json"); + indexerService.indexMetadata(xml); + + verify(expected); + } + + @Test + public void verifyNonNodedIntersectionsWorks() throws IOException, JSONException { + String xml = readResourceFile("classpath:canned/sample_non_noded_intersections.xml"); + String expected = readResourceFile("classpath:canned/sample_non_noded_intersections_stac.json"); + indexerService.indexMetadata(xml); + + verify(expected); } } diff --git a/indexer/src/test/java/au/org/aodn/esindexer/utils/GeometryBaseTest.java b/indexer/src/test/java/au/org/aodn/esindexer/utils/GeometryBaseTest.java index 9fc68c20..a7624856 100644 --- a/indexer/src/test/java/au/org/aodn/esindexer/utils/GeometryBaseTest.java +++ b/indexer/src/test/java/au/org/aodn/esindexer/utils/GeometryBaseTest.java @@ -10,16 +10,17 @@ import java.math.BigDecimal; import java.util.Optional; -import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.assertFalse; -import static org.junit.jupiter.api.Assertions.assertArrayEquals; - import org.locationtech.jts.geom.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static org.junit.jupiter.api.Assertions.*; public class GeometryBaseTest { - private static final GeometryFactory factory = new GeometryFactory(); + protected static final GeometryFactory factory = new GeometryFactory(); + protected static final Logger logger = LoggerFactory.getLogger(GeometryBaseTest.class); @Test public void verifyGetCoordinatesPoint() { @@ -38,7 +39,7 @@ public void verifyGetCoordinatesPoint() { boundingBoxType.setNorthBoundLatitude(b); Optional point = GeometryBase.getCoordinates(boundingBoxType); - assertTrue(point.get() instanceof Point, "We found a point"); + assertInstanceOf(Point.class, point.orElse(null), "We found a point"); } @Test @@ -62,7 +63,7 @@ public void verifyGetCoordinatesPolygon() { boundingBoxType.setNorthBoundLatitude(n); Optional point = GeometryBase.getCoordinates(boundingBoxType); - assertTrue(point.get() instanceof Polygon, "We found a polygon"); + assertInstanceOf(Polygon.class, point.orElse(null), "We found a polygon"); } @Test @@ -83,8 +84,17 @@ public void testIsCounterClockwise() { new Coordinate(0, 0) }; - assertTrue(GeometryUtils.isCounterClockwise(ccwCoords)); - assertFalse(GeometryUtils.isCounterClockwise(cwCoords)); + assertEquals( + GeometryUtils.orientation(ccwCoords), + GeometryUtils.PointOrientation.COUNTER_CLOCKWISE, + "CCW coords" + ); + + assertEquals( + GeometryUtils.orientation(cwCoords), + GeometryUtils.PointOrientation.CLOCKWISE, + "CW coords" + ); } @Test @@ -110,7 +120,7 @@ public void testReverseCoordinates() { } @Test - public void testEnsureCounterClockwise() { + public void testEnsureCounterClockwise1() { // A clockwise polygon Coordinate[] cwCoords = new Coordinate[] { new Coordinate(0, 0), @@ -122,8 +132,18 @@ public void testEnsureCounterClockwise() { LinearRing cwRing = factory.createLinearRing(cwCoords); Polygon cwPolygon = factory.createPolygon(cwRing); + assertEquals( + GeometryUtils.orientation(cwCoords), + GeometryUtils.PointOrientation.CLOCKWISE, + "CW" + ); + Polygon ccwPolygon = GeometryUtils.ensureCounterClockwise(cwPolygon, factory); - assertTrue(GeometryUtils.isCounterClockwise(ccwPolygon.getExteriorRing().getCoordinates())); + assertEquals( + GeometryUtils.orientation(ccwPolygon.getExteriorRing().getCoordinates()), + GeometryUtils.PointOrientation.COUNTER_CLOCKWISE, + "CCW" + ); // A counterclockwise polygon should remain unchanged Coordinate[] ccwCoords = new Coordinate[] { @@ -137,6 +157,60 @@ public void testEnsureCounterClockwise() { Polygon originalCcwPolygon = factory.createPolygon(ccwRing); Polygon ensuredCcwPolygon = GeometryUtils.ensureCounterClockwise(originalCcwPolygon, factory); - assertTrue(GeometryUtils.isCounterClockwise(ensuredCcwPolygon.getExteriorRing().getCoordinates())); + assertEquals( + GeometryUtils.orientation(ensuredCcwPolygon.getExteriorRing().getCoordinates()), + GeometryUtils.PointOrientation.COUNTER_CLOCKWISE, + "CCW" + ); + } + + @Test + public void testEnsureCounterClockwise2() { + Coordinate[] coordinates = new Coordinate[] { + new Coordinate(118.000, -35.999), + new Coordinate(118.000, -34), + new Coordinate(112, -34), + new Coordinate(112, -32), + new Coordinate(126, -32), + new Coordinate(126, -34), + new Coordinate(123.999, -34), + new Coordinate(123.999, -35.999), + new Coordinate(118.000, -35.999), + }; + LinearRing cwRing = factory.createLinearRing(coordinates); + Polygon cwPolygon = factory.createPolygon(cwRing); + + Polygon ccwPolygon = GeometryUtils.ensureCounterClockwise(cwPolygon, factory); + assertEquals( + GeometryUtils.orientation(ccwPolygon.getExteriorRing().getCoordinates()), + GeometryUtils.PointOrientation.COUNTER_CLOCKWISE, + "CCW" + ); + } + + @Test + public void testEnsureCounterClockwise3() { + Coordinate[] coordinates = new Coordinate[] { + new Coordinate(134.000, -37.999), + new Coordinate(134.000, -35.999), + new Coordinate(132.000, -35.999), + new Coordinate(132.0, -34), + new Coordinate(130, -34), + new Coordinate(130, -32), + new Coordinate(136.0, -32), + new Coordinate(136.0, -34), + new Coordinate(140, -34), + new Coordinate(140, -37.999), + new Coordinate(134, -37.999), + }; + LinearRing cwRing = factory.createLinearRing(coordinates); + Polygon cwPolygon = factory.createPolygon(cwRing); + + Polygon ccwPolygon = GeometryUtils.ensureCounterClockwise(cwPolygon, factory); + assertEquals( + GeometryUtils.orientation(ccwPolygon.getExteriorRing().getCoordinates()), + GeometryUtils.PointOrientation.COUNTER_CLOCKWISE, + "CCW" + ); } } diff --git a/indexer/src/test/resources/canned/sample11_stac.json b/indexer/src/test/resources/canned/sample11_stac.json index 13265b02..180df415 100644 --- a/indexer/src/test/resources/canned/sample11_stac.json +++ b/indexer/src/test/resources/canned/sample11_stac.json @@ -121,11 +121,11 @@ [ [ 130, - -13 + -12.999999999999986 ], [ 131, - -13 + -12.999999999999986 ], [ 131, @@ -137,7 +137,7 @@ ], [ 130, - -13 + -12.999999999999986 ] ] ] @@ -183,11 +183,11 @@ ], [ 114, - -21 + -21.000000000000018 ], [ 113, - -21 + -21.000000000000018 ], [ 113, @@ -229,23 +229,23 @@ [ [ 136, - -36 + -35.999999999999986 ], [ 137, - -36 + -35.999999999999986 ], [ 137, - -35 + -35.00000000000001 ], [ 136, - -35 + -35.00000000000001 ], [ 136, - -36 + -35.999999999999986 ] ] ] @@ -283,11 +283,11 @@ [ [ 151, - -35 + -35.00000000000001 ], [ 152, - -35 + -35.00000000000001 ], [ 152, @@ -299,7 +299,7 @@ ], [ 151, - -35 + -35.00000000000001 ] ] ] @@ -310,23 +310,23 @@ [ [ 148, - -43 + -42.999999999999986 ], [ 149, - -43 + -42.999999999999986 ], [ 149, - -42 + -42.00000000000001 ], [ 148, - -42 + -42.00000000000001 ], [ 148, - -43 + -42.999999999999986 ] ] ] diff --git a/indexer/src/test/resources/canned/sample15_stac.json b/indexer/src/test/resources/canned/sample15_stac.json index e8789dd2..e12c7962 100644 --- a/indexer/src/test/resources/canned/sample15_stac.json +++ b/indexer/src/test/resources/canned/sample15_stac.json @@ -46,60 +46,60 @@ "coordinates": [ [ [ - 151.084, - -24.5215 + 151.083984375, + -24.521484375 ], [ - 153.8086, - -24.5215 + 153.80859375, + -24.521484375 ], [ - 153.457, - -20.8301 + 153.45703125, + -20.830078125 ], [ - 147.1289, - -17.4902 + 147.12890625, + -17.490234375 ], [ - 145.8105, - -13.7988 + 145.810546875, + -13.798828125 ], [ - 144.4922, - -12.832 + 144.4921875, + -12.832031250000002 ], [ - 144.2285, - -9.8437 + 144.228515625, + -9.84375 ], [ - 142.1191, - -9.9316 + 142.119140625, + -9.931640625 ], [ - 142.3828, - -11.7773 + 142.3828125, + -11.77734375 ], [ - 143.6133, - -14.7656 + 143.61328125000003, + -14.765625 ], [ - 144.7559, - -14.9414 + 144.755859375, + -14.94140625 ], [ - 146.3379, - -19.5996 + 146.337890625, + -19.599609375 ], [ - 148.4473, - -21.0059 + 148.447265625, + -21.005859375000004 ], [ - 151.084, - -24.5215 + 151.083984375, + -24.521484375 ] ] ] diff --git a/indexer/src/test/resources/canned/sample16.json b/indexer/src/test/resources/canned/sample16.json new file mode 100644 index 00000000..40db38bd --- /dev/null +++ b/indexer/src/test/resources/canned/sample16.json @@ -0,0 +1,242 @@ +{ + "title" : "Temperature - Salinity distributions / CTD data within Jervis Bay and out across the shelf: 1989", + "description" : "This dataset is a component of the 'Jervis Bay Baseline Studies' project conducted by the Department of Defence, CSIRO and the Australian Defence Force Academy.\n\n Approximately once per month between 1988-1991, temperature-salinity surveys were conducted within Jervis Bay and out across the continental shelf. Measurements were made using a Neil Brown 'Smart' CTD. On each day of sampling, ~10 stations were chosen across the shelf, with the CTD recorder measuring salinity, temperature and sigma-T through the water column.\n\n This record describes CTD data collected in 1989. For each day of sampling three resources are provided: 1) A text document providing details of sampling locations, as well as a CTD summary collected from each of the stations every 4-10 metres down the water column, 2) A map showing the location of each sampling station and, 3) An excel file providing the raw CTD data collected.\n\n This is one of nine child records that relate to the parent, 13391430-2ae8-11dd-a735-00188b4c0af8. A pdf outlining the structure and hierarchy of all metadata records relating to this project is available to download through this record. Also available is a pdf of a published working paper documenting this experiment and the results.", + "extent" : { + "bbox" : [ [ 150.5, -35.5, 151.5, -34.5 ], [ 150.5, -35.5, 151.5, -34.5 ] ], + "temporal" : [ [ "1989-01-11T13:00:00Z", "1989-11-15T12:59:59Z" ], [ "1989-01-11T13:00:00Z", "1989-11-15T12:59:59Z" ] ] + }, + "summaries" : { + "score" : 1, + "status" : "completed", + "credits" : [ "Funded by The Department of Defence", "Funded by CSIRO Division of Fisheries Research" ], + "scope" : { + "code" : "dataset", + "name" : "" + }, + "statement" : "For each day of sampling three resources are provided: 1) A text document providing details of sampling locations, as well as a CTD summary collected from each of the stations every 4-10 metres down the water column, 2) A map showing the location of each sampling station and, 3) An excel file providing the raw CTD data collected.\n\n It should be noted that the location of stations were originally recorded as distance from Point Perpendicular or Plantation Point on a specified bearing. While processing this data I have used this information to generate lat/long coordinates for each of the stations.\n\n Parameters / Structure: Station name, time (AEST), date, water depth (metres), station coordinates (degrees, seconds, minutes), distance from Plantation Point (km and nm), distance from Pt Perpendicular (km and nm), bearing (T) to either Pt. Perpendicular or Plantation Pt., temperature (oC), salinity (PSU), sigma T (no units). Google Earth image shows the location of sampling stations.", + "creation" : "2008-04-10T16:04:00", + "revision" : "2015-01-06T16:40:03", + "update_frequency" : "completed", + "proj:geometry" : { + "geometries" : [ { + "type" : "Polygon", + "coordinates" : [ [ [ 150.5, -35.5 ], [ 151.5, -35.5 ], [ 151.5, -34.5 ], [ 150.5, -34.5 ], [ 150.5, -35.5 ] ] ] + } ], + "type" : "GeometryCollection" + }, + "temporal" : [ { + "start" : "1989-01-11T13:00:00Z", + "end" : "1989-11-15T12:59:59Z" + } ], + "centroid" : [ [ 151.093, -35.047 ] ] + }, + "contacts" : [ { + "roles" : [ "pointOfContact", "about" ], + "organization" : "Australian Defence Force Academy (ADFA)", + "name" : "Robertson, Robin, Dr", + "position" : "", + "emails" : [ "r.robertson@adfa.edu.au" ], + "addresses" : [ { + "deliveryPoint" : [ "School of Physical, Environmental and Mathematical Science, Australian Defence Force Academy" ], + "city" : "Canberra", + "country" : "Australia", + "postalCode" : "2600", + "administrativeArea" : "ACT" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "61 2 6268 8289" + }, { + "roles" : [ "facsimile" ], + "value" : "61 2 6268 8017" + } ], + "links" : [ { + "href" : "http://www.pems.adfa.edu.au/~s3162789/", + "type" : "WWW:LINK-1.0-http--link" + } ] + }, { + "roles" : [ "pointOfContact", "metadata" ], + "organization" : "Australian Defence Force Academy (ADFA)", + "name" : "Robertson, Robin, Dr", + "position" : "", + "emails" : [ ], + "addresses" : [ ], + "phones" : [ ], + "links" : [ ] + }, { + "roles" : [ "principalInvestigator", "citation" ], + "organization" : "Australian Defence Force Academy (ADFA)", + "name" : "Holloway, Peter", + "position" : "", + "emails" : [ ], + "addresses" : [ ], + "phones" : [ ], + "links" : [ { + "href" : "http://www.marine.csiro.au/~cra171/holloway/MFR54pp585-6.pdf", + "type" : "WWW:LINK-1.0-http--link" + } ] + }, { + "roles" : [ "collaborator", "citation" ], + "organization" : "Australian Defence Force Academy (ADFA)", + "name" : "Symonds, Graham", + "position" : "", + "emails" : [ ], + "addresses" : [ ], + "phones" : [ ], + "links" : [ ] + }, { + "roles" : [ "collaborator", "citation" ], + "organization" : "Australian Defence Force Academy (ADFA)", + "name" : "Nunes-Vaz, Rick", + "position" : "", + "emails" : [ ], + "addresses" : [ ], + "phones" : [ ], + "links" : [ ] + }, { + "roles" : [ "collaborator", "citation" ], + "organization" : "Australian Defence Force Academy (ADFA)", + "name" : "Jeffrey, Marcus", + "position" : "", + "emails" : [ ], + "addresses" : [ ], + "phones" : [ ], + "links" : [ ] + } ], + "languages" : [ { + "code" : "eng", + "name" : "English" + } ], + "links" : [ { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_01_12.zip", + "rel" : "related", + "type" : "", + "title" : "1989_01_12.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_02_09.zip", + "rel" : "related", + "type" : "", + "title" : "1989_02_09.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_04_13.zip", + "rel" : "related", + "type" : "", + "title" : "1989_04_13.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_05_09.zip", + "rel" : "related", + "type" : "", + "title" : "1989_05_09.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_07_12.zip", + "rel" : "related", + "type" : "", + "title" : "1989_07_12.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_07_28.zip", + "rel" : "related", + "type" : "", + "title" : "1989_07_28.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_08_29.zip", + "rel" : "related", + "type" : "", + "title" : "1989_08_29.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_11_15.zip", + "rel" : "related", + "type" : "", + "title" : "1989_11_15.zip" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/Hierarchy.pdf", + "rel" : "related", + "type" : "", + "title" : "Hierarchy.pdf" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/Temperature_and_Salinity_-_February_1988_to_April_1990.PDF", + "rel" : "related", + "type" : "", + "title" : "Temperature_and_Salinity_-_February_1988_to_April_1990.PDF" + }, { + "href" : "http://geoserver-123.aodn.org.au/geoserver/wms", + "rel" : "wms", + "type" : "", + "title" : "aodn:JBoceanographic_data" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8", + "rel" : "describedby", + "type" : "text/html", + "title" : "Full metadata link" + } ], + "license" : "", + "providers" : [ { + "roles" : [ "processor" ] + }, { + "name" : "Australian Defence Force Academy (ADFA)", + "roles" : [ "pointOfContact" ] + } ], + "themes" : [ { + "concepts" : [ { + "id" : "Oceans | Salinity/density | Conductivity", + "url" : null + }, { + "id" : "Oceans | Salinity/density | Salinity", + "url" : null + }, { + "id" : "Oceans | Ocean Circulation | Wind-driven Circulation", + "url" : null + }, { + "id" : "Oceans | Ocean Temperature | Water Temperature", + "url" : null + } ], + "scheme" : "discipline", + "description" : "", + "title" : "Global Change Master Directory Earth Science Keywords v.5.3.8" + }, { + "concepts" : [ { + "id" : "station_name", + "url" : null + }, { + "id" : "time", + "url" : null + }, { + "id" : "date", + "url" : null + }, { + "id" : "depth", + "url" : null + }, { + "id" : "latitude", + "url" : null + }, { + "id" : "longitude", + "url" : null + }, { + "id" : "distance", + "url" : null + }, { + "id" : "bearing", + "url" : null + }, { + "id" : "sea_water_temperature", + "url" : null + }, { + "id" : "sea_water_salinity", + "url" : null + }, { + "id" : "sea_water_density", + "url" : null + } ], + "scheme" : "", + "description" : "", + "title" : "Keywords (Theme)" + } ], + "id" : "05818c50-14c2-11dd-bdaa-00188b4c0af8", + "search_suggestions" : { + "abstract_phrases" : [ ] + }, + "sci:citation" : "{\"suggestedCitation\":null,\"useLimitations\":[\"Every effort has been made to archive the project data and details as accurately as possible. It should be recognised however, that due to the passing away of the principal investigator in 2002, this archival was undertaken by a data facilitator not involved with the original data collection.\"],\"otherConstraints\":[\"© Commonwealth of Australia 2008. The Commonwealth gives no warranty regarding the data's accuracy, completeness, currency or suitability for any particular purpose. All data provided through this record are subject to a licence setting out the conditions under which the data may be used, and the rights and responsibilities of the data receiver. The licence may be viewed at: http://www.osdm.gov.au/OSDM/Policies+and+Guidelines/Spatial+Data+Access+and+Pricing/OSDM+Licence+Internet+-+no+registration/default.aspx.\"]}", + "type" : "Collection", + "stac_version" : "1.0.0", + "stac_extensions" : [ "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", "https://stac-extensions.github.io/projection/v1.1.0/schema.json", "https://stac-extensions.github.io/language/v1.0.0/schema.json", "https://stac-extensions.github.io/themes/v1.0.0/schema.json", "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" ] +} diff --git a/indexer/src/test/resources/canned/sample16.xml b/indexer/src/test/resources/canned/sample16.xml new file mode 100644 index 00000000..30971568 --- /dev/null +++ b/indexer/src/test/resources/canned/sample16.xml @@ -0,0 +1,1282 @@ + + + + + + 05818c50-14c2-11dd-bdaa-00188b4c0af8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + info@bluenet.org.au + + + + + + + BlueNet Data Facilitator + + + + + + + + + + + + + + Australian Defence Force Academy (ADFA) + + + + + Robertson, Robin, Dr + + + + + + + r.robertson@adfa.edu.au + + + + + + + + + + + + + + + 2008-04-10T16:04:00 + + + + + + + + + + 2015-01-06T16:40:03 + + + + + + + + + + ISO 19115-3:2018 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8 + + + WWW:LINK-1.0-http--metadata-URL + + + Point of truth URL of this metadata record + + + + + + + + + Temperature - Salinity distributions / CTD data within Jervis Bay and out across the shelf: 1989 + + + + + 2008-04-10T11:33:00 + + + + + + + + + + + + + + + Australian Defence Force Academy (ADFA) + + + + + Holloway, Peter + + + + + + + http://www.marine.csiro.au/~cra171/holloway/MFR54pp585-6.pdf + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + + + + + + + + Australian Defence Force Academy (ADFA) + + + + + Symonds, Graham + + + + + + + Graham.Symonds@csiro.au + + + + + + + + + + + + + + + + + + + + Australian Defence Force Academy (ADFA) + + + + + Nunes-Vaz, Rick + + + + + + + Rick.Nunes-Vaz@dsto.defence.gov.au + + + + + + + + + + + + + + + + + + + + Australian Defence Force Academy (ADFA) + + + + + Jeffrey, Marcus + + + + + + + + + + + This dataset is a component of the 'Jervis Bay Baseline Studies' project conducted by the Department of Defence, CSIRO and the Australian Defence Force Academy. + + Approximately once per month between 1988-1991, temperature-salinity surveys were conducted within Jervis Bay and out across the continental shelf. Measurements were made using a Neil Brown 'Smart' CTD. On each day of sampling, ~10 stations were chosen across the shelf, with the CTD recorder measuring salinity, temperature and sigma-T through the water column. + + This record describes CTD data collected in 1989. For each day of sampling three resources are provided: 1) A text document providing details of sampling locations, as well as a CTD summary collected from each of the stations every 4-10 metres down the water column, 2) A map showing the location of each sampling station and, 3) An excel file providing the raw CTD data collected. + + This is one of nine child records that relate to the parent, 13391430-2ae8-11dd-a735-00188b4c0af8. A pdf outlining the structure and hierarchy of all metadata records relating to this project is available to download through this record. Also available is a pdf of a published working paper documenting this experiment and the results. + + + To monitor the monthly variability of stratification within Jervis Bay and adjacent shelf + + + Funded by The Department of Defence + + + Funded by CSIRO Division of Fisheries Research + + + + + + + + + + + + + Australian Defence Force Academy (ADFA) + + + + + Robertson, Robin, Dr + + + + + + + 61 2 6268 8289 + + + + + + + + + + 61 2 6268 8017 + + + + + + + + + + School of Physical, Environmental and Mathematical Science, Australian Defence Force Academy + + + Canberra + + + ACT + + + 2600 + + + Australia + + + r.robertson@adfa.edu.au + + + + + + + http://www.pems.adfa.edu.au/~s3162789/ + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + climatologyMeteorologyAtmosphere + + + environment + + + oceans + + + + + + + 150.5 + + + 151.5 + + + -35.5 + + + -34.5 + + + + + + + + + + + Marine Community Profile v1.2 Geographic extent names + + + + + 2006-10-13T15:25:00 + + + + + + + + + + + + + + + Australian Ocean Data Centre Joint Facility + + + + + + + http://www.aodc.gov.au/ + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + Jervis Bay, ACT + + + + + + + + + + 1989-01-12 + 1989-11-15 + + + + + + + + 0 + + + 185 + + + + + + + + + + + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_01_12_CTD_s.png + + + thumbnail + + + png + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_01_12_CTD.png + + + large_thumbnail + + + png + + + + + + + + + Microsoft Word + + + + + 2003 + + + + + + + + + + + Microsoft Excel + + + + + 2003 + + + + + + + + + + + Windows Photo Gallery + + + + + 2007 + + + + + + + + + + + Adobe Reader + + + + + 8.1.3 + + + + + + + + + Oceans | Salinity/density | Conductivity + + + Oceans | Salinity/density | Salinity + + + Oceans | Ocean Circulation | Wind-driven Circulation + + + Oceans | Ocean Temperature | Water Temperature + + + + + + + + Global Change Master Directory Earth Science Keywords v.5.3.8 + + + + + 2007-04-17T10:31:00 + + + + + + + + + + + + + + + NASA + + + + + + + http://gcmd.gsfc.nasa.gov/Resources/valids/ + + + WWW:LINK-1.0-http--link + + + + + + + + + + + + + + + + + station_name + + + time + + + date + + + depth + + + latitude + + + longitude + + + distance + + + bearing + + + sea_water_temperature + + + sea_water_salinity + + + sea_water_density + + + + + + + + + + + + + + + + © Commonwealth of Australia 2008. The Commonwealth gives no warranty regarding the data's accuracy, completeness, currency or suitability for any particular purpose. All data provided through this record are subject to a licence setting out the conditions under which the data may be used, and the rights and responsibilities of the data receiver. The licence may be viewed at: http://www.osdm.gov.au/OSDM/Policies+and+Guidelines/Spatial+Data+Access+and+Pricing/OSDM+Licence+Internet+-+no+registration/default.aspx. + + + + + + + Every effort has been made to archive the project data and details as accurately as possible. It should be recognised however, that due to the passing away of the principal investigator in 2002, this archival was undertaken by a data facilitator not involved with the original data collection. + + + + + + + + + Parent record: Temperature salinity (CTD) profiles conducted within Jervis Bay and out across the shelf + + + + + 2008-04-17T00:00:00 + + + + + + + + + + + + + + + + + + + info@bluenet.org.au + + + + + + + BlueNet Data Facilitator + + + + + + + + + + + + + + + + + + + + + + [Holloway, P.E., Symonds, G. Nunes-Vaz, R. & M. Jeffrey. 1991: Oceanographic Measurements in Jervis Bay: April 1989 to April 1990: Working Paper 1991/1, Department of Geography and Oceanography, University College, Australian Defence Force Academy, Canberra, 48pp] + [Holloway, P.E., Symonds, G. Nunes-Vaz, R., Jeffrey, M. & J.Mathias. 1989: Oceanographic Measurements in Jervis Bay: December 1988 to January 1989: Working Paper 1989/2, Department of Geography and Oceanography, University College, Australian Defence Force Academy, Canberra, 44pp] + [Holloway, P.E., Symonds, G. Nunes-Vaz, R. & M. Jeffrey. 1991: Oceanographic Measurements in Jervis Bay: July to October 1990: Working Paper 1991/2, Department of Geography and Oceanography, University College, Australian Defence Force Academy, Canberra, 29pp] + [Holloway, P.E., Symonds, G. & R. Nunes-Vaz. 1992: Temperature and salinity measurements in the Jervis Bay region May 1990 to December 1991: Working Paper 1992/1, Department of Geography and Oceanography, University College, Australian Defence Force Academy, Canberra, 64pp] + [Holloway, P.E., Symonds, G., Nunes-Vaz, R. & M. Jeffrey. 1990: Temperature and salinity measurements in Jervis Bay and on the adjacent shelf February 1988 to April 1990: Working Paper 1990/1, Department of Geography and Oceanography, University College, Australian Defence Force Academy, Canberra, 65pp] + [Holloway, P.E., Symonds, G. & R. Nunes-Vaz. 1992: Acoustic doppler current profiler measurements in Jervis Bay December 1990 to January 1991 and July 1991 to September 1991: Working Paper 1992/2, Department of Geography and Oceanography, University College, Australian Defence Force Academy, Canberra, 42pp] + [Holloway, P.E., Symonds, G. & R. Nunes-Vaz. 1992: Observations of circulation and exchange processes in Jervis Bay, New South Wales: Australian Journal of Marine and Freshwater Research, 43 (6), 1487-1515] + [Craig, P.D. & P.E. Holloway. 1992: The influence of coastally trapped waves on the circulation in Jervis Bay, New South Wales: in. Dynamics and Exchanges in Estuaries and the Coastal Zone, ed. D. Prantle, Coastal and Estuarine Studies, 40, Springer-Verlag, New York, pp. 9-33] + + + + + + + + + + + + + + + + + + + + station_name + + + + + + + no units + + + + + + + + + Australian Eastern Standard Time (AEST) + + + + + time + + + + + + + no units + + + + + + + + + + + + + + date + + + + + + + no units + + + + + + + + + Water depth + + + + + depth + + + + + + + Metres + + + + + + + + + Station coordinates + + + + + latitude + + + + + + + longitude + + + + + + + Degrees + + + + + + + + + Distance from Plantation Pt. + + + + + distance + + + + + + + Kilometres and Nautical miles + + + + + + + + + Bearing to either Pt. Perpendicular or Plantation Pt. + + + + + bearing + + + + + + + Degrees true + + + + + + + + + + + + + + sea_water_temperature + + + + + + + Degrees Celsius + + + + + + + + + + + + + + sea_water_salinity + + + + + + + Practical Salinity Units + + + + + + + + + + + + + + sea_water_density + + + + + + + sigma T + + + + + + + no units + + + + + + + + + + + + + + + + + Microsoft Word + + + + + 2003 + + + + + + + + + + + Microsoft Excel + + + + + 2003 + + + + + + + + + + + Windows Photo Gallery + + + + + 2007 + + + + + + + + + + + Adobe Reader + + + + + 8.1.3 + + + + + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_01_12.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_01_12.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 12/01/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_02_09.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_02_09.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 09/02/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_04_13.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_04_13.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 13/04/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_05_09.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_05_09.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 09/05/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_07_12.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_07_12.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 12/07/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_07_28.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_07_28.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 28/07/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_08_29.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_08_29.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 29/08/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/1989_11_15.zip + + + WWW:DOWNLOAD-1.0-http--downloaddata + + + 1989_11_15.zip + + + Zipped folder (.jpg of station locations / .doc with station coordinates / .xls provides raw CTD data): 15/11/89 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/Hierarchy.pdf + + + WWW:DOWNLOAD-1.0-http--downloadother + + + Hierarchy.pdf + + + Hierarchy of metadata records relating to the 'Water Circulation of Jervis Bay' project + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/05818c50-14c2-11dd-bdaa-00188b4c0af8/attachments/Temperature_and_Salinity_-_February_1988_to_April_1990.PDF + + + WWW:DOWNLOAD-1.0-http--downloadother + + + Temperature_and_Salinity_-_February_1988_to_April_1990.PDF + + + WORKING PAPER 1990/1. Temperature and Salinity: Surveys in Jervis Bay and on the Adjacent Shelf: February 1988 to April 1990 + + + + + + + http://geoserver-123.aodn.org.au/geoserver/wms + + + OGC:WMS-1.1.1-http-get-map + + + aodn:JBoceanographic_data + + + Jervis Bay Oceanographic Data + + + + + + + + + + + For each day of sampling three resources are provided: 1) A text document providing details of sampling locations, as well as a CTD summary collected from each of the stations every 4-10 metres down the water column, 2) A map showing the location of each sampling station and, 3) An excel file providing the raw CTD data collected. + + It should be noted that the location of stations were originally recorded as distance from Point Perpendicular or Plantation Point on a specified bearing. While processing this data I have used this information to generate lat/long coordinates for each of the stations. + + Parameters / Structure: Station name, time (AEST), date, water depth (metres), station coordinates (degrees, seconds, minutes), distance from Plantation Point (km and nm), distance from Pt Perpendicular (km and nm), bearing (T) to either Pt. Perpendicular or Plantation Pt., temperature (oC), salinity (PSU), sigma T (no units). Google Earth image shows the location of sampling stations. + + + + + + + + + + + + + + Neil Brown 'Smart' CTD recorder + + + + + + + + + + + + + + + + diff --git a/indexer/src/test/resources/canned/sample17.json b/indexer/src/test/resources/canned/sample17.json new file mode 100644 index 00000000..78078ea7 --- /dev/null +++ b/indexer/src/test/resources/canned/sample17.json @@ -0,0 +1,94 @@ +{ + "title" : "NT Alligator Rivers Region Aerial Survey Raw Bird Count", + "description" : "Quantitative waterbird surveys over seasonal wetlands of the Alligator Rivers Region (ARR) of the NT, provided by the Supervising Scientist Division (SSD) of the Commonwealth Department of the Environment, Water, Heritage and the Arts (DEWHA). Systematic aerial survey, conducted monthly from June 1981 to August 1984. Environmental information on dominant cover types is also included (Wet Plain, Dry Plain, Wet Melaleuca, Dry Melaleuca, Open Water, Dry Woodland, Mud).", + "extent" : { + "bbox" : [ ], + "temporal" : [ [ null, null ] ] + }, + "summaries" : { + "score" : 1, + "status" : "", + "credits" : [ ], + "scope" : { + "code" : "dataset", + "name" : "" + }, + "statement" : "", + "creation" : "2015-02-02T15:39:42", + "revision" : "2018-11-14T15:23:41", + "update_frequency" : "other", + "temporal" : [ ] + }, + "contacts" : [ { + "roles" : [ "about" ], + "organization" : "CSIRO", + "name" : "Chris Moeseneder", + "position" : "", + "emails" : [ "chris.moeseneder@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "" ], + "city" : "", + "country" : "", + "postalCode" : "", + "administrativeArea" : "" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ ] + }, { + "roles" : [ "metadata" ], + "organization" : "CSIRO", + "name" : "Chris Moeseneder", + "position" : "", + "emails" : [ "chris.moeseneder@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "" ], + "city" : "", + "country" : "", + "postalCode" : "", + "administrativeArea" : "" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ ] + } ], + "languages" : [ { + "code" : "eng", + "name" : "English" + } ], + "links" : [ { + "href" : "http://data.aodn.org.au/TERN/ACEF/Ecology/ARRAerialSurveyRaw3.csv", + "rel" : "related", + "type" : "text/html", + "title" : "Download data" + }, { + "href" : "https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/0bef875d-5f77-4b31-bd56-de73fafc2b2e", + "rel" : "describedby", + "type" : "text/html", + "title" : "Full metadata link" + } ], + "license" : "", + "providers" : [ { + "name" : "CSIRO", + "roles" : [ null ] + } ], + "themes" : [ ], + "id" : "0bef875d-5f77-4b31-bd56-de73fafc2b2e", + "search_suggestions" : { + "abstract_phrases" : [ ] + }, + "sci:citation" : "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":null}", + "type" : "Collection", + "stac_version" : "1.0.0", + "stac_extensions" : [ "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", "https://stac-extensions.github.io/projection/v1.1.0/schema.json", "https://stac-extensions.github.io/language/v1.0.0/schema.json", "https://stac-extensions.github.io/themes/v1.0.0/schema.json", "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" ] +} diff --git a/indexer/src/test/resources/canned/sample17.xml b/indexer/src/test/resources/canned/sample17.xml new file mode 100644 index 00000000..cc3c2b44 --- /dev/null +++ b/indexer/src/test/resources/canned/sample17.xml @@ -0,0 +1,358 @@ + + + + + + 0bef875d-5f77-4b31-bd56-de73fafc2b2e + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + CSIRO + + + + + Chris Moeseneder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + chris.moeseneder@csiro.au + + + + + + + + + + + + + + + + + + 2015-02-02T15:39:42 + + + + + + + + + + 2018-11-14T15:23:41 + + + + + + + + + + ISO 19115-3:2018 + + + + + + + https://catalogue.aodn.org.au:443/geonetwork/srv/api/records/0bef875d-5f77-4b31-bd56-de73fafc2b2e + + + WWW:LINK-1.0-http--metadata-URL + + + Point of truth URL of this metadata record + + + + + + + + + + + + EPSG + + + + + + + + + + + NT Alligator Rivers Region Aerial Survey Raw Bird Count + + + + + 2015-02-01T00:00:00 + + + + + + + + + + Quantitative waterbird surveys over seasonal wetlands of the Alligator Rivers Region (ARR) of the NT, provided by the Supervising Scientist Division (SSD) of the Commonwealth Department of the Environment, Water, Heritage and the Arts (DEWHA). Systematic aerial survey, conducted monthly from June 1981 to August 1984. Environmental information on dominant cover types is also included (Wet Plain, Dry Plain, Wet Melaleuca, Dry Melaleuca, Open Water, Dry Woodland, Mud). + + + + + + + + CSIRO + + + + + Chris Moeseneder + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + chris.moeseneder@csiro.au + + + + + + + + + + + + + + + + + + + + + + + + + oceans + + + + + + + + 132.79106 + + + 132.8853863 + + + -12.36396 + + + -12.2553 + + + + + + + + + + 15/06/1981 + + + + + 15/08/1984 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://data.aodn.org.au/TERN/ACEF/Ecology/ARRAerialSurveyRaw3.csv + + + WWW:LINK-1.0-http--link + + + Download data + + + + + + + + + + + + + + + + + + + + + + diff --git a/indexer/src/test/resources/canned/sample7_stac.json b/indexer/src/test/resources/canned/sample7_stac.json index 184d8234..db235d54 100644 --- a/indexer/src/test/resources/canned/sample7_stac.json +++ b/indexer/src/test/resources/canned/sample7_stac.json @@ -1,213 +1,967 @@ { - "title" : "RapidBenthos", - "description" : "Link to 12 3D photogrammetric models and underlying images to replicate the method presented in the publication titled “RapidBenthos – Automated segmentation and multi-view classification of coral reef communities from photogrammetric reconstruction”. These sites were selected to assess the performance of RapidBenthos in different environmental conditions and reef habitats, as they ranged from high visibility offshore reefs to turbid inshore reefs, spanned depths from 5 to 15 meters, and included a range of intra-reefal environments (i.e., reef front, flank, back, and lagoon).\n\n\n All sites were imaged using a standardized diver-rig photogrammetry workflow described by Gordon et al. (2023). High-resolution benthic images (5686 x 3217 pixels) were captured using two Nikon D850 DSLR cameras with 20 mm Nikkor prime lens shooting at 0.5 second intervals (full camera settings described in (Gordon et al., 2023). Cameras were housed in Nauticam underwater housings with 8-inch dome ports and were mounted on an aluminium rig at a distance of 57 cm between lenses (60 % overlap between adjacent images, Figure 1c). Each site was imaged by a single diver on SCUBA over a period of 10-15 minutes to capture approximately 3,000 photos. Nadiral and oblique imagery was captured at an altitude of approximately 1.5 m using a “lawn-mowing” swim pattern consisting of 5 longitudinal passes and an additional 4-8 perpendicular passes. The swim pattern and speed used ensured a minimum overlap of 80 and 60 % between temporally and spatially adjacent photos, respectively (Figure 1d). Six GPCs were distributed across the depth gradient of the site prior imaging to scale resultant models in X, Y, and Z axes (details provided in(Gordon et al., 2023). Depth was also recorded for each GPC to incorporate bathymetric information into 3D model building.\n\n\n The RapidBenthos workflow was applyed to each plots, segmenting and calssifying benthic constituents on the orthomosaics. This method resulted in extracting community compostion and colony-level metrics (i.e., colony planar-area and colony frequency). The significance of this research lies in devlopping a workflow that automatically extract community composition information from close-range photogrammetry in any coral reefs environment. We eveluated that our method was 195 time faster than manual segmentation and classification allowing to sustainably scale 3D photogrammetry mointoring, both in replication and size of reefs surveyed compared to manual data extraction.\n\n\n Due to the large data files, the data can be accessed on request.", - "extent" : { - "bbox" : [ [ 142.9417419434, -23.8933715259, 152.3920440674, -9.7347748815 ], [ 142.9417419434, -9.998605505, 142.9417419434, -9.998605505 ], [ 143.396987915, -9.7347748815, 143.396987915, -9.7347748815 ], [ 143.396987915, -9.8470978307, 143.396987915, -9.8470978307 ], [ 145.4428482056, -14.6852319114, 145.4428482056, -14.6852319114 ], [ 146.227684021, -16.86303383, 146.227684021, -16.86303383 ], [ 146.4995956421, -18.5720601133, 146.4995956421, -18.5720601133 ], [ 146.5195083618, -18.643642707, 146.5195083618, -18.643642707 ], [ 147.6466369629, -18.778916369, 147.6466369629, -18.778916369 ], [ 150.9700870514, -23.1967007098, 150.9700870514, -23.1967007098 ], [ 151.9247817993, -23.4456087744, 151.9247817993, -23.4456087744 ], [ 152.3920440674, -23.8933715259, 152.3920440674, -23.8933715259 ] ], - "temporal" : [ [ "2021-09-30T14:00:00Z", "2022-12-31T12:59:59Z" ], [ "2021-09-30T14:00:00Z", "2022-12-31T12:59:59Z" ] ] + "title": "RapidBenthos", + "description": "Link to 12 3D photogrammetric models and underlying images to replicate the method presented in the publication titled “RapidBenthos – Automated segmentation and multi-view classification of coral reef communities from photogrammetric reconstruction”. These sites were selected to assess the performance of RapidBenthos in different environmental conditions and reef habitats, as they ranged from high visibility offshore reefs to turbid inshore reefs, spanned depths from 5 to 15 meters, and included a range of intra-reefal environments (i.e., reef front, flank, back, and lagoon).\n\n\n All sites were imaged using a standardized diver-rig photogrammetry workflow described by Gordon et al. (2023). High-resolution benthic images (5686 x 3217 pixels) were captured using two Nikon D850 DSLR cameras with 20 mm Nikkor prime lens shooting at 0.5 second intervals (full camera settings described in (Gordon et al., 2023). Cameras were housed in Nauticam underwater housings with 8-inch dome ports and were mounted on an aluminium rig at a distance of 57 cm between lenses (60 % overlap between adjacent images, Figure 1c). Each site was imaged by a single diver on SCUBA over a period of 10-15 minutes to capture approximately 3,000 photos. Nadiral and oblique imagery was captured at an altitude of approximately 1.5 m using a “lawn-mowing” swim pattern consisting of 5 longitudinal passes and an additional 4-8 perpendicular passes. The swim pattern and speed used ensured a minimum overlap of 80 and 60 % between temporally and spatially adjacent photos, respectively (Figure 1d). Six GPCs were distributed across the depth gradient of the site prior imaging to scale resultant models in X, Y, and Z axes (details provided in(Gordon et al., 2023). Depth was also recorded for each GPC to incorporate bathymetric information into 3D model building.\n\n\n The RapidBenthos workflow was applyed to each plots, segmenting and calssifying benthic constituents on the orthomosaics. This method resulted in extracting community compostion and colony-level metrics (i.e., colony planar-area and colony frequency). The significance of this research lies in devlopping a workflow that automatically extract community composition information from close-range photogrammetry in any coral reefs environment. We eveluated that our method was 195 time faster than manual segmentation and classification allowing to sustainably scale 3D photogrammetry mointoring, both in replication and size of reefs surveyed compared to manual data extraction.\n\n\n Due to the large data files, the data can be accessed on request.", + "extent": { + "bbox": [ + [ + 142.9417419434, + -23.8933715259, + 152.3920440674, + -9.7347748815 + ], + [ + 142.9417419434, + -9.998605505, + 142.9417419434, + -9.998605505 + ], + [ + 143.396987915, + -9.7347748815, + 143.396987915, + -9.7347748815 + ], + [ + 143.396987915, + -9.8470978307, + 143.396987915, + -9.8470978307 + ], + [ + 145.4428482056, + -14.6852319114, + 145.4428482056, + -14.6852319114 + ], + [ + 146.227684021, + -16.86303383, + 146.227684021, + -16.86303383 + ], + [ + 146.4995956421, + -18.5720601133, + 146.4995956421, + -18.5720601133 + ], + [ + 146.5195083618, + -18.643642707, + 146.5195083618, + -18.643642707 + ], + [ + 147.6466369629, + -18.778916369, + 147.6466369629, + -18.778916369 + ], + [ + 150.9700870514, + -23.1967007098, + 150.9700870514, + -23.1967007098 + ], + [ + 151.9247817993, + -23.4456087744, + 151.9247817993, + -23.4456087744 + ], + [ + 152.3920440674, + -23.8933715259, + 152.3920440674, + -23.8933715259 + ] + ], + "temporal": [ + [ + "2021-09-30T14:00:00Z", + "2022-12-31T12:59:59Z" + ], + [ + "2021-09-30T14:00:00Z", + "2022-12-31T12:59:59Z" + ] + ] }, - "summaries" : { - "score" : 75, - "status" : "completed", - "credits" : [ "This data was collected by the 'Field integrated testing project' of EcoRRAP. We thank all team members, students, and volunteers for their efforts.", "The Reef Restoration and Adaptation Program is funded by the partnership between the Australian Government’s Reef Trust and the Great Barrier Reef Foundation." ], - "scope" : { - "code" : "dataset", - "name" : "" + "summaries": { + "score": 75, + "status": "completed", + "credits": [ + "This data was collected by the 'Field integrated testing project' of EcoRRAP. We thank all team members, students, and volunteers for their efforts.", + "The Reef Restoration and Adaptation Program is funded by the partnership between the Australian Government’s Reef Trust and the Great Barrier Reef Foundation." + ], + "scope": { + "code": "dataset", + "name": "" }, - "statement" : "", - "creation" : "2024-05-10T00:00:00", - "revision" : "2024-05-16T00:00:00", - "dataset_group" : "sample", - "update_frequency" : "completed", - "proj:geometry" : { - "geometries" : [ { - "type" : "Point", - "coordinates" : [ 142.9417, -9.9986 ] - }, { - "type" : "Point", - "coordinates" : [ 143.397, -9.7348 ] - }, { - "type" : "Point", - "coordinates" : [ 143.397, -9.8471 ] - }, { - "type" : "Point", - "coordinates" : [ 145.4428, -14.6852 ] - }, { - "type" : "Point", - "coordinates" : [ 146.2277, -16.863 ] - }, { - "type" : "Point", - "coordinates" : [ 146.4996, -18.5721 ] - }, { - "type" : "Point", - "coordinates" : [ 146.5195, -18.6436 ] - }, { - "type" : "Point", - "coordinates" : [ 147.6466, -18.7789 ] - }, { - "type" : "Point", - "coordinates" : [ 150.9701, -23.1967 ] - }, { - "type" : "Point", - "coordinates" : [ 151.9248, -23.4456 ] - }, { - "type" : "Point", - "coordinates" : [ 152.392, -23.8934 ] - } ], - "type" : "GeometryCollection" + "statement": "", + "creation": "2024-05-10T00:00:00", + "revision": "2024-05-16T00:00:00", + "dataset_group": "sample", + "update_frequency": "completed", + "proj:geometry": { + "geometries": [ + { + "type": "Point", + "coordinates": [ + 142.9417419433594, + -9.998605505008365 + ] + }, + { + "type": "Point", + "coordinates": [ + 143.3969879150391, + -9.734774881537218 + ] + }, + { + "type": "Point", + "coordinates": [ + 143.3969879150391, + -9.847097830667153 + ] + }, + { + "type": "Point", + "coordinates": [ + 145.44284820556643, + -14.685231911438933 + ] + }, + { + "type": "Point", + "coordinates": [ + 146.22768402099612, + -16.863033829999537 + ] + }, + { + "type": "Point", + "coordinates": [ + 146.4995956420899, + -18.572060113333826 + ] + }, + { + "type": "Point", + "coordinates": [ + 146.51950836181643, + -18.643642706975996 + ] + }, + { + "type": "Point", + "coordinates": [ + 147.64663696289065, + -18.77891636903418 + ] + }, + { + "type": "Point", + "coordinates": [ + 150.97008705139163, + -23.196700709795724 + ] + }, + { + "type": "Point", + "coordinates": [ + 151.92478179931643, + -23.4456087744153 + ] + }, + { + "type": "Point", + "coordinates": [ + 152.3920440673828, + -23.893371525860456 + ] + } + ], + "type": "GeometryCollection" }, - "temporal" : [ { - "start" : "2021-09-30T14:00:00Z", - "end" : "2022-12-31T12:59:59Z" - } ], - "centroid" : [ ] + "temporal": [ + { + "start": "2021-09-30T14:00:00Z", + "end": "2022-12-31T12:59:59Z" + } + ], + "centroid": [] }, - "contacts" : [ { - "roles" : [ "principalInvestigator", "about" ], - "organization" : "Australian Institute of Marine Science (AIMS)", - "name" : "Remmers T", - "position" : "", - "emails" : [ "reception@aims.gov.au" ], - "addresses" : [ { - "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], - "city" : "TOWNSVILLE", - "country" : "Australia", - "postalCode" : "4810", - "administrativeArea" : "Queensland" - } ], - "phones" : [ { - "roles" : [ "voice" ], - "value" : "+61 7 4753 4444" - }, { - "roles" : [ "facsimile" ], - "value" : "" - } ], - "links" : [ { - "href" : "https://www.aims.gov.au", - "type" : "WWW:LINK-1.0-http--link", - "title" : "AIMS Web Site" - } ] - }, { - "roles" : [ "pointOfContact", "about" ], - "organization" : "Australian Institute of Marine Science (AIMS)", - "name" : "AIMS Data Centre", - "position" : "", - "emails" : [ "adc@aims.gov.au" ], - "addresses" : [ { - "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], - "city" : "TOWNSVILLE", - "country" : "Australia", - "postalCode" : "4810", - "administrativeArea" : "Queensland" - } ], - "phones" : [ { - "roles" : [ "voice" ], - "value" : "+61 7 4753 4444" - }, { - "roles" : [ "facsimile" ], - "value" : "" - } ], - "links" : [ { - "href" : "https://www.aims.gov.au", - "type" : "WWW:LINK-1.0-http--link", - "title" : "AIMS Web Site" - } ] - }, { - "roles" : [ "pointOfContact", "metadata" ], - "organization" : "Australian Institute of Marine Science (AIMS)", - "name" : "", - "position" : "AIMS Data Centre", - "emails" : [ "adc@aims.gov.au" ], - "addresses" : [ { - "deliveryPoint" : [ "PRIVATE MAIL BAG 3" ], - "city" : "TOWNSVILLE MAIL CENTRE", - "country" : "Australia", - "postalCode" : "4810", - "administrativeArea" : "Queensland" - } ], - "phones" : [ { - "roles" : [ "voice" ], - "value" : "+61 7 4753 4444" - }, { - "roles" : [ "facsimile" ], - "value" : "+61 7 4772 5852" - } ], - "links" : [ { - "href" : "https://www.aims.gov.au/adc", - "type" : "WWW:LINK-1.0-http--link" - } ] - }, { - "roles" : [ "publisher", "citation" ], - "organization" : "Australian Institute of Marine Science (AIMS)", - "name" : "", - "position" : "", - "emails" : [ "reception@aims.gov.au" ], - "addresses" : [ { - "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], - "city" : "TOWNSVILLE", - "country" : "Australia", - "postalCode" : "4810", - "administrativeArea" : "Queensland" - } ], - "phones" : [ { - "roles" : [ "voice" ], - "value" : "+61 7 4753 4444" - }, { - "roles" : [ "facsimile" ], - "value" : "" - } ], - "links" : [ { - "href" : "https://www.aims.gov.au", - "type" : "WWW:LINK-1.0-http--link", - "title" : "AIMS Web Site" - } ] - }, { - "roles" : [ "owner", "citation" ], - "organization" : "Australian Institute of Marine Science (AIMS)", - "name" : "", - "position" : "", - "emails" : [ "reception@aims.gov.au" ], - "addresses" : [ { - "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], - "city" : "TOWNSVILLE", - "country" : "Australia", - "postalCode" : "4810", - "administrativeArea" : "Queensland" - } ], - "phones" : [ { - "roles" : [ "voice" ], - "value" : "+61 7 4753 4444" - }, { - "roles" : [ "facsimile" ], - "value" : "" - } ], - "links" : [ { - "href" : "https://www.aims.gov.au", - "type" : "WWW:LINK-1.0-http--link", - "title" : "AIMS Web Site" - } ] - } ], - "languages" : [ { - "code" : "eng", - "name" : "English" - } ], - "links" : [ { - "href" : "https://apps.aims.gov.au/metadata/view/5905b3eb-aad0-4f9c-a03e-a02fb3488082", - "rel" : "describedby", - "type" : "text/html", - "title" : "Full metadata link" - } ], - "license" : "", - "providers" : [ { - "name" : "Australian Institute of Marine Science (AIMS)", - "roles" : [ "pointOfContact" ] - } ], - "themes" : [ ], - "id" : "5905b3eb-aad0-4f9c-a03e-a02fb3488082", - "search_suggestions" : { - "abstract_phrases" : [ "community compostion", "any coral reefs environment", "diver rig", "shooting", "resolution", "ldquo lawn", "building", "gordon et", "were distributed", "community composition", "high visibility", "dome ports", "prime", "information from close range", "lenses", "planar", "community composition information", "al", "community", "calssifying", "ldquo lawn mowing", "information from close", "size", "publication titled", "applyed", "each gpc", "were selected", "metrics", "two nikon", "second intervals full camera", "manual", "composition", "segmentation", "m using", "were captured using two", "spatially adjacent photos", "reefs surveyed compared", "close", "compared", "z axes details", "replicate", "between adjacent images", "workflow described", "inch dome ports", "cm", "mounted", "spatially adjacent", "consisting", "were distributed across", "ldquo", "benthic images", "plots segmenting", "information", "data extraction due", "inch", "standardized diver", "reefs environment we eveluated", "communities from photogrammetric reconstruction", "captured using two nikon", "automatically extract community", "sites", "photogrammetry mointoring", "cameras were housed", "prior", "level metrics", "gpc", "we eveluated", "publication titled ldquo", "rig photogrammetry workflow", "mowing rdquo swim pattern", "rdquo swim", "scale resultant models", "area", "visibility", "underwater housings", "extracting community compostion", "prior imaging", "scuba over", "et", "reconstruction rdquo", "extraction due", "longitudinal", "planar area", "sustainably scale", "perpendicular", "additional", "provided", "back", "titled ldquo", "photogrammetric", "lens", "data can", "passes", "captured", "six gpcs", "standardized", "high resolution", "over", "colony planar", "lagoon all", "six", "nikkor prime lens", "recorded", "colony frequency", "significance", "environment", "approximately", "using two nikon", "single diver", "rig photogrammetry", "et al", "mowing", "reef front flank", "images figure", "from high", "all sites were", "colony level", "from photogrammetric reconstruction", "composition information from close", "accessed", "rig", "imagery", "axes details provided", "model", "second intervals", "period", "large", "all sites were imaged", "titled ldquo rapidbenthos", "distributed", "underlying", "z axes", "coral reefs environment we", "classification", "rdquo", "colony planar area", "pixels were captured", "any coral", "incorporate bathymetric information", "adjacent images", "titled ldquo rapidbenthos ndash", "flank back", "respectively", "distributed across", "diver", "captured using two", "housings", "standardized diver rig photogrammetry", "front flank back", "cameras", "spatially adjacent photos respectively", "time faster than manual", "coral reef communities", "reef communities from photogrammetric", "dslr cameras", "intervals full camera settings", "camera", "than manual", "used ensured", "nauticam", "were mounted", "speed used ensured", "swim pattern consisting", "eveluated", "pattern consisting", "coral reefs", "reefal", "aluminium", "coral reef", "communities", "nadiral", "environments", "automatically extract", "resolution benthic images", "publication titled ldquo rapidbenthos", "standardized diver rig", "photos", "spanned depths from", "second", "from close range photogrammetry", "photogrammetric reconstruction", "high", "turbid inshore reefs spanned", "extract community composition", "faster", "coral", "publication", "between temporally", "than", "benthic constituents", "different", "selected", "research lies", "all", "mm", "settings", "time faster", "workflow", "ranged from high visibility", "level", "scuba", "lawn mowing rdquo", "from high visibility", "each plots", "intervals", "manual data extraction due", "between lenses", "were", "details provided", "depths from", "overlap between adjacent images", "intervals full", "camera settings", "rapidbenthos ndash", "our method", "inshore reefs spanned depths", "each site", "speed used", "meters", "nikon", "sites were selected", "turbid", "calssifying benthic", "environmental conditions", "included", "visibility offshore", "all sites", "range photogrammetry", "adjacent images figure", "adjacent", "model building", "any", "surveyed", "plots", "spatially", "due", "were imaged using", "reconstruction", "were captured", "ldquo lawn mowing rdquo", "using two", "intra reefal", "colony level metrics", "different environmental conditions", "lagoon all sites", "photogrammetric reconstruction rdquo", "offshore reefs", "six gpcs were", "sites were imaged", "mm nikkor prime", "spanned", "full camera", "models", "reef", "reefs spanned depths from", "using", "environmental", "reefs spanned", "multi view", "photogrammetry workflow described", "cameras were", "each", "close range", "manual segmentation", "ranged from high", "underwater", "manual data", "conditions", "inch dome", "oblique imagery", "gpcs were distributed", "reefs environment", "close range photogrammetry", "automatically", "faster than", "ports", "two", "reef habitats", "were imaged", "mowing rdquo", "extracting community", "site prior", "photos respectively", "ldquo rapidbenthos", "front flank", "photogrammetric models", "pixels were", "gradient", "classification allowing", "information from", "gordon", "faster than manual segmentation", "lagoon", "single", "automated", "were captured using", "ndash automated segmentation", "calssifying benthic constituents", "depths", "faster than manual", "dslr", "axes details", "bathymetric information", "resulted", "depth gradient", "cm between lenses", "incorporate", "extract community", "ldquo rapidbenthos ndash automated", "research", "pixels were captured using", "housed", "frequency", "view", "reef communities", "aluminium rig", "cm between", "flank", "z axes details provided", "details", "extract community composition information", "swim pattern", "from close", "view classification", "reef front", "reefs", "high resolution benthic images", "imaging", "surveyed compared", "offshore", "resolution benthic", "overlap", "extract", "scale resultant", "composition information from", "incorporate bathymetric", "between adjacent", "swim", "lagoon all sites were", "full", "inshore", "photos respectively figure", "distance", "data files", "speed", "we", "nikkor prime", "community composition information from", "nikkor", "x y", "nikkor prime lens shooting", "ranged", "high visibility offshore reefs", "lies", "different environmental", "reefs environment we", "from photogrammetric", "figure", "nauticam underwater", "were housed", "inshore reefs spanned", "devlopping", "communities from photogrammetric", "composition information", "spanned depths", "ensured", "time", "titled", "also recorded", "automatically extract community composition", "oblique", "method resulted", "rapidbenthos ndash automated", "axes", "longitudinal passes", "extracting", "six gpcs were distributed", "multi", "capture approximately", "mowing rdquo swim", "camera settings described", "captured using", "full camera settings described", "adjacent photos", "settings described", "between", "overlap between adjacent", "resultant", "images", "method", "any coral reefs", "turbid inshore", "reef communities from", "gpcs", "extraction", "sites were", "imaged", "mointoring both", "ndash", "lawn", "between adjacent images figure", "rig photogrammetry workflow described", "habitats", "high resolution benthic", "reef front flank back", "prime lens shooting", "pattern", "range", "rapidbenthos", "dome", "lawn mowing rdquo swim", "our", "mointoring", "across", "resultant models", "reefs surveyed", "coral reef communities from", "benthic", "inshore reefs", "respectively figure", "communities from", "replication", "bathymetric", "gpcs were", "compostion", "full camera settings", "perpendicular passes", "photogrammetry mointoring both", "site", "depth", "large data", "assess", "multi view classification", "environment we eveluated", "ranged from", "intervals full camera", "from photogrammetric reconstruction rdquo", "minimum", "data", "mm nikkor", "overlap between", "manual data extraction", "photogrammetry workflow", "used", "minimum overlap", "temporally", "presented", "reefs spanned depths", "adjacent photos respectively figure", "from", "described", "diver rig photogrammetry", "turbid inshore reefs", "intra reefal environments", "rdquo swim pattern consisting", "intra", "each plots segmenting", "ndash automated", "minutes", "large data files", "capture", "site prior imaging", "sustainably", "imaged using", "both", "underlying images", "pixels", "prime lens", "high visibility offshore", "second intervals full", "than manual segmentation", "environment we", "files", "lawn mowing", "rdquo swim pattern", "from close range", "ldquo rapidbenthos ndash", "altitude", "request", "colony", "photogrammetry", "link", "diver rig photogrammetry workflow", "scale", "photos nadiral", "rapidbenthos ndash automated segmentation", "can", "data extraction", "gordon et al", "mm nikkor prime lens", "nauticam underwater housings", "lens shooting", "adjacent photos respectively", "from high visibility offshore", "rapidbenthos workflow", "method presented", "also", "coral reefs environment", "reefal environments", "allowing", "sites were imaged using", "performance", "segmenting", "orthomosaics", "time faster than", "front", "visibility offshore reefs", "constituents", "automated segmentation", "gpcs were distributed across" ] + "contacts": [ + { + "roles": [ + "principalInvestigator", + "about" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "Remmers T", + "position": "", + "emails": [ + "reception@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "TOWNSVILLE", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "" + } + ], + "links": [ + { + "href": "https://www.aims.gov.au", + "type": "WWW:LINK-1.0-http--link", + "title": "AIMS Web Site" + } + ] + }, + { + "roles": [ + "pointOfContact", + "about" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "AIMS Data Centre", + "position": "", + "emails": [ + "adc@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "TOWNSVILLE", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "" + } + ], + "links": [ + { + "href": "https://www.aims.gov.au", + "type": "WWW:LINK-1.0-http--link", + "title": "AIMS Web Site" + } + ] + }, + { + "roles": [ + "pointOfContact", + "metadata" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "", + "position": "AIMS Data Centre", + "emails": [ + "adc@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3" + ], + "city": "TOWNSVILLE MAIL CENTRE", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "+61 7 4772 5852" + } + ], + "links": [ + { + "href": "https://www.aims.gov.au/adc", + "type": "WWW:LINK-1.0-http--link" + } + ] + }, + { + "roles": [ + "publisher", + "citation" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "", + "position": "", + "emails": [ + "reception@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "TOWNSVILLE", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "" + } + ], + "links": [ + { + "href": "https://www.aims.gov.au", + "type": "WWW:LINK-1.0-http--link", + "title": "AIMS Web Site" + } + ] + }, + { + "roles": [ + "owner", + "citation" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "", + "position": "", + "emails": [ + "reception@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "TOWNSVILLE", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "" + } + ], + "links": [ + { + "href": "https://www.aims.gov.au", + "type": "WWW:LINK-1.0-http--link", + "title": "AIMS Web Site" + } + ] + } + ], + "languages": [ + { + "code": "eng", + "name": "English" + } + ], + "links": [ + { + "href": "https://apps.aims.gov.au/metadata/view/5905b3eb-aad0-4f9c-a03e-a02fb3488082", + "rel": "describedby", + "type": "text/html", + "title": "Full metadata link" + } + ], + "license": "", + "providers": [ + { + "name": "Australian Institute of Marine Science (AIMS)", + "roles": [ + "pointOfContact" + ] + } + ], + "themes": [], + "id": "5905b3eb-aad0-4f9c-a03e-a02fb3488082", + "search_suggestions": { + "abstract_phrases": [ + "community compostion", + "any coral reefs environment", + "diver rig", + "shooting", + "resolution", + "ldquo lawn", + "building", + "gordon et", + "were distributed", + "community composition", + "high visibility", + "dome ports", + "prime", + "information from close range", + "lenses", + "planar", + "community composition information", + "al", + "community", + "calssifying", + "ldquo lawn mowing", + "information from close", + "size", + "publication titled", + "applyed", + "each gpc", + "were selected", + "metrics", + "two nikon", + "second intervals full camera", + "manual", + "composition", + "segmentation", + "m using", + "were captured using two", + "spatially adjacent photos", + "reefs surveyed compared", + "close", + "compared", + "z axes details", + "replicate", + "between adjacent images", + "workflow described", + "inch dome ports", + "cm", + "mounted", + "spatially adjacent", + "consisting", + "were distributed across", + "ldquo", + "benthic images", + "plots segmenting", + "information", + "data extraction due", + "inch", + "standardized diver", + "reefs environment we eveluated", + "communities from photogrammetric reconstruction", + "captured using two nikon", + "automatically extract community", + "sites", + "photogrammetry mointoring", + "cameras were housed", + "prior", + "level metrics", + "gpc", + "we eveluated", + "publication titled ldquo", + "rig photogrammetry workflow", + "mowing rdquo swim pattern", + "rdquo swim", + "scale resultant models", + "area", + "visibility", + "underwater housings", + "extracting community compostion", + "prior imaging", + "scuba over", + "et", + "reconstruction rdquo", + "extraction due", + "longitudinal", + "planar area", + "sustainably scale", + "perpendicular", + "additional", + "provided", + "back", + "titled ldquo", + "photogrammetric", + "lens", + "data can", + "passes", + "captured", + "six gpcs", + "standardized", + "high resolution", + "over", + "colony planar", + "lagoon all", + "six", + "nikkor prime lens", + "recorded", + "colony frequency", + "significance", + "environment", + "approximately", + "using two nikon", + "single diver", + "rig photogrammetry", + "et al", + "mowing", + "reef front flank", + "images figure", + "from high", + "all sites were", + "colony level", + "from photogrammetric reconstruction", + "composition information from close", + "accessed", + "rig", + "imagery", + "axes details provided", + "model", + "second intervals", + "period", + "large", + "all sites were imaged", + "titled ldquo rapidbenthos", + "distributed", + "underlying", + "z axes", + "coral reefs environment we", + "classification", + "rdquo", + "colony planar area", + "pixels were captured", + "any coral", + "incorporate bathymetric information", + "adjacent images", + "titled ldquo rapidbenthos ndash", + "flank back", + "respectively", + "distributed across", + "diver", + "captured using two", + "housings", + "standardized diver rig photogrammetry", + "front flank back", + "cameras", + "spatially adjacent photos respectively", + "time faster than manual", + "coral reef communities", + "reef communities from photogrammetric", + "dslr cameras", + "intervals full camera settings", + "camera", + "than manual", + "used ensured", + "nauticam", + "were mounted", + "speed used ensured", + "swim pattern consisting", + "eveluated", + "pattern consisting", + "coral reefs", + "reefal", + "aluminium", + "coral reef", + "communities", + "nadiral", + "environments", + "automatically extract", + "resolution benthic images", + "publication titled ldquo rapidbenthos", + "standardized diver rig", + "photos", + "spanned depths from", + "second", + "from close range photogrammetry", + "photogrammetric reconstruction", + "high", + "turbid inshore reefs spanned", + "extract community composition", + "faster", + "coral", + "publication", + "between temporally", + "than", + "benthic constituents", + "different", + "selected", + "research lies", + "all", + "mm", + "settings", + "time faster", + "workflow", + "ranged from high visibility", + "level", + "scuba", + "lawn mowing rdquo", + "from high visibility", + "each plots", + "intervals", + "manual data extraction due", + "between lenses", + "were", + "details provided", + "depths from", + "overlap between adjacent images", + "intervals full", + "camera settings", + "rapidbenthos ndash", + "our method", + "inshore reefs spanned depths", + "each site", + "speed used", + "meters", + "nikon", + "sites were selected", + "turbid", + "calssifying benthic", + "environmental conditions", + "included", + "visibility offshore", + "all sites", + "range photogrammetry", + "adjacent images figure", + "adjacent", + "model building", + "any", + "surveyed", + "plots", + "spatially", + "due", + "were imaged using", + "reconstruction", + "were captured", + "ldquo lawn mowing rdquo", + "using two", + "intra reefal", + "colony level metrics", + "different environmental conditions", + "lagoon all sites", + "photogrammetric reconstruction rdquo", + "offshore reefs", + "six gpcs were", + "sites were imaged", + "mm nikkor prime", + "spanned", + "full camera", + "models", + "reef", + "reefs spanned depths from", + "using", + "environmental", + "reefs spanned", + "multi view", + "photogrammetry workflow described", + "cameras were", + "each", + "close range", + "manual segmentation", + "ranged from high", + "underwater", + "manual data", + "conditions", + "inch dome", + "oblique imagery", + "gpcs were distributed", + "reefs environment", + "close range photogrammetry", + "automatically", + "faster than", + "ports", + "two", + "reef habitats", + "were imaged", + "mowing rdquo", + "extracting community", + "site prior", + "photos respectively", + "ldquo rapidbenthos", + "front flank", + "photogrammetric models", + "pixels were", + "gradient", + "classification allowing", + "information from", + "gordon", + "faster than manual segmentation", + "lagoon", + "single", + "automated", + "were captured using", + "ndash automated segmentation", + "calssifying benthic constituents", + "depths", + "faster than manual", + "dslr", + "axes details", + "bathymetric information", + "resulted", + "depth gradient", + "cm between lenses", + "incorporate", + "extract community", + "ldquo rapidbenthos ndash automated", + "research", + "pixels were captured using", + "housed", + "frequency", + "view", + "reef communities", + "aluminium rig", + "cm between", + "flank", + "z axes details provided", + "details", + "extract community composition information", + "swim pattern", + "from close", + "view classification", + "reef front", + "reefs", + "high resolution benthic images", + "imaging", + "surveyed compared", + "offshore", + "resolution benthic", + "overlap", + "extract", + "scale resultant", + "composition information from", + "incorporate bathymetric", + "between adjacent", + "swim", + "lagoon all sites were", + "full", + "inshore", + "photos respectively figure", + "distance", + "data files", + "speed", + "we", + "nikkor prime", + "community composition information from", + "nikkor", + "x y", + "nikkor prime lens shooting", + "ranged", + "high visibility offshore reefs", + "lies", + "different environmental", + "reefs environment we", + "from photogrammetric", + "figure", + "nauticam underwater", + "were housed", + "inshore reefs spanned", + "devlopping", + "communities from photogrammetric", + "composition information", + "spanned depths", + "ensured", + "time", + "titled", + "also recorded", + "automatically extract community composition", + "oblique", + "method resulted", + "rapidbenthos ndash automated", + "axes", + "longitudinal passes", + "extracting", + "six gpcs were distributed", + "multi", + "capture approximately", + "mowing rdquo swim", + "camera settings described", + "captured using", + "full camera settings described", + "adjacent photos", + "settings described", + "between", + "overlap between adjacent", + "resultant", + "images", + "method", + "any coral reefs", + "turbid inshore", + "reef communities from", + "gpcs", + "extraction", + "sites were", + "imaged", + "mointoring both", + "ndash", + "lawn", + "between adjacent images figure", + "rig photogrammetry workflow described", + "habitats", + "high resolution benthic", + "reef front flank back", + "prime lens shooting", + "pattern", + "range", + "rapidbenthos", + "dome", + "lawn mowing rdquo swim", + "our", + "mointoring", + "across", + "resultant models", + "reefs surveyed", + "coral reef communities from", + "benthic", + "inshore reefs", + "respectively figure", + "communities from", + "replication", + "bathymetric", + "gpcs were", + "compostion", + "full camera settings", + "perpendicular passes", + "photogrammetry mointoring both", + "site", + "depth", + "large data", + "assess", + "multi view classification", + "environment we eveluated", + "ranged from", + "intervals full camera", + "from photogrammetric reconstruction rdquo", + "minimum", + "data", + "mm nikkor", + "overlap between", + "manual data extraction", + "photogrammetry workflow", + "used", + "minimum overlap", + "temporally", + "presented", + "reefs spanned depths", + "adjacent photos respectively figure", + "from", + "described", + "diver rig photogrammetry", + "turbid inshore reefs", + "intra reefal environments", + "rdquo swim pattern consisting", + "intra", + "each plots segmenting", + "ndash automated", + "minutes", + "large data files", + "capture", + "site prior imaging", + "sustainably", + "imaged using", + "both", + "underlying images", + "pixels", + "prime lens", + "high visibility offshore", + "second intervals full", + "than manual segmentation", + "environment we", + "files", + "lawn mowing", + "rdquo swim pattern", + "from close range", + "ldquo rapidbenthos ndash", + "altitude", + "request", + "colony", + "photogrammetry", + "link", + "diver rig photogrammetry workflow", + "scale", + "photos nadiral", + "rapidbenthos ndash automated segmentation", + "can", + "data extraction", + "gordon et al", + "mm nikkor prime lens", + "nauticam underwater housings", + "lens shooting", + "adjacent photos respectively", + "from high visibility offshore", + "rapidbenthos workflow", + "method presented", + "also", + "coral reefs environment", + "reefal environments", + "allowing", + "sites were imaged using", + "performance", + "segmenting", + "orthomosaics", + "time faster than", + "front", + "visibility offshore reefs", + "constituents", + "automated segmentation", + "gpcs were distributed across" + ] }, - "sci:citation" : "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":[\"The data was collected under contract between AIMS and another party(s). Specific agreements for access and use of the data shall be negotiated separately. Contact the AIMS Data Centre (adc@aims.gov.au) for further information\"]}", - "type" : "Collection", - "stac_version" : "1.0.0", - "stac_extensions" : [ "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", "https://stac-extensions.github.io/projection/v1.1.0/schema.json", "https://stac-extensions.github.io/language/v1.0.0/schema.json", "https://stac-extensions.github.io/themes/v1.0.0/schema.json", "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" ] + "sci:citation": "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":[\"The data was collected under contract between AIMS and another party(s). Specific agreements for access and use of the data shall be negotiated separately. Contact the AIMS Data Centre (adc@aims.gov.au) for further information\"]}", + "type": "Collection", + "stac_version": "1.0.0", + "stac_extensions": [ + "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", + "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", + "https://stac-extensions.github.io/projection/v1.1.0/schema.json", + "https://stac-extensions.github.io/language/v1.0.0/schema.json", + "https://stac-extensions.github.io/themes/v1.0.0/schema.json", + "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" + ] } diff --git a/indexer/src/test/resources/canned/sample7_stac_no_es.json b/indexer/src/test/resources/canned/sample7_stac_no_es.json index 04cbcc38..55c80865 100644 --- a/indexer/src/test/resources/canned/sample7_stac_no_es.json +++ b/indexer/src/test/resources/canned/sample7_stac_no_es.json @@ -107,88 +107,90 @@ { "type": "Point", "coordinates": [ - 142.9417, - -9.9986 + 142.9417419433594, + -9.998605505008365 ] }, { "type": "Point", "coordinates": [ - 143.397, - -9.7348 + 143.3969879150391, + -9.734774881537218 ] }, { "type": "Point", "coordinates": [ - 143.397, - -9.8471 + 143.3969879150391, + -9.847097830667153 ] }, { "type": "Point", "coordinates": [ - 145.4428, - -14.6852 + 145.44284820556643, + -14.685231911438933 ] }, { "type": "Point", "coordinates": [ - 146.2277, - -16.863 + 146.22768402099612, + -16.863033829999537 ] }, { "type": "Point", "coordinates": [ - 146.4996, - -18.5721 + 146.4995956420899, + -18.572060113333826 ] }, { "type": "Point", "coordinates": [ - 146.5195, - -18.6436 + 146.51950836181643, + -18.643642706975996 ] }, { "type": "Point", "coordinates": [ - 147.6466, - -18.7789 + 147.64663696289065, + -18.77891636903418 ] }, { "type": "Point", "coordinates": [ - 150.9701, - -23.1967 + 150.97008705139163, + -23.196700709795724 ] }, { "type": "Point", "coordinates": [ - 151.9248, - -23.4456 + 151.92478179931643, + -23.4456087744153 ] }, { "type": "Point", "coordinates": [ - 152.392, - -23.8934 + 152.3920440673828, + -23.893371525860456 ] } ], "type": "GeometryCollection" }, - "temporal" : [ { - "start" : "2021-09-30T14:00:00Z", - "end" : "2022-12-31T12:59:59Z" - } ], - "centroid" : [ ] + "temporal": [ + { + "start": "2021-09-30T14:00:00Z", + "end": "2022-12-31T12:59:59Z" + } + ], + "centroid": [] }, "contacts": [ { diff --git a/indexer/src/test/resources/canned/sample9_stac.json b/indexer/src/test/resources/canned/sample9_stac.json index 389a7db7..e406b29e 100644 --- a/indexer/src/test/resources/canned/sample9_stac.json +++ b/indexer/src/test/resources/canned/sample9_stac.json @@ -56,15 +56,15 @@ { "type": "Point", "coordinates": [ - 146.8621, - -19.1041 + 146.862133, + -19.10415 ] }, { "type": "Point", "coordinates": [ 146.85, - -19.1683 + -19.168333 ] } ], diff --git a/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json b/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json index 5524e9bb..13b9aba6 100644 --- a/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json +++ b/indexer/src/test/resources/canned/sample_incorrect_projection_stac.json @@ -88,228 +88,228 @@ "coordinates": [ [ [ - 72.0725, - -52.5225 + 72.07250946890997, + -52.52251357221443 ], [ - 72.0976, - -52.5147 + 72.09755164759143, + -52.51474929543359 ], [ - 72.1174, - -52.5027 + 72.11742523311594, + -52.502653417806464 ], [ - 72.1302, - -52.4874 + 72.13018486046495, + -52.48740698230512 ], [ - 72.1346, - -52.4705 + 72.13458152841194, + -52.47050000000001 ], [ - 72.1302, - -52.4536 + 72.13018486046495, + -52.45358652039327 ], [ - 72.1203, - -52.4417 + 72.12025725807715, + -52.44171128387124 ], [ - 72.1215, - -52.4409 + 72.12150856311595, + -52.4409485214883 ], [ - 72.1343, - -52.4257 + 72.13426819046495, + -52.425680696395766 ], [ - 72.1347, - -52.4239 + 72.13472303297345, + -52.42392948954483 ], [ - 72.1406, - -52.4221 + 72.14063497759142, + -52.422092516314706 ], [ - 72.1605, - -52.41 + 72.16050856311594, + -52.4099711505504 ], [ - 72.1733, - -52.3947 + 72.17326819046492, + -52.39469259403693 ], [ - 72.1777, - -52.3778 + 72.17766485841196, + -52.377750000000006 ], [ - 72.1733, - -52.3608 + 72.17326819046492, + -52.36080090308223 ], [ - 72.1605, - -52.3455 + 72.16050856311594, + -52.34550532180724 ], [ - 72.1406, - -52.3334 + 72.14063497759142, + -52.33336291228335 ], [ - 72.1156, - -52.3256 + 72.11559279890996, + -52.32556524786877 ], [ - 72.0878, - -52.3229 + 72.08783333, + -52.32287803740511 ], [ - 72.0601, - -52.3256 + 72.06007386109002, + -52.32556524786877 ], [ - 72.0405, - -52.3317 + 72.04050378964982, + -52.33165911815703 ], [ - 72.0301, - -52.3253 + 72.03005164759143, + -52.32527146009762 ], [ - 72.005, - -52.3175 + 72.00500946890998, + -52.317472369326346 ], [ - 71.9773, - -52.3148 + 71.97725, + -52.314784667350125 ], [ - 71.9495, - -52.3175 + 71.94949053109004, + -52.317472369326346 ], [ - 71.9244, - -52.3253 + 71.92444835240858, + -52.32527146009762 ], [ - 71.9046, - -52.3374 + 71.90457476688407, + -52.33741609102184 ], [ - 71.8918, - -52.3527 + 71.89181513953507, + -52.35271447107323 ], [ - 71.8878, - -52.3683 + 71.88777785030702, + -52.368281260303256 ], [ - 71.8738, - -52.3669 + 71.87383333, + -52.36693270763156 ], [ - 71.8461, - -52.3696 + 71.84607386109003, + -52.369617241703416 ], [ - 71.821, - -52.3774 + 71.82103168240857, + -52.37740713929903 ], [ - 71.8012, - -52.3895 + 71.80115809688405, + -52.38953745282371 ], [ - 71.7884, - -52.4048 + 71.78839846953505, + -52.4048177941694 ], [ - 71.784, - -52.4217 + 71.78400180158805, + -52.42174999999999 ], [ - 71.7884, - -52.4387 + 71.78839846953505, + -52.43867570558801 ], [ - 71.8012, - -52.4539 + 71.80115809688405, + -52.45393902907917 ], [ - 71.821, - -52.466 + 71.82103168240857, + -52.46604830738177 ], [ - 71.8461, - -52.4738 + 71.84607386109003, + -52.47382118712764 ], [ - 71.8738, - -52.4765 + 71.87383333, + -52.476499220959866 ], [ - 71.9016, - -52.4738 + 71.90159279890997, + -52.47382118712764 ], [ - 71.9266, - -52.466 + 71.92663497759143, + -52.46604830738177 ], [ - 71.9465, - -52.4539 + 71.94650856311594, + -52.45393902907917 ], [ - 71.9593, - -52.4387 + 71.95926819046494, + -52.43867570558801 ], [ - 71.963, - -52.4242 + 71.96302121496069, + -52.42422821879211 ], [ - 71.9634, - -52.4257 + 71.96339846953506, + -52.425680696395766 ], [ - 71.9733, - -52.4376 + 71.97332607192284, + -52.43756025369564 ], [ - 71.9721, - -52.4383 + 71.97207476688406, + -52.438323074736886 ], [ - 71.9593, - -52.4536 + 71.95931513953506, + -52.45358652039327 ], [ - 71.9549, - -52.4705 + 71.95491847158806, + -52.47050000000001 ], [ - 71.9593, - -52.4874 + 71.95931513953506, + -52.48740698230512 ], [ - 71.9721, - -52.5027 + 71.97207476688406, + -52.502653417806464 ], [ - 71.9919, - -52.5147 + 71.99194835240857, + -52.51474929543359 ], [ - 72.017, - -52.5225 + 72.01699053109003, + -52.52251357221443 ], [ - 72.0448, - -52.5252 + 72.04475000000001, + -52.52518864181168 ], [ - 72.0725, - -52.5225 + 72.07250946890997, + -52.52251357221443 ] ] ] @@ -319,156 +319,156 @@ "coordinates": [ [ [ - 72.6526, - -52.4447 + 72.65259279890998, + -52.444688969603554 ], [ - 72.6776, - -52.4369 + 72.67763497759144, + -52.436910945465264 ], [ - 72.6975, - -52.4248 + 72.69750856311597, + -52.42479365384346 ], [ - 72.7103, - -52.4095 + 72.71026819046494, + -52.40952023169915 ], [ - 72.714, - -52.3952 + 72.7139806613771, + -52.39521942991217 ], [ - 72.7192, - -52.3968 + 72.71915720109004, + -52.396828880820344 ], [ - 72.7469, - -52.3995 + 72.74691667, + -52.39951159774777 ], [ - 72.7747, - -52.3968 + 72.77467613890998, + -52.396828880820344 ], [ - 72.7997, - -52.389 + 72.79971831759146, + -52.389042409544224 ], [ - 72.8196, - -52.3769 + 72.81959190311596, + -52.3769119599871 ], [ - 72.8324, - -52.3616 + 72.83235153046495, + -52.36162195578164 ], [ - 72.8367, - -52.3447 + 72.83674819841197, + -52.34466667 ], [ - 72.8324, - -52.3277 + 72.83235153046495, + -52.32770487936396 ], [ - 72.8196, - -52.3124 + 72.81959190311596, + -52.31239784523011 ], [ - 72.7997, - -52.3002 + 72.79971831759146, + -52.300246345526816 ], [ - 72.7747, - -52.2924 + 72.77467613890998, + -52.292442844327134 ], [ - 72.7469, - -52.2898 + 72.74691667, + -52.28975362254831 ], [ - 72.7378, - -52.2906 + 72.73781720833698, + -52.29063515849767 ], [ - 72.7208, - -52.2802 + 72.72080164759143, + -52.28022625996817 ], [ - 72.6958, - -52.2724 + 72.69575946890997, + -52.272419231498866 ], [ 72.668, - -52.2697 + -52.26972879424791 ], [ - 72.6402, - -52.2724 + 72.64024053109003, + -52.272419231498866 ], [ - 72.6152, - -52.2802 + 72.61519835240857, + -52.28022625996817 ], [ - 72.5953, - -52.2924 + 72.59532476688405, + -52.29238325302474 ], [ - 72.5826, - -52.3077 + 72.58256513953505, + -52.3076972083229 ], [ - 72.5782, - -52.3247 + 72.57816847158806, + -52.324666670000006 ], [ - 72.5826, - -52.3416 + 72.58256513953505, + -52.34162962563383 ], [ - 72.5848, - -52.3443 + 72.58475203708836, + -52.344251771024254 ], [ - 72.572, - -52.3482 + 72.57203168240856, + -52.34821114921717 ], [ - 72.5522, - -52.3603 + 72.55215809688407, + -52.360349481725905 ], [ - 72.5394, - -52.3756 + 72.53939846953507, + -52.37563992630773 ], [ - 72.535, - -52.3926 + 72.53500180158805, + -52.39258333000001 ], [ - 72.5394, - -52.4095 + 72.53939846953507, + -52.40952023169915 ], [ - 72.5522, - -52.4248 + 72.55215809688407, + -52.42479365384346 ], [ - 72.572, - -52.4369 + 72.57203168240856, + -52.436910945465264 ], [ - 72.5971, - -52.4447 + 72.59707386109004, + -52.444688969603554 ], [ - 72.6248, - -52.4474 + 72.62483333, + -52.44736877598646 ], [ - 72.6526, - -52.4447 + 72.65259279890998, + -52.444688969603554 ] ] ] @@ -478,120 +478,120 @@ "coordinates": [ [ [ - 71.422, - -52.1026 + 71.42200946890996, + -52.10259252922403 ], [ - 71.4471, - -52.0948 + 71.44705164759144, + -52.09475424589145 ], [ - 71.4669, - -52.0825 + 71.46692523311596, + -52.08254308989527 ], [ - 71.4797, - -52.0672 + 71.47968486046494, + -52.06715137705331 ], [ - 71.4841, - -52.0501 + 71.48408152841196, + -52.05008333000002 ], [ - 71.4797, - -52.033 + 71.47968486046494, + -52.033008760901915 ], [ - 71.4726, - -52.0244 + 71.47259420081954, + -52.024446590203894 ], [ - 71.4791, - -52.0166 + 71.47910153046494, + -52.01658736417411 ], [ - 71.4835, - -51.9995 + 71.48349819841195, + -51.999499999999976 ], [ - 71.4791, - -51.9824 + 71.47910153046494, + -51.98240611089861 ], [ - 71.4663, - -51.967 + 71.46634190311596, + -51.96697989182818 ], [ - 71.4465, - -51.9547 + 71.44646831759145, + -51.954733794839235 ], [ - 71.4214, - -51.9469 + 71.42142613890998, + -51.94686955304697 ], [ - 71.3937, - -51.9442 + 71.39366667, + -51.9441594005096 ], [ - 71.3659, - -51.9469 + 71.36590720109004, + -51.94686955304697 ], [ - 71.3409, - -51.9547 + 71.34086502240858, + -51.954733794839235 ], [ - 71.321, - -51.967 + 71.32099143688406, + -51.96697989182818 ], [ - 71.3082, - -51.9824 + 71.30823180953507, + -51.98240611089861 ], [ - 71.3038, - -51.9995 + 71.30383514158805, + -51.999499999999976 ], [ - 71.3082, - -52.0166 + 71.30823180953507, + -52.01658736417411 ], [ - 71.3153, - -52.0252 + 71.31532246918047, + -52.02515103945204 ], [ - 71.3088, - -52.033 + 71.30881513953507, + -52.033008760901915 ], [ - 71.3044, - -52.0501 + 71.30441847158805, + -52.05008333000002 ], [ - 71.3088, - -52.0672 + 71.30881513953507, + -52.06715137705331 ], [ - 71.3216, - -52.0825 + 71.32157476688405, + -52.08254308989527 ], [ - 71.3414, - -52.0948 + 71.34144835240856, + -52.09475424589145 ], [ - 71.3665, - -52.1026 + 71.36649053109002, + -52.10259252922403 ], [ - 71.3943, - -52.1053 + 71.39425, + -52.105293098523184 ], [ - 71.422, - -52.1026 + 71.42200946890996, + -52.10259252922403 ] ] ] @@ -601,120 +601,120 @@ "coordinates": [ [ [ - 72.9095, - -52.5419 + 72.90950946890995, + -52.54190728426304 ], [ - 72.9346, - -52.5341 + 72.93455164759142, + -52.53414643552327 ], [ - 72.9544, - -52.5221 + 72.95442523311594, + -52.52205589769273 ], [ - 72.9672, - -52.5068 + 72.96718486046493, + -52.50681619158921 ], [ - 72.9716, - -52.4899 + 72.97158152841195, + -52.48991666999999 ], [ - 72.9672, - -52.473 + 72.96718486046493, + -52.47301065228578 ], [ - 72.9544, - -52.4578 + 72.95442523311594, + -52.45775393910759 ], [ - 72.9394, - -52.4486 + 72.93940687560675, + -52.44860160857459 ], [ - 72.9422, - -52.4377 + 72.94224819841195, + -52.437666670000006 ], [ - 72.9379, - -52.4207 + 72.93785153046494, + -52.42074057685488 ], [ - 72.9251, - -52.4055 + 72.92509190311594, + -52.40546575066302 ], [ - 72.9052, - -52.3933 + 72.90521831759143, + -52.39333981454224 ], [ - 72.8802, - -52.3856 + 72.88017613890997, + -52.3855527276706 ], [ - 72.8524, - -52.3829 + 72.85241667, + -52.38286916215487 ], [ - 72.8247, - -52.3856 + 72.82465720109003, + -52.3855527276706 ], [ - 72.7996, - -52.3933 + 72.79961502240856, + -52.39333981454224 ], [ - 72.7797, - -52.4055 + 72.77974143688405, + -52.40546575066302 ], [ - 72.767, - -52.4207 + 72.76698180953505, + -52.42074057685488 ], [ - 72.7626, - -52.4377 + 72.76258514158805, + -52.437666670000006 ], [ - 72.767, - -52.4546 + 72.76698180953505, + -52.45458626386066 ], [ - 72.7797, - -52.4698 + 72.77974143688405, + -52.46984407470643 ], [ - 72.7948, - -52.479 + 72.79475979439323, + -52.478991990393375 ], [ - 72.7919, - -52.4899 + 72.79191847158803, + -52.48991666999999 ], [ - 72.7963, - -52.5068 + 72.79631513953505, + -52.50681619158921 ], [ - 72.8091, - -52.5221 + 72.80907476688404, + -52.52205589769273 ], [ - 72.8289, - -52.5341 + 72.82894835240855, + -52.53414643552327 ], [ - 72.854, - -52.5419 + 72.85399053109, + -52.54190728426304 ], [ - 72.8818, - -52.5446 + 72.88175, + -52.54458117269571 ], [ - 72.9095, - -52.5419 + 72.90950946890995, + -52.54190728426304 ] ] ] @@ -724,88 +724,88 @@ "coordinates": [ [ [ - 77.144, - -51.9622 + 77.14400946890997, + -51.96217430385602 ], [ - 77.1691, - -51.9543 + 77.16905164759144, + -51.954311367088344 ], [ - 77.1889, - -51.9421 + 77.18892523311595, + -51.942061809099734 ], [ - 77.2017, - -51.9266 + 77.20168486046495, + -51.92662170109283 ], [ - 77.2061, - -51.9095 + 77.20608152841196, + -51.90950000000001 ], [ - 77.2017, - -51.8924 + 77.20168486046495, + -51.89237176890161 ], [ - 77.1889, - -51.8769 + 77.18892523311595, + -51.876914565119726 ], [ - 77.1691, - -51.8646 + 77.16905164759144, + -51.864643875594176 ], [ - 77.144, - -51.8568 + 77.14400946890997, + -51.856763843056555 ], [ - 77.1163, - -51.854 + 77.11625, + -51.854048249152115 ], [ - 77.0885, - -51.8568 + 77.08849053109002, + -51.856763843056555 ], [ - 77.0634, - -51.8646 + 77.06344835240856, + -51.864643875594176 ], [ - 77.0436, - -51.8769 + 77.04357476688405, + -51.876914565119726 ], [ - 77.0308, - -51.8924 + 77.03081513953508, + -51.89237176890161 ], [ - 77.0264, - -51.9095 + 77.02641847158804, + -51.90950000000001 ], [ - 77.0308, - -51.9266 + 77.03081513953508, + -51.92662170109283 ], [ - 77.0436, - -51.9421 + 77.04357476688405, + -51.942061809099734 ], [ - 77.0634, - -51.9543 + 77.06344835240856, + -51.954311367088344 ], [ - 77.0885, - -51.9622 + 77.08849053109002, + -51.96217430385602 ], [ - 77.1163, - -51.9649 + 77.11625, + -51.96488336775799 ], [ - 77.144, - -51.9622 + 77.14400946890997, + -51.96217430385602 ] ] ] @@ -815,88 +815,88 @@ "coordinates": [ [ [ - 76.0468, - -51.8696 + 76.04675946890998, + -51.869616290904865 ], [ - 76.0718, - -51.8617 + 76.07180164759144, + -51.86173712941255 ], [ - 76.0917, - -51.8495 + 76.09167523311595, + -51.849462298639494 ], [ - 76.1044, - -51.834 + 76.10443486046493, + -51.8339903412851 ], [ - 76.1088, - -51.8168 + 76.10883152841195, + -51.81683333000001 ], [ - 76.1044, - -51.7997 + 76.10443486046493, + -51.79966978354791 ], [ - 76.0917, - -51.7842 + 76.09167523311595, + -51.78418071690575 ], [ - 76.0718, - -51.7719 + 76.07180164759144, + -51.77188473789307 ], [ - 76.0468, - -51.764 + 76.04675946890998, + -51.76398846711805 ], [ 76.019, - -51.7613 + -51.76126727764727 ], [ - 75.9912, - -51.764 + 75.99124053109003, + -51.76398846711805 ], [ - 75.9662, - -51.7719 + 75.96619835240858, + -51.77188473789307 ], [ - 75.9463, - -51.7842 + 75.94632476688405, + -51.78418071690575 ], [ - 75.9336, - -51.7997 + 75.93356513953506, + -51.79966978354791 ], [ - 75.9292, - -51.8168 + 75.92916847158804, + -51.81683333000001 ], [ - 75.9336, - -51.834 + 75.93356513953506, + -51.8339903412851 ], [ - 75.9463, - -51.8495 + 75.94632476688405, + -51.849462298639494 ], [ - 75.9662, - -51.8617 + 75.96619835240858, + -51.86173712941255 ], [ - 75.9912, - -51.8696 + 75.99124053109003, + -51.869616290904865 ], [ 76.019, - -51.8723 + -51.87233094521178 ], [ - 76.0468, - -51.8696 + 76.04675946890998, + -51.869616290904865 ] ] ] @@ -906,120 +906,120 @@ "coordinates": [ [ [ - 76.4992, - -51.86 + 76.49917613890997, + -51.859960957690944 ], [ - 76.5242, - -51.8521 + 76.52421831759143, + -51.85208010487516 ], [ - 76.5441, - -51.8398 + 76.54409190311594, + -51.839802639577904 ], [ - 76.5569, - -51.8243 + 76.55685153046494, + -51.82432736213782 ], [ - 76.5612, - -51.8072 + 76.56124819841195, + -51.80716667 ], [ - 76.5569, - -51.79 + 76.55685153046494, + -51.789999442160685 ], [ - 76.5441, - -51.7745 + 76.54409190311594, + -51.77450705403352 ], [ - 76.5248, - -51.7626 + 76.5248402040222, + -51.76259333918174 ], [ - 76.5262, - -51.7574 + 76.52616485841195, + -51.75741667 ], [ - 76.5218, - -51.7402 + 76.52176819046494, + -51.74023050343375 ], [ - 76.509, - -51.7247 + 76.50900856311594, + -51.724721028088986 ], [ - 76.4891, - -51.7124 + 76.48913497759143, + -51.71240885074965 ], [ - 76.4641, - -51.7045 + 76.46409279890997, + -51.704502179129 ], [ - 76.4363, - -51.7018 + 76.43633333, + -51.701777405611836 ], [ - 76.4086, - -51.7045 + 76.40857386109003, + -51.704502179129 ], [ - 76.3835, - -51.7124 + 76.38353168240856, + -51.71240885074965 ], [ - 76.3637, - -51.7247 + 76.36365809688405, + -51.724721028088986 ], [ - 76.3509, - -51.7402 + 76.35089846953505, + -51.74023050343375 ], [ - 76.3465, - -51.7574 + 76.34650180158805, + -51.75741667 ], [ - 76.3509, - -51.7746 + 76.35089846953505, + -51.7745962981258 ], [ - 76.3637, - -51.7901 + 76.36365809688405, + -51.79008865561273 ], [ - 76.3829, - -51.802 + 76.3829097959778, + -51.801995112987605 ], [ - 76.3816, - -51.8072 + 76.38158514158806, + -51.80716667 ], [ - 76.386, - -51.8243 + 76.38598180953507, + -51.82432736213782 ], [ - 76.3987, - -51.8398 + 76.39874143688407, + -51.839802639577904 ], [ - 76.4186, - -51.8521 + 76.41861502240857, + -51.85208010487516 ], [ - 76.4437, - -51.86 + 76.44365720109003, + -51.859960957690944 ], [ - 76.4714, - -51.8627 + 76.47141667, + -51.8626761947619 ], [ - 76.4992, - -51.86 + 76.49917613890997, + -51.859960957690944 ] ] ] @@ -1029,88 +1029,88 @@ "coordinates": [ [ [ - 75.5017, - -51.8553 + 75.50166667, + -51.85526866120277 ], [ - 75.5294, - -51.8526 + 75.52942613890998, + -51.85255297706286 ], [ - 75.5545, - -51.8447 + 75.55446831759144, + -51.844670826743794 ], [ - 75.5743, - -51.8324 + 75.57434190311595, + -51.83239134036459 ], [ - 75.5871, - -51.8169 + 75.58710153046493, + -51.816913515912574 ], [ - 75.5915, - -51.7998 + 75.59149819841195, + -51.79975000000001 ], [ - 75.5871, - -51.7826 + 75.58710153046493, + -51.782579947976366 ], [ - 75.5743, - -51.7671 + 75.57434190311595, + -51.767085011765005 ], [ - 75.5545, - -51.7548 + 75.55446831759144, + -51.754784374091166 ], [ - 75.5294, - -51.7469 + 75.52942613890998, + -51.74688511201782 ], [ - 75.5017, - -51.7442 + 75.50166667, + -51.74416289176998 ], [ - 75.4739, - -51.7469 + 75.47390720109004, + -51.74688511201782 ], [ - 75.4489, - -51.7548 + 75.44886502240858, + -51.754784374091166 ], [ - 75.429, - -51.7671 + 75.42899143688405, + -51.767085011765005 ], [ - 75.4162, - -51.7826 + 75.41623180953506, + -51.782579947976366 ], [ - 75.4118, - -51.7998 + 75.41183514158804, + -51.79975000000001 ], [ - 75.4162, - -51.8169 + 75.41623180953506, + -51.816913515912574 ], [ - 75.429, - -51.8324 + 75.42899143688405, + -51.83239134036459 ], [ - 75.4489, - -51.8447 + 75.44886502240858, + -51.844670826743794 ], [ - 75.4739, - -51.8526 + 75.47390720109004, + -51.85255297706286 ], [ - 75.5017, - -51.8553 + 75.50166667, + -51.85526866120277 ] ] ] diff --git a/indexer/src/test/resources/canned/sample_invalid_polygon.json b/indexer/src/test/resources/canned/sample_invalid_polygon.json new file mode 100644 index 00000000..ba48c1af --- /dev/null +++ b/indexer/src/test/resources/canned/sample_invalid_polygon.json @@ -0,0 +1,254 @@ +{ + "title": "Natural Resource Management (NRM) areas flowing into the Great Barrier Reef Marine Park 2012 (NERP TE 13.1 eAtlas AIMS, source: Dept. Env.)", + "description": "This dataset corresponds to the Natural Resource Management (NRM) Regions corresponding to river catchments neighbouring the Great Barrier Reef Marine Park. The original aim of this dataset was to show river basins that flow into the Great Barrier Reef (GBR) Marine Park, grouping them by their NRM region. The NRM region boundaries already mostly correspond to a grouping of river basin boundaries and so this regrouping of river basins was unnecessary. The NRM regions did however need some adjustments as they extend out to sea and the Cape York NRM region covers river basins on the east and west coast of Cape York and thus contains river basins that do not flow into the GBR. For this reason the Cape York NRM region was split along the Great Dividing range to remove the western catchments so that only eastern catchments were kept. In addition to this the NRM region polygons were split into the mainland and sea areas to allow this dataset to be used for easy map creation. Because of these changes the polygons in this dataset do not correspond to the NRM boundaries, but are based on the NRM boundaries.\n\n Since 2006, NRM regions have been important in the delivery of Australian Government funding initiatives including Caring for our Country, the Natural Heritage Trust, the National Landcare Program, the Environmental Stewardship Program and the Working on Country Indigenous land and sea ranger program.\n\n The NRM regions included in this dataset: Burnett Mary, Fitzroy, Mackay Whitsunday, Burdekin, Wet Tropics and Cape York (eastern half). Since this dataset was only including catchments neighbouring the marine park it does not include the Torres Strait NRM region and only includes the eastern half of Cape York. The NRM regions were split into mainland and sea features using the Australian Coast 100k 2004 dataset.\n\n This dataset was created for the eAtlas and is not an authoritative source of the NRM boundaries. It should be used for research or display purposes only. It should be noted that from time to time the states and/or territories may revise their regional boundaries in accordance with local needs and therefore alterations to either the attribution or boundaries of the data may occur in the future.\n\n This dataset was derived from River Basins 1997 (Geoscience Australia), NRM Regions 2012 (Department of Environment) and Australian Coast 100k 2004 (Geoscience Australia) datasets.\n\n\n Processing:\n\n Using ArcMap a copy of the NRM regions shapefile was made (NRM_Regions_2012_GBRMP) and editing enabled. The NRM regions of interest were selected. This selection was then inverted to select all the features we didn't want to keep. These were then deleted.\n\n The River Basins 1997 dataset was loaded into ArcMap and a transformation was chosen to convert the ADG66 data into GDA 94. The coast was checked against the Coast 100k dataset to ensure the transformation was correct.\n\n The Cape York NRM region was split in two by tracing the catchments along the Great Dividing range based on the River Basins 1997 (Geoscience Australia) dataset. The tip of the eastern side basin of Cape York was drawn to the boundary vertically. The western side was then selected and deleted.\n\n The Coast 100k 2004 dataset was added and an a Definition Query was setup to only keep the mainland features (\"FEAT_CODE\" = 'mainland').\n\n This was then used to split the NRM_Regions_2010_GBRMP using the Split Polygons tool from the Advanced Editing menu.\n\n A new attribute (FEAT_CODE) was then added to the shapefile to indicate if the feature was part of the mainland ('mainland') or part of the marine boundary ('sea').\n\n The Shape_Area attribute was renamed to SHAPE_Area by removing and recreating it. Also Leng_Units and Area_Units was added as text fields.\n\n The Data Frame projection was changed to GDA 1994 Australia Albers equal area projection for recalculate the Shape areas and length. This was done using the Calculate Geometry tool. The The AREA_DESC attribute was removed as it no longer made sense.\n\n The shapefile was then renamed to GBR_eAtlas_NRM_Regions_2012_GBRMP.shp.\n\n NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG, Available from http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D", + "extent": { + "bbox": [], + "temporal": [ + [ + null, + null + ] + ] + }, + "summaries": { + "score": 1, + "status": "completed", + "credits": [ + "Department of the Environment, Geoscience Australia" + ], + "scope": { + "code": "dataset", + "name": "" + }, + "creation": "2016-08-02T14:43:41", + "revision": "2023-09-18T08:11:14", + "update_frequency": "completed", + "temporal": [] + }, + "contacts": [ + { + "roles": [ + "pointOfContact", + "about" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "Lawrey, Eric, Dr", + "position": "eAtlas Project Leader", + "emails": [ + "e-atlas@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "Townsville", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "" + } + ], + "links": [ + { + "href": "https://eatlas.org.au", + "type": "WWW:LINK-1.0-http--link", + "title": "eAtlas portal" + } + ] + }, + { + "roles": [ + "pointOfContact", + "metadata" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "eAtlas Data Manager", + "position": "", + "emails": [ + "e-atlas@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "Townsville", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + }, + { + "roles": [ + "facsimile" + ], + "value": "" + } + ], + "links": [ + { + "href": "https://eatlas.org.au", + "type": "WWW:LINK-1.0-http--link", + "title": "eAtlas portal" + } + ] + }, + { + "roles": [ + "principalInvestigator", + "citation" + ], + "organization": "Australian Institute of Marine Science (AIMS)", + "name": "Lawrey, Eric, Dr", + "position": "eAtlas Project Leader", + "emails": [ + "e-atlas@aims.gov.au" + ], + "addresses": [ + { + "deliveryPoint": [ + "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" + ], + "city": "Townsville", + "country": "Australia", + "postalCode": "4810", + "administrativeArea": "Queensland" + } + ], + "phones": [ + { + "roles": [ + "voice" + ], + "value": "+61 7 4753 4444" + } + ], + "links": [ + { + "href": "https://eatlas.org.au", + "type": "WWW:LINK-1.0-http--link", + "title": "eAtlas portal" + } + ] + } + ], + "languages": [ + { + "code": "eng", + "name": "English" + } + ], + "links": [ + { + "href": "https://maps.eatlas.org.au/index.html?intro=false&z=6&ll=148.79651,-18.50602&l0=ea_ea%3AGBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap&s0=GBR_NRM-Regions-GBRMP_Data-preview", + "rel": "related", + "type": "text/html", + "title": "Interactive map of this dataset" + }, + { + "href": "https://maps.eatlas.org.au/maps/wms", + "rel": "wms", + "type": "", + "title": "ea:GBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012" + }, + { + "href": "https://eatlas.org.au/data/uuid/71127e4d-9f14-4c57-9845-1dce0b541d8d", + "rel": "related", + "type": "", + "title": "eAtlas Web Mapping Service (WMS) (AIMS)" + }, + { + "href": "https://eatlas.org.au/nerp-te/aims-eatlas-13-1", + "rel": "related", + "type": "", + "title": "eAtlas project page" + }, + { + "href": "http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D", + "rel": "related", + "type": "", + "title": "NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG" + }, + { + "href": "https://nextcloud.eatlas.org.au/apps/sharealias/a/gbr_eatlas_nrm_regions_gbrmp_2012-zip", + "rel": "related", + "type": "", + "title": "Shapefile + Metadata [Zip 1.5 MB]" + }, + { + "href": "https://eatlas.org.au/data/uuid/053f0b32-47cc-4a3f-8325-b37feb33c0e3", + "rel": "describedby", + "type": "text/html", + "title": "Full metadata link" + }, + { + "href": "http://i.creativecommons.org/l/by/3.0/au/88x31.png", + "rel": "license", + "type": "image/png" + }, + { + "href": "http://creativecommons.org/licenses/by/3.0/au/", + "rel": "license", + "type": "text/html" + } + ], + "license": "Creative Commons Attribution 3.0 Australia License", + "providers": [ + { + "name": "Australian Institute of Marine Science (AIMS)", + "roles": [ + "pointOfContact" + ], + "url": "https://eatlas.org.au" + } + ], + "themes": [ + { + "concepts": [ + { + "id": "marine", + "url": null + } + ], + "scheme": "", + "description": "", + "title": "Keywords (Temporal)" + } + ], + "id": "053f0b32-47cc-4a3f-8325-b37feb33c0e3", + "search_suggestions": { + "abstract_phrases": [] + }, + "sci:citation": "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":null}", + "type": "Collection", + "stac_version": "1.0.0", + "stac_extensions": [ + "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", + "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", + "https://stac-extensions.github.io/projection/v1.1.0/schema.json", + "https://stac-extensions.github.io/language/v1.0.0/schema.json", + "https://stac-extensions.github.io/themes/v1.0.0/schema.json", + "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" + ] +} diff --git a/indexer/src/test/resources/canned/sample_invalid_polygon.xml b/indexer/src/test/resources/canned/sample_invalid_polygon.xml new file mode 100644 index 00000000..e4196b4d --- /dev/null +++ b/indexer/src/test/resources/canned/sample_invalid_polygon.xml @@ -0,0 +1,640 @@ + + + + + + 053f0b32-47cc-4a3f-8325-b37feb33c0e3 + + + urn:uuid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Australian Institute of Marine Science (AIMS) + + + + + eAtlas Data Manager + + + + + + + +61 7 4753 4444 + + + + + + + + + + + + + + + + + + + + PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE + + + Townsville + + + Queensland + + + 4810 + + + Australia + + + e-atlas@aims.gov.au + + + + + + + https://eatlas.org.au + + + WWW:LINK-1.0-http--link + + + eAtlas portal + + + + + + + + + + + + + + + + + + 2016-08-02T14:43:41 + + + + + + + + + + 2023-09-18T08:11:14 + + + + + + + + + + ISO 19115-3:2018 + + + + + + + https://eatlas.org.au/data/uuid/053f0b32-47cc-4a3f-8325-b37feb33c0e3 + + + WWW:LINK-1.0-http--metadata-URL + + + Point of truth URL of this metadata record + + + + + + + + + EPSG:4283 + + + EPSG + + + + + + + + + + + Natural Resource Management (NRM) areas flowing into the Great Barrier Reef Marine Park 2012 (NERP TE 13.1 eAtlas AIMS, source: Dept. Env.) + + + GBR_NERP-TE-13.1_e-Atlas_NRM-Regions-GBRMP-2012 + + + + + 2014-03-25T09:10:00 + + + + + + + + + + + + + + + Australian Institute of Marine Science (AIMS) + + + + + Lawrey, Eric, Dr + + + + + + + +61 7 4753 4444 + + + + + + + + + + PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE + + + Townsville + + + Queensland + + + 4810 + + + Australia + + + e-atlas@aims.gov.au + + + + + + + https://eatlas.org.au + + + WWW:LINK-1.0-http--link + + + eAtlas portal + + + + + + + eAtlas Project Leader + + + + + + + + + + + This dataset corresponds to the Natural Resource Management (NRM) Regions corresponding to river catchments neighbouring the Great Barrier Reef Marine Park. The original aim of this dataset was to show river basins that flow into the Great Barrier Reef (GBR) Marine Park, grouping them by their NRM region. The NRM region boundaries already mostly correspond to a grouping of river basin boundaries and so this regrouping of river basins was unnecessary. The NRM regions did however need some adjustments as they extend out to sea and the Cape York NRM region covers river basins on the east and west coast of Cape York and thus contains river basins that do not flow into the GBR. For this reason the Cape York NRM region was split along the Great Dividing range to remove the western catchments so that only eastern catchments were kept. In addition to this the NRM region polygons were split into the mainland and sea areas to allow this dataset to be used for easy map creation. Because of these changes the polygons in this dataset do not correspond to the NRM boundaries, but are based on the NRM boundaries. + + Since 2006, NRM regions have been important in the delivery of Australian Government funding initiatives including Caring for our Country, the Natural Heritage Trust, the National Landcare Program, the Environmental Stewardship Program and the Working on Country Indigenous land and sea ranger program. + + The NRM regions included in this dataset: Burnett Mary, Fitzroy, Mackay Whitsunday, Burdekin, Wet Tropics and Cape York (eastern half). Since this dataset was only including catchments neighbouring the marine park it does not include the Torres Strait NRM region and only includes the eastern half of Cape York. The NRM regions were split into mainland and sea features using the Australian Coast 100k 2004 dataset. + + This dataset was created for the eAtlas and is not an authoritative source of the NRM boundaries. It should be used for research or display purposes only. It should be noted that from time to time the states and/or territories may revise their regional boundaries in accordance with local needs and therefore alterations to either the attribution or boundaries of the data may occur in the future. + + This dataset was derived from River Basins 1997 (Geoscience Australia), NRM Regions 2012 (Department of Environment) and Australian Coast 100k 2004 (Geoscience Australia) datasets. + + + Processing: + + Using ArcMap a copy of the NRM regions shapefile was made (NRM_Regions_2012_GBRMP) and editing enabled. The NRM regions of interest were selected. This selection was then inverted to select all the features we didn't want to keep. These were then deleted. + + The River Basins 1997 dataset was loaded into ArcMap and a transformation was chosen to convert the ADG66 data into GDA 94. The coast was checked against the Coast 100k dataset to ensure the transformation was correct. + + The Cape York NRM region was split in two by tracing the catchments along the Great Dividing range based on the River Basins 1997 (Geoscience Australia) dataset. The tip of the eastern side basin of Cape York was drawn to the boundary vertically. The western side was then selected and deleted. + + The Coast 100k 2004 dataset was added and an a Definition Query was setup to only keep the mainland features ("FEAT_CODE" = 'mainland'). + + This was then used to split the NRM_Regions_2010_GBRMP using the Split Polygons tool from the Advanced Editing menu. + + A new attribute (FEAT_CODE) was then added to the shapefile to indicate if the feature was part of the mainland ('mainland') or part of the marine boundary ('sea'). + + The Shape_Area attribute was renamed to SHAPE_Area by removing and recreating it. Also Leng_Units and Area_Units was added as text fields. + + The Data Frame projection was changed to GDA 1994 Australia Albers equal area projection for recalculate the Shape areas and length. This was done using the Calculate Geometry tool. The The AREA_DESC attribute was removed as it no longer made sense. + + The shapefile was then renamed to GBR_eAtlas_NRM_Regions_2012_GBRMP.shp. + + NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG, Available from http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D + + + The aim of this selection of the NRM regions is to allow the creation of a basemap similar to that used in the Reef Plan report card. + + + Department of the Environment, Geoscience Australia + + + + + + + + + + + + + Australian Institute of Marine Science (AIMS) + + + + + Lawrey, Eric, Dr + + + + + + + +61 7 4753 4444 + + + + + + + + + + + + + + + + + + + + PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE + + + Townsville + + + Queensland + + + 4810 + + + Australia + + + e-atlas@aims.gov.au + + + + + + + https://eatlas.org.au + + + WWW:LINK-1.0-http--link + + + eAtlas portal + + + + + + + eAtlas Project Leader + + + + + + + + + + + + + + + + 500000 + + + + + + + boundaries + + + + + + + + + + + + NaN -15.79454501341779 NaN -15.695062408029159 NaN -15.65013459790775 NaN -15.42610850933827 NaN -14.75642612392292 NaN -13.99952422730477 NaN -13.33011644035989 NaN -12.237907329227328 NaN -11.807150433698782 NaN -11.52539312521933 NaN -11.14763393908733 NaN -10.68297245877473 NaN -10.68272914450409 NaN -11.01950630219134 NaN -11.11319759903067 NaN -11.34124095712693 NaN -11.919719550776952 NaN -12.38261607703864 NaN -12.43469668495297 NaN -12.977114152994451 NaN -13.162576343331 NaN -13.75840416760929 NaN -14.03804792318572 NaN -14.583744418613591 NaN -15.18164296277707 NaN -15.80505140050894 NaN -15.941698901716741 NaN -15.884368805830492 NaN -16.64816790914728 NaN -17.00749817971015 NaN -17.29934757976991 NaN -17.60764223589277 NaN -18.44831236398871 NaN -18.85429306923892 NaN -19.13708737003084 NaN -19.67381901373288 NaN -19.97195835132454 NaN -19.91702272125728 NaN -20.941515823749345 NaN -21.30852923446185 NaN -21.43952194245053 NaN -21.15844809946786 NaN -21.57564059428946 NaN -21.8762573338363 NaN -21.810061506661366 NaN -21.96021902727681 NaN -22.06341436830487 NaN -22.243794465412908 NaN -23.237873065167484 NaN -23.91178855007068 NaN -24.25235320121381 NaN -24.611932547340803 NaN -24.59939556095606 NaN -25.03234391687795 NaN -24.723595212155576 NaN -24.908318408446863 NaN -25.27570806029831 NaN -26.05951134399771 NaN -26.0217299105099 NaN -26.30171388505817 NaN -26.42005966469678 NaN -26.301130666268 NaN -26.126690147000595 NaN -26.27184529809052 NaN -26.17271144034115 NaN -26.32759954980076 NaN -26.50555427000666 NaN -26.941828417038842 NaN -26.44679107717941 NaN -26.75463375064727 NaN -26.77501267401718 NaN -26.46729500599707 NaN -26.41274548498072 NaN -26.24908436629878 NaN -26.159216927279232 NaN -26.03502448115904 NaN -25.94191651085546 NaN -25.67733746075679 NaN -25.00885246882392 NaN -24.639055875038146 NaN -24.69666613879398 NaN -24.5869714617134 NaN -23.938491366753 NaN -23.75197787759969 NaN -22.70666975766173 NaN -22.3194985526817 NaN -21.9259991372333 NaN -20.965186671321778 NaN -20.55923313166188 NaN -20.23026659850956 NaN -20.01156660508909 NaN -19.855384067826066 NaN -19.26446514529517 NaN -19.068216479707 NaN -18.38880981752639 NaN -17.24662980821674 NaN -17.20388529600304 NaN -17.03638896212518 NaN -16.89601256442663 NaN -16.80550880314402 NaN -16.42130919303264 NaN -16.37949168463397 NaN -15.79454501341779 + + + + + + + + + + + + + + https://eatlas.org.au/geonetwork/srv/api/records/053f0b32-47cc-4a3f-8325-b37feb33c0e3/attachments/preview-map.jpg + + + large_thumbnail + + + jpg + + + + + + + marine + + + + + + + + + + + + + + + http://i.creativecommons.org/l/by/3.0/au/88x31.png + + + WWW:LINK-1.0-http--related + + + License Graphic + + + + + + + + + Creative Commons Attribution 3.0 Australia License + + + + + + + + + + + + + + + + + + + + + + + + http://creativecommons.org/international/au/ + + + WWW:LINK-1.0-http--related + + + + + + + + + + + + + + + + + + + http://creativecommons.org/licenses/by/3.0/au/ + + + WWW:LINK-1.0-http--related + + + License Text + + + + + + + + + + + + + + + + + + + + + + + + + + + https://maps.eatlas.org.au/index.html?intro=false&z=6&ll=148.79651,-18.50602&l0=ea_ea%3AGBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap&s0=GBR_NRM-Regions-GBRMP_Data-preview + + + WWW:LINK-1.0-http--link + + + Interactive map of this dataset + + + + + + + + + + https://maps.eatlas.org.au/maps/wms + + + OGC:WMS-1.1.1-http-get-map + + + ea:GBR_NERP-TE-13-1_eAtlas_NRM-Regions-GBRMP-2012 + + + + + + + + + + https://eatlas.org.au/data/uuid/71127e4d-9f14-4c57-9845-1dce0b541d8d + + + WWW:LINK-1.0-http--related + + + eAtlas Web Mapping Service (WMS) (AIMS) + + + + + + + https://eatlas.org.au/nerp-te/aims-eatlas-13-1 + + + WWW:LINK-1.0-http--related + + + eAtlas project page + + + + + + + http://www.environment.gov.au/fed/catalog/search/resource/details.page?uuid=%7BD92421DF-37D9-4194-854C-FBD123747A71%7D + + + WWW:LINK-1.0-http--related + + + NRM_Regions_2012_GBRMP: Natural Resource Management (NRM) Regions (2012), Australian Government Department of the Environment, ERIN DIG + + + + + + + https://nextcloud.eatlas.org.au/apps/sharealias/a/gbr_eatlas_nrm_regions_gbrmp_2012-zip + + + WWW:LINK-1.0-http--downloaddata + + + Shapefile + Metadata [Zip 1.5 MB] + + + + + + + + diff --git a/indexer/src/test/resources/canned/sample_non_noded_intersections.xml b/indexer/src/test/resources/canned/sample_non_noded_intersections.xml new file mode 100644 index 00000000..d2820012 --- /dev/null +++ b/indexer/src/test/resources/canned/sample_non_noded_intersections.xml @@ -0,0 +1,976 @@ + + + + + + 16904861-53e6-4123-a7bb-781f2429629f + + + urn:uuid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Australian Institute of Marine Science (AIMS) + + + + + eAtlas Data Manager + + + + + + + +61 7 4753 4444 + + + + + + + + + + + + + + + + + + + + PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE + + + Townsville + + + Queensland + + + 4810 + + + Australia + + + e-atlas@aims.gov.au + + + + + + + https://eatlas.org.au + + + WWW:LINK-1.0-http--link + + + eAtlas portal + + + + + + + + + + + + + + + + + + 2020-11-18T05:17:25 + + + + + + + + + + 2023-09-18T08:51:09 + + + + + + + + + + ISO 19115-3:2018 + + + + + + + https://eatlas.org.au/data/uuid/16904861-53e6-4123-a7bb-781f2429629f + + + WWW:LINK-1.0-http--metadata-URL + + + Point of truth URL of this metadata record + + + + + + + + + Venomous Jellyfish Database (sting events and specimen samples – November 2018) (NESP TWQ 2.2.3, CSIRO) + + + + + 2019-01-18 + + + + + + + + + + + + + + + Oceans and Atmosphere, CSIRO + + + + + Gershwin, Lisa-ann, Dr + + + + + + + +61 3 6232 5222 + + + + + + + + + + + + + + + + + + + + +61 3 6232 5222 + + + GPO BOX 1538 + + + Hobart + + + Tasmania + + + Australia + + + lisa-ann.gershwin@csiro.au + + + + + + + Research Scientist + + + + + + + + + + + + + + + + Oceans and Atmosphere, CSIRO + + + + + Thomas, Linda, Ms + + + + + + + +61 3 6232 5222 + + + + + + + + + + + + + + + + + + + + GPO BOX 1538 + + + Hobart + + + Tasmania + + + + + + Australia + + + linda.thomas@csiro.au + + + + + + + Research Officer + + + + + + + + + + + + + + + + Oceans and Atmosphere, CSIRO + + + + + Condie, Scott, Dr + + + + + + + +61 3 6232 5222 + + + + + + + + + + + + + + + + + + + + GPO BOX 1538 + + + Hobart + + + Tasmania + + + + + + Australia + + + scott.condie@csiro.au + + + + + + + Principal Research Scientist + + + + + + + + + + + + + + + + Oceans and Atmosphere, CSIRO + + + + + Richardson, Anthony, Prof + + + + + + + +61 7 3833 5656 + + + + + + + + + + + + + + + + + + + + + + + Dutton Park + + + Brisbane + + + 4067 + + + Australia + + + anthony.richardson@csiro.au + + + + + + + Principal Research Scientist + + + + + + + + + + + This dataset contains records of sting events and specimen samples of jellyfish (Irukanji, Halo irukanji, Box jellyfish and Morbakka) from the Venomous Jellyfish Database. This dataset contains an extract of 1081 sting events (in CSV format) from along the north Queensland coast between December 1883 to March 2017. The full database contains approximately 3000 sting events from around Australia and includes records from sources that have not yet been cleared for release. + + This extract from the Venomous Jellyfish Database was made for eAtlas as part of the 2.2.3 NESP Irukandji forecasting system project. It contains jellyfish sting and specimen information. Data were compiled from numerous sources (noted in each record), including Lisa-ann Gershwin and media reports. These data will be used as part of the Irukandji forecasting model. The extract data file contains data that is publicly available. + + The sting data includes primary information such as date, time of day and locality of stings, as well as secondary details such as age and gender of the sting victim, where on the body they were stung, their activity at the time of the sting and their general medical condition. + + + Limitations: + This data shows the occurrence of reported jellyfish stings and specimens along the north Queensland coast. It does NOT provide a prediction of where jellyfish or jellyfish sting events may occur. + + These records represent a fraction of known sting events and specimen collections, with more being added to the list of publicly available data as permissions are granted. + + Historical data dates may be coarse, showing month and year that the sting occurred in. Some events have date only. + + + Methods: + This data set contains information on sting events and specimen collections that have occurred around Australia, which involved venomous jellyfish (Irukandji syndrome-producing species in the genera Carukia, Malo, Morbakka). + + These data were collected over numerous years by Lisa-ann Gershwin and others from various sources (primarily media). These data were entered into an excel spreadsheet, which formed the basis of the Venomous Jellyfish Database. This database was developed as part of the 2.2.3 NESP Irukandji forecasting system project. + + Some data have been standardised, e.g., location information and sting site on the body. Data available to the public have been approved by the data owners, or came from a public source (e.g. newspaper reports, media alerts). + + + Format: + + This dataset consists of one Comma Separated Value (CSV) table containing information on jellyfish events along the north Queensland coast. eAtlas Note: The original database extract was provided as an Excel spreadsheet table. This was converted to a CSV file. + + + Data Dictionary: + + CSIRO_ID: unique id + EVENT_TYPE: type of event – sting or specimen + STATE: state in which event occurred + REGION: broader region of State the event occurred in + LOCAL_GOV_AREA: local government area that the event occurred in – if known + MAIN_LOCALITY: main locality that the event occurred in + SITE_INFO: site details/comments + YEAR: year event occurred + MONTH: month event occurred + DAY: day of the month the event occurred + DATE_RANGE: date range event may have occurred in + EVENT_TIME: time the event occurred HH24:MI. If time is unknown then NULL + EXACT_DATE: if exact date unknown then N. Use with DATE_RANGE + EXACT_TIME: if exact time unknown then N. + TIME_REPORTED: time event reported e.g. early afternoon, morning + EVENT_RECORDED: date event reported e.g. on weekend, in February, Jan-March + EVENT_COMMENTS: comments about the event + LAT: latitude in decimal degrees + LON: longitude in decimal degrees + LOCATION_ACCURACY: How accurate the location is, 0=within a few hundred metres, 1=within a few kilometres, 2=more than a few kilometres + EVENT_OFFSHORE_ONSHORE: where the event occurred (if known) – beach, island, reef + LOCATION_COMMENTS: comments relating to the location of the event + WATER_DEPTH_M: depth of water, in metres, that the event occurred in (if known) + AGE: number: age of patient if known + SEX: gender of patient if known + HOME: home state/county of patient + HOSPITAL: hospital the patient was treated at (if known) + RETRIEVAL: method by which the patient was transported to hospital (if known) + STING_SITE_REPORTED: reported sting site on the body + STING_SITE_BODY: standardised area on body that sting was reported – upper limb, lower limb etc. + NUMBER_STINGS: number of stings recorded, if known + VISIBLE_STING: the nature of visible sting marks, if reported + PPE_WORN: was Personal Protective Equipment (PPE) worn? + PATIENT_COMMENTS: comments about the patient + TIME_TO_ONSET: delay between sting and onset of symptoms, if reported + PATIENT_CONDITION: state the patient was in, e.g. distressed, calm, stable + BLOOD_PRESSUREL: comments relating to blood pressure of the patient + NAUSEA: did the patient experience nausea and/or vomiting? + PAIN: location and/or intensity of pain experienced by the patient + SWEATING: did the patient experience sweating? + TREATMENT: what treatment the patient was given + DISCHARGED: when the patient was discharged from hospital + ONGOING_SYMPTOMS: what ongoing symptoms the patient is experiencing + NEMATO_SAMPLES: were nematocyst samples taken? + SPECIES_NAME: species name, if determined + PATROL: was the sting on a patrolled beach + CURATOR: where the data came from e.g. Gershwin = Lisa-ann Gershwin + DATA_CODE: access constraint on data + PUBLIC_REFERENCE: source of the information for event + ENTERED_BY: who entered the data + ENTERED_DATE: when the data was entered + + + References: + + Gershwin, L. (2013). Stung! On Jellyfish Blooms and the Future of the Ocean. Chicago, University of Chicago Press. + Gershwin, L., De Nardi, M., Winkel, K.D., and Fenner, P.J. (2010) Marine Stingers: Review of an Under-Recognized Global Coastal Management Issue. Journal of Coastal Management, 38:1, 22-41, DOI: 10.1080/08920750903345031 + + Gershwin L, Condie SA, Mansbridge JV, Richardson AJ. 2014 Dangerous jellyfish blooms are predictable. Journal of the Royal Society. Interface 11: 20131168.http://dx.doi.org/10.1098/rsif.2013.1168 + + Gershwin, L., Richardson, A.J., Winkel, K.D., Fenner, P.J., Lippmann, J., Hore, R., Avila-Soria, G., Brewer, D., Kloser, R.J., Steven, A. and Condie, S. (2013). Biology and ecology of Irukandji jellyfish (Cnidaria: Cubozoa). Advances in Marine Biology 66: 1-85. + + + Data Location: + + This dataset is filed in the eAtlas enduring data repository at: data\custodian\2016-18-NESP-TWQ-2\2.2.3_Jellyfish-early-warning\AU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB + + + + + + + + + + Oceans and Atmosphere, CSIRO + + + + + Condie, Scott, Dr + + + + + + + +61 3 6232 5222 + + + + + + + + + + + + + + + + + + + + GPO BOX 1538 + + + Hobart + + + Tasmania + + + + + + Australia + + + scott.condie@csiro.au + + + + + + + https://eatlas.org.au/node/7531 + + + WWW:LINK-1.0-http--link + + + eAtlas portal + + + + + + + + + + Principal Research Scientist + + + + + + + + + biota + + + + + Far North Queensland, Australia + + + + + + + + + + -28.081054687500007 153.9404296875 -24.8291015625 153.76464843750003 -22.368164062500014 151.2158203125 -19.6435546875 149.6337890625 -18.061523437500014 146.99707031250003 -14.9853515625 146.6455078125 -14.106445312500014 144.7998046875 -9.9755859375 142.8662109375 -10.942382812500014 141.9873046875 -16.6552734375 139.0869140625 -16.6552734375 139.7900390625 -16.2158203125 139.4384765625 -12.172851562499986 141.19628906250003 -13.4033203125 141.5478515625 -12.4365234375 141.9873046875 -11.9091796875 141.2841796875 -10.7666015625 142.5146484375 -10.7666015625 143.2177734375 -14.1943359375 144.7119140625 -15.1611328125 145.2392578125 -16.391601562500014 145.2392578125 -17.0947265625 145.8544921875 -19.0283203125 146.2939453125 -20.3466796875 149.0185546875 -21.2255859375 149.1064453125 -22.456054687500014 149.5458984375 -22.8076171875 150.6005859375 -23.7744140625 150.95214843749997 -25.356445312499986 152.8857421875 -28.081054687500007 153.5009765625 -28.081054687500007 153.9404296875 + + + + + + + + + + + + + 1883-12-01T00:00:00 + 2017-03-16T00:00:00 + + + + + + + + + + https://eatlas.org.au/geonetwork/srv/api/records/16904861-53e6-4123-a7bb-781f2429629f/attachments/Preview-image.png + + + large_thumbnail + + + png + + + + + + + + + + + + http://i.creativecommons.org/l/by/3.0/au/88x31.png + + + WWW:LINK-1.0-http--related + + + License Graphic + + + + + + + + + Creative Commons Attribution 3.0 Australia License + + + + + + + + + + + + + + + + + + + + + + + + http://creativecommons.org/international/au/ + + + WWW:LINK-1.0-http--related + + + + + + + + + + + + + + + + + + + + + + WWW:LINK-1.0-http--related + + + License Text + + + + + + + This database is based on the "Irukandji Sting Database" assembled and curated by Dr Lisa-Ann Gershwin of the Australian Marine Stinger Advisory Services, and others, and enhanced by CSIRO. + Derivative products and copies of this work must display this acknowledgement: + "Based on or contains data provided by Dr Lisa-ann Gershwin (Australian Marine Stinger Advisory Services) and CSIRO. In consideration of the state permitting use of this data you acknowledge and agree that the State gives no warranty in relation to the data (including accuracy, reliability, completeness, currency or suitability) and accepts no liability (including without limitation, liability in negligence) for any loss, damage or costs (including consequential damage) relating to any use of the data. Data must not be used for direct marketing or be used in breach of the privacy laws." + You must also include meta-data with the product(s) and include as a minimum the metadata provided with this supplied data. + + + + + + + + + + + + + + + + + + + + + + + https://nesptropical.edu.au/index.php/round-2-projects/project-2-2-3/ + + + WWW:LINK-1.0-http--link + + + NESP TWQ Project 2.2.3 + + + + + + + https://maps.eatlas.org.au/index.html?intro=false&z=6&ll=146.23608,-18.99354&l0=ea_nesp2%3AAU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB_extract_20181130,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap,google_HYBRID,google_TERRAIN,google_SATELLITE,google_ROADMAP&v0=,,f,f,f,f + + + WWW:LINK-1.0-http--related + + + eAtlas Web Mapping Service (WMS) (AIMS) + + + + + + + https://eatlas.org.au/nesp-twq-2/jellyfish-early-warning-2-2-3 + + + WWW:LINK-1.0-http--related + + + Project web site + + + + + + + https://nextcloud.eatlas.org.au/apps/sharealias/a/au-nesp-twq-2-2-3-venomous-jellyfish-db-20181130 + + + WWW:LINK-1.0-http--downloaddata + + + Venomous Jellyfish Database extract Nov 2018 CSV + Metadata + Photo [Zip 1.355 MB] + + + + + + + https://maps.eatlas.org.au/index.html?intro=false&z=5&ll=146.93921,-18.03512&l0=ea_nesp2%3AAU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB_extract_20181130,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap,google_HYBRID,google_TERRAIN,google_SATELLITE,google_ROADMAP&v0=,,f,f,f,f + + + WWW:LINK-1.0-http--related + + + Interactive map of this dataset + + + + + + + https://maps.eatlas.org.au/maps/wms + + + OGC:WMS-1.1.1-http-get-map + + + nesp2:AU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB_extract_20181130 + + + + + + + + + + https://eatlas.org.au/data/uuid/c5ce8cb6-04e5-4153-836d-df91878a3131 + + + WWW:LINK-1.0-http--related + + + R code for analysis of Irukandji data of the GBR (NESP TWQ 2.2.3, CSIRO) + + + + + + + + + + + + + + + + http://i.creativecommons.org/l/by/3.0/au/88x31.png + + + WWW:LINK-1.0-http--related + + + License Graphic + + + + + + + + + Creative Commons Attribution 3.0 Australia License + + + + + + + + + + + + + + + + + + + + + + + + http://creativecommons.org/international/au/ + + + WWW:LINK-1.0-http--related + + + + + + + + + + + + + + + + + + + http://creativecommons.org/licenses/by/3.0/au/ + + + WWW:LINK-1.0-http--related + + + License Text + + + + + + + + diff --git a/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json b/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json new file mode 100644 index 00000000..5c4c4f55 --- /dev/null +++ b/indexer/src/test/resources/canned/sample_non_noded_intersections_stac.json @@ -0,0 +1,235 @@ +{ + "title" : "Venomous Jellyfish Database (sting events and specimen samples – November 2018) (NESP TWQ 2.2.3, CSIRO)", + "description" : "This dataset contains records of sting events and specimen samples of jellyfish (Irukanji, Halo irukanji, Box jellyfish and Morbakka) from the Venomous Jellyfish Database. This dataset contains an extract of 1081 sting events (in CSV format) from along the north Queensland coast between December 1883 to March 2017. The full database contains approximately 3000 sting events from around Australia and includes records from sources that have not yet been cleared for release.\n\n This extract from the Venomous Jellyfish Database was made for eAtlas as part of the 2.2.3 NESP Irukandji forecasting system project. It contains jellyfish sting and specimen information. Data were compiled from numerous sources (noted in each record), including Lisa-ann Gershwin and media reports. These data will be used as part of the Irukandji forecasting model. The extract data file contains data that is publicly available.\n\n The sting data includes primary information such as date, time of day and locality of stings, as well as secondary details such as age and gender of the sting victim, where on the body they were stung, their activity at the time of the sting and their general medical condition.\n\n\n Limitations:\n This data shows the occurrence of reported jellyfish stings and specimens along the north Queensland coast. It does NOT provide a prediction of where jellyfish or jellyfish sting events may occur.\n\n These records represent a fraction of known sting events and specimen collections, with more being added to the list of publicly available data as permissions are granted.\n\n Historical data dates may be coarse, showing month and year that the sting occurred in. Some events have date only.\n\n\n Methods:\n This data set contains information on sting events and specimen collections that have occurred around Australia, which involved venomous jellyfish (Irukandji syndrome-producing species in the genera Carukia, Malo, Morbakka).\n\n These data were collected over numerous years by Lisa-ann Gershwin and others from various sources (primarily media). These data were entered into an excel spreadsheet, which formed the basis of the Venomous Jellyfish Database. This database was developed as part of the 2.2.3 NESP Irukandji forecasting system project.\n\n Some data have been standardised, e.g., location information and sting site on the body. Data available to the public have been approved by the data owners, or came from a public source (e.g. newspaper reports, media alerts).\n\n\n Format:\n\n This dataset consists of one Comma Separated Value (CSV) table containing information on jellyfish events along the north Queensland coast. eAtlas Note: The original database extract was provided as an Excel spreadsheet table. This was converted to a CSV file.\n\n\n Data Dictionary:\n\n CSIRO_ID: unique id\n EVENT_TYPE: type of event – sting or specimen\n STATE: state in which event occurred\n REGION: broader region of State the event occurred in\n LOCAL_GOV_AREA: local government area that the event occurred in – if known\n MAIN_LOCALITY: main locality that the event occurred in\n SITE_INFO: site details/comments\n YEAR: year event occurred\n MONTH: month event occurred\n DAY: day of the month the event occurred\n DATE_RANGE: date range event may have occurred in\n EVENT_TIME: time the event occurred HH24:MI. If time is unknown then NULL\n EXACT_DATE: if exact date unknown then N. Use with DATE_RANGE\n EXACT_TIME: if exact time unknown then N.\n TIME_REPORTED: time event reported e.g. early afternoon, morning\n EVENT_RECORDED: date event reported e.g. on weekend, in February, Jan-March\n EVENT_COMMENTS: comments about the event\n LAT: latitude in decimal degrees\n LON: longitude in decimal degrees\n LOCATION_ACCURACY: How accurate the location is, 0=within a few hundred metres, 1=within a few kilometres, 2=more than a few kilometres\n EVENT_OFFSHORE_ONSHORE: where the event occurred (if known) – beach, island, reef\n LOCATION_COMMENTS: comments relating to the location of the event\n WATER_DEPTH_M: depth of water, in metres, that the event occurred in (if known)\n AGE: number: age of patient if known\n SEX: gender of patient if known\n HOME: home state/county of patient\n HOSPITAL: hospital the patient was treated at (if known)\n RETRIEVAL: method by which the patient was transported to hospital (if known)\n STING_SITE_REPORTED: reported sting site on the body\n STING_SITE_BODY: standardised area on body that sting was reported – upper limb, lower limb etc.\n NUMBER_STINGS: number of stings recorded, if known\n VISIBLE_STING: the nature of visible sting marks, if reported\n PPE_WORN: was Personal Protective Equipment (PPE) worn?\n PATIENT_COMMENTS: comments about the patient\n TIME_TO_ONSET: delay between sting and onset of symptoms, if reported\n PATIENT_CONDITION: state the patient was in, e.g. distressed, calm, stable\n BLOOD_PRESSUREL: comments relating to blood pressure of the patient\n NAUSEA: did the patient experience nausea and/or vomiting?\n PAIN: location and/or intensity of pain experienced by the patient\n SWEATING: did the patient experience sweating?\n TREATMENT: what treatment the patient was given\n DISCHARGED: when the patient was discharged from hospital\n ONGOING_SYMPTOMS: what ongoing symptoms the patient is experiencing\n NEMATO_SAMPLES: were nematocyst samples taken?\n SPECIES_NAME: species name, if determined\n PATROL: was the sting on a patrolled beach\n CURATOR: where the data came from e.g. Gershwin = Lisa-ann Gershwin\n DATA_CODE: access constraint on data\n PUBLIC_REFERENCE: source of the information for event\n ENTERED_BY: who entered the data\n ENTERED_DATE: when the data was entered\n\n\n References:\n\n Gershwin, L. (2013). Stung! On Jellyfish Blooms and the Future of the Ocean. Chicago, University of Chicago Press.\n Gershwin, L., De Nardi, M., Winkel, K.D., and Fenner, P.J. (2010) Marine Stingers: Review of an Under-Recognized Global Coastal Management Issue. Journal of Coastal Management, 38:1, 22-41, DOI: 10.1080/08920750903345031\n\n Gershwin L, Condie SA, Mansbridge JV, Richardson AJ. 2014 Dangerous jellyfish blooms are predictable. Journal of the Royal Society. Interface 11: 20131168.http://dx.doi.org/10.1098/rsif.2013.1168\n\n Gershwin, L., Richardson, A.J., Winkel, K.D., Fenner, P.J., Lippmann, J., Hore, R., Avila-Soria, G., Brewer, D., Kloser, R.J., Steven, A. and Condie, S. (2013). Biology and ecology of Irukandji jellyfish (Cnidaria: Cubozoa). Advances in Marine Biology 66: 1-85.\n\n\n Data Location:\n\n This dataset is filed in the eAtlas enduring data repository at: data\\custodian\\2016-18-NESP-TWQ-2\\2.2.3_Jellyfish-early-warning\\AU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB", + "extent" : { + "bbox" : [ [ 139.0869140625, -28.0810546875, 153.9404296875, -9.9755859375 ], [ 139.0869140625, -28.0810546875, 153.9404296875, -9.9755859375 ] ], + "temporal" : [ [ "1883-11-30T14:10:44Z", "2017-03-15T13:00:00Z" ], [ "1883-11-30T14:10:44Z", "2017-03-15T13:00:00Z" ] ] + }, + "summaries" : { + "score" : 1, + "status" : "", + "credits" : [ ], + "scope" : { + "code" : "dataset", + "name" : "" + }, + "creation" : "2020-11-18T05:17:25", + "revision" : "2023-09-18T08:51:09", + "update_frequency" : "other", + "proj:geometry" : { + "geometries" : [ { + "type" : "Polygon", + "coordinates" : [ [ [ 153.9404296875, -28.081054687500007 ], [ 153.76464843750003, -24.8291015625 ], [ 151.2158203125, -22.368164062500018 ], [ 149.6337890625, -19.6435546875 ], [ 146.99707031250003, -18.061523437500018 ], [ 146.6455078125, -14.9853515625 ], [ 144.7998046875, -14.106445312500014 ], [ 142.8662109375, -9.9755859375 ], [ 141.9873046875, -10.942382812500014 ], [ 139.0869140625, -16.6552734375 ], [ 139.7900390625, -16.6552734375 ], [ 139.4384765625, -16.2158203125 ], [ 141.19628906250003, -12.172851562499986 ], [ 141.5478515625, -13.4033203125 ], [ 141.9873046875, -12.4365234375 ], [ 141.2841796875, -11.9091796875 ], [ 142.5146484375, -10.7666015625 ], [ 143.2177734375, -10.7666015625 ], [ 144.7119140625, -14.1943359375 ], [ 145.2392578125, -15.1611328125 ], [ 145.2392578125, -16.391601562500014 ], [ 145.8544921875, -17.0947265625 ], [ 146.2939453125, -19.0283203125 ], [ 149.0185546875, -20.3466796875 ], [ 149.1064453125, -21.2255859375 ], [ 149.5458984375, -22.456054687500018 ], [ 150.6005859375, -22.8076171875 ], [ 150.95214843749997, -23.7744140625 ], [ 152.8857421875, -25.356445312499982 ], [ 153.5009765625, -28.081054687500007 ], [ 153.9404296875, -28.081054687500007 ] ] ] + } ], + "type" : "GeometryCollection" + }, + "temporal" : [ { + "start" : "1883-11-30T14:10:44Z", + "end" : "2017-03-15T13:00:00Z" + } ], + "centroid" : [ [ 139.524, -15.935 ], [ 139.6, -16.595 ], [ 139.402, -16.651 ], [ 141.531, -12.616 ], [ 149.179, -20.592 ], [ 145.617, -15.359 ], [ 153.009, -25.279 ], [ 146.144, -18.336 ] ] + }, + "contacts" : [ { + "roles" : [ "pointOfContact", "about" ], + "organization" : "Oceans and Atmosphere, CSIRO", + "name" : "Condie, Scott, Dr", + "position" : "Principal Research Scientist", + "emails" : [ "scott.condie@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "GPO BOX 1538" ], + "city" : "Hobart", + "country" : "Australia", + "postalCode" : "", + "administrativeArea" : "Tasmania" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 3 6232 5222" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ { + "href" : "https://eatlas.org.au/node/7531", + "type" : "WWW:LINK-1.0-http--link", + "title" : "eAtlas portal" + } ] + }, { + "roles" : [ "pointOfContact", "metadata" ], + "organization" : "Australian Institute of Marine Science (AIMS)", + "name" : "eAtlas Data Manager", + "position" : "", + "emails" : [ "e-atlas@aims.gov.au" ], + "addresses" : [ { + "deliveryPoint" : [ "PRIVATE MAIL BAG 3, TOWNSVILLE MAIL CENTRE" ], + "city" : "Townsville", + "country" : "Australia", + "postalCode" : "4810", + "administrativeArea" : "Queensland" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 7 4753 4444" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ { + "href" : "https://eatlas.org.au", + "type" : "WWW:LINK-1.0-http--link", + "title" : "eAtlas portal" + } ] + }, { + "roles" : [ "principalInvestigator", "citation" ], + "organization" : "Oceans and Atmosphere, CSIRO", + "name" : "Gershwin, Lisa-ann, Dr", + "position" : "Research Scientist", + "emails" : [ "lisa-ann.gershwin@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "+61 3 6232 5222" ], + "city" : "GPO BOX 1538", + "country" : "Australia", + "postalCode" : "Tasmania", + "administrativeArea" : "Hobart" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 3 6232 5222" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ ] + }, { + "roles" : [ "collaborator", "citation" ], + "organization" : "Oceans and Atmosphere, CSIRO", + "name" : "Thomas, Linda, Ms", + "position" : "Research Officer", + "emails" : [ "linda.thomas@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "GPO BOX 1538" ], + "city" : "Hobart", + "country" : "Australia", + "postalCode" : "", + "administrativeArea" : "Tasmania" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 3 6232 5222" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ ] + }, { + "roles" : [ "collaborator", "citation" ], + "organization" : "Oceans and Atmosphere, CSIRO", + "name" : "Condie, Scott, Dr", + "position" : "Principal Research Scientist", + "emails" : [ "scott.condie@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "GPO BOX 1538" ], + "city" : "Hobart", + "country" : "Australia", + "postalCode" : "", + "administrativeArea" : "Tasmania" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 3 6232 5222" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ ] + }, { + "roles" : [ "collaborator", "citation" ], + "organization" : "Oceans and Atmosphere, CSIRO", + "name" : "Richardson, Anthony, Prof", + "position" : "Principal Research Scientist", + "emails" : [ "anthony.richardson@csiro.au" ], + "addresses" : [ { + "deliveryPoint" : [ "" ], + "city" : "Dutton Park", + "country" : "Australia", + "postalCode" : "4067", + "administrativeArea" : "Brisbane" + } ], + "phones" : [ { + "roles" : [ "voice" ], + "value" : "+61 7 3833 5656" + }, { + "roles" : [ "facsimile" ], + "value" : "" + } ], + "links" : [ ] + } ], + "languages" : [ { + "code" : "eng", + "name" : "English" + } ], + "links" : [ { + "href" : "https://nesptropical.edu.au/index.php/round-2-projects/project-2-2-3/", + "rel" : "related", + "type" : "text/html", + "title" : "NESP TWQ Project 2.2.3" + }, { + "href" : "https://maps.eatlas.org.au/index.html?intro=false&z=6&ll=146.23608,-18.99354&l0=ea_nesp2%3AAU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB_extract_20181130,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap,google_HYBRID,google_TERRAIN,google_SATELLITE,google_ROADMAP&v0=,,f,f,f,f", + "rel" : "related", + "type" : "", + "title" : "eAtlas Web Mapping Service (WMS) (AIMS)" + }, { + "href" : "https://eatlas.org.au/nesp-twq-2/jellyfish-early-warning-2-2-3", + "rel" : "related", + "type" : "", + "title" : "Project web site" + }, { + "href" : "https://nextcloud.eatlas.org.au/apps/sharealias/a/au-nesp-twq-2-2-3-venomous-jellyfish-db-20181130", + "rel" : "related", + "type" : "", + "title" : "Venomous Jellyfish Database extract Nov 2018 CSV + Metadata + Photo [Zip 1.355 MB]" + }, { + "href" : "https://maps.eatlas.org.au/index.html?intro=false&z=5&ll=146.93921,-18.03512&l0=ea_nesp2%3AAU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB_extract_20181130,ea_ea-be%3AWorld_Bright-Earth-e-Atlas-basemap,google_HYBRID,google_TERRAIN,google_SATELLITE,google_ROADMAP&v0=,,f,f,f,f", + "rel" : "related", + "type" : "", + "title" : "Interactive map of this dataset" + }, { + "href" : "https://maps.eatlas.org.au/maps/wms", + "rel" : "wms", + "type" : "", + "title" : "nesp2:AU_NESP-TWQ-2-2-3_CSIRO_Venomous-Jellyfish-DB_extract_20181130" + }, { + "href" : "https://eatlas.org.au/data/uuid/c5ce8cb6-04e5-4153-836d-df91878a3131", + "rel" : "related", + "type" : "", + "title" : "R code for analysis of Irukandji data of the GBR (NESP TWQ 2.2.3, CSIRO)" + }, { + "href" : "https://eatlas.org.au/data/uuid/16904861-53e6-4123-a7bb-781f2429629f", + "rel" : "describedby", + "type" : "text/html", + "title" : "Full metadata link" + }, { + "href" : "http://i.creativecommons.org/l/by/3.0/au/88x31.png", + "rel" : "license", + "type" : "image/png" + }, { + "href" : "", + "rel" : "license", + "type" : "text/html" + } ], + "license" : "Creative Commons Attribution 3.0 Australia License", + "providers" : [ { + "name" : "Australian Institute of Marine Science (AIMS)", + "roles" : [ "pointOfContact" ], + "url" : "https://eatlas.org.au" + } ], + "themes" : [ ], + "id" : "16904861-53e6-4123-a7bb-781f2429629f", + "search_suggestions" : { + "abstract_phrases" : [ ] + }, + "sci:citation" : "{\"suggestedCitation\":null,\"useLimitations\":null,\"otherConstraints\":[\"This database is based on the \\\"Irukandji Sting Database\\\" assembled and curated by Dr Lisa-Ann Gershwin of the Australian Marine Stinger Advisory Services, and others, and enhanced by CSIRO.\\n Derivative products and copies of this work must display this acknowledgement:\\n \\\"Based on or contains data provided by Dr Lisa-ann Gershwin (Australian Marine Stinger Advisory Services) and CSIRO. In consideration of the state permitting use of this data you acknowledge and agree that the State gives no warranty in relation to the data (including accuracy, reliability, completeness, currency or suitability) and accepts no liability (including without limitation, liability in negligence) for any loss, damage or costs (including consequential damage) relating to any use of the data. Data must not be used for direct marketing or be used in breach of the privacy laws.\\\"\\n You must also include meta-data with the product(s) and include as a minimum the metadata provided with this supplied data.\"]}", + "type" : "Collection", + "stac_version" : "1.0.0", + "stac_extensions" : [ "https://stac-extensions.github.io/scientific/v1.0.0/schema.json", "https://stac-extensions.github.io/contacts/v0.1.1/schema.json", "https://stac-extensions.github.io/projection/v1.1.0/schema.json", "https://stac-extensions.github.io/language/v1.0.0/schema.json", "https://stac-extensions.github.io/themes/v1.0.0/schema.json", "https://stac-extensions.github.io/web-map-links/v1.2.0/schema.json" ] +}