Vous effectuez une sélection «principalement dans» à l'aide d'ArcMap?

8

Je cherche un moyen de déterminer si une polyligne est "principalement dans" un polygone. Puisque la plupart du temps à l'intérieur est arbitraire, j'aurais besoin de pouvoir entrer un pourcentage lors de son exécution.

Je pensais qu'il y avait peut-être une option dans ArcMap en utilisant Sélectionner par emplacement, mais il ne semble pas y en avoir. Il existe des méthodes similaires, telles que «complètement à l'intérieur», mais je ne vois pas comment utiliser l'une d'entre elles pour réaliser ce que je recherche.

Cette fonctionnalité ou une méthode existe-t-elle pour y parvenir?

amasephy
la source
définir «principalement à l'intérieur» ... 75% à l'intérieur?
DPSSpatial
L'option est un centroïde dans l'option, donc c'est généralement la plupart du temps dans
HeikkiVesanto
@mapBaker Bon point sur le pourcentage. Peut-être que si vous utilisez ArcPy, cela pourrait être une variable qui pourrait être ajustée pour produire le résultat souhaité.
amasephy
1
@Vesanto Le centroïde ne fonctionnerait pas, si la polyligne coupait le coin d'un polygone, le centroïde pourrait être à l'intérieur du polygone mais une partie importante de celui-ci pourrait ne pas l'être.
amasephy
2
Je ferais une intersection entre le polygone et la ligne FC puis une statistique pour déterminer le% de chaque ligne dans un certain polygone (ou n'importe quel polygone). De là, je ferais ma sélection.
dklassen

Réponses:

8

il vous suffirait alors de faire une jointure table à table sur les deux fichiers de ligne (d'origine et de sortie de l'outil GP), puis de calculer la différence en pourcentage entre les deux champs Shape.Len (si un segment de ligne dans le fichier d'origine mesure 100 pieds de long) , et ce même segment de ligne, coupé au polygone, mesure 75 pieds de long, alors 75% de cette ligne se trouverait dans le polygone). Ensuite, vous pouvez simplement faire une sélection par attribut en fonction de ce pourcentage.

Encore une fois, je sais que cela est plutôt impliqué, cela crée un ensemble de données intermédiaire, et il existe probablement un moyen plus facile de le faire que je ne connais pas; mais, si vous écrivez un modèle ou un script pour le faire, et supprimez la ligne de sortie FC lorsque vous en avez terminé, cela ne devrait pas sembler si difficile à l'utilisateur final ... même si c'est un peu pénible à construire initialement.

Juste quelques réflexions, et faites-moi savoir si cela n'a pas de sens et je vais essayer de mieux vous expliquer.

John
la source
+1 Ces idées me semblent plutôt bonnes, car elles font bon usage des capacités d'ArcGIS et, quelle que soit la manière dont elles sont effectuées, il n'y a vraiment aucun moyen d'éviter une certaine forme d'opération de superposition polygone contre polyligne. (BTW, je pense que vous avez été victime d'un
vote négatif en
@John, c'est ce que je pensais aussi ... MAIS - pour faire la jointure, les lignes d'entrée auraient besoin d'un champ UNIQUEID (pas le champ ArcGIS OBJECTID), sur lequel vous pourriez faire la jointure ...
DPSSpatial
1
@mapBaker Merci, c'est un bon point (j'avais oublié si le clip préservait l'OID d'entrée dans la sortie comme le font certains outils). Vous pouvez calculer l'OID vers un autre champ avant d'exécuter le clip pour vous donner un UniqueID s'il n'est pas déjà disponible.
John
@John ohhhh K ...
DPSSpatial
Cette solution fonctionnerait pour moi, mais je pense que l'utilisation d'Intersect par dklassen au lieu de Clip rend cela plus simple. J'ai fini par utiliser une combinaison des réponses que j'ai reçues. Je ne sais pas qui devrait obtenir le mérite d'avoir répondu à la question.
amasephy
3

Sur la base des réponses que j'ai reçues ici, j'ai utilisé une combinaison d'idées fournies.

Tout d'abord, j'ai ajouté un champ Longueur et pourcentage à mon jeu de données d'origine. J'ai copié les valeurs Shape.Length dans le champ Longueur.

Deuxièmement, au lieu d'utiliser Clip, ce qui représente beaucoup plus de travail dans ce cas, j'ai utilisé l'outil Intersect. Cela "coupe" les polylignes qui coupent les polygones et ajoute des attributs potentiellement précieux. Malgré un champ d'identification vraiment unique, je ne pense pas que ce soit vraiment nécessaire lors de l'utilisation d'un champ de longueur statique.

Enfin, je calcule simplement le pourcentage de la différence entre le nouveau champ Shape.Length et le champ Longueur statique du champ Pourcentage. Toutes les polylignes qui coupent la limite du polygone auront un pourcentage inférieur à 100.

amasephy
la source
2
  1. Fractionner la polyligne à chaque sommet,
  2. pour chaque appel de segment complètement à l'intérieur des points d'extrémité,
  3. tout segment qui est complètement à l'intérieur a 100% de sa longueur dans le polygone (en supposant qu'il n'y ait pas de polygones rentrants) et sa longueur peut être ajoutée à un total,
  4. toutes les lignes partielles peuvent être divisées en 10 segments par exemple et le même calcul peut être appliqué.
  5. Comparez le total avec la longueur calculée pour obtenir une résolution de 10% (si vous avez besoin de résultats plus précis, vous pouvez sous-diviser plus fin sur les lignes partielles).
  6. Vous pouvez même conserver un total des longueurs des lignes totalement extérieures et ne faire le calcul des lignes partielles que si vous n'avez pas répondu au-delà de votre seuil.
Steve Barnes
la source