def _updateTtbByGlobalCosts(self, vectMapName, tlayer): # TODO get layer number do not use it directly intervals = self.turnsData["global"].GetData() cmdUpdGlob = [ "v.db.update", "map=", self.inputData["input"].GetValue(), "layer=%d" % tlayer, "column=cost", ] dbInfo = VectorDBInfo(vectMapName) table = dbInfo.GetTable(tlayer) driver, database = dbInfo.GetDbSettings(tlayer) sqlFile = grass.tempfile() sqlFile_f = open(sqlFile, "w") for ival in intervals: from_angle = ival[0] to_angle = ival[1] cost = ival[2] if to_angle < from_angle: to_angle = math.pi * 2 + to_angle # if angle < from_angle: # angle = math.pi * 2 + angle where = " WHERE (((angle < {0}) AND ({2} + angle >= {0} AND {2} + angle < {1})) OR \ ((angle >= {0}) AND (angle >= {0} AND angle < {1}))) AND cost==0.0 ".format( str(from_angle), str(to_angle), str(math.pi * 2)) stm = ("UPDATE %s SET cost=%f " % (table, cost)) + where + ";\n" sqlFile_f.write(stm) sqlFile_f.close() # TODO improve parser and run in thread ret, msg, err = RunCommand( "db.execute", getErrorMsg=True, input=sqlFile, read=True, driver=driver, database=database, ) try_remove(sqlFile)
def _getInvalidParams(self, params): """Check of analysis input data for invalid values (Parameters tab)""" # dict of invalid values {key from self.itemData (comboboxes from # Parameters tab) : invalid value} invParams = [] # check vector map if params["input"]: mapName, mapSet = params["input"].split("@") if mapSet in grass.list_grouped("vector"): vectMaps = grass.list_grouped("vector")[mapSet] if not params["input"] or mapName not in vectMaps: invParams = list(params.keys())[:] return invParams # check arc/node layer layers = utils.GetVectorNumberOfLayers(params["input"]) for layer in [ "arc_layer", "node_layer", "turn_layer", "turn_cat_layer" ]: if not layers or params[layer] not in layers: invParams.append(layer) dbInfo = VectorDBInfo(params["input"]) try: table = dbInfo.GetTable(int(params["arc_layer"])) columnchoices = dbInfo.GetTableDesc(table) except (KeyError, ValueError): table = None # check costs columns for col in ["arc_column", "arc_backward_column", "node_column"]: if col == "node_column": try: table = dbInfo.GetTable(int(params["node_layer"])) columnchoices = dbInfo.GetTableDesc(table) except (KeyError, ValueError): table = None if not table or not params[col] in list(columnchoices.keys()): invParams.append(col) continue if columnchoices[params[col]]["type"] not in [ "integer", "double precision", ]: invParams.append(col) continue return invParams
def __init__(self, map): VectorDBInfoBase.__init__(self, map)