Tôi có một thực thể vị trí giữ tọa độ. Dựa trên bán kính tôi muốn có được tất cả các vị trí trong phạm vi.
Tôi đã tạo một hàm (mã phụ trợ / logic Nestjs, không phải cơ sở dữ liệu) tính toán khoảng cách giữa hai vị trí. Nếu khoảng cách tính toán nhỏ hơn hoặc bằng bán kính tôi muốn chọn vị trí này.
Triển khai kho lưu trữ hiện tại của tôi bằng cách sử dụng chức năng tính toán khoảng cách này:
// ...
import { distanceFromCoordinatesInKilometers } from '../shared/calculations/distanceFromCoordinatesInKilometers';
@EntityRepository(Location)
export class LocationsRepository extends Repository<Location> {
public getLocations({ /* ... */ latitude, longitude, radiusInKilometers }: GetLocationsDTO): Promise<Location[]> {
const query: SelectQueryBuilder<Location> = this.createQueryBuilder('location');
// ....
if(latitude && longitude && radiusInKilometers) {
query.andWhere("distanceFromCoordinatesInKilometers(location.latitude, location.longitude, :latitude, :longitude) <= :radiusInKilometers", {
latitude,
longitude,
radiusInKilometers,
});
}
return query.getMany();
}
}
Ví dụ hiển thị ở trên không hoạt động. Tôi gặp lỗi này
QueryFailedError: khoảng cách chức năngFromCoordLSInKilometer (độ chính xác kép, độ chính xác kép, không xác định, không xác định) không tồn tại
Khi thêm a :
vào hàm tôi gặp lỗi này
Tham số chức năng không được hỗ trợ trong các tham số. Vui lòng kiểm tra tham số "khoảng cách".
Làm thế nào tôi có thể gọi hàm mã phụ trợ của mình distanceFromCoordinatesInKilometers
trong truy vấn đó? Tôi có thể vượt qua trong các biến nhưng không có chức năng?
Hiện tại tôi đang sử dụng cơ sở dữ liệu Postgres nhưng sẽ rất tuyệt nếu có một giải pháp độc lập.
node.js
ứng dụng của mình từ cơ sở dữ liệu, điều đó sẽ không bao giờ hoạt động, một giải pháp phổ quát sẽ là: thực hiện chức năng đó trong cơ sở dữ liệu (ví dụ: bằng cách di chuyển) hoặc giải pháp không thể điều khiển hơn: thực hiện chức năng đó trong truy vấn của bạn