Pages: 1
- Sujet précédent - arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape - Sujet suivant
#1 Thu 23 July 2009 17:03
- gglafouine
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 28 Feb 2006
- Messages: 118
arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
Bonjour,
Suite à un référencement linéaire (création d'une couche d'évènement avec gestion d'erreur) j'exporte l'intégralité des enregistrements dans un shape. Ensuite je l'ouvre et je supprime tous les enregistrements ne contenant pas de géométrie (enregistrements erronés).
Mon problème est que lorsque je réouvre le shape, j'ai des problème de représentation graphique. que ce soit pour les jeux de données ponctuels ou pour les jeux de données linéaires. En regardant les propriétés de mes jeux de données je me suis rendu compte que l'index spatial avait disparu. Je l'ai donc recréé à partir de ArcCatalogue et cela corrige mon problème.
Mais je souhaiterai savoir comment je pourrai les recréer en utilisant vba. J'ai 100 fichiers par mois en production automatique et je ne pense pas que je l'ai ferai tous manuellement :\ .
Merci.
Dernière modification par gglafouine (Fri 24 July 2009 08:37)
Jérôme
Hors ligne
#2 Thu 23 July 2009 18:54
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
Salut Jêrome,
Voir ----> rec_Number.cal
Dans ---> http://www.ian-ko.com/free/free_arcgis.htm
Les fichiers .cal sont à charger dans la calculette en mode avancé
En espérant t'aider
A+
Joël
Hors ligne
#3 Fri 24 July 2009 08:59
- gglafouine
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 28 Feb 2006
- Messages: 118
Re: arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
Salut Joël,
En fait je ne pense pas que ta solution colle vraiment à mon besoin.
Ce que je souhaite faire c'est utiliser du code en vba pour rajouter l'index une fois que j'ai fini de traiter mon fichier.
Je cherche comment adapter la manipulation manuelle à faire sous arccatalog pour générer l'index spatiale (cette action est possible en modifiant les propriétés du jeu de données)
en VBA je ne connait pas l'interface à utiliser. J'ai cherché sans succès.
En principe l'index est générer automatiquement et la case est grisée dans le panneaux des propriétés (export de données standard) on peu toutefois supprimer l'index ou le mettre à jour. Mais dans mons cas, il n'y a plus d'index et cela pose des problème lors de la représentation graphique de mes informations.
Merci tout de même.
Quelqu'un a une autre idée?
Merci
-------------------
J'ai trouvé la fonction qui pose problème.
Je poste de code
Code:
Public Function DeleteEmptyShapeFeature(ByVal pFeatCls As esriGeoDatabase.IFeatureClass) As Boolean '===================================================================================================== '| Projet : Project '| Module : mdlArcGIS, Module '| Nom : DeleteEmptyShapeFeature Function, Boolean '| Paramètres : '| > ByVal pFeatCls As esriGeoDatabase.IFeatureClass: '| - Classe d'entitées à vérifier '|---------------------------------------------------------------------------------------------------- '| Auteur : GGlaFouine '| Date de création : 2009-06-05 '|---------------------------------------------------------------------------------------------------- '| But : Supprimer les enregistrements n'ayant pas de géométrie '|---------------------------------------------------------------------------------------------------- '| Procédures Appelées : '| Modifications : '===================================================================================================== Dim pFeatCursor As esriGeoDatabase.IFeatureCursor Set pFeatCursor = pFeatCls.Search(Nothing, False) Dim pFeat As esriGeoDatabase.IFeature Set pFeat = pFeatCursor.NextFeature 'Vérifier l'existance de géométrie inexistante dans les enregistrements Do While (Not pFeat Is Nothing) If Not pFeat.Shape Is Nothing Then If pFeat.Shape.IsEmpty Then 'action à réaliser si la géométrie du champs est vide pFeat.Delete 'supression End If End If Set pFeat = pFeatCursor.NextFeature Loop DeleteEmptyShapeFeature = True End Function
Apparamment, le fait de supprimer mes enregistrements de cette manière ça pose problème (invalidation de l'index spatiale).
Les solutions envisagées sont:
cas 1:
Je regénère un index spatiale à la fin de mon traiement
cas2:
je crée un champs Geo_Err booléen stokant à yes mes enregistrement en erreur et à no les enregistrement valide
je sélectionne les enregistrements dont Geo_Err = Yes et je les supprime
Je test la seconde solution en attendant si vous avez une idée sur le prmier cas je suis toujours preneur
Dernière modification par gglafouine (Fri 24 July 2009 10:23)
Jérôme
Hors ligne
#4 Fri 24 July 2009 10:34
- Spacejo
- Membre
- Lieu: Nancy
- Date d'inscription: 17 Aug 2008
- Messages: 2511
Re: arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
Re,
As tu pensé à utiliser la ligne de commande:
-----> http://webhelp.esri.com/arcgisdesktop/9 … agement%29
------> http://webhelp.esri.com/arcgisdesktop/9 … p;pid=1132
Un lien oû il faut fouiller:
http://arcscripts.esri.com/
A+
Joël
Hors ligne
#5 Fri 24 July 2009 11:07
- gglafouine
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 28 Feb 2006
- Messages: 118
Re: arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
En effet j'ai pas regardé les géoprocessus
---> J'ai trouvé ça qui colle plus avec ma demande (C'étais à coté de tes liens concernant les index attributaire)
http://webhelp.esri.com/arcgisdesktop/9 … p;pid=1132
Merci, Je teste et je reviens
---------------------------------
Voilà j'ai fini ce que je voulais
Ajout d'une fonction pour générer les nouveau index spatiaux
Code:
Public Function AddSpatialIndex(ByVal WorkspacePath As String, ByVal strFileName As String) As Boolean '===================================================================================================== '| Projet : Project '| Module : mdlArcGIS, Module '| Nom : AddSpatialIndex Function, Boolean '| Paramètres : '| > ByVal WorkspacePath As String: '| - Localisation du jeu de données (espace de travail) '| > ByVal strFileName As String: '| - Nom du shapefile (ou de la table de géodatabase) '|---------------------------------------------------------------------------------------------------- '| Auteur : GGlaFouine '| Date de création : 2009-07-24 '|---------------------------------------------------------------------------------------------------- '| But : Ajout d'un index spatiale '|---------------------------------------------------------------------------------------------------- '| Procédures Appelées : '| Modifications : '===================================================================================================== AddSpatialIndex = False On Error GoTo CheckError Dim GP As Object Set GP = CreateObject("esriGeoprocessing.GpDispatch.1") 'attribuer l'espace de travail GP.Workspace = WorkspacePath 'définir la toolbox à prendre en compte GP.Toolbox = "management" 'ajouter l'index spatial au jeux de données GP.AddSpatialIndex WorkspacePath & "\" & strFileName AddSpatialIndex = True Fin: Exit Function CheckError: GoTo Fin End Function
Ajout d'une procédure pour retirer la couche de la vue active chargée par défaut.
Code:
Public Sub RemoveLayerInActiveView() '===================================================================================================== '| Projet : Project '| Module : mdlArcGIS, Module '| Nom : RemoveLayerInActiveView Sub '| Paramètres : '|---------------------------------------------------------------------------------------------------- '| Auteur : GGlaFouine '| Date de création : 2009-07-24 '|---------------------------------------------------------------------------------------------------- '| But : supprimer tous les couches de la vue active '|---------------------------------------------------------------------------------------------------- '| Procédures Appelées : '| Modifications : '===================================================================================================== Dim pMap As IMap Dim pActiveView As IActiveView Dim pEnumLayer As IEnumLayer Dim pLayer As ILayer Set pMap = g_MxDoc.FocusMap Set pActiveView = pMap ' si aucune couche n'est chargée If pMap.LayerCount = 0 Then GoTo Fin: Else Set pEnumLayer = pMap.Layers(Nothing, True) Set pLayer = pEnumLayer.Next Do Until pLayer Is Nothing pMap.DeleteLayer pLayer Set pLayer = pEnumLayer.Next Loop pActiveView.Refresh End If Fin: End Sub
A plus
Dernière modification par gglafouine (Fri 24 July 2009 13:16)
Jérôme
Hors ligne
#6 Wed 02 September 2009 11:25
- gglafouine
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 28 Feb 2006
- Messages: 118
Re: arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
Bonjour, pour ceux qui utilise les géo-processus il existe une option pour éviter de charger les résultat dans la table des matières.
voilà le bout de code à rajouter correspondant à outils >> option... >>> décocher la case "Ajouter les résultats du géotraitement dans la zone d'affichage"
Code:
'- Gestion des géotraitements Dim pGeoProcessor As IGeoProcessor Set pGeoProcessor = New GeoProcessor 'gestion de l'option d'ajout des couches du géotraitement dans arcMap pGeoProcessor.AddOutputsToMap = False 'true ajoute les couchse dans la table des matières
Cela permet d'éviter l'utilisation de la fonction RemoveLayerInActiveView()
A bientôt
Dernière modification par gglafouine (Wed 02 September 2009 11:27)
Jérôme
Hors ligne
#7 Wed 02 September 2009 11:33
Re: arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape
L'option dans ArcGIS est à connaitre autant que la méthode VBA.
Merci JérômeL.
Jérôme Cuinet
L'avantage de la Chine, c'est que le soleil se couche plus tard !
Hors ligne
Pages: 1
- Sujet précédent - arcview 9.3 & VBA - Ajouter un index spatial sur un fichier shape - Sujet suivant