Выборка данных для построение разреза
Добавлено: 20 июл 2010, 18:45
Здравствуйте уважаемое сообщество. Вопрос мой не совсем про ГИС, но возможно вы сможете мне помочь.
Если коротко: Есть два массива с координатами центров сетки, нужен алгоритм (если он уже реализован на Python было бы идеально) который находил бы гридпоинт с координатами ближайшими к заданным пользователем. Наверняка задача тривиальна, но похоже что именно по этому вопросу меня в гугле забанили )
Если долго и нудно:
Исходные данные: Имеется трехмерный массив данных (x,y, глубина). Это гридированная информация из океанологической модели. Также имеются два двумерных массива с координатами широт и долгот центров ячеек (гридпоинтов) сетки.
Задача: Пользователь вводит координаты двух точек и в результате получает разрез где по x расстояние между точками, по y глубина и по z некий параметр (температура или соленость).
Мое решение: По координатам двух точек при помощи вот этой команды из пакета PyNGL http://www.pyngl.ucar.edu/Functions/Ngl.gc_interp.shtml я могу получить координаты промежуточных точек. Далее собственно нужно найти гридпоинты ближайшие к полученным мною промежуточным и крайним точкам. Сетка достаточно плотная, так что мне не нужно интерполировать значения в координаты промежуточных точек, достаточно просто взять значения из ближайших гридпоинтов.
Я написал велосипед который просто последовательно выбирает из массивов все гридпоинты с координатами в определенном окне и последовательно уменьшает это окно до тех пор пока не останется только один гридпоинт, но это очень долго и не очень правильно поскольку окно одновременно уменьшается на одинаковое значение для широт и долгот. Кому интересно может взглянуть (функция pointfind):
https://bitbucket.org/koldunovn/komod/src/tip/ut.py
Было бы здорово если вы сможете указать на алгоритм который может быстро и эффективно это делать.
Заранее спасибо.
Если коротко: Есть два массива с координатами центров сетки, нужен алгоритм (если он уже реализован на Python было бы идеально) который находил бы гридпоинт с координатами ближайшими к заданным пользователем. Наверняка задача тривиальна, но похоже что именно по этому вопросу меня в гугле забанили )
Если долго и нудно:
Исходные данные: Имеется трехмерный массив данных (x,y, глубина). Это гридированная информация из океанологической модели. Также имеются два двумерных массива с координатами широт и долгот центров ячеек (гридпоинтов) сетки.
Задача: Пользователь вводит координаты двух точек и в результате получает разрез где по x расстояние между точками, по y глубина и по z некий параметр (температура или соленость).
Мое решение: По координатам двух точек при помощи вот этой команды из пакета PyNGL http://www.pyngl.ucar.edu/Functions/Ngl.gc_interp.shtml я могу получить координаты промежуточных точек. Далее собственно нужно найти гридпоинты ближайшие к полученным мною промежуточным и крайним точкам. Сетка достаточно плотная, так что мне не нужно интерполировать значения в координаты промежуточных точек, достаточно просто взять значения из ближайших гридпоинтов.
Я написал велосипед который просто последовательно выбирает из массивов все гридпоинты с координатами в определенном окне и последовательно уменьшает это окно до тех пор пока не останется только один гридпоинт, но это очень долго и не очень правильно поскольку окно одновременно уменьшается на одинаковое значение для широт и долгот. Кому интересно может взглянуть (функция pointfind):
https://bitbucket.org/koldunovn/komod/src/tip/ut.py
Было бы здорово если вы сможете указать на алгоритм который может быстро и эффективно это делать.
Заранее спасибо.