A MongoDB térinformatikai jellemzőinek megvalósítása

A Mongodb Terinformatikai Jellemzoinek Megvalositasa



A MongoDB térinformatikai szolgáltatása egyszerű módot biztosít a földrajzi adatok adatbázisban való tárolására. Lényegében a térinformatikai adatokat a MongoDB-ben GeoJSON objektumokként tárolhatjuk. A GeoJSON egy ingyenes és nyílt forráskódú formátum, amely a JavaScript Object Notation függvénye egyszerű földrajzi adatokkal. Ez a funkció olyan alkalmazások esetében fontos, amelyek helyalapú szolgáltatásokat igényelnek, például a térképezési folyamatot, a helykeresésen alapuló és egyebeket. Ez a cikk a térinformatikai jellemzőkkel foglalkozik a példamegvalósítással.

Dokumentumok hozzáadása a térinformatikai jellemzők gyűjteményéhez

A MongoDB térinformatikai szolgáltatás funkcióinak bemutatásához szükségünk van az adott gyűjteményhez tartozó dokumentumokra. Néhány dokumentumot beillesztünk a „terület” gyűjteménybe, az alábbiak szerint:

db.area.insertMany( [
{
név: 'Gyermekpark' ,
hely: { típus: 'Pont' , koordináták: [ - 60,97 , 30.77 ] },
kategória: 'Kert'
},
{
név: 'Diákkörzet' ,
hely: { típus: 'Pont' , koordináták: [ - 60,9928 , 30,7193 ] },
kategória: 'Kert'
},
{
név: 'Focipálya' ,
hely: { típus: 'Pont' , koordináták: [ - 60,9375 , 30.8303 ] },
kategória: 'Stádium'
}
] )

Vannak olyan dokumentumok, amelyek tartalmazzák a helyadatokat, például a koordinátákat. Ezenkívül a térinformatikai lekérdezések teljesítményének optimalizálása érdekében térinformatikai indexet hozunk létre a területen.









1. példa: A $geoIntersects lekérdezőoperátor használata

Először is megvan a térinformatikai jellemző $geoIntersects operátora, amely metszi a megadott objektumot. Fontolja meg a $geoIntersects operátor következő megvalósítását:



db.area.find({ hely: { $geoIntersects: { $geometry: { type: 'Pont' ,

koordináták: [ - 60,97 , 30.77 ] } } } })

A példában a „terület” gyűjteményt hívjuk a „keresés” művelettel együtt. A find() metódusnak átadjuk a „location” mezőkészleteket a térinformatikai jellemző $geoIntersects lekérdező operátorának. Ezzel ellenőrizhető, hogy a megadott pont metszi-e a geometria mezőben tárolt geometriát.





Ezután a $geoIntesects operátor veszi a $geometry operátort, ahol a típusmező a „Point” értékkel van beállítva, a koordináta mező pedig a „koordináta” értékekkel. Itt a $geometry definiálva van a térbeli összehasonlításhoz.

A következő kimenet az a hely, ahol a várt dokumentum lekérésre kerül, és ahol a geometria mező egy geometriai objektumot tartalmaz, amely metszi a megadott pontot:



2. példa: A $near Query Operator használata

A $közel operátor egyben az a térinformatikai szolgáltatás is, amely a térinformatikai lekérdezések elvégzésére szolgál, hogy azonosítsa azokat a dokumentumokat, amelyek földrajzilag közel vannak egy adott helyhez. Lekéri a dokumentumokat, amelyek a megadott helyhez való közelségük szerint vannak elrendezve. Itt kínáljuk a $near operátor megvalósítását:

db.area.find(
{
elhelyezkedés:
{ $közel :
{
$geometry: { típus: 'Pont' ,  koordináták: [ - 60,9667 , 30.78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

A példában a „keresés” műveleten belül definiáljuk a „terület” gyűjtemény „hely” mezőjét. Ezután beállítjuk a térinformatikai jellemző $near lekérdezés operátorát arra a „hely” mezőre. A $közel operátor megkeresi a közeli pontot a megadott koordinátaponttal. Ezután a $minDistance és $maxDistance paramétereket használjuk a $near operátorban, amelyek bizonyos értékekkel vannak ellátva, hogy az adott ponttól a megadott távolságtartományon belül lehessen lekérni a dokumentumokat.

A dokumentum lekérése a kimenetben található, amely a földrajzi „területi” gyűjtemény meghatározott helyeinek vagy érdekes pontjainak közelében van:

3. példa: A $nearsphere Query Operator használata

Alternatív megoldásként használhatjuk a $nearsphere operátort, amely hasonló a $near operátorhoz, de a $nearSphere figyelembe veszi a Föld gömb alakját a távolságok kiszámításakor.

db.area.find(
{
hely: {
$nearSphere: {
$geometry: {
típus : 'Pont' ,
koordináták: [- 60,9667 , 30.78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

A példában a térinformatikai lekérdezés $nearsphere operátorát használjuk. A $nearspehere operátor itt azt a dokumentumot keresi, amelynek legközelebbi pontjai közel vannak a lekérdezésben megadott pontokhoz, és a pontok a koordinátamező tömbbe vannak beállítva.

Ezt követően a $minDistance és $maxDistance paraméterek beállításával finomítjuk az eredményeket. A $minDistance paraméter biztosítja, hogy a visszaküldött dokumentumok legalább 1000 méterre legyenek a megadott ponttól, míg a $maxDistance paraméter az 5000 méternél nem távolabbi helyekre korlátozza az eredményeket.

A dokumentum egy adott méteren belüli hellyel jelenik meg a kimenetben a megadott koordinátákkal rendelkező ponttól:

4. példa: A $geoWithin Query Operator használata

Ezután a MongoDB-ben van a $geoWithin operátor, amelyet térinformatikai lekérdezésekre használnak, hogy megtalálják azokat a dokumentumokat, amelyek teljesen egy adott alakzaton, például egy körön belül vannak. Nézzük a $geoWithin lekérdezés alábbi bemutatóját:

db.area.find({ hely:

{ $geoWithin:

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

A példában a $geoWithin operátort használjuk, hogy megkeressük a „terület” gyűjtemény dokumentumait egy bizonyos kör alakú területen belül egy 2D-s gömbön. Ehhez a $geoWithin operátoron belül megadjuk a $centerSphere operátort, amely a két argumentumot veszi centrikus pontnak, amely valószínűleg a koordinátapontot jelenti, és a kör sugarát, amely a távolság mérföldben kifejezett értékét jelenti.

Az eredményül kapott dokumentumot a következőképpen kérjük le, amely egy térinformatikai pontot jelöl, amely az adott középpont által meghatározott körbe esik, és körülbelül 3 mérföld sugarú körbe esik:

5. példa: A $geoNear Query Operator használata

Ezenkívül a $geoNear operátor egy térinformatikai operátor is, amelyet az aggregációs folyamathoz használnak. Elvégez egy térinformatikai lekérdezést, és visszaadja a dokumentumokat, amelyek egy adott ponthoz való közelségük szerint vannak rendezve. Itt megadtuk a $geoNear operátort, amelyet az aggregációs folyamaton belül hívnak meg.

db.area.aggregate([
{
$geoNear: {
közel: { típus: 'Pont' , koordináták: [ - 60,99279 , 30,719296 ] },
TávolságMező: 'táv.számított' ,
maxDistance: 2 ,
lekérdezés: { kategória: 'Kert' },
includeLocs: 'dist.location' ,
gömb alakú: igaz
}
}
])

A példában a MongoDB összesítő metódusát hívjuk meg, és definiáljuk benne a $geoNear operátort. A $geoNear operátor több paraméterrel van beállítva a lekérdezés viselkedésének meghatározásához. Először beállítjuk a „közel” paramétert, amely a „koordináták” értékeit szolgáltatja referenciapontként a kereséshez.

Ezután a „distanceField” paraméter segítségével a megadott mezőt eredménymezőként adjuk meg. Ez a beállított eredménymező tárolja az egyes dokumentumok és a referenciapont közötti távolságot. Ezután definiáljuk a „maxDistance” paramétert „2” értékkel, amely a maximális távolságot jelenti méterben.

Ezt követően megkapjuk a „query” paramétert, amely a „kategória” mező alapján szűri a dokumentumokat, és csak azokat a dokumentumokat veszi figyelembe, ahol a „kategória” a „parkok”. Ezután meghívjuk az „includeLocs” paramétert a helyinformációk tárolására. Végül megadjuk a „gömb” paramétert a „true” értékkel, amely 2D gömbkoordináta-rendszer segítségével számítja ki a távolságokat.

Az aggregációs folyamat a dokumentumot képviseli a kimenetben, amely ennek megfelelően megjeleníti a paraméterre vonatkozó információkat. A következő „távol.számított” mező az egyes dokumentumok referenciaponttól való távolságát jeleníti meg:

Következtetés

Megtudtuk, hogy a MongoDB térinformatikai képességei segítenek a helyalapú információk hatékony kezelésében és lekérdezésében. A térinformatikai jellemző megvalósítását annak különböző operátorai segítségével tanultuk meg a példaprogrammal. Sokkal több olyan funkcióval és módszerrel rendelkezünk, amelyek az alkalmazások széles körében is előnyösek.