Я сделал функцию для вычисления расстояния между двумя координатами в postgreSQL. Я хотел бы использовать его в своем проекте, чтобы сравнить результат функции с указанным пользователем максимальным расстоянием. Моя функция выглядит так:
create or replace function distance(lat double precision, lng double precision, db_lat double precision, db_lng double precision)
returns double precision as $dist$
begin
return
6371 * acos(
cos(radians(lat)) * cos(radians(db_lat))
*
cos(radians(db_lng) - radians(lng))
+
sin(radians(lat))
*
sin(radians(db_lat))
);
end;
$dist$ language plpgsql;
Он вычисляет расстояние между двумя координатами, одна из которых задается пользователем (для установки точки, вблизи которой они хотят найти записи), другая (с db_) из существующей записи в базе данных. Это работает, когда я пробую это в pgAdmin, но я не уверен, как реализовать это в моем проекте Java:
public static Specification<Rental> inProximity(Double distance, Double lat, Double lng) {
if (distance == null || lat == null || lng == null) {
return null;
} else {
return (root, query, cb) ->
cb.greaterThanOrEqualTo(
distance,
cb.function("distance", Double.class,
cb.literal(lat),
cb.literal(lng),
root.get("locationLat"),
root.get("locationLng"))
);
}
}
Он помечает все красным, а ошибка гласит: Cannot resolve method 'greaterThanOrEqualTo(java.lang.Double, javax.persistence.criteria.Expression<T>)'
Почему возврат функции не помечен как Double, чтобы сравнивать два двойника?
Когда я не оборачиваю свои широту и длину cb.literal(),
, ошибка говорит следующее: