#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