Створити зважені багатокутники Тіссена?


17

У мене є точковий профіль і я створюю полігони Тіссена (Вороного) програмно, використовуючи цей синтаксис сценаріїв:

CreateThiessenPolygons_analysis (in_features, out_feature_class, fields_to_copy) 

Однак кожна точка пов'язана з площею (тобто кращим розміром кожного багатокутника), і я бажаю, щоб полігони Тіссена зважилися на основі цього поля.

Це можливо і як?

Чи є відповідний код у VBA?

Відповіді:


15

Існує багато способів зважування відстаней для побудови багатокутників Тіссена. Основна ідея їх побудови заснована на порівнянні відстані між довільною точкою x та двома нерухомими точками p і q ; вам потрібно вирішити, чи х «ближче» до p, ніж до q чи ні. З цією метою - принаймні концептуально - ми вважаємо відстані dp = d ( x , p ) і dq = d ( x , q ). Зважування зазвичай відбувається двома способами: точкам можна надати додатні числові ваги wp і wq, а самі відстані можна перетворити.

Щоб мати сенс, перетворення (яке я напишу як f ) повинно зростати по мірі збільшення відстаней; тобто f (d ')> f (d) всякий раз, коли d'> d> = 0. Прикладами таких перетворень є f (d) = d + 1, f (d) = d ^ 2 (Закон Рейлі про гравітацію роздрібної торгівлі ), f (d) = 1 - 1 / d (якщо всі відстані менше 1), f (d) = log (d), f (d) = exp (d) -1.

Тоді ми б сказали, що x "ближче" до p, ніж до q , коли саме

f (d ( x , p )) / wp <f (d ( x , q )) / wq.

Зауважте поділ на ваги, а не на множення: це означає, що великі ваги мають тенденцію "тягнути" точки на більші відстані. Ви побачите це у наведеному нижче прикладі.

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

  1. Для кожної вхідної точки p обчисліть її евклідову сітку відстані [d (p)].

  2. Використовуйте алгебру карти для застосування f та ваг, тим самим повторно виражаючи кожну сітку відстані як

    [fp] = f ([d (p)]) / wp.

    Ось приклад з використанням f (d) = 100 + d ^ (3/2); шкала - 400 на 600.

    Фігура 1

    У міру збільшення f (d) значення стає темніше. Очевидно, що відстань у цьому прикладі є відносно центральної червоної точки; інші чотири точки отримують окремі розрахунки відстані (не показано). Площі точок пропорційні їх вазі, які дорівнюють 2, 10, 3, 4 та 5.

  3. Обчисліть локальний мінімум усіх цих сіток [fp]. Назвіть це [f]. Ось приклад.

    Малюнок 2

  4. Порівнюючи [f] з кожним [fp], кожній комірці сітки призначають ідентифікатор першого p, для якого [f]> = [fp]. (Це можна зробити за один крок, наприклад, з операцією з нижнього положення .)

    Малюнок 3

    (Я сумніваюся, що існує алгоритм де-небудь, який буде обчислювати рішення у векторному форматі для цієї функції зважування f.)

Очевидно, що якщо у вас є більше ніж кілька точок p, ви будете писати це сценарії, і якщо їх кількість перебігає тисячі, ви, ймовірно, відмовитеся від спроби обчислювально нездійсненної (хоча є способи прискорити обчислення шляхом додавання його).

Інший приклад, який показує полігони Тіссена на еліпсоїді, з’являється на веб- сайті /gis//a/17377/ .


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

Вюбер: Дуже складний процес! Однак, щоб зосередитись у моїй програмі; Кожна точка мого вхідного файлу являє собою приблизний центоїд земельної ділянки. Я створюю за допомогою рядка сценарію, зазначеного вище векторного файла полігонів Тієссена. Кожному багатокутнику присвоюється простір, тобто розмір, заснований на принципі тисових багатокутників, рівних відстані меж. і це є фактором, який я хочу врахувати, тому що багатокутники будуть пропорційно до цього фактору. Будь-яка ідея, будь ласка?
Деметрис

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

Вюбер: Кожен з моїх точок, що вводяться в процесі багатокутника Тіссена, є приблизним центроїдом нового набору земельних ділянок. Таким чином, я створюю полігони Тиссена на основі цих точок, що представляють форму земельних ділянок (одна точка-одна земельна ділянка). Я можу створити безліч наборів форм випадкових земельних ділянок, переміщуючи ці точки, щоб подати свій генетичний алгоритм. Проблема полягає в тому, що ці сформовані форми посилок (тобто полігони Тієссена) повинні мати заздалегідь задану область, і мені цікаво, чи можна врахувати це при використанні операції полігонів Тіссена. Я сподіваюся, що це має сенс.
Деметрис

Що намагається зробити ваш генетичний алгоритм? Він по- , як і раніше звучить як ви не повинні зваженими Тіссен багатокутників: Я вважаю , що не існує НЕ можливо зважування , що забезпечить багатокутники досягають вказаним області або навіть вказаним відносні області.
whuber

10

Те, що ви хочете, - це зважена діаграма Вороного: http://en.wikipedia.org/wiki/Weighted_Voronoi_diagram також відома як кругла тесселяція Діріхле при виконанні мультиплікативних ваг у 2d площині. Хтось, здається, створив розширення arcgis 9 для їх створення: http://arcscripts.esri.com/details.asp?dbid=15481 З посібником користувача, доступним тут http://geography.unt.edu/~pdong/software .htm та документ, опублікований у Dong, P., 2008. Створення та оновлення мультиплікативно зважених діаграм Вороного для точкових, лінійних та багатокутних ознак у ГІС. Комп'ютери та геології, Том 34, Випуск 4, Сторінки 411-421.

Для цього існує остання стаття про векторний алгоритм (я припускаю, що алгоритм P Dong має растровий характер) для цього. http://www.sciencedirect.com/science/article/pii/S0098300411003037 Анотація говорить, що c # код включений.


1
Блорд-Кастільо: Велике спасибі за всю цю інформацію. Це дуже корисно, і я прийму це як вичерпну відповідь. Однак моя нова проблема полягає в тому, що я хочу запустити цей інструмент у своєму коді кілька разів, надаючи введення, наприклад, наприклад, вищевказаний рядок сценарію. Це можливо?
Деметрис
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.