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


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.