Typeorm Postgis 按最近点排序
Typeorm Postgis order by nearest Point
我有一个带有一堆点的 postgis 数据库,我想按照到我自己位置(经度和纬度)的距离顺序获取这些点。
所以我想做类似的事情:
const markers = await this.markerRepo.find({
where: {
type: "test"
},
order: { position: 'ASC' },
});
但我想根据我当前的位置订购它们。
这个 ID 我的 table 实体 (Nestjs):
@Entity()
export class Marker {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: 'geography',
spatialFeatureType: 'Point',
srid: 4326,
nullable: true,
})
position: Point;
@Column()
type: string;
}
如果您需要更多信息,请告诉我
原来Typeorm不支持Postgis(没想到)
解决方案是发送一个 SQL 请求,如下所示:
const markers = await this.markerRepo.query(
`SELECT * , ST_Distance(ST_MakePoint(${yourLatitude}, ${yourLongitude} ), position) AS dist FROM marker ORDER BY dist LIMIT 10;`,
);
我有一个带有一堆点的 postgis 数据库,我想按照到我自己位置(经度和纬度)的距离顺序获取这些点。
所以我想做类似的事情:
const markers = await this.markerRepo.find({
where: {
type: "test"
},
order: { position: 'ASC' },
});
但我想根据我当前的位置订购它们。
这个 ID 我的 table 实体 (Nestjs):
@Entity()
export class Marker {
@PrimaryGeneratedColumn()
id: number;
@Column({
type: 'geography',
spatialFeatureType: 'Point',
srid: 4326,
nullable: true,
})
position: Point;
@Column()
type: string;
}
如果您需要更多信息,请告诉我
原来Typeorm不支持Postgis(没想到)
解决方案是发送一个 SQL 请求,如下所示:
const markers = await this.markerRepo.query(
`SELECT * , ST_Distance(ST_MakePoint(${yourLatitude}, ${yourLongitude} ), position) AS dist FROM marker ORDER BY dist LIMIT 10;`,
);