Ich habe eine Liste von Veranstaltungsorten in meiner DB und ich möchte diese in der Reihenfolge der Entfernung zum Kunden zeigen.
Meine Anfrage an den DB ist die folgende:
venueCollection.aggregate([
{
'$geoNear': {
'near': {
'type': 'Point',
'coordinates': [ user_lng , user_lat ]
},
'spherical': true,
'distanceField': 'dist'
}
},
{
'$sort': {
'dist': 1
}
}
], function (err, venues) {
// my code...
});
Ein einfaches Dokument:
{
"_id" : ObjectId("56ec1c833e017f403870e2c5"),
"name" : "A & H",
"city" : "'s-Gravenhage",
"province" : "Zuid Holland",
"location" : {
"type" : "Point",
"coordinates" : [
4.276930300000004,
52.0732475
]
}
}
eine Liste von Orten zeigen und die distance
Feld korrekt ist, vom nächsten bis zum entferntesten.
Client-Seite verwende ich die latitude
und longitude
(gleiche ich an den Server und die gleiche des Veranstaltungsortes) Entfernung mit Google Maps zu berechnen:
var venuePosition = new google.maps.LatLng(attrs.lat, attrs.lng);
var distance = google.maps.geometry.spherical.computeDistanceBetween(scope.user.position.compiled, venuePosition);
element.text((distance/1000).toFixed(2) + ' km');
es zeigen den richtigen Abstand zwischen 2 Punkten.
Das Problem ist, dass die 2-Werte (von Mongo und von gmaps) unterschiedlich sind und auch wenn die Liste korrekt angezeigt $sort
von mongoDB mit ihm Entfernungen zeigen, die nicht in Ordnung sind, dh .:
venue 01: 21.350km
venue 02: 21.412km
venue 03: 21.388km // wrong!!!
venue 04: 21.547km
Wo ist der Fehler? Ich muss meine Orte in Entfernungsreihenfolge sortieren und die Entfernung in km anzeigen ... und es sollte auch bestellt werden ...
Bitte aktualisieren Sie Ihren Beitrag zusammen mit überprüfbarem Code und MongoDB-Dokumenten. – Saleem
Ich fügte Beispieldokument hinzu, aber ich denke nicht, dass es notwendig ist. Testen Sie einfach jeden Standort mit Längen- und Breitengrad und eine andere Position, um Abstand zu erhalten. Mongo gibt andere Entfernungen zurück als Google Maps ... Sie brauchen meine Dokumente nicht wirklich ... –
MongoDB nehmen an, dass Erde eine perfekte Kugel ist, wenn sie Entfernung berechnet, die nicht ist. Wenn Ihre Anwendung entfernungsempfindlich ist, verlassen Sie sich nicht auf MongoDB. – Saleem