def __new__(cls, name, mapset="", mtype='CELL', mode='r+', overwrite=False): reg = Region() shape = (reg.rows, reg.cols) mapset = libgis.G_find_raster(name, mapset) gtype = None if mapset: # map exist, set the map type gtype = libraster.Rast_map_type(name, mapset) mtype = RTYPE_STR[gtype] filename = grasscore.tempfile() obj = np.memmap.__new__(cls, filename=filename, dtype=RTYPE[mtype]['numpy'], mode=mode, shape=shape) obj.mtype = mtype.upper() obj.gtype = gtype if gtype else RTYPE[mtype]['grass type'] obj._rows = reg.rows obj._cols = reg.cols obj.filename = filename obj._name = name obj.mapset = mapset obj.reg = reg obj.overwrite = overwrite return obj
def open_band_files(self): for n in xrange(6): self.data_type.append( raster.Rast_map_type(self.name[n], self.mapset)) if self.data_type[n] == 0: ptype = POINTER(c_int) elif self.data_type[n] == 1: ptype = POINTER(c_float) elif self.data_type[n] == 2: ptype = POINTER(c_double) self.infd.append(raster.Rast_open_old(self.name[n], self.mapset)) self.Bandbuf.append(raster.Rast_allocate_buf(self.data_type[n])) self.Bandbuf[n] = cast(c_void_p(self.Bandbuf[n]), ptype)
def mtype(self): return RTYPE_STR[libraster.Rast_map_type(self.name, self.mapset)]
def _read_raster_info(name, mapset): """Read the raster map info from the file system and store the content into a dictionary This method uses the ctypes interface to the gis and raster libraries to read the map metadata information :param name: The name of the map :param mapset: The mapset of the map :returns: The key value pairs of the map specific metadata, or None in case of an error """ kvp = {} if not libgis.G_find_raster(name, mapset): return None # Read the region information region = libgis.Cell_head() libraster.Rast_get_cellhd(name, mapset, byref(region)) kvp["north"] = region.north kvp["south"] = region.south kvp["east"] = region.east kvp["west"] = region.west kvp["nsres"] = region.ns_res kvp["ewres"] = region.ew_res kvp["rows"] = region.cols kvp["cols"] = region.rows maptype = libraster.Rast_map_type(name, mapset) if maptype == libraster.DCELL_TYPE: kvp["datatype"] = "DCELL" elif maptype == libraster.FCELL_TYPE: kvp["datatype"] = "FCELL" elif maptype == libraster.CELL_TYPE: kvp["datatype"] = "CELL" # Read range if libraster.Rast_map_is_fp(name, mapset): range = libraster.FPRange() libraster.Rast_init_fp_range(byref(range)) ret = libraster.Rast_read_fp_range(name, mapset, byref(range)) if ret < 0: logging.error(_("Unable to read range file")) return None if ret == 2: kvp["min"] = None kvp["max"] = None else: min = libgis.DCELL() max = libgis.DCELL() libraster.Rast_get_fp_range_min_max(byref(range), byref(min), byref(max)) kvp["min"] = min.value kvp["max"] = max.value else: range = libraster.Range() libraster.Rast_init_range(byref(range)) ret = libraster.Rast_read_range(name, mapset, byref(range)) if ret < 0: logging.error(_("Unable to read range file")) return None if ret == 2: kvp["min"] = None kvp["max"] = None else: min = libgis.CELL() max = libgis.CELL() libraster.Rast_get_range_min_max(byref(range), byref(min), byref(max)) kvp["min"] = min.value kvp["max"] = max.value return kvp