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

Printemps des cartes 2024

#1 Mon 07 August 2006 21:37

Carooo
Participant occasionnel
Date d'inscription: 28 Jul 2006
Messages: 10

Ajout d'un champ à partir d'un autre shapefile

Bonjour,

J'ai deux shapefiles.

1 shapefile polygones
1 shapefile points

Pour chacun des polygone, il y a un point à l'intérieur. Et le shapefile de points contient un champs "Description". J'aimerais ajouter ce champ à mon shapefile polygone.

Est-ce que qqn sait comment faire pour ajouter ce champ au shapefile polygone pour ne pas l'entrer manuellement?


Ce qui risque aussi d'être un problème, j'ai quelques cas isolés où j'ai 2 points pour 1 polygone...  qui pourra être corrigé manuellement dans le pire des cas.


Merci


Caroline smile

Hors ligne

 

#2 Tue 08 August 2006 08:49

chris
Participant actif
Lieu: florensac
Date d'inscription: 7 Sep 2005
Messages: 56

Re: Ajout d'un champ à partir d'un autre shapefile

Il suffit de faire une jointure spatiale (pas une sélection spatiale) en cliquant droit sur la couhe, joindre. On récupère alors une nouvelle table avec les attributs des deux couches il suffit allors de supprimer les champs qui nous interesse pas et le tour est joué


Christelle VALLS
Géomaticienne

Hors ligne

 

#3 Tue 08 August 2006 09:04

Miniopterine
Participant assidu
Date d'inscription: 29 Nov 2005
Messages: 277

Re: Ajout d'un champ à partir d'un autre shapefile

Dans l'outil Editeur / Autre outils de mise à jour/ Ajustement spatial, vous
avez "Mappage de transferts d'attributs", il me semble que cela permet une
jointure spatiale des attributs.

Dernière modification par Miniopterine (Wed 08 August 2007 22:36)

Hors ligne

 

#4 Tue 08 August 2006 12:31

Frédéric Prally
Participant occasionnel
Date d'inscription: 25 Oct 2005
Messages: 16

Re: Ajout d'un champ à partir d'un autre shapefile

Bonjour,

Une solution peut-être en passant par les ArcObjects et vba :
     - copie le code suivant dans ton éditeur vb ( Outils>Macros>EditeurVB)
     - colle dans Project> ArcMap Objects> ThisDocument
     - Vérifie bien que tu as ta couche de points en première position dans la table des matières et que la couche de polygones est en dessous.
    - Change le contenu des constantes en haut du code par le nom des champs
    - Ajoute le champ manuellement Description s'il n'existe pas dans ta couche de points
    - Pour lancer le processus : Outils>Macros>Macros>SelectPointinPolygon_TransfertAttr

En espérant que cela t'aide.

Code:

Public Sub SelectPointinPolygon_TransfertAttr()
'***Pour chaque point compris dans un polygone, on récupère les valeurs du point pour les coller dans le polygone
'***Vérifier que le champ qui doit recevoir les valeurs existe bien
'***Changer le nom des champs des constantes


' ---- Changer le nom du champ ----
Const FROM_FIELD = "Description"
Const TO_FIELD = "Description"
' -------------------------------
    'Déclaration des variables générales
    Dim pMxDoc As IMxDocument
    Dim pMap As IMap
    
    'Déclaration des variables pourtant sur les deux couches de travail
    Dim pPointFLayer As IFeatureLayer
    Dim pPolygonFLayer As IFeatureLayer
    Dim pPointFC As IFeatureClass
    Dim pPolygonFC As IFeatureClass
    Dim pPointFCursor As IFeatureCursor
    Dim pPolyFCursor As IFeatureCursor
    Dim pPoint As IFeature
    Dim pPoly As IFeature
    
    'Initialisation des variables
    Set pMxDoc = ThisDocument
    Set pMap = pMxDoc.FocusMap
    
    Set pPointFLayer = pMap.Layer(0)   '------------Couche de points en 1ère position ds TOC
    Set pPolygonFLayer = pMap.Layer(1) '------------Couche de polygones en 2ème position ds TOC
    
    Set pPointFC = pPointFLayer.FeatureClass
    Set pPolygonFC = pPolygonFLayer.FeatureClass
    
    'Recupére un cursor sur la couche de points
    Set pPointFCursor = pPointFC.Search(Nothing, False)
    Set pPoint = pPointFCursor.NextFeature
        
    'Préparation de la Status bar
    Dim pStatusBar As IStatusBar
    Dim pProgressBar As IStepProgressor
    Dim ltotalVal As Long
    
    Set pStatusBar = ThisDocument.Parent.StatusBar
    Set pProgressBar = pStatusBar.ProgressBar
    pProgressBar.Position = 0
    ltotalVal = pPointFC.FeatureCount(Nothing)
    pStatusBar.ShowProgressBar "Processus en cours ...", 0, ltotalVal, 1, True
    
    'Boucle sur chaque point, et selectionne le polygone intersecté
    'et copie les valeurs du champ point vers polygone
    Do Until pPoint Is Nothing
        'Définition de la requête spatiale
        Dim pFilter As ISpatialFilter
        Set pFilter = New SpatialFilter
        
        With pFilter
            Set .Geometry = pPoint.Shape
            .GeometryField = pPolygonFC.ShapeFieldName
            .SpatialRel = esriSpatialRelIntersects
        End With
        
        Set pPolyFCursor = pPolygonFC.Search(pFilter, False)
        Set pPoly = pPolyFCursor.NextFeature
        'Transfert de valeurs du polygone vers le point
        'Ajout les valeurs du champ point au champ du polygone intersecté
        's'il y a plusieurs valeurs les valeurs sont séparées par ", "
            
        Do While Not pPoly Is Nothing
            If pPoly.Value(pPolygonFC.FindField(TO_FIELD)) <> "" Then
                pPoly.Value(pPolygonFC.FindField(TO_FIELD)) = pPoly.Value(pPolygonFC.FindField(TO_FIELD)) _
                                                            & ", " & pPoint.Value(pPointFC.FindField(FROM_FIELD))
                pPoly.Store
            Else
                pPoly.Value(pPolygonFC.FindField(TO_FIELD)) = pPoint.Value(pPointFC.FindField(FROM_FIELD))
                pPoly.Store
            End If
            
            pStatusBar.StepProgressBar
            Set pPoly = pPolyFCursor.NextFeature
        Loop
        Set pPoint = pPointFCursor.NextFeature
    Loop
    pStatusBar.HideProgressBar
    
    'Vide les variables
    Set pStatusBar = Nothing
    Set pProgressBar = Nothing

End Sub

Hors ligne

 

#5 Tue 08 August 2006 14:27

Carooo
Participant occasionnel
Date d'inscription: 28 Jul 2006
Messages: 10

Re: Ajout d'un champ à partir d'un autre shapefile

Bonjour Frédéric

merci pour le code! Cela fonctionne à merveille! C'est exactement ce que je voulais faire! smile


Un gros merci encore une fois!


Caroline smile

Hors ligne

 

Pied de page des forums

Powered by FluxBB