Запросить расстояние между двумя объектами без использования функциональности 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, без введения дополнительных столбцов, очень просто: просто используйте индекс на основе функций.
Это означает отсутствие изменений в существующих таблицах: просто добавьте функцию и индекс на основе функций вместе с возможным представлением, чтобы сделать все более прозрачным.
Смотрите полный ответ здесь