Estrarre il confine da livelli dettagliati in ArcGIS Desktop o QGIS?


10

È possibile restituire il perimetro (esterno) di uno strato poligonale?

Diciamo che hai la mappa degli Stati Uniti, per semplicità, suddivisa a livello di contea, è possibile restituire la mappa di confine di tutto il paese da quella mappa?


Quindi, nel caso esemplificativo degli Stati Uniti, intendi effettivamente ottenere il contorno degli stati, NON il riquadro di delimitazione, giusto? In tal caso, che ne dici di dissolvere il livello delle contee?
Chad Cooper,

@Chad Cooper - quando dissolvo il livello, ho ancora delle linee che appaiono per le contee e gli stati.
Dassouki,

Risposte:


6

Puoi semplicemente dissolvere il livello della contea (assicurati di avere solo le contee che vuoi dissolvere selezionate).


Sto ottenendo alcune linee interne che appaiono ancora in dissolve.
Dassouki,

3
Puoi buffer due volte per eliminare le linee interne? Fuori, per "mangiare" le linee, poi di nuovo dentro, per ripristinare le dimensioni originali.
mwalker,

per qualche motivo questo ha funzionato. So che è la "più hacker" di soluzioni, ma questa è stata l'unica soluzione che si è sbarazzata delle linee
dassouki,

1
+1 Questa in realtà è un'ottima soluzione. Funziona adattando piccole schegge e sovrapposizioni nei poligoni dei componenti (e supera anche molti bug intrinseci nel software).
whuber

1
Ho usato il consiglio di Mwalker per ripulirlo, poi spero che tu possa includerlo nella tua risposta.
Dassouki,

4

Puoi usare il modulo GRASS: v.dissolve devi solo importare i tuoi dati in GRASS. Ecco una schermata di trasferimento dei dati su Grass dall'interno di QGis.


3

Consentimi di collegare il mio progetto ... Boundary Generator ti darà i confini sia esterni che interni di ogni poligono (come funzionalità di linea).

I confini interni sono attribuiti con il FID per ciascuno dei due poligoni che condividono quel confine. I confini esterni dovrebbero avere un FID pari a zero per uno di questi due, quindi sono facili da selezionare dal risultato completo.

La cosa bella rispetto allo scioglimento è che ho aggiunto un paio di manopole sulla precisione in modo da poter gestire dati non del tutto perfetti. (Quanto distanti due bordi poligonali devono essere considerati un bordo condiviso? Quanta deviazione angolare è richiesta?)

È ancora in versione alpha ed è da un po 'che non mi occupo di un aggiornamento; Mi piacerebbe sapere come funziona per te!


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;
        }

    }

2

Ottieni linee quando dissolvi perché i confini non sono fluidi.

Indipendentemente dal prodotto software, procedere come segue:

Fare un'integrazione . testo alternativo

Quindi dissolvere . testo alternativo


L'ho provato diverse volte e non ha funzionato :(, continuo a perdere alcuni poligoni, ho usato una tolleranza molto piccola e anche una molto grande
dassouki,

1

Sembra che l' esempio Bounding Containers pubblicato su arcgis.com funzionerà per quello che vuoi.


Questa è una buona idea, ma è improbabile che questa soluzione funzioni in questa moda. Ha lo scopo di fornire ulteriori informazioni geometriche sulle caratteristiche trovando il membro più piccolo di una classe di forme che contiene le caratteristiche, come un poligono rettangolo, cerchio, ellisse o convesso. Il risultato è sempre uno di quelli che contengono forme. In generale, non coinciderà esattamente con la forma originale a meno che quel confine non abbia già la forma desiderata.
whuber

1

So che questa è una vecchia domanda, ma penso che la risposta che ho appena trovato sia stata introdotta dalle precedenti qui, quindi la condivido per le persone che la trovano in una ricerca.

QGIS (almeno dalla versione 2.14) ha un "Riempi fori" nella casella degli strumenti di elaborazione, in Geoalgoritmi QGIS> Strumenti geometria vettoriale. Trovo che dissolvendo le forme e quindi eseguendo Riempi buchi con il parametro dell'area Max impostato molto in alto risolva questo problema.


0

Potresti anche cercare quella che una volta era chiamata funzionalità DROPLINE.

Sebbene non sia sopravvissuto alla transizione da ArcInfo Workstation a ArcGIS Desktop, al momento esiste un'idea ArcGIS per ripristinarla:

Sarebbe bello avere l'opzione di eliminare le linee tra i poligoni che hanno gli stessi valori per un campo specificato. Questa funzionalità era disponibile in ArcPlot come comando DROPLINE ed era ampiamente usata come modo per evitare di creare un nuovo set di dati con il comando dissolve.


0

Puoi utilizzare la ST_UNIONfunzione in PostGIS da QGIS DB Manager per aggregare tutti i poligoni nel livello (o molti gruppi di poligoni in poligoni più grandi). Dalla documentazione:

La variante 2 è una funzione aggregata che accetta un insieme di geometrie e le unisce in una singola ST_Geometry risultando in nessuna regione intersecante

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.