J'ai un problème que je n'arrive pas à comprendre. J'ai deux couches de polygones:
- Polygone A - est un sous-ensemble du polygone B avec les mêmes champs et a des polygones identiques au polygone B
- Polygone B - a les données d'attribut que je veux être dans le polygone A
Comment cela peut-il être fait? J'ai essayé l'outil QGIS "Join Attributes by Location" mais comme certains des polygones sont dans d'autres, il a tendance à se lier à la première intersection qu'il trouve (le polygone extérieur).
qgis
arcgis-desktop
Diego R
la source
la source
Réponses:
@Dano soulève à juste titre certains problèmes qui doivent être résolus dans une réponse complète.
Une difficulté , déjà notée par @Celenius, est qu'une jointure entre B et A (dans les deux sens) duplique tous les champs; il peut être onéreux de corriger cela. J'ai suggéré dans les commentaires que la manière évidente et facile (exporter vers une feuille de calcul) soulève des questions d'intégrité des données. Une autre difficulté , déjà abordée par la proposition de Celenius, concerne la résolution de ce problème lorsqu'aucune combinaison d'attributs ne peut servir de clé pour A et B, car cela empêche une jointure de base de données. La jointure spatiale contourne ce problème.
Quelle est donc la bonne solution? Une approche utilise A pour identifier les enregistrements correspondants de B contenant les données souhaitées. En fonction d'hypothèses sur les configurations des polygones - qu'ils se chevauchent, que certains puissent en contenir d'autres, etc. - cela peut être effectué de différentes manières: en utilisant une couche pour sélectionner des objets dans l'autre, ou via des jointures. Le point ici est que tout ce que nous voulons faire à ce stade est de sélectionner le sous-ensemble de B correspondant à A.
Une fois cette sélection effectuée, exportez la sélection et laissez-la remplacer A. Terminé .
Cette solution suppose que tous les champs de B sont destinés à remplacer leurs homologues en A. Sinon, il est vraiment nécessaire d' effectuer une jointure 1-1 de B (source) vers A (destination). La jointure basée sur des identificateurs est la meilleure, mais la création d'une jointure sur l'identité de polygone (Celenius) fonctionne bien si les identifiants ne sont pas disponibles et qu'il n'y a aucune chance que les formes de polygone correspondantes dans A et B puissent différer, même légèrement . (Ceci est un point subtil, et la cause potentielle d'erreurs insidieuses, car les modifications précédentes dans B aux polygones qui ne correspondent pas à A pourraient toujours modifier de manière invisible les autres polygones dans B si le SIG "accroche" ou "maintient la topologie" ou autrement effectuer automatiquement des changements globaux lors des modifications locales.)
À ce stade, il existe deux copies de chaque champ: si [Foo] est un champ commun à A et B, alors la jointure contient A. [Foo] et B. [Foo]. À l'aide d'un calcul de champ , copiez B. [Foo] dans A. [Foo]. Répétez pour tous les champs nécessaires. Après cela, supprimez la jointure.
Bien que cette procédure puisse être un peu onéreuse lorsque de nombreux domaines sont impliqués, ses mérites incluent
Certains des principes directeurs impliqués dans cette suggestion sont
On pourrait objecter que dans de nombreux cas, il existe des moyens plus rapides et plus faciles d'atteindre le même résultat. Oui, il peut y en avoir, et ils peuvent être efficaces et ils fonctionnent généralement lorsqu'ils sont effectués avec soin. Mais les solutions qui risquent les données sont difficiles à recommander et à défendre en tant que réponses générales. Il est préférable de les utiliser dans des situations ponctuelles avec de petits ensembles de données où la corruption dans les données devrait rapidement devenir évidente et les conséquences de telles erreurs sont sans importance.
la source
Dans Arcmap, vous pouvez joindre spatialement le polygone B au polygone A; cela relierait les attributs. Comme les noms de champs sont les mêmes, cela créera une nouvelle combinaison du nom.
la source
Exportez le tableau du fichier de formes "B" vers Excel et supprimez les colonnes redondantes et toutes les colonnes contenant des informations dont vous n'avez pas besoin. Assurez-vous de conserver votre colonne d'identifiant partagé, puis enregistrez-la dans le dossier approprié. Accédez à ArcMap, ajoutez la table, puis cliquez avec le bouton droit de la souris sur le fichier de formes "A" et effectuez une jointure de table . Le lien devrait mener à une vidéo expliquant comment procéder.
@ whuber - L'approche dans son ensemble est saine et garantit l'intégrité des données. La seule chose que je peux dire pour réfuter cette réponse, c'est que certaines situations / projets ne nous donnent pas le temps ou le budget pour être aussi méthodique dans notre approche.
Un exemple fidèle à la réalité:
Une Junior Mining Company est assise sur un gisement majeur avec des centaines de millions de dollars en injections de trésorerie reposant sur sa capacité à "prouver" la ressource. Un examen documentaire des publications et des cartes / données géologiques conduit à un programme de forage très ciblé et très coûteux. Lorsque les analyses reviennent de la première analyse, ces valeurs sont marquées à leurs emplacements de points respectifs via une jointure de table et pompées de nouveau dans un format Excel où les données sont minutieusement préparées pour l'importation dans DataMine (pour l'interpolation 3D de gisement).
D'après mon expérience , les géologues du projet ont exigé que ces données soient préparées dans Excel, qu'elles respectent CHAQUE règle / convention de formatage à la lettre (pas d'espaces, pas de caractères spéciaux, etc.) et que le fichier d'importation DataMine soit livré au format .csv (à l'époque de toute façon). Cela conduirait à davantage d'investissements dans des forages ciblés, et nous reverrions le processus (dans certains cas) plusieurs fois. Tout cela s'est généralement produit dans un délai extrêmement serré et critique.
Chacun de nous a sa propre histoire et notre propre éventail d'expériences que nous avons intégrées dans notre approche de la façon dont nous faisons les choses. Cela dit, mon expérience a vu Excel comme une nécessité absolue et un outil vital dans mes flux de travail; c'est ce que je sais. Nous avons pris toutes les précautions AQ / CQ lors de la préparation de ces données. Là où vous préférez éviter Excel, je n'ai pas eu d'autre choix que de l'utiliser.
la source
À la fin des années 1990, nous avons reçu une mise à jour à grande échelle de tous nos plans d'eau et cours d'eau, couvrant environ 55 feuilles de carte du SNRC et un nombre de milliers d'éléments non mémorisés. Nous devions conserver les attributs à valeur ajoutée de notre ancienne hydrologie (noms des lacs, élévation de la surface, etc.) et remplacer la géométrie. La géométrie de l'ancien et du nouveau était suffisamment proche pour que nous puissions garantir que les centroïdes de chaque polygone seraient toujours délimités par les nouvelles limites du polygone - c'est un point important, sans cette certitude de base, l'approche ci-dessous n'est pas une bonne idée.
La solution dans ce cas particulier était au lieu d'apporter les attributs à la géométrie, apporter la géométrie aux attributs. Donc, conceptuellement:
Voir ici pour une description plus détaillée et une recette pour arcinfo-worksation . Je ne suis pas sûr qu'il soit même possible dans Arcgis ou Qgis moderne de supprimer une géométrie sans supprimer simultanément son enregistrement d'attribut, mais bon, juste au cas où c'est le cas, voici l'idée.
la source
Je ne suis pas sûr mais peut-être que certains SGBD effectuent des opérations d'égalité sur les champs Shape en SQL (?). Il me semble que si deux géométries sont identiques, l'
=
opérateur SQL doit retourner true (WHERE A.Shape = B.Shape
).Si cela est vrai pour la base de données que vous utilisez, vous devriez pouvoir effectuer une jointure spatiale en utilisant la même syntaxe que pour une jointure non spatiale.
Il semble que la méthode ST_Equals (une norme OGC) pourrait être utilisée pour cela.
la source
Comme d'habitude, Whuber a raison. Vous devez bien réfléchir à votre processus. Surtout s'il s'agit de grands ensembles de données et que cette opération sera entreprise plusieurs fois ou que les données sont essentielles à la mission.
Tenez compte de vos données et de vos responsabilités:
Qu'avez-vous fait?
Qu'est-ce que tu fais?
Que comptez-vous faire?
Et demandez toujours: pourquoi?
Maintenant, pour une réponse simple visant directement la question posée. Gardant à l'esprit qu'il y a toujours au moins 5 façons de faire les choses, mais généralement une seule meilleure façon.
En supposant que l'ensemble complet possède tous les attributs que vous souhaitez faire partie du sous-ensemble et que le sous-ensemble n'a rien qui ne se trouve pas déjà dans l'ensemble complet, sauf des informations obsolètes.
Deviner que la topologie du sous-ensemble correspond à l'ensemble (y compris l'origine / projection et la tolérance XY).
1) Utilisez Feature to Point avec la case "Inside" cochée et créez une classe d'entités points ou un fichier de formes à partir du sous-ensemble.
2) Utilisez une sélection par jointure spatiale pour rechercher tous les polygones dans l'ensemble complet qui correspondent au sous-ensemble en fonction de la classe d'entités ponctuelles ou du fichier de formes nouvellement créé.
3) Exportez la sélection à partir de l'ensemble complet, et cela peut être votre nouveau sous-ensemble.
la source
Sûrement, si le polygone A est un sous-ensemble du polygone B, l'approche la plus simple serait de parcourir le polygone A, utilisez l'ID qui se trouverait dans le polygone A (et B si A était un sous-ensemble ou B) pour rechercher les données de ligne dans Polygone B, puis mettez à jour la ligne dans le polygone A.
la source