Пример #1
0
 def encode_range_set(self, reference, mime_type):
     return GML(
         "rangeSet",
         GML(
             "File",
             GML(
                 "rangeParameters", **{
                     ns_xlink("arcrole"): "fileReference",
                     ns_xlink("href"): reference,
                     ns_xlink("role"): mime_type
                 }), GML("fileReference", reference), GML("fileStructure"),
             GML("mimeType", mime_type)))
Пример #2
0
 def encode_range_set(self, reference, mime_type):
     return GML(
         "rangeSet",
         GML(
             "File",
             GML(
                 "rangeParameters",
                 **{ns_xlink("arcrole"): "fileReference", ns_xlink("href"): reference, ns_xlink("role"): mime_type}
             ),
             GML("fileReference", reference),
             GML("fileStructure"),
             GML("mimeType", mime_type),
         ),
     )
Пример #3
0
 def encode_range_set(self, reference, mime_type):
     return GML(
         "rangeSet",
         GML(
             "File",
             GML(
                 "rangeParameters", **{
                     ns_xlink("arcrole"):
                     "fileReference",
                     ns_xlink("href"):
                     reference,
                     ns_xlink("role"):
                     "http://www.opengis.net/spec/GMLCOV_geotiff-coverages/1.0/conf/geotiff-coverage"
                 }), GML("fileReference", reference), GML("fileStructure"),
             GML("mimeType", mime_type)))
Пример #4
0
    def encode_eo_metadata(self, coverage, request=None, subset_polygon=None):
        metadata_items = [
            metadata_location for metadata_location in getattr(
                coverage, 'metadata_locations', [])
            if metadata_location.format == "eogml"
        ]
        if len(metadata_items) >= 1:
            with vsi.open(metadata_items[0].path) as f:
                earth_observation = etree.parse(f).getroot()

            if subset_polygon:
                try:
                    feature = earth_observation.xpath("om:featureOfInterest",
                                                      namespaces=nsmap)[0]
                    feature[0] = self.encode_footprint(
                        coverage.footprint.intersection(subset_polygon),
                        coverage.identifier)
                except IndexError:
                    pass  # no featureOfInterest

        else:
            earth_observation = self.encode_earth_observation(
                coverage.identifier,
                coverage.begin_time,
                coverage.end_time,
                coverage.footprint,
                subset_polygon=subset_polygon)

        if not request:
            lineage = None

        elif request.method == "GET":
            lineage = EOWCS(
                "lineage",
                EOWCS(
                    "referenceGetCoverage",
                    self.encode_reference(
                        "Reference",
                        request.build_absolute_uri().replace("&", "&"),
                        False)), GML("timePosition", isoformat(now())))
        elif request.method == "POST":  # TODO: better way to do this
            href = request.build_absolute_uri().replace("&", "&")
            lineage = EOWCS(
                "lineage",
                EOWCS(
                    "referenceGetCoverage",
                    OWS("ServiceReference",
                        OWS("RequestMessage",
                            etree.parse(request).getroot()),
                        **{ns_xlink("href"): href})),
                GML("timePosition", isoformat(now())))

        return GMLCOV(
            "metadata",
            GMLCOV(
                "Extension",
                EOWCS("EOMetadata", earth_observation,
                      *[lineage] if lineage is not None else [])))
Пример #5
0
    def encode_eo_metadata(self, coverage, request=None, subset_polygon=None):
        data_items = list(coverage.data_items.filter(
            semantic="metadata", format="eogml"
        ))
        if len(data_items) >= 1:
            with open(retrieve(data_items[0])) as f:
                earth_observation = etree.parse(f).getroot()

            if subset_polygon:
                try:
                    feature = earth_observation.xpath(
                        "om:featureOfInterest", namespaces=nsmap
                    )[0]
                    feature[0] = self.encode_footprint(
                        coverage.footprint.intersection(subset_polygon),
                        coverage.identifier
                    )
                except IndexError:
                    pass  # no featureOfInterest

        else:
            earth_observation = self.encode_earth_observation(
                coverage, subset_polygon=subset_polygon
            )

        if not request:
            lineage = None

        elif request.method == "GET":
            lineage = EOWCS("lineage",
                EOWCS("referenceGetCoverage",
                    self.encode_reference("Reference",
                        request.build_absolute_uri().replace("&", "&"),
                        False
                    )
                ), GML("timePosition", isoformat(now()))
            )
        elif request.method == "POST":  # TODO: better way to do this
            href = request.build_absolute_uri().replace("&", "&")
            lineage = EOWCS("lineage",
                EOWCS("referenceGetCoverage",
                    OWS("ServiceReference",
                        OWS("RequestMessage",
                            etree.parse(request).getroot()
                        ), **{ns_xlink("href"): href}
                    )
                ), GML("timePosition", isoformat(now()))
            )

        return GMLCOV("metadata",
            GMLCOV("Extension",
                EOWCS("EOMetadata",
                    earth_observation,
                    *[lineage] if lineage is not None else []
                )
            )
        )