Новачок у ArcGIS і хоче обчислити відстань між двома точками "як риба плаває"


9

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

Розрахунок відстані DefenseService виглядає прохідним, але, здається, він знаходиться в прямій лінії, оскільки він не приймає жодного растра в якості вхідного даних. Євклідового, здається, майже немає, але я не можу знайти нічого прямого вперед.

Я використовую ArcGIS Explorer 2500, ArcGIS для Server 10.1 SP1 Enterprise, і ми пишемо наші послуги та інструменти в C #.

У мене є завантаження гідрографії, створення IPoints, але з втратою щодо того, що робити далі!

Будь-яка допомога вдячна, будь ласка.


1
Тут немає "прийнятої відповіді", але я думаю, що це дуже схоже питання: gis.stackexchange.com/questions/33799/…
Mapperz

Мій рівень хвилювання почав зростати негайно, поки він не сказав, що він не програміст. Це неможливо зробити за допомогою інструментів. У мене є власне вікно інструментів із вибраним місцеположенням та списком цілей. Мені потрібно викликати метод на сервері і заповнити список відстанями до кожної цілі.
SASS_Shooter

Це ваші лінії чи полігони гідрографії?
Conor

Це багатокутники, які ми перетворюємо в растр.
SASS_Shooter

Ваш приклад використання трохи заплутаний. Ви намагаєтесь знайти найменшу відстань від двох точок по краю озера? Або ваші станції відповідають річковій станції (яка знаходиться на дні озера)?
DPierce

Відповіді:


4

Використовуйте інструменти " Відстань витрат" та "Шлях шляху витрат" з розширення просторового аналітика.

Ви можете створити растр із своїх гідрографічних полігонів. Потім переконайтеся, що растрові клітини, які представляють воду, отримують низьке значення (наприклад, 1), а інші растрові клітини отримують високе значення (наприклад, 1000). Потім ви можете використовувати цей растр як растр відстані витрат у інструменті "Шлях шляху" .


Так - я виявив, що відстань витрат приймає растр як вхідний, а мої бали на растрі гідрографії для початку та кінця. Повернене значення - це полілінія, з якої я можу отримати довжину.
SASS_Shooter

1

Я зробив щось подібне для центральних ліній над каналами та природними водотоками. Я використовував підхід, щоб підкреслити точки, розділити TIN, потім створити другий TIN з початкових вершин, а бісектриси потім пройти за допомогою модифікованого алгоритму Дейкстри, відкинувши параметри, як тільки стане очевидним, що вони не сформують найпростішого рішення . Модифікація полягала в тому, що лінія може закінчуватися в точці 'рішення' або попереднім шляхом, якщо вже існує. Для цього не існує нестандартного рішення, і якщо ви не програміст або, принаймні, в змозі потрапити на добру сторону одного, ваш єдиний варіант - простежити зі зміщенням у базі даних про геодані та подивитися поле shape_length.


TIN = Трикутна нерегулярна мережа, решітка точок і з'єднувальних ліній таким чином, що кожна точка з'єднана з найближчими сусідами і жодна лінія не перетинається. Про це див. Http://en.wikipedia.org/wiki/Delaunay_triangulation . Я не використовував об’єкти ESRI TIN, натомість я знайшов код для триангуляції і зберігав їх у пам’яті, щось на зразок http://www.codeproject.com/Articles/492435/Delaunay-Triangulation-For-Fast-Mesh-Generation .

Докладніше про алгоритм найкоротшого шляху див. Http://en.wikipedia.org/wiki/ s_algorithmDijkstra, він має гарне зображення; незважаючи на складну назву, це дійсно досить просто.

З точок, що утворюють лінії, я зробив триангуляцію Делоне, потім знайшов середню точку кожного краю трикутника (основна геометрія ... середнє значення X, середнє значення Y), а потім вставив точки, які потрапили в межах багатокутників, у сітку, яка дає центральний шлях і посилання на всі вершини на межі. Тоді виключаючи грані, що слідують за берегами водотоку, відслідковують мережу, використовуючи алгоритм Дейкстри, і ви, зрештою, знайдете шлях від точки А до точки В, що проходить приблизно вниз по центру водотоків. Можливих шляхів буде багато, тому я зберігав вагу на кожній вершині і зупиняв шлях, коли сукупна довжина перевищувала вже записану довжину, а якщо вона була меншою, то оновлюю вершину меншою сукупною довжиною - це зменшує кількість простежені шляхи, і їх може бути досить багато;

По черзі, трикутні, ви можете перетворити краї трикутників у дві точкові лінії як клас функції, побудувати мережу, а потім простежити. Я впевнений, що процедури відстеження ESRI набагато швидше, ніж мої, але я мав конкретну потребу і не міг вирішити це за допомогою геометричних мереж.


Майкл - я розробник C #. Просто нове для ArcGIS та їх інструментів програмування. Я знайшов одне з нестандартних рішень за допомогою військового аналітика, але ESRI всією їхньою мудрістю кидає це. Що ви маєте на увазі під TIN очками та яким алгоритмом Дейкстра ви користувалися?
SASS_Shooter

1

Я додаю це для всіх, хто в майбутньому читає цю тему.

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

Перше наше питання випливало з статичної природи RasterCatalog. Зміна растру, на якому ґрунтується, НЕ змінює растр всередині RasterCatalog. Виявилося, що у нас була давня версія, яка ніде не була біля карти берегової лінії. Урок: Перебудуйте RasterCatalog ВСЕ ЧАС, коли ви зміните Растер, на якому він заснований.

Растра на відстань із доданими вагами стає досить громіздкою справою. Подивіться на такий сценарій: Первісна величина растра - 1 загальна відстань, на яку я хочу подивитися, - 117 км. Розмір клітини - 1 метр. Якщо растр зараз має зважене значення 48, то загальна відстань, яку я хочу подивитися, стала 117 км * 48 !!! Отже, відстань у методі CostDistance - це не відстань комірки, а зважена відстань, очевидно, додаючи значення в кожній комірці до суми кожної комірки = значення, пройденого за загальну відстань. Навіть якщо розмір клітини сам по собі становить 1 метр !!!

Растр відстані орієнтований на точку початку. Тож, коли ви зателефонуєте у програму CostDistance, ви не хочете включати точку походження у цей список. якщо ви зробите, ви отримаєте один бал з відстанню 0. (це навіть спотикається підтримка ESRI)

Хоча багато методів використовують конверт для обмеження свого процесу, два найдорожчі - встановлення значення растра та вилучення растру без площі в полігоні, ігнорують усі налаштування конверта та автоматично застосовують це до всього растру. На жаль для нас, ми можемо скоротити це лише шляхом створення масивних сегментів, що перекриваються, та присвоєння сегменту певній області. Але при цьому ми повинні бути обережними (що важко), щоб зона первинної операції не існувала в неправильно перекритій області. (інакше кажучи, всі наші накладки повинні бути ретельно підібрані, щоб не містити первинних цікавих пунктів!) Причиною цього є те, що ми орієнтуємось у RasterCatalog, вибираючи правильний растр, залежно від місця обраної станції берегової охорони. Щоб ще більше ускладнити наш процес, перекриття повинно дозволяти нам орієнтуватися на відстань до відстані 120 км від нашої точки походження, не бігаючи від краю карти і не перетинаючись з іншими основними визначними пам'ятками. Шиш.

Єдине, що я навчився, це те, що це легко привчати до растру, але коли ви хочете або "пробити дірку" в растрі (блокування), або встановити пончик зі значенням, а внутрішня частина пончика має значення 1 (затримка, як блокування), ви закінчуєте складну комбінацію інструментів та викликів ArcObject. Що призводить до останнього засвоєного уроку: ArcObjects не може зробити все. Тому я час від часу змушений робити речі у повільних громіздких інструментах, які були написані пітоном. Я також дізнався, що розробники інструментів ESRI нічого не знали про підтримку послідовності. Іноді вони брали растрову базу даних, в інший час їм потрібен був растр, а іноді їм потрібен набір функцій. І вони не повертають дані в тому ж форматі, який вони вимагають як введення!

Плутати? Не хвилюйтесь, це ESRI.

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