Витягнути межу з детальних шарів у ArcGIS Desktop або QGIS?


10

Чи можливо повернути граничний (зовнішній) периметр багатокутного шару?

Скажімо, у вас є карта США для простоти, розбита до рівня округу, чи можна повернути прикордонну карту всієї країни з цієї карти?


Так, у прикладі США, ви маєте на увазі фактично отримати контури штатів, а не обмежувального поля, правда? Якщо так, то як щодо розчинення шару графств?
Чад Купер

@Chad Cooper - коли я розчиняю шар, я все одно отримую рядки, що відображаються для повітів та штатів.
dassouki

Відповіді:


6

Ви можете просто зробити розчинення на повітовому шарі (не забудьте обрати лише ті округи, які ви хочете розчинити).


Я отримую деякі внутрішні рядки, які все ще з'являються в розпусті.
dassouki

3
Чи можете ви двічі буферувати, щоб усунути внутрішні лінії? Назовні, щоб "з'їсти" рядки, потім повернутися назад, щоб відновити початковий розмір.
mwalker

чомусь це спрацювало. Я знаю, що це "найшвидше" рішень, але це було єдине рішення, яке позбулося ліній
dassouki

1
+1 Це насправді чудове рішення. Це працює, розміщуючи крихітні перемички та перекриття в компонентних полігонах (а також долає багато притаманних помилок у програмному забезпеченні).
whuber

1
Я використовував поради mwalker, щоб захистити їх потім. Сподіваюся, ви можете включити це у свою відповідь.
dassouki

4

Ви можете використовувати модуль GRASS: v.dissolve Вам потрібно лише імпортувати свої дані в GRASS. Ось перегляд екрана передачі ваших даних до Grass зсередини QGis.


3

Дозвольте мені підключити власний проект ... Генератор границь надасть вам зовнішні та внутрішні межі кожного полігону (як функції лінії).

Внутрішні межі приписуються FID для кожного з двох полігонів, які поділяють цю межу. Зовнішні межі повинні мати нуль FID для одного з цих двох, тому їх легко вибрати з повного результату.

Приємно в тому, що це робиться - це те, що я додав пару ручок над точністю, щоб він міг працювати з не зовсім ідеальними даними. (Наскільки відстань між двома полігонами слід вважати спільною межею? На скільки потрібно відхилення кута?)

Це все ще в альфа, і минув певний час, коли я вирішив оновлення; Я хотів би почути, як добре це працює для вас!


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

Ваші лінії отримання, коли ви робите розпуск, тому що межі не є чіткими.

Незалежно від програмного продукту, виконайте такі дії:

Зробіть інтеграцію . alt текст

Потім зробіть розпуску . alt текст


Я спробував це кілька разів, і це не вийшло :(, я продовжую втрачати деякі багатокутники, я також використовував дуже маленьку толерантність і дуже великий
dassouki

1

Схоже, зразок Обмежувальних контейнерів, розміщений на arcgis.com, буде працювати для того, що ви хочете.


Це гарна думка, але це рішення навряд чи вдасться виконати в цій фазії. Він призначений для надання додаткової геометричної інформації про особливості шляхом пошуку найменшого члена класу фігур, який містить такі ознаки, як прямокутник, коло, еліпс або опуклий багатокутник. Результат завжди є одним із тих, що містять форми. Загалом, це точно не збігатиметься з початковою формою, якщо ця межа вже не має бажаної форми.
whuber

1

Я знаю, що це давнє запитання, але я думаю, що відповідь, яку я щойно знайшов, була введена з попередніх, тому я ділюсь нею з людьми, які знаходять це в пошуку.

QGIS (як мінімум, версія 2.14) має "Заповнення отворів" в панелі інструментів "Обробка" під геоалгоритмами QGIS> Інструменти векторіальної геометрії. Я вважаю, що розчинення фігур, а потім запуск Заповнення отворів з набором параметрів області Макс дуже високо вирішує цю проблему.


0

Ви також можете шукати те, що раніше називалося функцією DROPLINE.

Хоча він не пережив перехід робочої станції ArcInfo на ArcGIS Desktop, в даний час існує ідея ArcGIS для відновлення:

Було б непогано мати можливість пропускати лінії між багатокутниками, які мають однакові значення для заданого поля. Цей функціонал був доступний в ArcPlot як команда DROPLINE і широко використовувався як спосіб уникнути створення нового набору даних за допомогою команди розчинення.


0

Ви можете використовувати ST_UNIONфункцію PostGIS від QGIS DB Manager для об'єднання всіх полігонів у шарі (або багатьох груп багатокутників у більші багатокутники). З документації:

Варіант 2 - це сукупна функція, яка бере набір геометрій і об'єднує їх в єдину ST_Geometry, в результаті чого не перетинаються регіони

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.