#Labriki Mohammed, email: mlabriki@gmail.com, mobile: +212661084186 #Titres miniers ou autres #Année 2020-2021 #QGis 3. ou postérieur #********************** #********************** from qgis.core import * from PyQt5.QtGui import * from PyQt5.QtCore import * from qgis.PyQt.QtCore import QVariant from qgis.utils import * from qgis.gui import * from qgis.core import QgsMessageLog from datetime import datetime # class Permis_param: """ This script is for geologist users. it's about plotting the permits. Features are polygons (square or concav with many angles). With entities you can add attributes like number or order of permis, owner or titular, map that covered permit and other caracterisctics that dialog box offre you """ def __init__(self, projection: "226191", nbp=1, num_permis="num_permis", type = "PR", titul="titulaire", map = "carte", name_pivot = "name_pivot", xpivot = 0., ypivot = 0., pxpivot = "w", dxpivot = 0., pypivot = "s", dypivot = 0., date_dec = "01/01/2018", xangle = 0., yangle = 0.): self.proj = projection self.nbp = nbp self.num_permis = num_permis self.type = type self.titul = titul self.map = map self.name_pivot = name_pivot self.xp = xpivot self.yp = ypivot self.px = pxpivot self.dx = dxpivot self.py = pypivot self.dy = dypivot self.date_dec = date_dec self.xangle = xangle self.yangle = yangle #*******************Canvas def canvas_tm(x,y): scale=10 rect = QgsRectangle(float(x)-scale,float(y)-scale,float(x)+scale,float(y)+scale) canvas.setExtent(rect) pt = QgsPoint(float(x),float(y)) canvas.refresh() #******************* def centre_permis(proj, nbp, num_permis, type, titul, map, name_pivot, xp, yp, px, dx, py, dy, date_dec): if px == "w": xc = xp - dx else: xc = xp + dx if py == "s": yc = yp - dy else: yc = yp + dy # xc = xp+dx # yc = yp+dy # Coordinates of square angle ... aa = 1 # xa=0. # ya=0. # xc=0. # yc=0. points = [] polygon = [] while aa < 5: # for aa in range(6): xa=0. ya=0. if aa == 1: xa = xc - 2000 ya = yc + 2000 if aa == 2: xa = xc + 2000 ya = yc + 2000 if aa == 3: xa = xc + 2000 ya = yc - 2000 if aa == 4: xa = xc - 2000 ya = yc - 2000 if aa == 5: xa = xc - 2000 ya = yc + 2000 # append point and plygons points.append(QgsPointXY(xa,ya)) polygon.append(points) print("pivot",xp,yp) print(aa) print(xa,ya) # print(points) # print(polygon) # print(Xa, Ya) aa += 1 # define canvas dimension in PR Permis_param.canvas_tm(xc,yc) # add attributes for each permit prov.addAttributes([QgsField("Num_permis",QVariant.String, "texte",20)]) prov.addAttributes([QgsField("Type_permis",QVariant.String, "texte",2)]) prov.addAttributes([QgsField("Titulaire",QVariant.String, "texte",50)]) prov.addAttributes([QgsField("Carte",QVariant.String, "texte",20)]) prov.addAttributes([QgsField("Name_pivot",QVariant.String, "texte",50)]) prov.addAttributes([QgsField("X_Pivot",QVariant.Double)]) prov.addAttributes([QgsField("Y_Pivot",QVariant.Double)]) prov.addAttributes([QgsField("Position_X",QVariant.String, "texte",1)]) prov.addAttributes([QgsField("Distance_X",QVariant.Double)]) prov.addAttributes([QgsField("Position_Y",QVariant.String, "texte",1)]) prov.addAttributes([QgsField("Distance_Y",QVariant.Double)]) prov.addAttributes([QgsField("Date_dec",QVariant.String, "texte",20)]) feat = QgsFeature() feat.setGeometry(QgsGeometry.fromPolygonXY([points])) feat.setAttributes([num_permis, choix, titul, map, name_pivot, xp, yp, px, dx, py, dy, date_dec]) prov.addFeatures([feat]) layer.commitChanges() # Update extent of the layer layer.updateExtents() # QgsProject.instance().addMapLayer(layer) # print(points) return #------------------ def polygon_angle(proj, xangle, yangle): points = [] polygon = [] q=1 while q<=nba: input, Angles = QInputDialog.getText( qid, "Enter data", " x,y : Coordinates of each angle-"+str(q), QLineEdit.Normal, "xangle" + "," + "yangle") # if Angles: xangle = float(input.split( "," )[ 0 ]) yangle = float(input.split( "," )[ 1 ]) if not Angles : iface.messageBar().pushMessage("Error","Coordinates problem",level=2,duration=5) self.iface.actionExit().trigger() # points.append(QgsPointXY(xangle,yangle)) polygon.append(points) print("nba: ",nba) print("q: ",q) q+=1 #canvas dimension of AE-LE Permis_param.canvas_tm(xangle,yangle) #add attributes to feature prov.addAttributes([QgsField("Num_permis",QVariant.String, "texte",20)]) prov.addAttributes([QgsField("Type_permis",QVariant.String, "texte",2)]) prov.addAttributes([QgsField("Titulaire",QVariant.String, "texte",50)]) prov.addAttributes([QgsField("Carte",QVariant.String, "texte",20)]) prov.addAttributes([QgsField("Date_dec",QVariant.String, "texte",20)]) # feat = QgsFeature() feat.setGeometry(QgsGeometry.fromPolygonXY([points])) feat.setAttributes([num_permis, choix, titul, map, date_dec]) prov.addFeatures([feat]) layer.commitChanges() # Update extent of the layer layer.updateExtents() # QgsProject.instance().addMapLayer(layer) print("Test: ", points) return #*********************** #*********************** #*********************** # Dialog box qid = QInputDialog() canvas = iface.mapCanvas() #choice input, choix=QInputDialog.getText(qid,"Enter choice:", "LE 'Licence d'exploitation: Polygon'\nAE 'Autorisation d'Exploration: Polygon'\nor\nPR 'Permis de Recherche: Square - Morocco'\nEach choice is on capital caracter", QLineEdit.Normal, "PR") type == "" if choix: choix = str(input.split()[0]) if choix == "PR": print("choix: ",choix) # epsg of area projection input, proj = QInputDialog.getText(qid, "Enter epsg", "Enter projection area (epsg): \nLambert nord Maroc=26191\nLambert sud Maroc=26192\n or other...", QLineEdit.Normal, "26191") """Projection""" if proj: proj = input.split()[0] print(proj) xp_epsg = 'Polygon?crs=epsg:' + proj if not proj: iface.messageBar().pushMessage("Error","Program aborted", level=2,duration=5) self.iface.actionExit().trigger() # number of permits input, NbPR = QInputDialog.getText(qid, "Enter ", "number of permits\nyou're going to treat: ", QLineEdit.Normal, "1") layer = QgsVectorLayer(xp_epsg, 'polygone_test' , 'memory') #layer.setCustomProperty("labeling/drawLabels", "True") prov=layer.dataProvider() if NbPR: nbp = int(input.split()[0]) print(nbp) if not NbPR: iface.messageBar().pushMessage("Error","Program aborted", level=2,duration=5) self.iface.actionExit().trigger() i=1 while i<=nbp: # research permit number (identity) input, TM_Data = QInputDialog.getText(qid, "Enter data", "Enter New data as 'N_TM'- Permit order: " + str(i), QLineEdit.Normal,"num_permis") if TM_Data: num_permis = input.split(",")[0] if not TM_Data: iface.messageBar().pushMessage("Error","Program aborted", level=2,duration=5) self.iface.actionExit().trigger() #Titulaire input, Titulaire = QInputDialog.getText(qid, "Enter data", "Permit owner: ", QLineEdit.Normal,"titulaire") if Titulaire: titul = str(input.split(",")[0]) if not Titulaire: iface.messageBar().pushMessage("Error","Program aborted", level=2,duration=5) self.iface.actionExit().trigger() #Map 1:100 000 of permit input, Map = QInputDialog.getText(qid, "Enter data", "Regular topographic map 1:100 000, including permit: ", QLineEdit.Normal,"map") if Map: map = str(input.split(",")[0]) # pivot name input, PivotName = QInputDialog.getText(qid, "Enter data", "Pivot name", QLineEdit.Normal, "Pivot") if PivotName: name_pivot = input.split(",")[0] # Pivot coords # intialize input, XYPivot = QInputDialog.getText(qid, "Enter data", "xp,yp : Coordinates of pivot\nDecimal number without space betwen x,y\nDecimal separator is point", QLineEdit.Normal, "xp" + "," + "yp") if XYPivot: xp = float(input.split(",")[0]) yp = float(input.split(",")[1]) print(xp," ",yp) # Pivot/Centre of PR input, Pivot_CentreX = QInputDialog.getText(qid, "Enter data", "Centre position and distance: 'px (e or w), dx'", QLineEdit.Normal, "w" + "," + "0") if Pivot_CentreX: px = input.split(",")[0] dx = float(input.split(",")[1]) # lat/longitude: latitude ou Y input, Pivot_CentreY = QInputDialog.getText(qid, "Enter data", "Centre position and distance: 'py (n or s), dy'", QLineEdit.Normal, "s" + "," + "0") if Pivot_CentreY: py = input.split(",")[0] dy = float(input.split(",")[1]) # date of decision input, Date_Dec= QInputDialog.getText(qid, "Enter data", "Date of Researsch permit decision '01/01/2018'", QLineEdit.Normal, "01/01/2018") if Date_Dec: date_dec = input.split(",")[0] # print ("date1:",date_dec_1) # date_dec_2 = datetime.strptime(date_dec_1,"%d/%m/%Y") # date_dec = date_dec_2.date() # print ("date_dec: ", date_dec) # layer edditing layer.startEditing() i+=1 Permis_param.centre_permis(proj, nbp, num_permis, type, titul, map, name_pivot, xp, yp, px, dx, py, dy, date_dec) # -------------------------- # -------------------------- # -------------------------- #Expolitation Licence or Exploration Autorisation- AE-LE elif choix == "AE" or choix == "LE": input, proj=QInputDialog.getText( qid, "Enter epsg", "Enter projection area (epsg): \nLambert nord Maroc=26191\nLambert sud Maroc=26192\n or other...", QLineEdit.Normal, "26191" ) if proj: proj=input.split()[0] print (proj) xp_epsg='Polygon?crs=epsg:' + proj if not proj: iface.messageBar().pushMessage("Error","You must put your projection",level=2,duration=5) self.iface.actionExit().trigger() #Provisoir layer layer = QgsVectorLayer(xp_epsg, 'polygone_test' , 'memory') prov=layer.dataProvider() #Polygon number input, NuPoly=QInputDialog.getText( qid, "Enter ", "Number of polygons LE-AE\nyou're going to treat:", QLineEdit.Normal, "1" ) if NuPoly: nbp=int(input.split()[0]) print (nbp) if not NuPoly: iface.messageBar().pushMessage("Error","You must put a number of polygons",level=2,duration=5) self.iface.actionExit().trigger() nn=1 # 1st loop for polygons while nn<=nbp: #Number of polygon angles input, nba=QInputDialog.getText( qid, "Enter number of polygon:", "Angle number of polygon !!!.\nExample: for square you give 4 angles." + str(choix)+ "-"+ str(nn), QLineEdit.Normal, "4" ) if nba: nba=int(input.split()[0]) print (nba) if not nba: iface.messageBar().pushMessage("Error","No number of polygon angles!!!",level=2,duration=5) self.iface.actionExit().trigger() print("nn: ",nn) #Permit identification (number) input, TM_Data = QInputDialog.getText(qid, "Enter data", "Enter New data as 'N_TM'- TM order: " + str(nn), QLineEdit.Normal,"num_permis") if TM_Data: num_permis = input.split(",")[0] if not TM_Data: iface.messageBar().pushMessage("Error","Program aborted", level=2,duration=5) self.iface.actionExit().trigger() #Titulaire input, Titulaire = QInputDialog.getText(qid, "Enter data", "Permit owner: ", QLineEdit.Normal,"titulaire") if Titulaire: titul = str(input.split(",")[0]) #Map 1:100 000 of permit input, Map = QInputDialog.getText(qid, "Enter data", "Regular topographic map 1:100 000, including permit: ", QLineEdit.Normal,"map") if Map: map = str(input.split(",")[0]) # date of decision input, Date_Dec= QInputDialog.getText(qid, "Enter data", "Date of permit decision '01/01/2018'", QLineEdit.Normal, "01/01/2018") if Date_Dec: date_dec = input.split(",")[0] # layer.startEditing() nn+=1 xangle = 0. yangle = 0. #call function polygon LE-AE Permis_param.polygon_angle(proj, xangle, yangle) else: print("Program aborted") # Permis_param.polygon_angle(proj, xangle, yangle)