Ищите быструю растровую функцию с открытым исходным кодом для определения стоимости и расстояния для использования в коде


9

Я искал в интернете быструю функцию с открытым исходным кодом, которая может быть встроена в мой код. Функциональность в основном должна работать как реализация ArcGIS, где я могу указать исходный растр и растр затрат и вывести растр затратного расстояния. Тем не менее, реализация не должна быть такой сложной, как ArcGIS, в которой мне не нужно обязательно вводить «растры» со встроенными гео-метаданными - достаточно подписи, которая принимает простые числовые массивы, поскольку я могу убедиться, что данные перекрываются правильно в то время, когда я вызываю функцию.

Моя конкретная цель состоит в том, чтобы рассчитать расстояние затрат до одной точки в центре растра затрат 1000 x 1000 на основе клика пользователя, поэтому быстрое выполнение очень важно.

Реализация AC # была бы идеальной, но я посмотрю на все, что там есть.

Кто-нибудь знает о библиотеке с открытым исходным кодом, которая поддерживает это? Спасибо за вашу помощь!

Ответы:


5

GRASS GIS имеет реализацию на C r.cost( источник , документация ), которая использует min-heap . В качестве альтернативы вы можете использовать пакет графиков, такой как QuickGraph и Floyd-Warshall, чтобы вычислить стоимость.

Недавние изменения в GRASS 6.4 значительно увеличили стоимость r.cost , поэтому, возможно, производительность может быть достаточно хорошей: на моем ноутбуке это занимает около 3 с для 1-мегапиксельной области или 5 с при включенном движении коня. GRASS - это приложение на C, а не встраиваемое решение для кодовой базы C #. Если вы добавляете в стек все в порядке, вы можете использовать PyWPS для вызовов GRASS, а затем использовать результат в другом месте вашего приложения.


Я собираюсь использовать это в веб-приложении, поэтому моя цель - завершить операцию всего за несколько секунд. У меня будет только одна целевая ячейка и сравнительно узкое максимальное ценовое расстояние (расстояние от центральной целевой ячейки до края растра стоимости, при условии прямой линии с минимальными затратами). Мои тесты с использованием ArcMap в этих условиях заставляют меня думать, что это возможно. Любые советы или опыт использования GRASS в C #?
— atogle

Я обновил свой вопрос, чтобы ответить на ваши вопросы, он начинался как комментарий, но получился слишком длинным. Надеюсь, это поможет!
— 2010 года

Спасибо scw! Все это отличная информация, но она не приведет меня туда, где я должен быть, пока я не начну портировать код GRASS (что мне не хочется делать). Может быть, есть некоторые другие растровые гики с некоторыми советами. Я собираюсь продолжить копаться в этом и выложу решение, на котором остановлюсь.
— 2010 г.

Возможно, вы можете обратиться к своему коллеге: azavea.com/research/staff-research-projects/map-algebra ;-) Я предложил код GRASS, потому что это надежная и быстрая реализация, C # является относительно новым для пространства геообработки, поэтому уже существует реализации может быть трудно найти.
— 2010 года

scw - это то, где мое путешествие началось, на самом деле. Моя проблема в том, что его реализация жертвует временем обработки для качественных вычислений. Сейчас мы работаем над алгоритмом, чтобы сделать обратное. GRASS - отличное предложение, у меня просто нет способа его использовать. =)
— 2010 г.

3

Я часто использую эту r.costфункцию в GRASS. 1000 * 1000 сеток не было проблемой на обычном ноутбуке. Также разрабатывается пакет R (gdistance, http://r-forge.r-project.org/projects/gdistance/ ). Я нашел ГРАСС намного быстрее.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.