Запросить расстояние между двумя объектами без использования функциональности Oracle Spatial?

Прямо сейчас у меня есть таблица в базе данных Oracle 10g с LAT(FLOAT) а также LNG(FLOAT) колонны.

Задача - найти все записи на определенном расстоянии (радиусе) от заданной точки (центра). Само приложение на Java, Hibernate используется как реализация JPA.

После некоторых исследований я обнаружил, что Oracle Spatial необходимо использовать. Тем не менее, нет никакого способа конвертировать мои столбцы в SDO_GEOMETRYпоэтому я не могу использовать Oracle SDO_WITHIN_DISTANCE функция.

Есть ли обходной путь для реализации такой функциональности?

В настоящее время я просто запрашиваю все записи и перебираю их по формуле Haversine - и это очень скоро станет узким местом:-)

Спасибо за твою помощь!

2 ответа

Решение

Если вы не можете изменить столбцы в целевой таблице, вы можете использовать триггер для материализации данных в отдельной таблице как sdo_geometry, использовать sdo_within_distance, а затем соединить строки с вашей исходной таблицей.

Использовать существующие пространственные данные, закодированные в столбцах X и Y, без введения дополнительных столбцов, очень просто: просто используйте индекс на основе функций.

Это означает отсутствие изменений в существующих таблицах: просто добавьте функцию и индекс на основе функций вместе с возможным представлением, чтобы сделать все более прозрачным.

Смотрите полный ответ здесь

Другие вопросы по тегам