#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: 278
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!
Un gros merci encore une fois!
Caroline
Hors ligne