Чи можливо повернути граничний (зовнішній) периметр багатокутного шару?
Скажімо, у вас є карта США для простоти, розбита до рівня округу, чи можна повернути прикордонну карту всієї країни з цієї карти?
Чи можливо повернути граничний (зовнішній) периметр багатокутного шару?
Скажімо, у вас є карта США для простоти, розбита до рівня округу, чи можна повернути прикордонну карту всієї країни з цієї карти?
Відповіді:
Ви можете просто зробити розчинення на повітовому шарі (не забудьте обрати лише ті округи, які ви хочете розчинити).
Дозвольте мені підключити власний проект ... Генератор границь надасть вам зовнішні та внутрішні межі кожного полігону (як функції лінії).
Внутрішні межі приписуються FID для кожного з двох полігонів, які поділяють цю межу. Зовнішні межі повинні мати нуль FID для одного з цих двох, тому їх легко вибрати з повного результату.
Приємно в тому, що це робиться - це те, що я додав пару ручок над точністю, щоб він міг працювати з не зовсім ідеальними даними. (Наскільки відстань між двома полігонами слід вважати спільною межею? На скільки потрібно відхилення кута?)
Це все ще в альфа, і минув певний час, коли я вирішив оновлення; Я хотів би почути, як добре це працює для вас!
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;
}
}
Ваші лінії отримання, коли ви робите розпуск, тому що межі не є чіткими.
Незалежно від програмного продукту, виконайте такі дії:
Зробіть інтеграцію .
Потім зробіть розпуску .
Схоже, зразок Обмежувальних контейнерів, розміщений на arcgis.com, буде працювати для того, що ви хочете.
Я знаю, що це давнє запитання, але я думаю, що відповідь, яку я щойно знайшов, була введена з попередніх, тому я ділюсь нею з людьми, які знаходять це в пошуку.
QGIS (як мінімум, версія 2.14) має "Заповнення отворів" в панелі інструментів "Обробка" під геоалгоритмами QGIS> Інструменти векторіальної геометрії. Я вважаю, що розчинення фігур, а потім запуск Заповнення отворів з набором параметрів області Макс дуже високо вирішує цю проблему.
Ви також можете шукати те, що раніше називалося функцією DROPLINE.
Хоча він не пережив перехід робочої станції ArcInfo на ArcGIS Desktop, в даний час існує ідея ArcGIS для відновлення:
Було б непогано мати можливість пропускати лінії між багатокутниками, які мають однакові значення для заданого поля. Цей функціонал був доступний в ArcPlot як команда DROPLINE і широко використовувався як спосіб уникнути створення нового набору даних за допомогою команди розчинення.
Ви можете використовувати ST_UNION
функцію PostGIS від QGIS DB Manager для об'єднання всіх полігонів у шарі (або багатьох груп багатокутників у більші багатокутники). З документації:
Варіант 2 - це сукупна функція, яка бере набір геометрій і об'єднує їх в єдину ST_Geometry, в результаті чого не перетинаються регіони