Esempio n. 1
0
    def __init__(self, x, y, epsg=31370):
        """Initialise a Point.

        To initialise a Point using GPS coordinates in decimal degrees,
        use epsg=4326 and enter the longitude as `x` and the latitude as `y`.

        Parameters
        ----------
        x : float
            X coordinate (or longitude) of the point.
        y : float
            Y coordinate (or latitude) of the point.
        epsg : int, optional
            EPSG code of the coordinate reference system (CRS) of the
            coordinates specified in `x`, `y`. Defaults to
            31370 (Belgian Lambert72).

        """
        self.x = x
        self.y = y

        self.element = etree.Element('{http://www.opengis.net/gml}Point')
        self.element.set('srsDimension', '2')
        self.element.set(
            'srsName',
            'http://www.opengis.net/gml/srs/epsg.xml#{:d}'.format(epsg))

        coordinates = etree.Element('{http://www.opengis.net/gml}pos')
        coordinates.text = '{:.06f} {:.06f}'.format(self.x, self.y)
        self.element.append(coordinates)
Esempio n. 2
0
    def __init__(self, location, distance, distance_unit='meter'):
        """Initialise a WithinDistance filter.

        Parameters
        ----------
        location : AbstractLocation
            An instance of a location to use as location for the
            WithinDistance filter.
        distance : float
            Amount of distance units to use for the filter.
        distance_unit : string, optional, defaults to 'meter'
            The distance unit of the value of `distance`.

        """
        self.location = location
        self.distance = distance
        self.distance_unit = distance_unit
        self.geom_column = ''

        self.element = etree.Element('{http://www.opengis.net/ogc}DWithin')

        geom = etree.Element('{http://www.opengis.net/ogc}PropertyName')
        geom.text = self.geom_column

        distance = etree.Element('{http://www.opengis.net/ogc}Distance')
        distance.set('units', self.distance_unit)
        distance.text = '{:.06f}'.format(self.distance)

        self.element.append(geom)
        self.element.append(location.get_element())
        self.element.append(distance)
Esempio n. 3
0
    def __init__(self, box):
        self.box = box
        self.geom_column = ''

        self.element = etree.Element('{http://www.opengis.net/ogc}Within')

        geom = etree.Element('{http://www.opengis.net/ogc}PropertyName')
        geom.text = self.geom_column

        self.element.append(geom)
        self.element.append(box.get_element())
Esempio n. 4
0
    def __init__(self, minx, miny, maxx, maxy, epsg=31370):
        """Initialise a Box.

        To initialise a Box using GPS coordinates in decimal degrees,
        use epsg=4326 and enter the longitude range as `minx` and `maxx` and
        the latitude range as `miny` and `maxy`.

        Parameters
        ----------
        minx : float
            X coordinate of the lower left corner of the box.
        miny : float
            Y coordinate of the lower left corner of the box.
        maxx : float
            X coordinate of the upper right corner of the box.
        maxy : float
            Y coordinate of the upper right corner of the box.
        epsg : int, optional
            EPSG code of the coordinate reference system (CRS) of the
            coordinates specified in `minx`, `miny`, `maxx`, `maxy`. Defaults
            to 31370 (Belgian Lambert72).

        Raises
        ------
        ValueError
            If `maxx` is lower than or equal to `minx`.
            If `maxy` is lower than or equal to `miny`.

        """
        if maxx <= minx:
            raise ValueError("MaxX should be greater than MinX.")

        if maxy <= miny:
            raise ValueError("MaxY should be greater than MinY.")

        self.minx = minx
        self.miny = miny
        self.maxx = maxx
        self.maxy = maxy

        self.element = etree.Element('{http://www.opengis.net/gml}Envelope')
        self.element.set('srsDimension', '2')
        self.element.set(
            'srsName',
            'http://www.opengis.net/gml/srs/epsg.xml#{:d}'.format(epsg))

        lower_corner = etree.Element('{http://www.opengis.net/gml}lowerCorner')
        lower_corner.text = '{:.06f} {:.06f}'.format(self.minx, self.miny)
        self.element.append(lower_corner)

        upper_corner = etree.Element('{http://www.opengis.net/gml}upperCorner')
        upper_corner.text = '{:.06f} {:.06f}'.format(self.maxx, self.maxy)
        self.element.append(upper_corner)
Esempio n. 5
0
    def __init__(self, x, y, epsg=31370):
        self.x = x
        self.y = y

        self.element = etree.Element('{http://www.opengis.net/gml}Point')
        self.element.set('srsName',
                         'http://www.opengis.net/gml/srs/epsg.xml#%i' % epsg)

        coordinates = etree.Element('{http://www.opengis.net/gml}coordinates')
        coordinates.set('decimal', '.')
        coordinates.set('cs', ',')
        coordinates.set('ts', ' ')
        coordinates.text = '%f,%f' % (self.x, self.y)
Esempio n. 6
0
def axml_operation(d):
    #   <owc:operation code="GetCapabilities" method="GET"
    #       type="applica..." href="..."
    #       <owc:request type="application/xml"> ..
    # etree.SubElement(entry, ns_elem("owc", "offering"), name="blah").text = "some value1"
    if is_empty(d):
        return None
    else:
        try:
            operation = etree.Element(ns_elem("owc", "operation"), nsmap=ns)

            operations_code = extract_p('code', d, None)
            if operations_code is not None:
                operation.set("code", operations_code)
            http_method = extract_p('method', d, None)
            if http_method is not None: operation.set("method", http_method)
            mimetype = extract_p('type', d, None)
            if mimetype is not None: operation.set("type", mimetype)
            request_url = extract_p('href', d, None)
            if request_url is not None: operation.set("href", request_url)

            # use axml_content here
            request = extract_p('request', d, None)
            request_enc = None if request is None else axml_content(request)
            if request_enc is not None: operation.append(request_enc)
            # use axml_content here
            result = extract_p('result', d, None)
            result_enc = None if result is None else axml_content(result)
            if result_enc is not None: operation.append(result_enc)
            return operation
        except Exception as ex:
            log.warn('could encode operation', ex)
            return None
Esempio n. 7
0
 def toXML(self):
     node0 = etree.Element(
         util.nspath_eval('ogc:PropertyIsNull', namespaces))
     etree.SubElement(node0,
                      util.nspath_eval('ogc:PropertyName',
                                       namespaces)).text = self.propertyname
     return node0
Esempio n. 8
0
 def toXML(self):
     node0 = etree.Element(util.nspath_eval(self.propertyoperator, namespaces))
     if not self.matchcase:
         node0.set('matchCase', 'false')
     etree.SubElement(node0, util.nspath_eval('ogc:PropertyName', namespaces)).text = self.propertyname
     etree.SubElement(node0, util.nspath_eval('ogc:Literal', namespaces)).text = self.literal
     return node0
Esempio n. 9
0
def axml_offering(d):
    # <owc:offering code="http://www.opengis.net/spec/owc-at...">
    #   <owc:offering code="http://www.opengis.net/spec....l">
    # 			<owc:content type="application/gml+xml">
    if is_empty(d):
        return None
    else:
        try:
            offering_code = extract_p('code', d, None)
            offering = etree.Element(ns_elem("owc", "offering"),
                                     attrib={"code": offering_code},
                                     nsmap=ns)

            # use axml_operation here
            operations = [
                axml_operation(do) for do in extract_p('operations', d, [])
            ]
            [offering.append(el) for el in operations if el is not None]
            # use axml_content here
            contents = [
                axml_content(do) for do in extract_p('contents', d, [])
            ]
            [offering.append(el) for el in contents if el is not None]
            # use axml_styeset here
            styles = [axml_styleset(do) for do in extract_p('styles', d, [])]
            [offering.append(el) for el in styles if el is not None]
            return offering
        except Exception as ex:
            log.warning('could encode offering', ex)
            return None
Esempio n. 10
0
def axml_link(d):
    # < link rel = "via" type = "application/xml" href = "..." title = "..."
    if is_empty(d):
        return None
    else:
        try:
            link = etree.Element("link", nsmap=ns)
            href = extract_p('href', d, None)
            if href is not None:
                link.set("href", href)
            rel = extract_p('rel', d, None)
            if rel is not None:
                link.set("rel", rel)
            mimetype = extract_p('type', d, None)
            if mimetype is not None:
                link.set("type", mimetype)
            lang = extract_p('lang', d, None)
            if lang is not None:
                link.set("lang", lang)
            title = extract_p('title', d, None)
            if title is not None:
                link.set("title", title)
            length = try_int(extract_p('length', d, None))
            if length is not None:
                link.set("length", str(length))
            return link
        except Exception as ex:
            log.warning('could not encode link', ex)
            return None
Esempio n. 11
0
File: csw.py Progetto: monoid/owslib
    def describerecord(self, typename='csw:Record', format=outputformat):
        """

        Construct and process DescribeRecord request

        Parameters
        ----------

        - typename: the typename to describe (default is 'csw:Record')
        - format: the outputFormat (default is 'application/xml')
 
        """

        # construct request
        node0 = etree.Element(
            util.nspath_eval('csw:DescribeRecord', namespaces))
        node0.set('service', self.service)
        node0.set('version', self.version)
        node0.set('outputFormat', format)
        node0.set('schemaLanguage', namespaces['xs2'])
        node0.set(util.nspath_eval('xsi:schemaLocation', namespaces),
                  schema_location)
        etree.SubElement(node0, util.nspath_eval('csw:TypeName',
                                                 namespaces)).text = typename
        self.request = util.xml2string(etree.tostring(node0))

        self._invoke()
Esempio n. 12
0
def axml_content(d):
    """
    OwcContent dict to Atom XML
    :param d:
    :return:
    """
    #   <owc:content type="image/tiff" href=".."
    if is_empty(d):
        return None
    else:
        try:
            content_elem = etree.Element(ns_elem("owc", "content"), nsmap=ns)

            mimetype = extract_p('type', d, None)
            if mimetype is not None:
                content_elem.set("type", mimetype)
            url = extract_p('url', d, None)
            if url is not None:
                content_elem.set("href", url)
            title = extract_p('title', d, None)
            if title is not None:
                content_elem.set("title", title)

            content = extract_p('content', d, None)
            if content is None:
                content_elem.text = content
            return content_elem
        except Exception as ex:
            log.warning('could encode content', ex)
            return None
Esempio n. 13
0
def axml_display(d):
    # <owc:display>
    # 		<owc:pixelWidth>
    if is_empty(d):
        return None
    else:
        try:
            creator_display = etree.Element(ns_elem("owc", "display"),
                                            nsmap=ns)
            pixel_width = try_int(extract_p('pixelWidth', d, None))
            if pixel_width is not None:
                etree.SubElement(creator_display,
                                 ns_elem("owc",
                                         "pixelWidth")).text = str(pixel_width)
            pixel_height = try_int(extract_p('pixelHeight', d, None))
            if pixel_height is not None:
                etree.SubElement(creator_display, ns_elem(
                    "owc", "pixelHeight")).text = str(pixel_height)
            mm_per_pixel = try_float(extract_p('mmPerPixel', d, None))
            if mm_per_pixel is not None:
                etree.SubElement(creator_display, ns_elem(
                    "owc", "mmPerPixel")).text = str(mm_per_pixel)
            return creator_display
        except Exception as ex:
            log.warning('could encode creator_display', ex)
            return None
Esempio n. 14
0
 def toXML(self):
     tmp = etree.Element(util.nspath_eval('ogc:BBOX', namespaces))
     etree.SubElement(tmp, util.nspath_eval('ogc:PropertyName', namespaces)).text = 'ows:BoundingBox'
     tmp2 = etree.SubElement(tmp, util.nspath_eval('gml:Envelope', namespaces))
     etree.SubElement(tmp2, util.nspath_eval('gml:lowerCorner', namespaces)).text = '%s %s' % (self.bbox[0], self.bbox[1])
     etree.SubElement(tmp2, util.nspath_eval('gml:upperCorner', namespaces)).text = '%s %s' % (self.bbox[2], self.bbox[3])
     return tmp
Esempio n. 15
0
 def toXML(self):
     node0 = etree.Element(util.nspath_eval('ogc:PropertyIsBetween', namespaces))
     etree.SubElement(node0, util.nspath_eval('ogc:PropertyName', namespaces)).text = self.propertyname
     node1 = etree.SubElement(node0, util.nspath_eval('ogc:LowerBoundary', namespaces))
     etree.SubElement(node1, util.nspath_eval('ogc:Literal', namespaces)).text = '%s' % self.lower
     node2 = etree.SubElement(node0, util.nspath_eval('ogc:UpperBoundary', namespaces))
     etree.SubElement(node2, util.nspath_eval('ogc:Literal', namespaces)).text = '%s' % self.upper
     return node0
Esempio n. 16
0
 def toXML(self):
     node0 = etree.Element(util.nspath_eval('ogc:PropertyIsLike', namespaces))
     node0.set('wildCard', self.wildCard)
     node0.set('singleChar', self.singleChar)
     node0.set('escapeChar', self.escapeChar)
     etree.SubElement(node0, util.nspath_eval('ogc:PropertyName', namespaces)).text = self.propertyname
     etree.SubElement(node0, util.nspath_eval('ogc:Literal', namespaces)).text = self.literal
     return node0
Esempio n. 17
0
 def toXML(self):
     node0 = etree.Element(util.nspath_eval("ogc:SortProperty", namespaces))
     etree.SubElement(node0,
                      util.nspath_eval('ogc:PropertyName',
                                       namespaces)).text = self.propertyname
     etree.SubElement(node0, util.nspath_eval('ogc:SortOrder',
                                              namespaces)).text = self.order
     return node0
Esempio n. 18
0
    def __init__(self, point, distance, distance_units='meter'):
        self.point = point
        self.distance = distance
        self.distance_units = distance_units
        self.geom_column = ''

        self.element = etree.Element('{http://www.opengis.net/ogc}DWithin')

        geom = etree.Element('{http://www.opengis.net/ogc}PropertyName')
        geom.text = self.geom_column

        distance = etree.Element('{http://www.opengis.net/ogc}Distance')
        distance.set('units', self.distance_units)
        distance.text = '%f' % self.distance

        self.element.append(geom)
        self.element.append(point.get_element())
        self.element.append(distance)
Esempio n. 19
0
    def __init__(self, minx, miny, maxx, maxy, epsg=31370):
        self.minx = minx
        self.miny = miny
        self.maxx = maxx
        self.maxy = maxy

        self.element = etree.Element('{http://www.opengis.net/gml}Envelope')
        self.element.set('srsDimension', '2')
        self.element.set('srsName',
                         'http://www.opengis.net/gml/srs/epsg.xml#%i' % epsg)

        lower_corner = etree.Element('{http://www.opengis.net/gml}lowerCorner')
        lower_corner.text = '%0.3f %0.3f' % (self.minx, self.miny)
        self.element.append(lower_corner)

        upper_corner = etree.Element('{http://www.opengis.net/gml}upperCorner')
        upper_corner.text = '%0.3f %0.3f' % (self.maxx, self.maxy)
        self.element.append(upper_corner)
Esempio n. 20
0
    def set_featureid(self, featureid):
        """Set filter by feature id.

        Cannot be used with set_bbox() or set_filter().
        """
        feature_tree = etree.SubElement(self._query,
                                        util.nspath('Filter', FES_NAMESPACE))
        for ft in featureid:
            prop_id = etree.Element(util.nspath('ResourceId', FES_NAMESPACE))
            prop_id.set('rid', ft)
            feature_tree.append(prop_id)
Esempio n. 21
0
 def toXML(self):
     tmp = etree.Element(util.nspath_eval('ogc:BBOX', namespaces))
     etree.SubElement(tmp, util.nspath_eval('ogc:PropertyName', namespaces)).text = 'ows:BoundingBox'
     tmp2 = etree.SubElement(tmp, util.nspath_eval('gml:Envelope', namespaces))
     if self.crs is not None:
         tmp2.set('srsName', self.crs)
     etree.SubElement(tmp2, util.nspath_eval('gml:lowerCorner', namespaces)).text = '{} {}'.format(
         self.bbox[0], self.bbox[1])
     etree.SubElement(tmp2, util.nspath_eval('gml:upperCorner', namespaces)).text = '{} {}'.format(
         self.bbox[2], self.bbox[3])
     return tmp
Esempio n. 22
0
    def set_featureid(self, featureid):
        """Set filter by feature id.

        Cannot be used with set_bbox() or set_filter().
        """
        feature_tree = etree.SubElement(self._query,
                                        util.nspath('Filter', OGC_NAMESPACE))

        for ft in featureid:
            prop_id = etree.Element(util.nspath('GmlObjectId', OGC_NAMESPACE))
            prop_id.set(util.nspath('id', GML_NAMESPACE), ft)
            feature_tree.append(prop_id)
Esempio n. 23
0
    def __init__(self, type, location):
        """Initialise a Binary spatial filter.

        Parameters
        ----------
        type : str
            Type of this filter: one of Equals, Disjoint, Touches, Within,
            Overlaps, Crosses, Intersects or Contains.
        location : AbstractLocation
            An instance of a location to use as location for the Within
            filter.

        """
        self.location = location
        self.geom_column = ''

        self.element = etree.Element('{http://www.opengis.net/ogc}%s' % type)

        geom = etree.Element('{http://www.opengis.net/ogc}PropertyName')
        geom.text = self.geom_column

        self.element.append(geom)
        self.element.append(location.get_element())
Esempio n. 24
0
File: csw.py Progetto: monoid/owslib
    def getdomain(self, dname, dtype='parameter'):
        """

        Construct and process a GetDomain request

        Parameters
        ----------

        - dname: the value of the Parameter or Property to query
        - dtype: whether to query a parameter (parameter) or property (property)

        """

        # construct request
        dtypename = 'ParameterName'
        node0 = etree.Element(util.nspath_eval('csw:GetDomain', namespaces))
        node0.set('service', self.service)
        node0.set('version', self.version)
        node0.set(util.nspath_eval('xsi:schemaLocation', namespaces),
                  schema_location)
        if dtype == 'property':
            dtypename = 'PropertyName'
        etree.SubElement(node0,
                         util.nspath_eval('csw:%s' % dtypename,
                                          namespaces)).text = dname
        self.request = util.xml2string(etree.tostring(node0))

        self._invoke()

        if self.exceptionreport is None:
            self.results = {}

            val = self._exml.find(
                util.nspath_eval('csw:DomainValues',
                                 namespaces)).attrib.get('type')
            self.results['type'] = util.testXMLValue(val, True)

            val = self._exml.find(
                util.nspath_eval('csw:DomainValues/csw:%s' % dtypename,
                                 namespaces))
            self.results[dtype] = util.testXMLValue(val)

            # get the list of values associated with the Domain
            self.results['values'] = []

            for f in self._exml.findall(
                    util.nspath_eval(
                        'csw:DomainValues/csw:ListOfValues/csw:Value',
                        namespaces)):
                self.results['values'].append(util.testXMLValue(f))
Esempio n. 25
0
    def __init__(self, parent=None, version='1.1.0'):
        """

        filter Constructor

        Parameters
        ----------

        - parent: parent etree.Element object (default is None)
        - version: version (default is '1.1.0')

        """

        self.version = version
        self._root = etree.Element(util.nspath_eval('ogc:Filter', namespaces))
        if parent is not None:
            self._root.set(util.nspath_eval('xsi:schemaLocation', namespaces), schema_location)
Esempio n. 26
0
def axml_creator_app(d):
    # <generator uri="http://w.." version="1.0">MiraMon</generator>
    if is_empty(d):
        return None
    else:
        try:
            creator_app = etree.Element("generator", nsmap=ns)
            title = extract_p('title', d, None)
            if title is not None: creator_app.text = title
            uri = extract_p('uri', d, None)
            if uri is not None: creator_app.set("uri", uri)
            version = extract_p('version', d, None)
            if version is not None: creator_app.set("version", version)
            return creator_app
        except Exception as ex:
            log.warn('could encode creator_app', ex)
            return None
Esempio n. 27
0
def axml_category(d):
    # <category term="maps" label="This file contains maps"/>
    if is_empty(d):
        return None
    else:
        try:
            category = etree.Element("category", nsmap=ns)
            term = extract_p('term', d, None)
            if term is not None: category.set("term", term)
            scheme = extract_p('scheme', d, None)
            if scheme is not None: category.set("scheme", scheme)
            label = extract_p('label', d, None)
            if label is not None: category.set("label", label)
            return category
        except Exception as ex:
            log.warn('could encode category', ex)
            return None
Esempio n. 28
0
    def from_wfs(cls, response, namespace):
        """Build instances of this type from a WFS response.

        Parameters
        ----------
        response : str or bytes or etree.Element or iterable<etree.Element>
            WFS response containing GML features.

            Can either be a GML `str` or `byte` sequence, in which case it
            will be parsed and scanned for `gml:featureMembers`.

            Can also be a single instance of `etree.Element` containing the
            parsed GML response.

            It can also be an iterable (list, tuple or generator) of
            `etree.Element` in which case it will be looped over.
        namespace : str
             Namespace associated with this WFS featuretype.

        Yields
        ------
            An instance of this type for each record in the WFS response.

        """
        if type(response) is str:
            response = response.encode('utf-8')

        if type(response) is bytes:
            response = etree.fromstring(response)

        element_type = type(etree.Element(b'xml'))
        if isinstance(response, element_type):
            feature_members = response.find('.//{http://www.opengis.net/gml}'
                                            'featureMembers')

            if feature_members is not None:
                for ft in feature_members:
                    yield (cls.from_wfs_element(ft, namespace))

        if type(response) in (list, tuple, set) \
                or isinstance(response, types.GeneratorType):
            for el in response:
                yield (cls.from_wfs_element(el, namespace))
Esempio n. 29
0
File: csw.py Progetto: monoid/owslib
    def getrecordbyid(self,
                      id=[],
                      esn='full',
                      outputschema=namespaces['csw'],
                      format=outputformat):
        """

        Construct and process a GetRecordById request

        Parameters
        ----------

        - id: the list of Ids
        - esn: the ElementSetName 'full', 'brief' or 'summary' (default is 'full')
        - outputschema: the outputSchema (default is 'http://www.opengis.net/cat/csw/2.0.2')
        - format: the outputFormat (default is 'application/xml')

        """

        # construct request
        node0 = etree.Element(util.nspath_eval('csw:GetRecordById',
                                               namespaces))
        node0.set('outputSchema', outputschema)
        node0.set('outputFormat', format)
        node0.set('version', self.version)
        node0.set('service', self.service)
        node0.set(util.nspath_eval('xsi:schemaLocation', namespaces),
                  schema_location)
        for i in id:
            etree.SubElement(node0, util.nspath_eval('csw:Id',
                                                     namespaces)).text = i
        etree.SubElement(node0,
                         util.nspath_eval('csw:ElementSetName',
                                          namespaces)).text = esn
        self.request = util.xml2string(etree.tostring(node0))

        self._invoke()

        if self.exceptionreport is None:
            self.results = {}
            self.records = {}
            self._parserecords(outputschema, esn)
Esempio n. 30
0
def axml_styleset(d):
    #     <owc:styleSet>
    #       <owc:name>raster</owc:name>
    #       <owc:title>Default Raster</owc:title>
    #       <owc:abstract>A sample style that draws a </owc:abstract>
    #       <owc:legendURL href="h...." type="image/png"/>
    #     </owc:styleSet>
    if is_empty(d):
        return None
    else:
        try:
            styleset = etree.Element(ns_elem("owc", "styleSet"), nsmap=ns)

            name = extract_p('name', d, None)
            if name is not None:
                etree.SubElement(styleset, ns_elem("owc", "name")).text = name
            title = extract_p('title', d, None)
            if title is not None:
                etree.SubElement(styleset, ns_elem("owc",
                                                   "title")).text = title
            subtitle = extract_p('abstract', d, None)
            if subtitle is not None:
                etree.SubElement(styleset, ns_elem("owc",
                                                   "abstract")).text = subtitle
            is_default = extract_p('default', d, None)
            # TODO no example for default setting on style set
            if is_default is not None:
                etree.SubElement(styleset,
                                 ns_elem("owc", "default")).text = is_default
            legend_url = extract_p('legendURL', d, None)
            if legend_url is not None:
                etree.SubElement(styleset,
                                 ns_elem("owc", "legendURL")).text = legend_url
            # TODO no example for content on style set
            content = extract_p('content', d, None)
            content_enc = None if content is None else axml_content(content)
            if content_enc is not None:
                styleset.append(content_enc)
            return styleset
        except Exception as ex:
            log.warning('could encode styleset', ex)
            return None