banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Mon 23 March 2009 14:51

jmz
Participant actif
Lieu: Anthon
Date d'inscription: 5 Sep 2005
Messages: 142

Contrôle géométrie - Python - Geoscripting

Bonjour,

Je relance un post ancien qui n'a pas trouvé de réponse en espérant qu'aujourd'hui les réponses pleuveront :

Il s'agit de contrôle géométrique sur des Shapefiles via Python avec arcgisscripting : je souhaite lancer un contrôle géométrique et récupérer les erreurs détectées sous forme d'un shapefile de points (= localisants).

Via la méthode check_geometry : je récupère effectivement des Dbf (1 par fichier) avec les FeatureID et la nature de l'erreur. Si besoin je peux créer un Shapefile des entités en erreur (car j'ai leur FeatureID), ce qui n'est déjà pas mal !

Par contre, j'aimerai récupérer la localisation la plus précise en X,Y de mon erreur, et là je sèche ...

Si éventuellement vous disposez d'outils VBA qui font le boulot je suis également preneur, néanmoins, j'aurai aimé utiliser Python car c'est plus simple et plus souple que VBA (config en toolbox, ligne de commande de l'outil, moins de code, etc ...).

Si quelqu'un a une solution je suis preneur.

Cordialement

Jmz

Hors ligne

 

#2 Tue 24 March 2009 10:10

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: Contrôle géométrie - Python - Geoscripting

Bonjour,
Je suis très interessé par votre post car j'ai quasiment la même problématique à la différence que je souhaite récupérer les erreurs dans un fichier shapefile de type polygone.

Tout d'abord quelques questions :
- Vous travaillez les fonctionnaités d'ArcEditor (topologie) ?
- Vos fichiers en entrée sont de quels types (polygon, polyline, point) ?
- Qu'entendez-vous par "localisation la plus précise" ? Est-ce une question d'unité (mètres, centimètres, millimètres) ? ou une question d'extraction des coordonnées ?
- la méthode check_geometry ? (ou est elle???) je suis preneur ?

Cordialement

Hors ligne

 

#3 Tue 24 March 2009 11:02

jmz
Participant actif
Lieu: Anthon
Date d'inscription: 5 Sep 2005
Messages: 142

Re: Contrôle géométrie - Python - Geoscripting

Bonjour,

- Pour l'instant je travaille seulement avec ArcMap, si possible je souhaite ne pas utiliser d'extensions comme arceditor, tout va dépendre de ce que je peux faire avec le package ArcMap.

- Mes fichiers en entrée sont de tout type : polylignes, polygones et points

- Localisation plus précise : la position X,Y de l'erreur. exemple, sur un grand polygone, si j'ai une erreur de type 'ring cross ring' (= boucle), je peux mettre longtemps avant de la trouver pour la corriger, alors que si j'ai un point X,Y  de localisation de l'erreur ça me prendra 2 secondes.

- La méthode check_geometry est disponible dans les fonctions arcscripting pour Python. ArcGIS offre la possibité de créer des ToolBox pour arcToolBox sous forme de scripts python. Notez qu'il existe aussi une méthode repair_geometry qui corrige automatiquement les problèmes géométriques. (aller voir du coté du Model Builder d'ArcMap, qui permet d'exporter un traitement sous forme de script python).

J'ai avancé un peu sur le problème.

Une des solutions serait d'importer mes Shapefiles dans une Géodatabase, car la Géodatabase permet de gérer un ensemble de règles topologiques, on pourrai également convertir les entitées surfaciques en polylignes pour obtenir plus facilement les X,Y des erreurs.

Si vous avez des docs sur le 'data design' et la topologie dans les géoDatabase, je suis preneur.

Cordialement

Jmz

Hors ligne

 

#4 Tue 24 March 2009 11:55

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: Contrôle géométrie - Python - Geoscripting

En fait, je travaille sur la correction d'erreurs topologiques et non sur la correction d'erreurs géométriques. J'avais mal compris.

Je travaille exclusivement avec la documentation fournie avec Arcgis à savoir l'aide  et le poster intitulé "Geoprocessor Programming Model". Si vous ne le possédez pas vous le retrouverez facilement sur le net.

Travailler avec la topologie dans Arcgis me semble être une solution. Je ne connais pas en détail comment sont corrigées les géométrie avec la fonction "Repair Geometry" mais les traitements dans les géodatabases peuvent vous corriger pas mal d'erreurs. Par exemple le simple fait de définir une tolérance lors de la création d'un jeu de données (à l'intérieur de la géodatabase) va pouvoir, lors de la conversion de votre SHP vers une classe d'entité, vous corriger des erreurs de géométrie (ex: polygone non fermé) en assemblant les points "proches".

Vous pouvez vous même travaillez directement sur les coordonnées de vos points composants vos géométries et définir des règles de topologies (ex: calculer l'écart entre 2 points, vérifier que la coordonnée du dernier point est identique au premier).

J'ai bien peur qu'il n'y ait pas de solution simple.

Les fonctionnalités du géoprocesseur abordable en Python sont limitées. Concernant ma problématique, et après pas mal de recherche je vais m'orienté vers un autre langage, vb6 ou vb.net.

Cordialement

Hors ligne

 

#5 Tue 24 March 2009 17:56

jmz
Participant actif
Lieu: Anthon
Date d'inscription: 5 Sep 2005
Messages: 142

Re: Contrôle géométrie - Python - Geoscripting

Rebonjour,

Les erreurs géométriques que je souhaite traiter sont aussi des erreurs de topologie (polygone non fermé, polygones superposés, etc ...). C'est bien dans le Geoprocessor Programming Model que je travaille pour l'instant, et la méthode check_geometry est bien disponible pour Python, même si je ne la trouve pas sur le diagramme.
On l'utilise comme ceci une fois qu'on a instancié notre composant arcgisscripting :

Code:

gp = arcgisscripting.create(9.3)
gp.AddToolbox("C:/Program Files/ArcGIS/ArcToolbox/Toolboxes/Data Management Tools.tbx")
gp.CheckGeometry_management(fc,output_check)

# fc est le FeatureClass à contrôler
# output_check est le fichier de résultat (ex : C:/resultat.dbf)

Pour mon problème, je vais m'orienter a priori vers le développement de mes propres fonctions de contrôle depuis VBA.

Pour information, il existe aussi VBA (Visual Basic pour Applications) qui n'est pas mal du tout et donne accès au modèle ArcMap complet. Ses limitations par rapport à VB.net et VB6 tiennent au fait que l'on ne pourra pas compiler le code pour faire des Dll, des exe ou des appli. autonomes.

Cordialement

Jmz

Hors ligne

 

Pied de page des forums

Powered by FluxBB