#1 Tue 04 March 2014 16:52
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
[Postgis 2.1] utilisation de shp2pgsql
Bonjour
J'essaye d'importer des fichiers shp (bd topo de l'IGN de 2011) dans ma base postgresql9.3/postgis2.1 sur windows7.
Que je le fasse en ligne de commande ou via l'interface graphique, j'obtient la même erreur :
Code:
CREATE TABLE "public"."route_secondaire" (gid serial, "id" varchar(24), "prec_plani" float8, "prec_alti" float8, "nature" varchar(19), "numero" varchar(10), "nom_voie_g" varchar(14" Failed in pgui_exec(): ERREUR: la fonction addgeometrycolumn(unknown, unknown, unknown, unknown, unknown, integer) n'est pas unique LINE 42: SELECT AddGeometryColumn('public','route_secondaire','geom',... ^ HINT: N'a pas pu choisir un meilleur candidat dans les fonctions. Vous pourriez avoir besoin d'ajouter des conversions explicites de type. Shapefile import failed.
J'ai fait plusieurs essais avec d'autres options, rien n'y fait, ça coince sur la création de la colone de géométrie a priori.
Hors ligne
#2 Tue 04 March 2014 16:58
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Un peu de lecture, au cas où.
http://georezo.net/forum/viewtopic.php?pid=152944
Hors ligne
#3 Wed 05 March 2014 10:18
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
J'avais déjà vu ce post mais j'utilise shp2pgsql (plugin graphique ou en ligne de commande). Ma source est en shp et non en sql.
Hors ligne
#4 Wed 05 March 2014 10:37
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Vous pouvez nous poster la ligne de commande shp2pgsql utilisée ?
Et également:
la version de la base cible, telle que renvoyée par:
select postgis_full_version();
Et vérifier si le programme shp2pgsql appelé est bien celui contenu dans le repertoire bin de l'installation PG 9.3/Postgis 2.1 ?
Merci
Nicolas
Hors ligne
#5 Wed 05 March 2014 12:29
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Voici ma version de postgis :
postgis_full_version
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
---------------
POSTGIS="2.1.0 r11822" GEOS="3.4.2-CAPI-1.8.2 r3924" PROJ="Rel. 4.8.0, 6 March
2012" GDAL="GDAL 1.10.0, released 2013/04/24" LIBXML="2.7.8" LIBJSON="UNKNOWN" T
OPOLOGY RASTER
(1 ligne)
Voici le code utilisé :
Code:
C:\Program Files\PostgreSQL\9.3\bin>shp2pgsql -g the_geom -I -W LATIN1 "C:\le_chemin\BDT_2-1_SHP_LAMB93_ED113\H_ADMINISTRATIF\COMMUNE.shp" | psql -U rmunier bd_sig_ccmm
Hors ligne
#6 Wed 05 March 2014 12:49
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [Postgis 2.1] utilisation de shp2pgsql
Ok:
Il manque le nom de la table cible dans la ligne de commande:
... _LAMB93_ED113\H_ADMINISTRATIF\COMMUNE.shp" <NOM DE TABLE> | psql -U rmunier bd_sig_ccmm...
(du coup, addGeometryColumn est appelée sans nom de table et ca plante car plusieurs versions de addGeometryColumn existent avec le nombre de parametres générés par shp2pgsql).
Nico
Hors ligne
#7 Wed 05 March 2014 13:45
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Et ce nom de table doit correspondre à une table existante mais vide?
Si c'est le cas, c'est dommage de devoir créer la table alors que tout est dans le fichier shp. D'ailleurs ça marchait avec l'ancienne version sur postgresql 8.4.
Dans le cas contraire, ça ne fonctionne toujours pas avec :
Code:
C:\Program Files\PostgreSQL\9.3\bin>shp2pgsql -g the_geom -I -W LATIN1 "C:\le_chemin\BDT_2-1_SHP_LAMB93_ED113\H_ADMINISTRATIF\COMMUNE.shp" administrations.communes | psql -U rmunier bd_sig_ccmm
Hors ligne
#8 Wed 05 March 2014 15:04
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Tu peux générer le fichier SQL au lieu de l'envoyer vers psql -U [...] et ainsi vérifier que les requêtes sont correctes ou pas dans ce cas tu trouveras peut être la raison du plantage !
Code:
C:\Program Files\PostgreSQL\9.3\bin>shp2pgsql -g the_geom -I -W LATIN1 "C:\le_chemin\BDT_2-1_SHP_LAMB93_ED113\H_ADMINISTRATIF\COMMUNE.shp" administrations.communes > import.sql
Sinon tu peux loguer les requêtes pour voir laquelle fait planter l'import.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#9 Wed 05 March 2014 15:23
Re: [Postgis 2.1] utilisation de shp2pgsql
Autre info après relecture du message de Romary.
Juste pour info : le nom de la table a définir est le nom de la table qui sera utilisé pour la création. La table ne doit pas exister et shp2pgsql générera la requête SQL pour créer la dite table avec le bon nom.
Le fait de pouvoir définir le nom de la table te permet également de définir le schéma dans lequel se trouvera la table : monchema.matable
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#10 Thu 06 March 2014 08:18
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Alors voilà le résultat de la transformation en sql :
Code:
SET CLIENT_ENCODING TO UTF8; SET STANDARD_CONFORMING_STRINGS TO ON; BEGIN; CREATE TABLE "public"."communes" (gid serial, "id" varchar(254), "prec_plani" numeric, "nom" varchar(254), "code_insee" varchar(254), "statut" varchar(254), "canton" varchar(254), "arrondisst" varchar(254), "depart" varchar(254), "region" varchar(254), "popul" int4, "multican" varchar(254)); ALTER TABLE "public"."communes" ADD PRIMARY KEY (gid); SELECT AddGeometryColumn('public','communes','the_geom','0','MULTIPOLYGON',4); INSERT INTO "public"."communes" ("id","prec_plani","nom","code_insee","statut","canton","arrondisst","depart","region","popul","multican",the_geom) VALUES (..........etc.)
et le message d'erreur remonté :
ERREUR: la fonction addgeometrycolumn(unknown, unknown, unknown, unknown, unknown, integer) n'est pas unique
LINE 17: SELECT AddGeometryColumn('public','communes','the_geom','0',...
^
HINT: N'a pas pu choisir un meilleur candidat dans les fonctions. Vous pourriez
avoir besoin d'ajouter des conversions explicites de type.
********** Erreur **********
ERREUR: la fonction addgeometrycolumn(unknown, unknown, unknown, unknown, unknown, integer) n'est pas unique
État SQL :42725
Astuce : N'a pas pu choisir un meilleur candidat dans les fonctions. Vous pourriez
avoir besoin d'ajouter des conversions explicites de type.
Caractère : 431
Hors ligne
#11 Thu 06 March 2014 09:13
- Nicolas Granier
- Participant assidu
- Date d'inscription: 19 Apr 2007
- Messages: 271
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Il existe plusieurs fonctions addgeometrycolumn dans les fonctions Postgis. Elles font la même chose, sauf que le nombre de paramètres à passer sont différents. Certains sont mis par défaut.
Dans la syntaxe que vous utilisez que donne ?
Code:
SELECT AddGeometryColumn('public','communes','the_geom','0','MULTIPOLYGON',4,True);
True est le dernier paramètre use_typmod, avec cette syntaxe vous avez tous les paramètres d'une implémentation de la fonction AddGeometryColumn.
Nicolas GRANIER
Hors ligne
#12 Thu 06 March 2014 09:26
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Il y a plusieurs problèmes : la projection (et peut être la dimension) sont fausses ! 0 (et 4) sont des valeurs aberrante. Quand on regarde la commande il manque bien l'option -s 2154 par exemple pour définir la projection. En plus il la définie comme une chaîne et pas comme un entier '0' et pas 0 (le 0 dan,s postgis 2.0 est comme -1 dans postgis 1.5 et inf. : projection inconnue).
Concernant la dimension, es tu sur que tes données sont en 4D ? Si oui tu peux tester après avoir rajouter l'option de la projection et voir ce que cela donne.
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#13 Thu 06 March 2014 09:50
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Oui j'ai déjà essayé en mettant -s 2154 et -t 2D mais rien n'y fait, toujours la même erreur.
Et dans tous les cas, il met le srid entre guillemet 'srid'
Hors ligne
#14 Thu 06 March 2014 10:09
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Quelle est la version de shp2pgsql ? (lancer la commande sans parametre pour avoir la version)
Nico
Hors ligne
#15 Thu 06 March 2014 10:45
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
RELEASE : 2.1.0 (r11822)
Hors ligne
#16 Thu 06 March 2014 11:35
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [Postgis 2.1] utilisation de shp2pgsql
Hmm curieux, effectivement.
En vrac:
• Combien avez vous de fonctions addGeometryColumn, dans la base dans laquelle vous souhaitez importer un shapefile ?
(pgAdmin -> noeud "Fonctions" du schema "public" de la base)
• Avez vous installé postgis dans un autre schema que public ?
• Que vaut la variable search_path sur la base (commande sql: show search_path;
Nicolas
Hors ligne
#17 Thu 06 March 2014 11:44
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
• Combien avez vous de fonctions addGeometryColumn, dans la base dans laquelle vous souhaitez importer un shapefile ?
(pgAdmin -> noeud "Fonctions" du schema "public" de la base)
Nicolas
Il y a 1285 fonctions dans le schéma public dont 6 "addGeometryColumn"
• Avez vous installé postgis dans un autre schema que public ?
Nicolas
Postgis est installé pour toute la base de données... les fonctions n'apparaissent que dans le schéma public.
• Que vaut la variable search_path sur la base (commande sql: show search_path;
Nicolas
show search_path;=> ""$user", public, topology"
Hors ligne
#18 Fri 07 March 2014 12:13
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Ca fait beaucoup de définitions pour addGeometryColumn.
Je n'en ai que 3 dans ma base (memes versions que chez vous)
Pouvez-vous créer une nouvelle base vierge, y installer Postgis (create extension postgis;) et relancer shp2pgsql sur cette base ?
Nicolas
Hors ligne
#19 Tue 18 March 2014 15:12
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Bonjour,
Je viens de tester l'intégration par le plugin dans la base postgis_21_sample créée par défaut lors de l'installation.
Cela fonctionne (avec un encodage LATIN1).
Je vais faire un peu de ménage dans mes extensions sur ma bd opérationnelle.
Merci pour votre précieuse aide.
Romary
Hors ligne
#20 Tue 18 March 2014 16:57
- Romary
- Participant assidu
- Lieu: Epinal
- Date d'inscription: 17 Jun 2011
- Messages: 211
Re: [Postgis 2.1] utilisation de shp2pgsql
Et j'ai aussi supprimé 3 des 6 fonctions addgeometrycolumn que j'avais en trop dans ma base en comparant avec les fonctions de la bd postgis_21_sample et maintenant ça fonctionne aussi sur la base!
Merci.
Hors ligne
#21 Wed 09 March 2016 16:27
- rhum8838
- Juste Inscrit !
- Date d'inscription: 9 Mar 2016
- Messages: 4
Re: [Postgis 2.1] utilisation de shp2pgsql
.
Dernière modification par rhum8838 (Wed 09 March 2016 16:35)
Hors ligne