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 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

Jeirhome
Membre
Lieu: Liverion
Date d'inscription: 22 Aug 2006
Messages: 4298
Site web

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

 

Pied de page des forums

Powered by FluxBB