Un moyen simple de détecter / sélectionner les polygones de bordure d'un fichier de formes

8

Je recherche un moyen simple de détecter / sélectionner les polygones de bordure d'un fichier de formes. Les polygones de bordure sont ici des polygones qui ne sont pas complètement entourés par d'autres polygones, c'est-à-dire des polygones situés à la périphérie du fichier de formes (l'étendue du fichier de formes est entièrement couverte par des polygones). Dans l'exemple ci-dessous, les polygones souhaités sont ombrés:

polygones de bordure

Les solutions utilisant Arcgis, QGIS, R, Python sont les bienvenues.

DJack
la source
1
La bordure est-elle toujours une belle forme régulière comme ce rectangle? BTW: Cette dernière phrase semble un peu exigeante.
BradHards
Nan. La frontière est irrégulière. Un extrait par masque ou smth comme ça ne serait pas idéal, je pense. NB: dernière phrase modifiée, vous aviez raison.
DJack

Réponses:

7

créez une nouvelle couche de polygones, dessinez un seul polygone qui couvre tous vos polygones actuels, puis coupez le polygone nouvellement dessiné en fonction de tous vos polygones existants, puis sélectionnez tous les polygones de votre ensemble actuel qui partagent un segment de ligne avec le polygone nouvellement dessiné en utilisant select par emplacement et vous avez terminé


--- Version éditée beaucoup plus efficace, basée sur un commentaire ----

Dissolvez tous les polygones en un, puis sélectionnez tous les polygones de votre ensemble actuel qui partagent un segment de ligne avec le polygone nouvellement dissous en utilisant la sélection par emplacement et vous avez terminé

Hedinn
la source
2
D'accord. Mais au lieu de dessiner le polygone, je vais dissoudre tous mes polygones pour n'en obtenir qu'un. Beaucoup plus efficace que d'en dessiner un. THX.
DJack
1
Oui, vous avez raison, c'est beaucoup plus efficace :)
Hedinn
2

Avec R:

ShapeFile.Dissolved<-rgeos::gUnionCascaded(ShapeFile)
x<-rgeos::gRelate(ShapeFile, ShapeFile.Dissolved, byid= TRUE)

Je reçois 3 valises DE-9IM :

table(x)
2FF10F212 2FF11F212 2FF1FF212 
       63      2470    174495  

Le code de chaîne DE-9IM résultant peut être interprété comme suit:

1) 2FF1FF212: représentent les polygones du premier fichier de formes qui ne coupent pas la frontière du polygone du deuxième fichier de formes

2) 2FF11F212: représentent les polygones du premier fichier de formes qui coupent la frontière du polygone du deuxième fichier de formes avec une ligne

3) 2FF10F212: représentent les polygones du premier fichier de formes qui coupent la frontière du polygone du deuxième fichier de formes avec un point

Les deux derniers cas sont mes polygones de frontière que je cherchais. J'ai obtenu leur carte d'identité avec:

poly.border<-which(x %in% c("2FF10F212","2FF11F212"))

Avec Arcmap:

1) Dissoudre (gestion des données) sans sélectionner de "Dissolve_Field"

2) Sélectionnez par emplacement. Sélectionnez les entités dans le "fichier de formes d'origine", Calque source: "fichier de formes dissous", Méthode de sélection spatiale pour les entités de calque cible: touchez la limite de l'entité de calque source.

3) Commencez l'édition et supprimez les fonctionnalités sélectionnées

DJack
la source