Closed landryb closed 10 years ago
Bonjour
Pourrais-je avoir la base de données spatialite résultante de l'import manqué des 2 communes ? Email : mdouchin sur 3liz.com
Si j'essaie de charger uniquement les fichiers majic (deja il se plaint que le champ departement ne doit pas etre vide alors qu'il est dans la section edigeo..)
INITIALISATION
puis une traceback python:
An error has occured while executing Python code:
Traceback (most recent call last): File "/home/landry/.qgis2/python/plugins/cadastre/cadastre_dialogs.py", line 1018, in processImport qi.installOpencadastreStructure() File "/home/landry/.qgis2/python/plugins/cadastre/cadastre_import.py", line 163, in installOpencadastreStructure replaceDict['2154'] = self.targetSrid RuntimeError: super-class init() of type cadastreImport was never called
Si je decommente le logging du sql dans le code du plugin, l'erreur de l'import EDIGEO se fait sur cette requete:
-- geo_commune: utilisation de max et non distinct on pour compatibilite sqlite INSERT INTO geo_commune ( geo_commune, annee, object_rid, idu, tex2, creat_date, update_dat, geom, lot) SELECT '2013'||SUBSTR(idu,1,3), '2013', object_rid, idu, tex2, date(substr(CAST(creat_date AS TEXT), 1, 4) || '-' || substr(CAST(creat_date AS TEXT), 5, 2) || '-' || substr(CAST(creat_date AS TEXT), 7, 2)), date(substr(CAST(update_date AS TEXT), 1, 4) || '-' || substr(CAST(update_date AS TEXT), 5, 2) || '-' || substr(CAST(update_date AS TEXT), 7, 2)), ST_Multi(geom), '63083' FROM commune_id JOIN (SELECT idu as t_idu, MAX(update_date) AS t_update_date, MAX(creat_date) AS t_creat_date FROM commune_id GROUP BY idu, tex2) t2 ON idu = t2.t_idu AND update_date = t2.t_update_date AND creat_date = t2.t_creat_date GROUP BY tex2, idu, update_date, creat_date, geom, object_rid ORDER BY tex2, idu, update_date DESC, creat_date DESC
L'erreur est bien:
Error: no such column: geom
il n'y a pas cette colonne dans la table:
sqlite> .schema commune_id CREATE TABLE commune_id ( ogc_fid INTEGER PRIMARY KEY AUTOINCREMENT, object_rid character varying, idu character varying, tex2 character varying, creat_date integer, update_date integer
Je suppose que la table commune_id vient de la feuille cadastrale edigeo. Si je regarde mes edigeo et que je les ouvre directement dans qgis, toutes les tables commune_id ont bien un element..
Il semble que la base de données n'est pas le support Spatialite. Si elle a été créée via le plugin, bien vérifier que pyspatialite est bien présent et utilisable dans python. Une base de données spatialite vide, mais avec les fonctions et types géométriques (+ les projections) fait environ 4 Mo
Sur mon qgis 2.2/OpenBSD, je n'ai effectivement pas pyspatialite installé sur le systeme (ie dans les libs de python), mais il semble présent dans QGIS:
share/qgis/python/pyspatialite/ share/qgis/python/pyspatialite/init.py share/qgis/python/pyspatialite/_spatialite.so share/qgis/python/pyspatialite/dbapi2.py share/qgis/python/pyspatialite/dump.py
Si j'ouvre la console python dans QGIS, je peux faire 'import pyspatialite' sans erreur.
Est-ce différent de https://github.com/lokkju/pyspatialite ?
Pour le qgis 2.0/windows, c'est la configuration/installation par défaut, donc je suppose que pyspatialite est inclus..
spatialite en soi doit bien marcher, car je peux creer une nouvelle couche vectorielle spatialite a partir de rien, et elle fait bien environ 4 mo. Les 4/5 tests que j'ai tenté de faire via le plugin cadastre produisaient bien des fichiers sqlite d'une taille supérieure, mais aucun ne s'ouvre/importe comme une couche spatialite dans qgis. Je peux les ouvrir dans spatialite_gui ou la ligne de commande spatialite et Les tables ont bien l'air d'etre la, mais vides. Les fonctions spatiales sont bien dans le fichier aussi, la table geometry_columns est bien remplie...
Je viens de refaire le meme test avec la version 0.9.9 du plugin, et j'ai toujours le meme souci. L'import majic a l'air de bien se passer, mais l'import edigeo echoue a 37% de l'import des relation (.vec). La BDD resultante fait 67Mo pour une commune, mais si j'essaie de m'y connecter avec qgis j'ai un message d'erreur: 'Unexpected error when working with: /home/landry/datas/test-plugin-cadastre-qgis/63470.sqlite' Je peux m'y connecter avec la ligne de commande spatialite et spatialitegui par contre.. toutes les tables non nommées geo* ont bien des données, et certaines des tables cartographiques ont des données, mais pas d'objet geometrique.
L'import majic se passe bien, et edigeo s'arrete a 36% 'import des relations'
EDIGEO
Type de base : spatialite, Connexion: 63470.sqlite, Schéma:
* Copie du répertoire /home/landry/datas/test-plugin-cadastre-qgis/src/63470
11 s
* Décompression des fichiers
14 s
Suppression des contraintes
- SUPPRESSION DES CONTRAINTES D'INTEGRITEES : DEBUT
- suppression clefs étrangères
- suppression clefs primaires
- suppression not null sur clefs primaires
- SUPPRESSION DES CONTRAINTES D'INTEGRITEES : FIN
14 s
* Import des fichiers EDIGEO dans la base
- Import des fichiers via ogr2ogr
- Import des relations (*.vec)
spatialite_tool ne trouve pas de geometrie:
$spatialite_tool -d 63470.sqlite -e -shp section -t geo_section -g geom --type POLYGON -c CP1252
SQLite version: 3.8.4.3
SpatiaLite version: 4.0.0
dump shapefile MetaData error: <no such table: geometry_columns>
Exported 0 rows into 'section.shp' from 'geo_section'
spatialite> .schema geo_section
CREATE TABLE geo_section
(
geo_section character varying(12) NOT NULL,
annee character varying(4) NOT NULL,
object_rid character varying(80),
idu character varying(8),
tex character varying,
geo_commune character varying(7) NOT NULL,
creat_date date,
update_dat date,
lot character varying,
ogc_fid INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL
);
et donc pas de table geometry_columns. Quelle est la partie sensée créer les tables geometry_columns et spatial_ref_sys? est-ce que je dois les précharger a la main depuis postgis ?
Bonjour,
Avez-vous essayé d'ouvrir les fichiers *.vec (edigeo) directement avec QGIS ? QGIS via OGR devrait vous proposer de charger plusieurs couches vectorielles. Si tout se passe bien, le plugin devrait pouvoir charger vos données cadastrales EDIGEO. Si ce n'est pas le cas, il y a un problème dans vos données.
je n'ai aucun soucis pour ouvrir les .vec/.thf/etc, par contre je pense avoir trouvé une des sources du pbm - en tout cas avec QGIS 2.4. J'arrive a créer une BDD 'valide' spatialite en utilisant le plugin qspatialite (la bdd a bien les tables geometry_columns/etc, et fait bien ~4.5mo sans données), et a partir de la le plugin cadastre arrive bien a importer des edigeo/majic dans cette base précréée, je peux naviguer dans le PCI, requeter les proprietaires, etc.. l'export PDF ne marche pas, mais deja un grand pas en avant a été fait. Reste a comprendre pourquoi le plugin cadastre n'initialise pas correctement la bdd spatialite lors de sa création, alors que le plugin qspatialite n'a aucun soucis.
Et finalement, la cause possible du probleme, initspatialmetadata() ne s'attend pas a recevoir un entier, mais plutot une chaine de caracteres avec ma version de spatialite (4.0)
$cat foo.py
from pyspatialite import dbapi2 as db
conn=db.connect(unicode('test.spatialite'))
c=conn.cursor()
sql = "select initspatialmetadata(1)"
c.execute(sql)
$PYTHONPATH=/usr/local/share/qgis/python/ python2.7 foo.py
InitSpatialMetaData() error: argument 1 [mode] is not of the String type
$ls -l test.spatialite
-rw-r--r-- 1 landry wheel 0 Jul 30 16:17 test.spatialite
cf http://hub.qgis.org/issues/8340, http://lists.osgeo.org/pipermail/gdal-dev/2013-October/037248.html, et https://groups.google.com/forum/#!msg/spatialite-users/La8BUrVKX_g/lGJKxnQzp1sJ le fait de passer un 1 devrait dépendre de la version de spatialite trouvée.. ca a été corrigé de cette facon dans gdal: http://trac.osgeo.org/gdal/changeset/26532
Si dans ma version de cadastre_dialogs.py je fait 'select initspatialmetadata()' sans le 1, la création d'une bdd spatialite vide se fait bien dans le plugin, ainsi que l'import de données.
A noter qu'une autre possibilité est de faire initspatialmetadata('1'), ce qui passe effectivement une string a la fonction - je ne sais pas ce qui est sensé etre le plus compatible entre les différentes versions de spatialite.
Merci d'avoir trouvé la raison du bug.
@mdouchin devrait pouvoir corriger ça rapidement.
Correctif appliqué dans le commit lié cc395de35c685cb530f2088beedc0cee3c01fba4 . Merci de tester :)
Bug bien fixé par ce commit, merci!
Sur une tentative d'import de données MAJIC+EDIGEO sur 2 communes du 63 (63083 et 63470) dans une base spatialite vide, l'import des données EDIGEO échoue:
630PUY-DE-DOME D426042013
Log de la fenetre dans le plugin: INITIALISATION
QGIS affiche une popup avec une traceback python:
An error has occured while executing Python code:
Traceback (most recent call last): File "/home/landry/.qgis2/python/plugins/cadastre/cadastre_dialogs.py", line 1026, in processImport qi.importEdigeo() File "/home/landry/.qgis2/python/plugins/cadastre/cadastre_import.py", line 601, in importEdigeo self.executeSqlScript(scriptPath, item.has_key('divide'), item.has_key('constraints')) File "/home/landry/.qgis2/python/plugins/cadastre/cadastre_import.py", line 891, in executeSqlScript self.executeSqlQuery(sql, ignoreError) File "/home/landry/.qgis2/python/plugins/cadastre/cadastre_import.py", line 935, in executeSqlQuery c.executescript(sql) OperationalError: no such column: geom
Une fois sorti des 2 popups (celle d'erreur, puis celle d'import), qgis affiche toujours un curseur comme quoi il est en train de travailler, mais il n'a plus l'air de faire grand chose.. C'est avec QGIS 2.2 sur OpenBSD, plugin cadastre 0.9.7. GDAL est bien compilé avec le support spatialite (libspatialite 4.0.0).
Ma collegue a fait le test avec les données d'une autre commune (63325) avec QGIS 2.0 sur windows, l'import se passe bien mais il n'y a aucun objet spatial a priori..