def viter(self, vtype, idonly=False): """Return an iterator of vector features :param vtype: the name of type to query; the supported values are: *areas*, *dblinks*, *faces*, *holes*, *islands*, *kernels*, *line_points*, *lines*, *nodes*, *points*, *update_lines*, *update_nodes*, *volumes* :type vtype: str :param idonly: variable to return only the id of features instead of full features :type idonly: bool >>> test_vect = VectorTopo(test_vector_name, mode='r') >>> test_vect.open(mode='r') >>> areas = [area for area in test_vect.viter('areas')] >>> areas[:3] [Area(1), Area(2), Area(3)] to sort the result in a efficient way, use: :: >>> from operator import methodcaller as method >>> areas.sort(key=method('area'), reverse=True) # sort the list >>> for area in areas[:3]: ... print(area, area.area()) Area(1) 12.0 Area(2) 8.0 Area(4) 8.0 >>> areas = [area for area in test_vect.viter('areas')] >>> for area in areas: ... print(area.centroid().cat) 3 3 3 3 >>> test_vect.close() """ if vtype in _GEOOBJ.keys(): if _GEOOBJ[vtype] is not None: ids = (indx for indx in range(1, self.number_of(vtype) + 1)) if idonly: return ids return (_GEOOBJ[vtype]( v_id=indx, c_mapinfo=self.c_mapinfo, table=self.table, writeable=self.writeable, ) for indx in ids) else: keys = "', '".join(sorted(_GEOOBJ.keys())) raise ValueError("vtype not supported, use one of: '%s'" % keys)
def viter(self, vtype, idonly=False): """Return an iterator of vector features :param vtype: the name of type to query; the supported values are: *areas*, *dblinks*, *faces*, *holes*, *islands*, *kernels*, *line_points*, *lines*, *nodes*, *points*, *update_lines*, *update_nodes*, *volumes* :type vtype: str :param idonly: variable to return only the id of features instead of full features :type idonly: bool >>> test_vect = VectorTopo(test_vector_name, mode='r') >>> test_vect.open(mode='r') >>> areas = [area for area in test_vect.viter('areas')] >>> areas[:3] [Area(1), Area(2), Area(3)] to sort the result in a efficient way, use: :: >>> from operator import methodcaller as method >>> areas.sort(key=method('area'), reverse=True) # sort the list >>> for area in areas[:3]: ... print(area, area.area()) Area(1) 12.0 Area(2) 8.0 Area(4) 8.0 >>> areas = [area for area in test_vect.viter('areas')] >>> for area in areas: ... print(area.centroid().cat) 3 3 3 3 >>> test_vect.close() """ if vtype in _GEOOBJ.keys(): if _GEOOBJ[vtype] is not None: ids = (indx for indx in range(1, self.number_of(vtype) + 1)) if idonly: return ids return (_GEOOBJ[vtype](v_id=indx, c_mapinfo=self.c_mapinfo, table=self.table, writeable=self.writeable) for indx in ids) else: keys = "', '".join(sorted(_GEOOBJ.keys())) raise ValueError("vtype not supported, use one of: '%s'" % keys)
def cat(self, cat_id, vtype, layer=None, generator=False, geo=None): """Return the geometry features with category == cat_id. :param cat_id: the category number :type cat_id: int :param vtype: the type of geometry feature that we are looking for :type vtype: str :param layer: the layer number that will be used :type layer: int :param generator: if True return a generator otherwise it return a list of features :type generator: bool """ if geo is None and vtype not in _GEOOBJ: keys = "', '".join(sorted(_GEOOBJ.keys())) raise ValueError("vtype not supported, use one of: '%s'" % keys) Obj = _GEOOBJ[vtype] if geo is None else geo ilist = Ilist() libvect.Vect_cidx_find_all(self.c_mapinfo, layer if layer else self.layer, Obj.gtype, cat_id, ilist.c_ilist) is2D = not self.is_3D() if generator: return (read_line(feature_id=v_id, c_mapinfo=self.c_mapinfo, table=self.table, writeable=self.writeable, is2D=is2D) for v_id in ilist) else: return [read_line(feature_id=v_id, c_mapinfo=self.c_mapinfo, table=self.table, writeable=self.writeable, is2D=is2D) for v_id in ilist]
def viter(self, vtype, idonly=False): """Return an iterator of vector features :param vtype: the name of type to query; the supported values are: *areas*, *dblinks*, *faces*, *holes*, *islands*, *kernels*, *line_points*, *lines*, *nodes*, *update_lines*, *update_nodes*, *volumes* :type vtype: str :param idonly: variable to return only the id of features instead of full features :type idonly: bool >>> cens = VectorTopo('census', mode='r') >>> cens.open(mode='r') >>> big = [area for area in cens.viter('areas') ... if area.alive() and area.area() >= 10000] >>> big[:3] [Area(5), Area(6), Area(13)] to sort the result in a efficient way, use: :: >>> from operator import methodcaller as method >>> big.sort(key=method('area'), reverse=True) # sort the list >>> for area in big[:3]: ... print area, area.area() Area(2099) 5392751.5304 Area(2171) 4799921.30863 Area(495) 4055812.49695 >>> cens.close() """ if vtype in _GEOOBJ.keys(): if _GEOOBJ[vtype] is not None: ids = (indx for indx in range(1, self.number_of(vtype) + 1)) if idonly: return ids return (_GEOOBJ[vtype](v_id=indx, c_mapinfo=self.c_mapinfo, table=self.table, writable=self.writable) for indx in ids) else: keys = "', '".join(sorted(_GEOOBJ.keys())) raise ValueError("vtype not supported, use one of: '%s'" % keys)