Tengo una base de datos postgis con un montón de puntos y me gustaría obtener los puntos en orden de distancia a mi propia posición (longitud y latitud).
Así que quiero hacer algo como:
const markers = await this.markerRepo.find({ where: { type: "test" }, order: { position: 'ASC' }, });Pero quiero ordenarlos en relación con mi posición actual.
Esta identificación es mi entidad de tabla (Nestjs):
@Entity() export class Marker { @PrimaryGeneratedColumn() id: number; @Column({ type: 'geography', spatialFeatureType: 'Point', srid: 4326, nullable: true, }) position: Point; @Column() type: string; }Si necesita más información por favor hágamelo saber
Resulta que Typeorm no es compatible con Postgis (¿Quién lo hubiera pensado?)
La solución es simplemente enviar una solicitud SQL como esta:
const markers = await this.markerRepo.query( `SELECT * , ST_Distance(ST_MakePoint(${yourLatitude}, ${yourLongitude} ), position) AS dist FROM marker ORDER BY dist LIMIT 10;`, );