Czy wyodrębnić granicę ze szczegółowych warstw w ArcGIS Desktop lub QGIS?

10

Czy możliwe jest zwrócenie granicy (zewnętrznej) obwodu warstwy wielokąta?

Załóżmy, że masz mapę USA, dla uproszczenia, w podziale na poziom powiatu, czy możliwe jest przywrócenie mapy granicznej całego kraju z tej mapy?

dassouki
źródło
Tak więc w przykładowym przypadku USA masz na myśli zarys stanów, a NIE ramkę graniczną, prawda? Jeśli tak, to co powiesz na rozpuszczenie warstwy powiatów?
Chad Cooper
@Chad Cooper - kiedy rozpuszczam warstwę, nadal pojawia się kilka linii dla powiatów i stanów.
dassouki,

Odpowiedzi:

6

Możesz po prostu wykonać rozłożenie na poziomie powiatu (pamiętaj, aby wybrać tylko powiaty, które chcesz rozwiązać).

Tac194
źródło
Wciąż pojawiają się pewne linie wewnętrzne w rozwiązaniu.
dassouki,
3
Czy można buforować dwukrotnie, aby wyeliminować linie wewnętrzne? Na zewnątrz, aby „zjeść” linie, a następnie z powrotem, aby przywrócić pierwotny rozmiar.
mwalker
z jakiegoś powodu to zadziałało. Wiem, że to „hackiest” rozwiązań, ale to było jedyne rozwiązanie, które
pozbyło się
1
+1 To jest naprawdę świetne rozwiązanie. Działa, dostosowując małe fragmenty i zachodzące na siebie wielokąty składowe (a także eliminuje wiele nieodłącznych błędów w oprogramowaniu).
whuber
1
Skorzystałem z rad mwalkera, aby następnie buforować. Mam nadzieję, że umieścisz to w swojej odpowiedzi.
dassouki
4

Możesz użyć modułu GRASS: v.dissolve wystarczy zaimportować dane do GRASS. Oto zrzut ekranu przesyłania danych do Grass z QGis.

dimitris
źródło
3

Pozwól mi podłączyć mój własny projekt ... Generator granic da ci zarówno zewnętrzne, jak i wewnętrzne granice każdego wielokąta (jako cechy linii).

Granice wewnętrzne są przypisywane do FID dla każdego z dwóch wielokątów, które dzielą tę granicę. Granice zewnętrzne powinny mieć FID równy zero dla jednego z tych dwóch, więc można je łatwo wybrać z pełnego wyniku.

Zaletą tego rozwiązania jest to, że dodałem kilka pokręteł w porównaniu z precyzją, aby poradzić sobie z niezupełnie doskonałymi danymi. (Jak daleko od siebie należy uznać dwie granice wielokąta za granicę wspólną? Ile wymagane jest odchylenie kąta?)

Nadal jest w fazie alfa i minęło trochę czasu, odkąd zająłem się aktualizacją; Chciałbym usłyszeć, jak dobrze to dla Ciebie działa!

Dan S.
źródło
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
źródło
2

Twoje linie pobierania podczas rozpuszczania, ponieważ granice nie są płynne.

Niezależnie od oprogramowania wykonaj następujące czynności:

Zrobić zintegrować . alternatywny tekst

Następnie wykonaj rozpuszczenie . alternatywny tekst

Szymon
źródło
Próbowałem tego kilka razy, ale to nie zadziałało :(,
tracę
1

Wygląda na to, że próbka Bounding Containers opublikowana na arcgis.com będzie działać dla tego, czego chcesz.

Derek Swingley
źródło
To dobra myśl, ale jest mało prawdopodobne, aby to rozwiązanie zadziałało w tej fascynacji. Ma on na celu dostarczenie dodatkowych informacji geometrycznych o elementach poprzez znalezienie najmniejszego elementu klasy kształtów, która zawiera takie elementy, jak prostokąt, okrąg, elipsa lub wypukły wielokąt. Rezultatem jest zawsze jeden z tych zawierających kształty. Zasadniczo nie będzie on dokładnie pokrywał się z pierwotnym kształtem, chyba że granica ta ma już pożądany kształt.
whuber
1

Wiem, że to stare pytanie, ale myślę, że odpowiedź, którą właśnie znalazłem, została wprowadzona od poprzednich tutaj, więc dzielę się nią z osobami, które znajdą to podczas wyszukiwania.

QGIS (przynajmniej od wersji 2.14) ma „Wypełnij dziury” w przyborniku Przetwarzanie, w obszarze Geo-algorytmy QGIS> Narzędzia geometrii wektorowej. Uważam, że rozpuszczenie kształtów, a następnie uruchomienie wypełnienia otworów z ustawionym bardzo wysokim parametrem obszaru Max rozwiązuje ten problem.

Eldan Goldenberg
źródło
0

Być może szukasz czegoś, co nazywało się DROPLINE.

Chociaż nie przetrwał przejścia ArcInfo Workstation na ArcGIS Desktop, obecnie istnieje pomysł ArcGIS, aby go przywrócić:

Byłoby miło mieć opcję upuszczenia linii między wielokątami, które mają takie same wartości dla określonego pola. Ta funkcja była dostępna w ArcPlot jako polecenie DROPLINE i była szeroko stosowana jako sposób na uniknięcie tworzenia nowego zestawu danych za pomocą polecenia rozpuszczania.

PolyGeo
źródło
0

Możesz użyć ST_UNIONfunkcji w PostGIS z QGIS DB Manager do agregacji wszystkich wielokątów w warstwie (lub wielu grup wielokątów w większe wielokąty). Z dokumentacji:

Wariant 2 to funkcja agregująca, która pobiera zestaw geometrii i łączy je w jedną geometrię ST_, w wyniku czego nie ma przecinających się regionów

do
źródło