我有一个位置实体保存坐标。基于半径,我想获取范围内的所有位置。
我创建了一个函数(后端代码/Nestjs 逻辑,而不是数据库)来计算两个位置之间的距离。如果计算出的距离小于或等于半径,我想选择这个位置。
我当前使用此距离计算功能的存储库实现:
// ...
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();
}
}
Run Code Online (Sandbox Code Playgroud)
上面显示的示例不起作用。我收到这个错误
QueryFailedError: 函数 distanceFromCoordinatesInKilometers(double precision, double precision, unknown, unknown) 不存在
向:函数添加 a时出现此错误
参数中不支持函数参数。请检查“距离”参数。
我将如何distanceFromCoordinatesInKilometers在该查询中调用我的后端代码函数?我可以传入变量但不能传入函数?
目前我正在使用 Postgres 数据库,但如果有一个独立的解决方案会很棒。
blu*_*yke -1
好的 如果您要在代码中实现以下内容,则需要在将函数传递给 SQL 字符串之前评估该函数。简单地说:
if(latitude && longitude && radiusInKilometers) {
query.andWhere(`${distanceFromCoordinatesInKilometers(location.latitude, location.longitude, :latitude, :longitude)} <= :radiusInKilometers`, {
latitude,
longitude,
radiusInKilometers,
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2159 次 |
| 最近记录: |