Ich habe eine Standorteinheit mit Koordinaten. Basierend auf einem Radius möchte ich alle Orte erhalten, die sich in Reichweite befinden.
Ich habe eine Funktion erstellt (Backend-Code / Nestjs-Logik, keine Datenbank), die den Abstand zwischen zwei Standorten berechnet. Wenn der berechnete Abstand kleiner oder gleich dem Radius ist, möchte ich diesen Ort auswählen.
Meine aktuelle Repository-Implementierung mit dieser Entfernungsberechnungsfunktion:
// ...
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();
}
}
Das oben gezeigte Beispiel funktioniert nicht. Ich bekomme diesen Fehler
QueryFailedError: Die Funktion distanceFromCoordinatesInKilometers (doppelte Genauigkeit, doppelte Genauigkeit, unbekannt, unbekannt) ist nicht vorhanden
Beim Hinzufügen von a :
zur Funktion wird dieser Fehler angezeigt
Funktionsparameter werden in den Parametern nicht unterstützt. Bitte überprüfen Sie den Parameter "Abstand".
Wie würde ich meine Backend-Code-Funktion aufrufen? distanceFromCoordinatesInKilometers
innerhalb dieser Abfrage ? Ich kann Variablen übergeben, aber keine Funktionen?
Derzeit verwende ich eine Postgres-Datenbank, aber es wäre fantastisch, wenn es eine unabhängige Lösung gäbe.
node.js
App aus der Datenbank aufzurufen. Das wird nie funktionieren. Eine universelle Lösung wäre: Implementieren dieser Funktion in der Datenbank (z. B. durch Migrationen) oder eine treiberunabhängigere Lösung: Implementieren dieser Funktion in Ihrer AnfrageAntworten:
OK Wenn Sie Folgendes in Ihren Code implementieren möchten, müssen Sie die Funktion auswerten, bevor Sie sie an die SQL-Zeichenfolge übergeben. Also einfach:
quelle
location.latitude, location.longitude