Extraire les limites des couches détaillées dans ArcGIS Desktop ou QGIS?

10

Est-il possible de renvoyer le périmètre (extérieur) d'une couche de polygones?

Disons que vous avez la carte des États-Unis, pour plus de simplicité, décomposée au niveau du comté, est-il possible de renvoyer la carte des frontières de tout le pays à partir de cette carte?

dassouki
la source
Donc, dans le cas de l'exemple des États-Unis, vous voulez dire obtenir le contour des États, PAS le cadre de délimitation, non? Si oui, que diriez-vous d'une dissolution de la couche des comtés?
Chad Cooper
@Chad Cooper - quand je dissous la couche, je reçois toujours des lignes pour les comtés et les états.
dassouki

Réponses:

6

Vous pouvez simplement faire une dissolution sur la couche du comté (assurez-vous que seuls les comtés que vous souhaitez dissoudre sont sélectionnés).

Tac194
la source
Je reçois des lignes internes qui s'affichent toujours en fondu.
dassouki
3
Pouvez-vous tamponner deux fois pour éliminer les lignes internes? Sortir, "manger" les lignes, puis rentrer, pour restaurer la taille d'origine.
mwalker
pour une raison quelconque, cela a fonctionné. Je sais que c'est la plus "hacki" des solutions, mais c'était la seule solution qui s'est débarrassée des lignes
dassouki
1
+1 C'est en fait une excellente solution. Il fonctionne en acceptant de minuscules éclats et chevauchements dans les polygones des composants (et surmonte également de nombreux bogues inhérents au logiciel).
whuber
1
J'ai utilisé les conseils de mwalker pour me protéger. J'espère que vous pourrez inclure cela dans votre réponse.
dassouki
4

Vous pouvez utiliser le module GRASS: il v.dissolve vous suffit d'importer vos données dans GRASS. Voici une capture d'écran du transfert de vos données vers Grass depuis QGis.

dimitris
la source
3

Permettez-moi de brancher mon propre projet ... Le générateur de limites vous donnera les limites externes et internes de chaque polygone (en tant qu'entités linéaires).

Les limites internes sont attribuées avec le FID pour chacun des deux polygones qui partagent cette frontière. Les limites externes doivent avoir un FID de zéro pour l'un de ces deux, afin qu'elles soient faciles à sélectionner parmi le résultat complet.

La bonne chose à ce sujet par rapport à la dissolution est que j'ai ajouté quelques boutons sur la précision afin qu'il puisse traiter des données pas tout à fait parfaites. (À quelle distance deux frontières de polygone doivent-elles être considérées comme une frontière partagée? Quelle est la déviation angulaire requise?)

Il est toujours en alpha et cela fait un moment que je n'ai pas entrepris de mise à jour; J'aimerais savoir à quel point cela fonctionne pour vous!

Dan S.
la source
2
 public static IPolygon getPolygonFromLayer(ILayer layer)
{
            IFeatureLayer FLayer = layer as IFeatureLayer;
            IFeatureClass FClass = FLayer.FeatureClass;
            return polygonMerge(FClass);
}

   private static IPolygon polygonMerge(IFeatureClass featureClass)
        {
            if (featureClass == null) return null;
            IGeoDataset geoDataset = featureClass as IGeoDataset;

            //You can use a spatial filter to create a subset of features to union together. 
            //To do that, uncomment the next line, and set the properties of the spatial filter here.
            //Also, change the first parameter in the IFeatureCursor.Seach method.
            //ISpatialFilter queryFilter = new SpatialFilterClass();

            IGeometry geometryBag = new GeometryBagClass();

            //Define the spatial reference of the bag before adding geometries to it.
            geometryBag.SpatialReference = geoDataset.SpatialReference;

            //Use a nonrecycling cursor so each returned geometry is a separate object. 
            IFeatureCursor featureCursor = featureClass.Search(null, false);

            IGeometryCollection geometryCollection = geometryBag as IGeometryCollection;
            IFeature currentFeature = featureCursor.NextFeature();

            while (currentFeature != null)
            {
                //Add a reference to this feature's geometry to the bag.
                //Since you don't specify the before or after geometry (missing),
                //the currentFeature.Shape IGeometry is added to the end of the geometryCollection.
                object missing = Type.Missing;
                geometryCollection.AddGeometry(currentFeature.Shape, ref missing, ref missing);
                currentFeature = featureCursor.NextFeature();
            }

            // Create the polygon that will be the union of the features returned from the search cursor.
            // The spatial reference of this feature does not need to be set ahead of time. The 
            // ConstructUnion method defines the constructed polygon's spatial reference to be the 
            // same as the input geometry bag.
            ITopologicalOperator unionedPolygon = new PolygonClass();
            unionedPolygon.ConstructUnion(geometryBag as IEnumGeometry);

            return unionedPolygon as IPolygon;
        }

    }
patrick
la source
2

Vous obtenez des lignes lorsque vous effectuez une dissolution car les limites ne sont pas transparentes.

Quel que soit le produit logiciel, procédez comme suit:

Faites une intégration . texte alternatif

Faites ensuite une dissolution . texte alternatif

Simon
la source
J'ai essayé cela plusieurs fois, et cela n'a pas fonctionné :(, je continue de perdre des polygones, j'ai utilisé une très petite tolérance et une très grande également
dassouki
1

Il semble que l' échantillon Bounding Containers publié sur arcgis.com fonctionnera pour ce que vous voulez.

Derek Swingley
la source
C'est une bonne idée, mais il est peu probable que cette solution fonctionne dans cette mode. Il est destiné à fournir des informations géométriques supplémentaires sur les entités en recherchant le plus petit membre d'une classe de formes qui contient les entités, comme un rectangle, un cercle, une ellipse ou un polygone convexe. Le résultat est toujours l'un de ceux contenant des formes. En général, elle ne coïncidera pas exactement avec la forme d'origine, sauf si cette frontière a déjà la forme souhaitée.
whuber
1

Je sais que c'est une vieille question, mais je pense que la réponse que je viens de trouver a été introduite depuis les précédentes ici, donc je la partage pour les personnes qui trouvent cela dans une recherche.

QGIS (à partir de la version 2.14 au moins), a un "Fill Holes" dans la boîte à outils Processing, sous QGIS geoalgorithms> Vectory geometry tools. Je trouve que la dissolution des formes et l'exécution de l'option Remplir les trous avec le paramètre de zone Max très élevé résout ce problème.

Eldan Goldenberg
la source
0

Vous cherchez peut-être aussi ce que l'on appelait auparavant la fonctionnalité DROPLINE.

Bien qu'il n'ait pas survécu à la transition d'ArcInfo Workstation à ArcGIS Desktop, il existe actuellement une idée ArcGIS pour le restaurer:

Ce serait bien d'avoir la possibilité de supprimer les lignes entre les polygones qui ont les mêmes valeurs pour un champ spécifié. Cette fonctionnalité était auparavant disponible dans ArcPlot en tant que commande DROPLINE et a été largement utilisée pour éviter de créer un nouvel ensemble de données avec la commande fondre.

PolyGeo
la source
0

Vous pouvez utiliser la ST_UNIONfonction dans PostGIS à partir de QGIS DB Manager pour agréger tous les polygones de la couche (ou de nombreux groupes de polygones dans des polygones plus grands). De la documentation:

La variante 2 est une fonction d'agrégation qui prend un ensemble de géométries et les rassemble en une seule ST_Geometry, ce qui ne crée aucune zone d'intersection

jusqu'à
la source