소스 검색

implementována diakritika u vrstev

Honza 5 년 전
부모
커밋
661ef9dbac
2개의 변경된 파일68개의 추가작업 그리고 27개의 파일을 삭제
  1. 68 27
      Atlas.py
  2. BIN
      __pycache__/Atlas.cpython-37.pyc

+ 68 - 27
Atlas.py

@@ -634,7 +634,7 @@ class Atlas:
         self.dlg.pushButton_delete.setEnabled(False)
         
         for row in range(0, len(data)):            
-            item = QTreeWidgetItem([data[row]['name']])
+            item = QTreeWidgetItem([self.getLayerTitle(data[row]['name'])])
             self.dlg.treeWidget.addTopLevelItem(item)
         self.dlg.pushButton_delete.clicked.connect(lambda: self.layerDelete(self.dlg.treeWidget.selectedItems()[0].text(0)))    
         self.dlg.pushButton_layerRedirect.clicked.connect(lambda: self.layerInfoRedirect(self.dlg.treeWidget.selectedItems()[0].text(0)))
@@ -967,6 +967,8 @@ class Atlas:
     #----------------------------------------------------------
     def readLayerJson(self,layerName, service):
         if self.checkLayerOnLayman(layerName):
+            layerNameTitle =layerName
+            layerName = self.removeUnacceptableChars(layerName)
             url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layerName  
             print (url)
             r = requests.get(url = url)
@@ -977,11 +979,11 @@ class Atlas:
                 wmsUrl = data['wms']['url']
                 format = 'png'
                 epsg = 'EPSG:4326' 
-                self.loadWms(wmsUrl, layerName, format, epsg) 
+                self.loadWms(wmsUrl, layerName,layerNameTitle, format, epsg) 
             if (service == "WFS"):
                 wfsUrl = data['wfs']['url']
                 print("loading WFS")
-                self.loadWfs(wfsUrl, layerName) 
+                self.loadWfs(wfsUrl, layerName, layerNameTitle) 
         else:
             QMessageBox.information(None, "Layman", "Something went wrong with this layer: "+layerName)
     def loadAllComposites(self):
@@ -1446,7 +1448,7 @@ class Atlas:
         nameCheck = True
         validExtent = True
         layers = QgsProject.instance().mapLayersByName(layer_name)  
-        layer_name = self.removeUnacceptableChars(layer_name)
+       # layer_name = self.removeUnacceptableChars(layer_name)
         layers[0].setName(layer_name)
         if len(layers) > 1:
             for l in layers:
@@ -1455,11 +1457,14 @@ class Atlas:
                     layers.append(l)
                     break
      
-        if not (re.match('[a-zA-Z_]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
-            QMessageBox.information(None, "Layman", "Diacritics or number in first character is not allowed.")
-            nameCheck = False
-        if not (re.match('[a-zA-Z0-9]', layer_name)): ## není povolena diakritika
-            QMessageBox.information(None, "Layman", "Diacritics is not allowed.")
+        #if not (re.match('[a-zA-Z_]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
+        #    QMessageBox.information(None, "Layman", "Diacritics or number in first character is not allowed.")
+        #    nameCheck = False
+        #if not (re.match('[a-zA-Z0-9]', layer_name)): ## není povolena diakritika
+        #    QMessageBox.information(None, "Layman", "Diacritics is not allowed.")
+        #    nameCheck = False
+        if (re.match('[0-9]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
+            QMessageBox.information(None, "Layman", "Number in first character is not allowed.")
             nameCheck = False
         
         print(layer_name)
@@ -1600,11 +1605,12 @@ class Atlas:
             QMessageBox.information(None, "Layman", "No layer selected!")
         
         for i in range (0, len(layers)):
-            print(type(layers[i]))            
-            print("tst")
+            print(type(layers[i]))           
+            
             print (self.isLayerInComposite(x))
             print (layers[i].name() in self.isLayerInComposite(x))
             inComposite = layers[i].name() in self.isLayerInComposite(x)
+            layerName = self.removeUnacceptableChars(layers[i].name())
             if (self.checkExistingLayer(layers[i].name()) and inComposite):
                 j = self.getLayerInCompositePosition(x)
                 print("j je: " + str(j))
@@ -1613,11 +1619,12 @@ class Atlas:
                # self.deteteLayerFromComposite(x, j, layers[i].name())
              
                 self.postRequest(layers[i].name())
+                layerName = self.removeUnacceptableChars(layers[i].name())
                 wmsStatus = 'PENDING'
                 j = 0
                 while ((wmsStatus == 'PENDING') and (j < 10)):
-                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()))
-                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()), verify=False)
+                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName))
+                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName), verify=False)
                     res = self.fromByteToJson(response.content)
                     try:
                         wmsStatus = res['wms']['status']
@@ -1644,8 +1651,8 @@ class Atlas:
                 wmsStatus = 'PENDING'
                 j = 0
                 while ((wmsStatus == 'PENDING') and (j < 10)):
-                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()))
-                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()), verify=False)
+                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName))
+                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName), verify=False)
                     res = self.fromByteToJson(response.content)
                     try:
                         wmsStatus = res['wms']['status']
@@ -1659,8 +1666,8 @@ class Atlas:
                 try:
                     wmsUrl = res['wms']['url']
                 except:
-                    wmsUrl = self.URI+'/geoserver/'+layers[i].name()+'/ows'
-                self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layers[i].name()),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
+                    wmsUrl = self.URI+'/geoserver/'+layerName+'/ows'
+                self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layerName),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
                 successful = successful + 1
                 self.dlg.progressBar.setValue(self.dlg.progressBar.value()+step)
  
@@ -1912,6 +1919,7 @@ class Atlas:
         input = input.replace(" ","_")
         input = input.replace("é","e")
         input = input.replace("í","i")
+        input = input.replace("ý","y")
         input = input.replace("á","a")
         input = input.replace("ó","o")
         input = input.replace("č","c")
@@ -1922,7 +1930,12 @@ class Atlas:
         
        # iface.messageBar().pushWidget(iface.messageBar().createMessage("Layman:", "Diacritics in name of layer was replaced."), Qgis.Success, duration=3)
         return input
-
+    def removeUnacceptableChars2(self, input):
+        input = input.encode('utf-8')
+        input = input.hex()
+        
+       # iface.messageBar().pushWidget(iface.messageBar().createMessage("Layman:", "Diacritics in name of layer was replaced."), Qgis.Success, duration=3)
+        return input
     def test (self):
         item = self.dlgGetLayers.items.currentItem().text()
         print( item)
@@ -1983,12 +1996,22 @@ class Atlas:
            #  epsg = str(data['groups']['projection']).upper()
             epsg = 'EPSG:4326' 
             #abstract = data['data']['layers'][x]['params']['ABSTRACT']
-            wmsName = data['layers'][x]['params']['LAYERS']             
+            wmsName = data['layers'][x]['params']['LAYERS']
+            
+            print("groupName " +groupName)
+            print("groupName " +layerName)
+            
+            print("groupName " +format)
+            print("groupName " +epsg)
+            layerNameTitle = self.getLayerTitle(layerName)
+            print("groupName " +layerNameTitle)
+            
+            
             if service == 'WMS':         
-                self.loadWms(repairUrl, layerName, format,epsg, groupName)
+                self.loadWms(repairUrl, layerName,layerNameTitle, format,epsg, groupName)
 
             if service == 'WFS':          
-                self.loadWfs(repairUrl, layerName, groupName)
+                self.loadWfs(repairUrl, layerName,layerNameTitle, groupName)
     def loadService(self, data, service, groupName = ''):     
         
         #print(len(data['layers']))
@@ -2010,23 +2033,41 @@ class Atlas:
                     self.loadWfs(repairUrl, layerName, groupName)
             else:
                 QMessageBox.information(None, "Layman", "Layer: "+layerName + " is corrupted and will not be loaded.")
-                
-    def loadWms(self, url, layerName, format, epsg, groupName = ''):          
+    def getLayerTitle(self, layerName):
+        layerName = self.removeUnacceptableChars(layerName)
+        url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layerName
+        r = requests.get(url = url)
+        data = r.json()
+        print(data)
+        title = data['title']
+        return title
+        
+    def loadWms(self, url, layerName,layerNameTitle, format, epsg, groupName = ''):          
         print(url)
+        layerName = self.removeUnacceptableChars(layerName)
+        epsg = "EPSG:4326"
         urlWithParams = 'contextualWMSLegend=0&crs='+epsg+'&dpiMode=7&featureCount=10&format=image/png&layers='+layerName+'&styles=&url=' + url
         print(urlWithParams)
-        rlayer = QgsRasterLayer(urlWithParams, layerName, 'wms')
+        
+        rlayer = QgsRasterLayer(urlWithParams, layerNameTitle, 'wms')
+        try:
+            print("extents")
+            print(rlayer.ignoreExtents())
+        except:
+            pass # pro qgis 3.10 a vys
+           
         if (groupName != ''):
             self.addWmsToGroup(groupName,rlayer)
         else:
             QgsProject.instance().addMapLayer(rlayer)
 
-    def loadWfs(self, url, layerName, groupName = ''):
+    def loadWfs(self, url, layerName,layerNameTitle, groupName = ''):
+        layerName = self.removeUnacceptableChars(layerName)
         epsg = 'EPSG:4326'        
-        uri = self.URI+"/geoserver/"+self.laymanUsername+"/ows?srsname="+epsg+"&typename="+self.laymanUsername+":"+layerName+"&restrictToRequestBBOX=1&pagingEnabled=True &version=auto&request=GetFeature&service=WFS"
+        uri = self.URI+"/geoserver/"+self.laymanUsername+"/ows?srsname="+epsg+"&typename="+self.laymanUsername+":"+layerName+"&restrictToRequestBBOX=1&pagingEnabled=True&version=auto&request=GetFeature&service=WFS"
         
         print(uri)        
-        vlayer = QgsVectorLayer(uri, layerName, "WFS")
+        vlayer = QgsVectorLayer(uri, layerNameTitle, "WFS")
         print(vlayer.isValid())  
         if (groupName != ''):
             self.addWmsToGroup(groupName,vlayer)

BIN
__pycache__/Atlas.cpython-37.pyc