Πώς να εφαρμόσετε τις γεωχωρικές δυνατότητες MongoDB

Pos Na Epharmosete Tis Geochorikes Dynatotetes Mongodb



Το γεωχωρικό χαρακτηριστικό του MongoDB παρέχει έναν απλό τρόπο αποθήκευσης των γεωγραφικών δεδομένων σε μια βάση δεδομένων. Ουσιαστικά, μπορούμε να αποθηκεύσουμε τα γεωχωρικά δεδομένα στο MongoDB ως αντικείμενα GeoJSON. Το GeoJSON είναι μια μορφή δωρεάν και ανοιχτού κώδικα που εξαρτάται από τη σημειογραφία αντικειμένου JavaScript με απλά γεωγραφικά δεδομένα. Αυτή η λειτουργία είναι σημαντική για εφαρμογές που απαιτούν υπηρεσίες που βασίζονται στην τοποθεσία, όπως η διαδικασία χαρτογράφησης, με βάση την αναζήτηση τοποθεσίας και άλλες. Αυτό το άρθρο καλύπτει το γεωχωρικό χαρακτηριστικό με το παράδειγμα υλοποίησης.

Προσθήκη εγγράφων στη συλλογή για γεωχωρικά χαρακτηριστικά

Για να δείξουμε τη λειτουργικότητα της δυνατότητας MongoDB Geospatial, χρειαζόμαστε τα έγγραφα για τη συγκεκριμένη συλλογή. Εισάγουμε μερικά έγγραφα στη συλλογή 'περιοχή' όπως φαίνεται παρακάτω:

db.area.insertMany( [
{
όνομα: 'Παιδικό Πάρκο' ,
τοποθεσία: {τύπος: 'Σημείο' , συντεταγμένες: [ - 60,97 , 30,77 ] },
κατηγορία: 'Κήπος'
},
{
όνομα: 'Φοιτητικός χώρος' ,
τοποθεσία: {τύπος: 'Σημείο' , συντεταγμένες: [ - 60,9928 , 30,7193 ] },
κατηγορία: 'Κήπος'
},
{
όνομα: 'Γήπεδο ποδοσφαίρου' ,
τοποθεσία: {τύπος: 'Σημείο' , συντεταγμένες: [ - 60,9375 , 30,8303 ] },
κατηγορία: 'Στάδιο'
}
] )

Έχουμε έγγραφα που περιέχουν τα δεδομένα τοποθεσίας, όπως συντεταγμένες. Επιπλέον, δημιουργούμε ένα γεωχωρικό ευρετήριο στο πεδίο για να βελτιστοποιήσουμε την απόδοση των γεωχωρικών ερωτημάτων.









Παράδειγμα 1: Χρήση του τελεστή ερωτήματος $geoIntersects

Πρώτον, έχουμε τον τελεστή $geoIntersects του γεωχωρικού χαρακτηριστικού που τέμνεται με το παρεχόμενο αντικείμενο. Εξετάστε την ακόλουθη υλοποίηση του τελεστή $geoIntersects:



db.area.find({ location: { $geoIntersects: { $geometry: { type: 'Σημείο' ,

συντεταγμένες: [ - 60,97 , 30,77 ] } } } })

Στο παράδειγμα, καλούμε τη συλλογή 'περιοχή' μαζί με τη λειτουργία 'εύρεση'. Στη μέθοδο find(), περνάμε τα σύνολα πεδίων 'location' στον τελεστή ερωτήματος $geoIntersects του γεωχωρικού χαρακτηριστικού. Χρησιμοποιείται για να ελεγχθεί εάν το καθορισμένο σημείο τέμνεται με τη γεωμετρία που είναι αποθηκευμένη στο πεδίο γεωμετρίας.





Στη συνέχεια, ο τελεστής $geoIntesects παίρνει τον τελεστή $geometry όπου το πεδίο τύπου ορίζεται με την τιμή 'Point' και το πεδίο συντεταγμένων δίνεται με τις τιμές 'συντεταγμένες'. Εδώ, η γεωμετρία $ ορίζεται για τη γεωχωρική σύγκριση.

Η ακόλουθη έξοδος είναι όπου ανακτάται το αναμενόμενο έγγραφο και όπου το πεδίο γεωμετρίας περιέχει ένα γεωμετρικό αντικείμενο που τέμνεται με το καθορισμένο σημείο:



Παράδειγμα 2: Χρήση του $near Operator Query

Ο τελεστής $near είναι επίσης το γεωχωρικό χαρακτηριστικό που χρησιμοποιείται για την εκτέλεση των γεωχωρικών ερωτημάτων για τον εντοπισμό των εγγράφων που βρίσκονται γεωγραφικά κοντά σε ένα δεδομένο μέρος. Ανακτά τα έγγραφα που είναι ταξινομημένα σύμφωνα με την εγγύτητά τους στην καθορισμένη τοποθεσία. Εδώ, παρέχουμε την υλοποίηση του τελεστή $near:

db.area.find(
{
τοποθεσία:
{ $πλησίον :
{
$geometry: { type: 'Σημείο' ,  συντεταγμένες: [- 60,9667 , 30,78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

Στο παράδειγμα, ορίζουμε το πεδίο «τοποθεσία» της συλλογής «περιοχή» μέσα στην πράξη «εύρεση». Στη συνέχεια, ορίσαμε τον τελεστή $near query του γεωχωρικού χαρακτηριστικού σε αυτό το πεδίο 'location'. Ο τελεστής $near αναζητά το κοντινό σημείο με το δεδομένο σημείο συντεταγμένων. Στη συνέχεια, χρησιμοποιούμε τις παραμέτρους $minDistance και $maxDistance στον τελεστή $near, οι οποίοι παρέχονται με συγκεκριμένες τιμές για την ανάκτηση των εγγράφων εντός του καθορισμένου εύρους απόστασης από το δεδομένο σημείο.

Το έγγραφο ανακτάται στην έξοδο που βρίσκεται κοντά στις καθορισμένες τοποθεσίες ή σημεία ενδιαφέροντος σε μια γεωχωρική συλλογή «περιοχής»:

Παράδειγμα 3: Χρήση του χειριστή ερωτήματος $nearsphere

Εναλλακτικά, έχουμε τον τελεστή $nearsphere που είναι παρόμοιος με τον τελεστή $near, αλλά το $nearSphere λαμβάνει υπόψη το σφαιρικό σχήμα της Γης κατά τον υπολογισμό των αποστάσεων.

db.area.find(
{
τοποθεσία: {
$nearSphere: {
$geometry: {
τύπος: 'Σημείο' ,
συντεταγμένες: [- 60,9667 , 30,78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

Στο παράδειγμα, χρησιμοποιούμε τον τελεστή $nearsphere του γεωχωρικού ερωτήματος. Ο τελεστής $nearspehere εδώ αναζητά το έγγραφο του οποίου τα πλησιέστερα σημεία είναι κοντά στα σημεία που καθορίζονται στο ερώτημα και τα σημεία ορίζονται στον πίνακα πεδίων συντεταγμένων.

Μετά από αυτό, κάνουμε πιο συγκεκριμένα τα αποτελέσματα καθιερώνοντας τις παραμέτρους $minDistance και $maxDistance. Η παράμετρος $minDistance διασφαλίζει ότι τα επιστρεφόμενα έγγραφα βρίσκονται σε απόσταση τουλάχιστον 1000 μέτρων από το καθορισμένο σημείο, ενώ η παράμετρος $maxDistance περιορίζει τα αποτελέσματα σε τοποθεσίες που δεν απέχουν περισσότερο από 5000 μέτρα.

Το έγγραφο εμφανίζεται στην έξοδο με μια θέση εντός ενός καθορισμένου μετρητή από το σημείο με δεδομένες συντεταγμένες:

Παράδειγμα 4: Χρήση του $geoWithin Operator Query

Στη συνέχεια, έχουμε τον τελεστή $geoWithin στο MongoDB που χρησιμοποιείται για γεωχωρικά ερωτήματα για την εύρεση των εγγράφων που βρίσκονται πλήρως εντός ενός καθορισμένου σχήματος, όπως ένας κύκλος. Ας κάνουμε την ακόλουθη επίδειξη του ερωτήματος $geoWithin:

db.area.find({ location:

{ $geoΜέσα:

{ $centerSphere: [ [ - 60,93414657 , 30.82302903 ], 3 / 3963.2 ] } } )

Στο παράδειγμα, χρησιμοποιούμε τον τελεστή $geoWithin για να βρούμε τα έγγραφα της συλλογής 'περιοχή' σε μια συγκεκριμένη κυκλική περιοχή σε μια δισδιάστατη σφαίρα. Για αυτό, καθορίζουμε τον τελεστή $centerSphere μέσα στον τελεστή $geoWithin, ο οποίος παίρνει τα δύο ορίσματα ως κεντρικό σημείο, το οποίο πιθανότατα αντιπροσωπεύει το σημείο συντεταγμένων εδώ, και την ακτίνα του κύκλου που αντιπροσωπεύει την τιμή της απόστασης σε μίλια.

Το έγγραφο που προκύπτει ανακτάται στα ακόλουθα, το οποίο αντιπροσωπεύει ένα γεωχωρικό σημείο που εμπίπτει στον κύκλο που ορίζεται από το δεδομένο κεντρικό σημείο και την ακτίνα περίπου 3 μιλίων:

Παράδειγμα 5: Χρήση του χειριστή $geoNear Query

Επιπλέον, ο τελεστής $geoNear είναι επίσης ένας γεωχωρικός τελεστής που χρησιμοποιείται για τον αγωγό συγκέντρωσης. Εκτελεί ένα γεωχωρικό ερώτημα και επιστρέφει τα έγγραφα που ταξινομούνται με βάση την εγγύτητά τους σε ένα καθορισμένο σημείο. Εδώ, δώσαμε τον τελεστή $geoNear που καλείται μέσα στον αγωγό συγκέντρωσης.

db.area.agregate([
{
$geoNear: {
κοντά: { type: 'Σημείο' , συντεταγμένες: [ - 60,99279 , 30,719296 ] },
απόσταση Πεδίο: 'dist.calculated' ,
maxDistance: 2 ,
ερώτημα: {κατηγορία: 'Κήπος' },
περιλαμβάνουνLocs: 'dist.location' ,
σφαιρικός: αληθινός
}
}
])

Στο παράδειγμα, καλούμε τη συγκεντρωτική μέθοδο του MongoDB και ορίζουμε τον τελεστή $geoNear μέσα σε αυτό. Ο τελεστής $geoNear έχει οριστεί με πολλές παραμέτρους για να καθορίσει τη συμπεριφορά του ερωτήματος. Αρχικά, ορίσαμε την παράμετρο 'κοντά' που παρέχει τις τιμές 'συντεταγμένες' ως σημείο αναφοράς για αναζήτηση.

Στη συνέχεια, χρησιμοποιούμε την παράμετρο 'distanceField' για να καθορίσουμε το παρεχόμενο πεδίο ως πεδίο αποτελέσματος. Αυτό το καθορισμένο πεδίο αποτελέσματος αποθηκεύει την απόσταση μεταξύ κάθε εγγράφου και του σημείου αναφοράς. Στη συνέχεια, ορίζουμε την παράμετρο “maxDistance” με την τιμή “2″ που αντιπροσωπεύει τη μέγιστη απόσταση σε μέτρα.

Μετά από αυτό, έχουμε την παράμετρο 'ερώτημα' που φιλτράρει τα έγγραφα από το πεδίο 'κατηγορία' και λαμβάνει υπόψη μόνο τα έγγραφα όπου η 'κατηγορία' είναι 'Πάρκα'. Στη συνέχεια καλούμε την παράμετρο 'includeLocs' για να περιέχει τις πληροφορίες τοποθεσίας. Τέλος καθορίζουμε τη «σφαιρική» παράμετρο με την «αληθινή» τιμή που υπολογίζει τις αποστάσεις χρησιμοποιώντας ένα δισδιάστατο σφαιρικό σύστημα συντεταγμένων.

Ο αγωγός συγκέντρωσης αντιπροσωπεύει το έγγραφο στην έξοδο που εμφανίζει τις πληροφορίες σε σχέση με την παράμετρο ανάλογα. Το ακόλουθο πεδίο 'dist.calculated' εμφανίζει την απόσταση κάθε εγγράφου από το σημείο αναφοράς:

συμπέρασμα

Γνωρίσαμε ότι οι γεωχωρικές δυνατότητες του MongoDB μας βοηθούν να χειριζόμαστε αποτελεσματικά και να αναζητούμε τις πληροφορίες που βασίζονται στην τοποθεσία. Μάθαμε την υλοποίηση του γεωχωρικού χαρακτηριστικού χρησιμοποιώντας τους διάφορους τελεστές του με το παράδειγμα προγράμματος. Έχουμε πολλές περισσότερες λειτουργίες και μεθόδους που είναι επίσης ωφέλιμες για ένα ευρύ φάσμα εφαρμογών.