Pages: 1
- Sujet précédent - [ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python - Sujet suivant
#1 Thu 11 September 2014 17:42
- vlanher
- Participant occasionnel
- Date d'inscription: 17 Nov 2010
- Messages: 29
[ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python
Bonjour,
Je suis en train d’automatiser certains géotraitements via Python. J’utilise pour cela les fonctions Python d’ArcGIS 9.3.1.
Dans une partie de mon code, j’essaie de copier une couche d’une géodatabase Enterprise sous ArcSDE 9.1 vers une géodatabase Enterprise sous ArcSDE 9.3. Une fois copiée, la couche est ensuite convertie en centroïdes.
Je travaille en Lambert 93.
Pour cela j’utilise les lignes de codes suivantes :
Code:
indexgrids = gp.CalculateDefaultGridIndex_management(couche_entree) indexgrid1 = indexgrids.split(";")[0] grille1_float = float(indexgrid1.replace(",", ".")) grille1 = int(round(grille1_float,0))+1 grille2 = (grille1*3) grille3 = (grille2*3) if gp.exists(couche_copie): gp.Delete_management(couche_copie, "FeatureClass") gp.CopyFeatures_management (couche_entree, couche_copie, DEFAULTS",grille1,grille2,grille3)
Jusque là, tout se passe bien, après un problème avec le calcul de l’index spatial. Il m’a été conseillé de repasser mes valeurs de grilles en entier. En laissant les valeurs en décimales, l’erreur renvoyée était la suivante :
Code:
Underlying DBMS error[Error executing PL/SQL Block db_stgeom_create_index::ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur]
Depuis le passage en entier, tout se passe bien (enfin à peu près !).
La suite du traitement consiste à convertir la couche copiée polygonale en une couche de centroïdes. Mais voilà, de nouveau problème. J’obtiens le résultat suivant :
Code:
Exécution de:FeatureToPoint "chemin/couche_copie" "chemin/couche_centroide" CENTROID Heure de début: Thu Sep 11 17:00:07 2014 ERROR 000372: La référence spatiale en sortie n'est pas valide. Effectuez la mise à jour nécessaire Table not registered[couche_centroide] Underlying DBMS error[Error executing PL/SQL Block db_stgeom_create_index::ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur][couche_centroid] Echec de l'exécution de (FeatureToPoint).
J’ai revérifié ma couche de départ est bien en Lambert 93.
En base, mes valeurs de grille d’index sont bien en entier.
Au passage je me retrouve avec mon erreur d’avant :
Code:
Underlying DBMS error[Error executing PL/SQL Block db_stgeom_create_index::ORA-06502: PL/SQL : erreur numérique ou erreur sur une valeur][couche_centroid]
Si quelqu’un à une idée, je suis preneur (même juste une piste).
Pour info, toute mon infrastructure est en version 9.3.
EDIT : J'ai bien regardé le message d'erreur également et ça sent encore le recalcul d'index spatial qui ne fonctionne pas!
EDIT2: J'ai publié ici aussi : http://www.forumsig.org/showthread.php/ … des-Python
Merci d’avance.
Vincent
Dernière modification par vlanher (Fri 12 September 2014 10:19)
Hors ligne
#2 Wed 24 September 2014 17:33
Re: [ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python
Bonjour,
La géométrie est stockée dans quel format dans ArcSDE (ST_GEOMETRY, SDO_GEOMETRY, ...) ?
Je me souviens d'un problème de ce genre avec les couches de points (NIM049372) si les géométries étaient stockées en ST_GEOMETRY.
Ce problème était résolu en installant le SP1 de la version 9.3.1.
A+
Franck
Hors ligne
#3 Thu 25 September 2014 15:04
- vlanher
- Participant occasionnel
- Date d'inscription: 17 Nov 2010
- Messages: 29
Re: [ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python
Bonjour,
je vous remercie pour la réponse, je vais creuser ma problématique dans ce sens.
La géométrie de la GDB source ArcSDE 9.1 est en SDE_BINARY, celle d'arrivée en ArcSDE 9.3 en ST_GEOMETRY.
N'ayant pas la main sur l'installation d'ArcSDE, je vais me renseigner par curiosité.
En attendant j'ai contourné le problème en extrayant la donnée de la base en ArcSDE 9.1 en local (shp), en faisant mon traitement et en remontant ma donnée dans la GDB sous ArcSDE 9.3.
Pour autant, mon erreur apparaît toujours pour la suite de mes traitements mais n'est pas bloquante, la donnée est produite.
Je vous tiendrais au courant de l'avancement.
A+
Vincent
Hors ligne
#4 Fri 26 September 2014 10:58
- vlanher
- Participant occasionnel
- Date d'inscription: 17 Nov 2010
- Messages: 29
Re: [ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python
Bonjour,
je suis toujours en train d'investiguer pour mon problème. En attendant, j'ai trouvé une solution de contournement qui me trottait depuis quelques temps dans la tête.
Au lieu d'utiliser les fonctions arcgis, j'utilise les commandes ArcSDE suivantes pour extraire ma donnée en local :
Code:
sde2shp -o append -l <table,column> [-V <version_name>] -f <shape_file> -t <file_type> [-a {all | file=<file_name>}] [-w <"where_clause">] [-i <service>] [-s <server_name>] [-D <database>] -u <DB_User_name> [-p <DB_User_password>]
Code:
shp2sde -o create -l <table,column> -f <shape_file> [-I] [Spatial_Index] [{-R <SRID> | [Spatial_Ref_Opts]}] [-S <layer_description_str>] [-v] [-L {ON | OFF}] [-P {32 | 64}] [-e <entity_mask>] [-k <config_keyword>] [-M <minimum_ID>] [-a {none | all | file=<file_name>}] [-r <reject_shpfile>] [-V <version_name>] [-C <row_id_column>[,{SDE | USER},<min_ID>]] [-c <commit_interval>] [-i <service>] [-s <server_name>] [-D <database>] -u <DB_User_name> [-p <DB_User_password>]
Voici le lien en 9.1 pour les explications, le 9.3 est en pdf, mais pas de gros changements:
http://edndoc.esri.com/arcsde/9.1/
J'ai donc créé 2 fonctions dans un script à part + un fichier avec mes variables de connexion, que j'appelle par la suite pour mes traitements.
Cela donne qqch de la sorte pour extraire ma couche :
Code:
import ZZ_commandes_ArcSDE ... couche_entree = "ma_couche" couche_sortie = workdir + "\\ma_couche.shp" chemin_export = "chemin vers ma table de corresp pour l'export" #Je définis le type de géométrie 'shapefile_type' de ma donnée pour la fonction geom_type = """SELECT GEOMETRY_TYPE FROM SDE.GEOMETRY_COLUMNS WHERE F_TABLE_NAME = 'ma_couche' AND G_TABLE_SCHEMA = '%(schema)s' """%vars() connex.execute(geom_type) for geom in connex.fetchall(): print geom[0] if geom[0] == 1: shapefile_type = "point" if geom[0] == 9: shapefile_type = "arc" if geom[0] == 11: shapefile_type = "polygon" try: if gp.exists(couche_sortie): gp.Delete_management(couche_sortie) ZZ_commandes_ArcSDE.sde2shp_couche(couche_entree,couche_sortie,shapefile_type,chemin_export,service,serveur,user,pswd) except: sys.exit()
Une fois exportée, je fais mes traitements en local et je remonte tout mon petit monde dans la base via ça (au passage je recalcule mes index spatiaux) :
Code:
couche_entree = workdir + "ma_couche_centroide.shp" chemin_import = "chemin vers ma table de corresp pour l'import" outname = "ma couche en base" # Type de donnée en entrée shapefile_out = "npc" try: if gp.exists(couche_sortie): gp.Delete_management(couche_sortie, "FeatureClass") ZZ_commandes_ArcSDE.shp2sde_couche(outname,couche_entree,shapefile_out,chemin_import,service,serveur,user,pswd) ZZ_commandes_ArcSDE.F_construction_index(outname,service,serveur,user,pswd) except: sys.exit()
Au final, c'est un peu à l'arrache pour le moment, mais ça marche et magie je n'ai plus d'erreur qui vient s'afficher!
Je vous tiens au courant pour le SP1 dès que j'ai des nouvelles.
Vincent
Hors ligne
#5 Fri 16 January 2015 12:07
- vlanher
- Participant occasionnel
- Date d'inscription: 17 Nov 2010
- Messages: 29
Re: [ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python
Bonjour,
je reviens vers vous pour remonter ce que je pense être ma solution. Pour rappel, je travaille avec une GDB ArcSDE Enterprise sur laquelle j'obtenais l'erreur suivante lors de certains géotraitements:
Code:
ERROR 000372: La référence spatiale en sortie n'est pas valide. Effectuez la mise à jour nécessaire Table not registered[couche_centroide]
Je vous avouerais que je suis tombé dessus un peu par hasard, mais après plusieurs tests sur différents scripts, ça a l'air de fonctionner.
Voici un peu de lecture pour les plus curieux (en anglais désolé!! La chose est disponible en français pour ArcGis 10 dans le dernier lien):
http://webhelp.esri.com/arcgisdesktop/9 … e_settings
http://webhelp.esri.com/arcgisdesktop/9 … %2C_2%2C_3
http://resources.arcgis.com/fr/help/mai … 0019000000
De ce que j'ai compris, une GDB ArcSDE nécessite un paramétrage des grilles d'index spatial en sortie, paramétrables dans les variables d'environnement.
En python, cela se traduit de la manière suivante :
Code:
gp.SpatialGrid1 = val1 gp.SpatialGrid2 = val2 gp.SpatialGrid3 = val3
Seule la première valeur de grille, la plus petite, peut être paramétrée.
Une question reste cependant en suspens : Comment déterminer une ou plusieurs valeurs de grilles d'index spatial en sortie sans connaître au préalable justement la sortie générée ?
A+
Vincent
PS: J'ai posté la réponse également sur forumsig: http://www.forumsig.org/showthread.php/ … des-Python
Dernière modification par vlanher (Fri 16 January 2015 13:54)
Hors ligne
Pages: 1
- Sujet précédent - [ArcGIS 9.3.1, ArcSDE 9.3] - problème extraction centroïdes Python - Sujet suivant