Jointures un-à-plusieurs d'une classe d'entités vers une table


10

J'utilise ArcMap 10.2.2 avec une licence avancée. J'ai utilisé ArcMap pour d'autres analyses de base, mais je suis relativement nouveau dans le programme et n'ai que des compétences de base en codage, sans expérience SQL en dehors des requêtes très basiques utilisant les générateurs de code SQL dans ArcMap.

J'ai des polygones de l'aire de répartition géographique des espèces et j'ai un tableau avec une liste des pathogènes / maladies véhiculés par ces espèces. Certaines espèces sont porteuses de multiples agents pathogènes. Dans un monde idéal, je joindrais les polygones des gammes au tableau des espèces + agents pathogènes et conserverais les données polygonales / spatiales, mais il ne semble pas qu'il y ait un outil SIG pour le faire (je vais comptez plus tard les agents pathogènes qui se chevauchent, il est donc important que chaque combinaison espèce-agent pathogène ait sa propre caractéristique, plutôt qu'une caractéristique qui possède les informations pour plusieurs agents pathogènes). Voici à quoi ressemblent mes données (# 1 & # 2, # 3 pour plus tard):

Tableau d'attributs pour les entités spatiales:

table d'attributs pour les entités spatiales

Tableau sans aucune donnée spatiale:

table sans données spatiales

(Veuillez noter qu'il ne s'agit pas de données réelles et que les combinaisons pathogène-espèce peuvent ne pas être réelles. J'ai en fait 115 polygones et 519 lignes de tableau. Les espèces transportent entre 1 et 40 agents pathogènes et donc les espèces ont entre 1 et 40 lignes dans ma table)

En prime, en raison des futures analyses que je dois faire, j'aimerais idéalement pouvoir faire cette jointure un-à-plusieurs de sorte que je puisse garder une colonne supplémentaire de données du tableau (voir ci-dessous pour un exemple de à quoi cela pourrait ressembler). Cependant, cela est moins important car si je peux comprendre comment faire la jointure, je peux simplement refaire l'analyse.

table sans données spatiales, avec champ supplémentaire

Il y a quelques solutions que j'ai trouvées à ce problème, mais elles n'ont pas fonctionné pour moi pour les raisons énumérées ci-dessous:

Solution 1: le blog de David Aalbers - Je suis trop novice pour comprendre comment modifier le nouveau script et comment l'importer dans ArcMap. J'ai essayé l'ancien script et il a juste généré une tonne de polygones vides intitulé test, test_1, test_1_1, test_1_1_1, etc.

Solution 2: jointure un-à-plusieurs - J'ai essayé d'utiliser l'outil Créer une table de requête (et je n'ai aucune connaissance de SQL, bien que j'aie utilisé le générateur d'expressions) et j'ai eu l'erreur 000383: problème avec une table, impossible de trouver l'espace de travail & Échec de l'exécution (MakeQueryTable). Tous mes fichiers se trouvent dans le même dossier, mais ils ne se trouvent pas dans une géodatabase.


1
Make Query Table ne fonctionnera qu'avec la base de données
FelixIP

1
Make Query Table nécessite toutes les données dans le même fgdb.
klewis

Réponses:


22

Pour multiplier les fonctionnalités, procédez comme suit (disponible pour ceux qui ont ArcGIS 10.1 ou supérieur).

  1. Placez les entités et la table dans la même géodatabase fichier (vous devez convertir les fichiers Shapefiles / Excel / DBF dans la géodatabase pour que cela fonctionne).
  2. Assurez-vous que vos polygones ont un champ ID unique qui sera conservé (vous pouvez créer un champ Long et y calculer l'ObjectID afin que la valeur ObjectID ne soit pas perdue).
  3. Effectuez une jointure standard de la table (attributs, pas de données spatiales) aux entités (données spatiales) sur le champ correspondant. Notez que la table attributaire des entités (données spatiales) aura le même nombre d'entités qu'auparavant, mais ne vous inquiétez pas, elles apparaissent toutes à l'étape suivante.
  4. Exportez les entités vers la même géodatabase qu'une nouvelle classe d'entités (cliquez avec le bouton droit sur la couche dans la table des matières et choisissez exporter). Notez que le nombre d'entités dans la table d'attributs des entités exportées a maintenant le bon nombre d'entités, le même que la table d'origine (avec attributs, pas de données spatiales) ou, dans le cas d'une jointure plusieurs à plusieurs, un ensemble complet des fonctionnalités pour toutes les combinaisons de fonctionnalités et les enregistrements associés.

Les entités se multiplieront dans une nouvelle classe d'entités où chaque entité sera présente (même si elle n'avait pas de correspondance dans le tableau) et là où il y avait une correspondance 1: M auparavant, les entités seront multipliées pour faire un 1: 1 faire correspondre chaque fonctionnalité à toutes ses entrées de table. Le champ ID unique que vous avez créé à l'étape 2 vous permettra de relier les polygones multipliés à l'ensemble de polygones unique d'origine. Avec la nouvelle classe d'entités d'entités multipliées, vous pouvez effectuer des sélections sur les champs de table, les résumés, les jointures spatiales, etc.

Si vous souhaitez générer une valeur d'identification unique qui représente chaque combinaison unique d'espèce et de maladie, vous pouvez utiliser la version 10.2 de l'outil décrit dans ce billet de blog . Le fait d'avoir ce type de clé vous permet de l'utiliser pour effectuer des jointures standard vers des tableaux récapitulatifs et des statistiques basées sur une relation multi-champs en remplacement de la création d'une relation multi-champs réelle à l'aide d'une configuration de création d'une table de requête.

Voici une bonne référence d'esri: https://support.esri.com/en/technical-article/000001228


Fonctionne parfaitement lors de l'exportation vers la géodatabase!
MooseGirl

1
J'ai modifié mon étape 4 pour indiquer que l'exportation doit se faire vers une nouvelle classe d'entités dans la même géodatabase que les données d'origine. Suivre cette procédure devrait toujours fonctionner, bien qu'il soit possible que certaines variations de l'emplacement de stockage des données source et de sortie soient également autorisées.
Richard Fairhurst

C'était clair auparavant (bien que les futurs désespérés apprécieront sûrement que cela soit expliqué), mais à l'origine je ne m'étais pas correctement connecté au dossier de la géodatabase (ou quelque chose) parce qu'il ne me permettait pas d'exporter vers la géodatabase. J'ai redémarré et cela a bien fonctionné.
MooseGirl

1
J'ai ajouté que les fonctionnalités jointes n'auront pas le bon nombre d'attributs et que les fonctionnalités exportées le seront. Cela m'a beaucoup frustré lorsque j'ai essayé cela, jusqu'à ce que je passe par toutes les étapes.
nittyjee

Il se lit comme s'il y avait un "pas" manquant dans le numéro 3, "... aura notle même nombre de fonctionnalités ..."
matt wilkie

-2

Requête SQL:

SELECT spp, disease, type
FROM table1, table2
WHERE table1.bimonial = table2.spp;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.