def open(self, mode='r', mtype='CELL', overwrite=False): """Open the raster if exist or created a new one. Parameters ------------ mode: string Specify if the map will be open with read or write mode ('r', 'w') type: string If a new map is open, specify the type of the map(`CELL`, `FCELL`, `DCELL`) overwrite: Boolean Use this flag to set the overwrite mode of existing raster maps if the map already exist, automatically check the type and set: * self.mtype Set all the privite, attributes: * self._fd; * self._gtype * self._rows and self._cols """ self.mode = mode self.mtype = mtype self.overwrite = overwrite # check if exist and instantiate all the private attributes if self.exist(): if self.mode == 'r': # the map exist, read mode self._fd = libraster.Rast_open_old(self.name, self.mapset) self._gtype = libraster.Rast_get_map_type(self._fd) self.mtype = RTYPE_STR[self._gtype] elif self.overwrite: if self._gtype is None: raise OpenError(_("Raster type not defined")) self._fd = libraster.Rast_open_new(self.name, self._gtype) else: str_err = _("Raster map <{0}> already exists") raise OpenError(str_err.format(self)) else: # Create a new map if self.mode == 'r': # check if we are in read mode str_err = _("The map does not exist, I can't open in 'r' mode") raise OpenError(str_err) self._fd = libraster.Rast_open_new(self.name, self._gtype) # read rows and cols from the active region self._rows = libraster.Rast_window_rows() self._cols = libraster.Rast_window_cols()
def open(self, mode=None, mtype=None, overwrite=None): """Open the raster if exist or created a new one. :param str mode: Specify if the map will be open with read or write mode ('r', 'w') :param str type: If a new map is open, specify the type of the map(`CELL`, `FCELL`, `DCELL`) :param bool overwrite: Use this flag to set the overwrite mode of existing raster maps if the map already exist, automatically check the type and set: * self.mtype Set all the privite, attributes: * self._fd; * self._gtype * self._rows and self._cols """ self.mode = mode if mode else self.mode self.mtype = mtype if mtype else self.mtype self.overwrite = overwrite if overwrite is not None else self.overwrite if self.mode == 'r': if self.exist(): self.info.read() self.cats.mtype = self.mtype self.cats.read() self.hist.read() self._fd = libraster.Rast_open_old(self.name, self.mapset) self._gtype = libraster.Rast_get_map_type(self._fd) self.mtype = RTYPE_STR[self._gtype] else: str_err = _("The map does not exist, I can't open in 'r' mode") raise OpenError(str_err) elif self.mode == 'w': if self.exist(): if not self.overwrite: str_err = _("Raster map <{0}> already exists" " and will be not overwritten") raise OpenError(str_err.format(self)) if self._gtype is None: raise OpenError(_("Raster type not defined")) self._fd = libraster.Rast_open_new(self.name, self._gtype) else: raise OpenError("Open mode: %r not supported," " valid mode are: r, w") # read rows and cols from the active region self._rows = libraster.Rast_window_rows() self._cols = libraster.Rast_window_cols()
def open(self, mode=None, mtype=None, overwrite=None): """Open the map, if the map already exist: determine the map type and copy the map to the segment files; else, open a new segment map. :param mode: specify if the map will be open with read, write or read/write mode ('r', 'w', 'rw') :type mode: str :param mtype: specify the map type, valid only for new maps: CELL, FCELL, DCELL :type mtype: str :param overwrite: use this flag to set the overwrite mode of existing raster maps :type overwrite: bool """ # read rows and cols from the active region self._rows = libraster.Rast_window_rows() self._cols = libraster.Rast_window_cols() self.mode = mode if mode else self.mode self.mtype = mtype if mtype else self.mtype self.overwrite = overwrite if overwrite is not None else self.overwrite if self.exist(): self.info.read() self.cats.mtype = self.mtype self.cats.read() self.hist.read() if ((self.mode == "w" or self.mode == "rw") and self.overwrite is False): str_err = _("Raster map <{0}> already exists. Use overwrite.") fatal(str_err.format(self)) # We copy the raster map content into the segments if self.mode == "rw" or self.mode == "r": self._fd = libraster.Rast_open_old(self.name, self.mapset) self._gtype = libraster.Rast_get_map_type(self._fd) self.mtype = RTYPE_STR[self._gtype] # initialize the segment, I need to determine the mtype of the # map # before to open the segment self.segment.open(self) self.map2segment() self.segment.flush() self.cats.read() self.hist.read() if self.mode == "rw": #warning(_(WARN_OVERWRITE.format(self))) # Close the file descriptor and open it as new again libraster.Rast_close(self._fd) self._fd = libraster.Rast_open_new(self.name, self._gtype) # Here we simply overwrite the existing map without content copying elif self.mode == "w": #warning(_(WARN_OVERWRITE.format(self))) self._gtype = RTYPE[self.mtype]['grass type'] self.segment.open(self) self._fd = libraster.Rast_open_new(self.name, self._gtype) else: if self.mode == "r": str_err = _("Raster map <{0}> does not exist") raise OpenError(str_err.format(self.name)) self._gtype = RTYPE[self.mtype]['grass type'] self.segment.open(self) self._fd = libraster.Rast_open_new(self.name, self._gtype)