È 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?
È 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?
Risposte:
Puoi semplicemente dissolvere il livello della contea (assicurati di avere solo le contee che vuoi dissolvere selezionate).
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!
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;
}
}
Ottieni linee quando dissolvi perché i confini non sono fluidi.
Indipendentemente dal prodotto software, procedere come segue:
Fare un'integrazione .
Quindi dissolvere .
Sembra che l' esempio Bounding Containers pubblicato su arcgis.com funzionerà per quello che vuoi.
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.
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.
Puoi utilizzare la ST_UNION
funzione 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