Grenze aus detaillierten Ebenen in ArcGIS Desktop oder QGIS extrahieren?

10

Ist es möglich, den Grenzumfang (Außenumfang) einer Polygonebene zurückzugeben?

Angenommen, Sie haben die Karte der USA, die der Einfachheit halber auf Kreisebene aufgeschlüsselt ist. Ist es möglich, die Grenzkarte des gesamten Landes von dieser Karte zurückzugeben?

dassouki
quelle
Im Beispielfall der USA meinen Sie also tatsächlich den Umriss der Staaten, NICHT den Begrenzungsrahmen, oder? Wenn ja, wie wäre es mit einer Auflösung der Grafschaftsschicht?
Chad Cooper
@Chad Cooper - Wenn ich die Ebene auflöse, werden immer noch einige Zeilen für Landkreise und Bundesstaaten angezeigt.
Dassouki

Antworten:

6

Sie können einfach eine Auflösung auf der Kreisebene durchführen (stellen Sie sicher, dass nur die Landkreise ausgewählt sind, die Sie auflösen möchten).

Tac194
quelle
Ich bekomme einige interne Zeilen, die immer noch in Überblendung auftauchen.
Dassouki
3
Können Sie zweimal puffern, um die internen Leitungen zu entfernen? Raus, um die Linien zu "essen", dann wieder rein, um die ursprüngliche Größe wiederherzustellen.
Walkerer
Aus irgendeinem Grund hat das funktioniert. Ich weiß, es ist die "hackigste" Lösung, aber dies war die einzige Lösung, die die Zeilen
loswurde
1
+1 Dies ist tatsächlich eine großartige Lösung. Es berücksichtigt winzige Splitter und Überlappungen in den Komponentenpolygonen (und überwindet auch viele inhärente Fehler in der Software).
whuber
1
Ich habe den Rat von mwalker verwendet, um dann zu puffern. Ich hoffe, Sie können das in Ihre Antwort aufnehmen.
Dassouki
4

Sie können das GRASS-Modul verwenden: v.dissolve Sie müssen nur Ihre Daten in GRASS importieren. Hier ist ein Screenshot der Übertragung Ihrer Daten von QGis nach Grass.

Dimitris
quelle
3

Erlauben Sie mir, mein eigenes Projekt einzubinden ... Der Grenzgenerator gibt Ihnen sowohl externe als auch interne Grenzen für jedes Polygon (als Linien-Features).

Interne Grenzen werden mit der FID für jedes der beiden Polygone zugeordnet, die diese Grenze teilen. Außengrenzen sollten für eine dieser beiden eine FID von Null haben, damit sie leicht aus dem vollständigen Ergebnis ausgewählt werden können.

Das Schöne am Auflösen ist, dass ich ein paar Knöpfe für die Präzision hinzugefügt habe, damit nicht ganz perfekte Daten verarbeitet werden können. (Wie weit sollten zwei Polygonränder voneinander entfernt sein, um als gemeinsamer Rand betrachtet zu werden? Wie viel Winkelabweichung ist erforderlich?)

Es ist immer noch in Alpha und es ist schon eine Weile her, seit ich ein Update in Angriff genommen habe. Ich würde gerne hören, wie gut es bei Ihnen funktioniert!

Dan S.
quelle
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
quelle
2

Sie erhalten Linien, wenn Sie sich auflösen, weil die Grenzen nicht nahtlos sind.

Gehen Sie unabhängig vom Softwareprodukt wie folgt vor:

Sie ein integrieren . Alt-Text

Dann machen Sie eine Auflösung . Alt-Text

Simon
quelle
Ich habe es mehrmals versucht und es hat nicht funktioniert :(, ich verliere immer wieder einige Polygone, ich habe eine sehr kleine Toleranz verwendet und auch eine sehr große
dassouki
1

Es hört sich so an, als würde das auf arcgis.com veröffentlichte Bounding Containers-Beispiel für das funktionieren, was Sie wollen.

Derek Swingley
quelle
Dies ist ein guter Gedanke, aber es ist unwahrscheinlich, dass diese Lösung in dieser Situation funktioniert. Es ist beabsichtigt, zusätzliche geometrische Informationen zu Features bereitzustellen, indem das kleinste Element einer Formklasse gefunden wird, das die Features enthält, z. B. ein Rechteck, ein Kreis, eine Ellipse oder ein konvexes Polygon. Das Ergebnis ist immer eines von denen, die Formen enthalten. Im Allgemeinen stimmt es nicht genau mit der ursprünglichen Form überein, es sei denn, diese Grenze hat bereits die gewünschte Form.
whuber
1

Ich weiß, dass dies eine alte Frage ist, aber ich denke, die Antwort, die ich gerade gefunden habe, wurde seit den vorherigen hier eingeführt. Deshalb teile ich sie für Leute, die dies bei einer Suche finden.

QGIS (mindestens ab Version 2.14) verfügt über "Fülllöcher" in der Verarbeitungs-Toolbox unter QGIS-Geoalgorithmen> Vektorgeometrie-Tools. Ich finde, dass das Auflösen von Formen und das anschließende Ausführen von Fülllöchern mit dem sehr hohen Parametersatz Max. Bereich dieses Problem löst.

Eldan Goldenberg
quelle
0

Möglicherweise suchen Sie auch nach Funktionen, die früher als DROPLINE bezeichnet wurden.

Obwohl der Übergang von ArcInfo Workstation zu ArcGIS Desktop nicht überlebt hat, gibt es derzeit eine ArcGIS-Idee , um ihn wiederherzustellen:

Es wäre schön, die Option zu haben, die Linien zwischen Polygonen zu löschen, die für ein bestimmtes Feld dieselben Werte haben. Diese Funktionalität war früher in ArcPlot als DROPLINE-Befehl verfügbar und wurde häufig verwendet, um zu vermeiden, dass mit dem Befehl dissolve ein neues Dataset erstellt wird.

PolyGeo
quelle
0

Mit der ST_UNIONFunktion in PostGIS von QGIS DB Manager können Sie alle Polygone in der Ebene (oder viele Gruppen von Polygonen zu größeren Polygonen) zusammenfassen. Aus der Dokumentation:

Variante 2 ist eine Aggregatfunktion, die eine Reihe von Geometrien zu einer einzigen ST_Geometry zusammenfasst, sodass sich keine Bereiche überschneiden

bis
quelle