Suite

Pourquoi pyQGIS QgsVectorLayer().isValid() renvoie-t-il FAUX avec les vues Oracle ?


Cela fonctionne parfaitement avec une TABLE Oracle mais pas avec une VUE. Pourquoi?

uri = QgsDataSourceURI() uri.setConnection(host, port, db, username, pw) uri.setWkbType(QGis.WKBPolygon) uri.setDataSource(schema, table, geomcol) vlayer = QgsVectorLayer(uri.uri(), table, ' oracle') imprimer vlayer.isValid()

… et renvoie VRAI. Cependant, le même code ne fonctionne pas avec une VUE. TABLE et VIEW ont une entrée correcte dans USER_SDO_GEOM_METADATA. Toutes les tables spatiales de la base de données se chargent correctement ; aucune des vues ne le fait. Toutes les tables et vues spatiales se chargent correctement dans QGIS en utilisant Couche->Ajouter une couche->Ajouter une couche spatiale Oracle. Est-il destiné à fonctionner uniquement avec des tables ou est-ce que je fais quelque chose de mal ?


Pour VIEWS, vous devez définir la colonne qui identifie de manière unique les caractéristiques de la couche, essayez d'ajouter :

uri.setKeyColumn("votre_champ_unique")

Cela marche:

uri = QgsDataSourceURI() uri.setConnection("doracle1.aytomalaga.intranet", "dbd3", "eqgis", "eqgis") uri.setSrid ('25830'); uri.setDataSource('EQGIS','MSEQESLU_V', 'SDOGEOMETRIA',", 'ID_EQESLU') uri.setWkbType(QGis.WKBMultiPoint) vlayer = QgsVectorLayer(uri.uri(),"capa", 'oracle')

Vous devez choisir la version avec cinq paramètres de setDataSource.


Voir la vidéo: QGIS Python PyQGIS - Get raster band data with GDAL (Octobre 2021).