Exemple #1
0
    def cursor(self, filter=None, sort=None, hints=None):
        """
    Returns a :class:`Cursor <geoscript.layer.cursor.Cursor>` over the features of the layer.

    *filter* is a optional :class:`Filter <geoscript.filter.Filter>` to constrain the features iterated over.

    *sort* is an optional tuple or ``list`` of tuples that defined the order in
    which features are iterated over. The first value of each tuple is the name
    of a field to sort on. The second value is one of the strings 'ASC' or 
    'DESC', representing ascending and decending sort order respectively. 

    >>> l = Layer()
    >>> from geoscript import geom
    >>> l.add([geom.Point(1,2)])
    >>> l.add([geom.Point(3,4)])
    >>> l.add([geom.Point(5,6)])
    >>> l.add([geom.Point(7,8)])
    >>> l.add([geom.Point(9,10)])
    >>> c = l.cursor()
    >>> f = c.next() 
    >>> f.geom
    POINT (1 2)
    >>> f = c.next() 
    >>> f.geom
    POINT (3 4)
    >>> features = c.read(2)
    >>> len(features)
    2
    >>> features[0].geom
    POINT (5 6)
    >>> features[1].geom
    POINT (7 8)
    >>> features = c.read(2)
    >>> len(features)
    1
    >>> features[0].geom
    POINT (9 10)
    >>> c.close()
    """

        f = Filter(filter) if filter else Filter.PASS
        q = DefaultQuery(self.name, f._filter)
        if sort:
            sort = sort if isinstance(sort, list) else [sort]
            sortBy = []
            ff = _filterFactory
            for s in sort:
                s = s if isinstance(s, tuple) else [s, 'ASC']
                sortBy.append(ff.sort(s[0], SortOrder.valueOf(s[1])))
                q.setSortBy(sortBy)
        if self.proj:
            q.coordinateSystem = self.proj._crs

        if hints is not None:
            q.setHints(Hints(hints))

        fcol = self._source.getFeatures(q)
        #r = self._source.dataStore.getFeatureReader(q,Transaction.AUTO_COMMIT)
        return Cursor(fcol, self)
Exemple #2
0
    def __init__(self,
                 format,
                 file=None,
                 proj=None,
                 coverage=None,
                 reader=None,
                 mode='r'):
        self.file = file
        self._format = format
        self._coverage = coverage
        self._reader = reader
        self.mode = mode

        if mode == 'r':
            if not coverage:
                if not reader:
                    hints = Hints()
                    if proj:
                        proj = Projection(proj)
                        hints.put(Hints.DEFAULT_COORDINATE_REFERENCE_SYSTEM,
                                  proj._crs)

                    self._reader = format.getReader(util.toFile(file), hints)
                self._coverage = self._reader.read(None)