#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 ![]()
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: 280
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 SubHors 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! ![]()
Un gros merci encore une fois!
Caroline
Hors ligne


