Ako implementovať geopriestorové funkcie MongoDB

Ako Implementovat Geopriestorove Funkcie Mongodb



Geopriestorová funkcia MongoDB poskytuje priamy spôsob ukladania geografických údajov do databázy. V podstate môžeme ukladať geopriestorové údaje v MongoDB ako objekty GeoJSON. GeoJSON je bezplatný formát s otvoreným zdrojom, ktorý závisí od zápisu objektov JavaScript s jednoduchými geografickými údajmi. Táto funkcia je dôležitá pre aplikácie, ktoré vyžadujú služby na základe polohy, ako je proces mapovania, vyhľadávanie polohy a iné. Tento článok popisuje geopriestorovú funkciu s ukážkovou implementáciou.

Pridávanie dokumentov do zbierky pre geopriestorové funkcie

Na demonštráciu funkčnosti funkcie MongoDB Geospatial potrebujeme dokumenty pre konkrétnu kolekciu. Do zbierky „area“ vkladáme niekoľko dokumentov, ako je znázornené nižšie:

db.area.insertMany( [
{
názov: 'Detský park' ,
umiestnenie: { typ: 'bod' , súradnice: [ - 60,97 , 30,77 ] },
kategória: 'záhrada'
},
{
názov: 'Študentská oblasť' ,
umiestnenie: { typ: 'bod' , súradnice: [ - 60,9928 , 30,7193 ] },
kategória: 'záhrada'
},
{
názov: 'futbalové ihrisko' ,
umiestnenie: { typ: 'bod' , súradnice: [ - 60,9375 , 30,8303 ] },
kategória: 'štadión'
}
])

Máme dokumenty, ktoré obsahujú údaje o polohe, ako sú súradnice. Okrem toho vytvárame geopriestorový index na poli, aby sme optimalizovali výkon geopriestorových dopytov.









Príklad 1: Použitie operátora dopytov $geoIntersects

Po prvé, máme operátor $geoIntersects geopriestorovej funkcie, ktorý sa pretína s poskytnutým objektom. Zvážte nasledujúcu implementáciu operátora $geoIntersects:



db.area.find({ umiestnenie: { $geoIntersects: { $geometria: { typ: 'bod' ,

súradnice: [ - 60,97 , 30,77 ] } } } })

V príklade voláme kolekciu „oblasť“ spolu s operáciou „nájsť“. Metóde find() odovzdáme sady polí „umiestnenie“ operátoru dopytu $geoIntersects geopriestorového prvku. Používa sa na kontrolu, či sa určený bod pretína s geometriou, ktorá je uložená v poli geometrie.





Potom operátor $geoIntesects vezme operátor $geometry, kde je pole typu nastavené na hodnotu „Point“ a pole súradníc je dané hodnotami „súradnice“. Tu je $geometria definovaná pre geopriestorové porovnanie.

Nasledujúci výstup je miesto, kde sa získa očakávaný dokument a kde pole geometrie obsahuje geometrický objekt, ktorý sa pretína so zadaným bodom:



Príklad 2: Použitie $near Query Operator

Operátor $near je tiež geopriestorová funkcia, ktorá sa používa na vykonávanie geopriestorových dopytov na identifikáciu dokumentov, ktoré sú geograficky blízko daného miesta. Vyhľadá dokumenty, ktoré sú usporiadané podľa ich blízkosti k určenému miestu. Tu uvádzame implementáciu operátora $near:

db.area.find(
{
miesto:
{ $v blízkosti :
{
$geometry: { typ: 'bod' ,  súradnice: [ - 60,9667 , 30,78 ] },
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

V príklade definujeme pole „umiestnenie“ kolekcie „oblasť“ v rámci operácie „nájsť“. Potom nastavíme operátor dopytu $blízko geopriestorovej funkcie na toto pole „umiestnenie“. Operátor $near hľadá blízky bod s danými súradnicami bodu. Ďalej použijeme parametre $minDistance a $maxDistance v operátore $near, ktoré sú vybavené určitými hodnotami na získanie dokumentov v rámci zadaného rozsahu vzdialenosti od daného bodu.

Dokument sa získa vo výstupe, ktorý sa nachádza v blízkosti zadaných miest alebo bodov záujmu v kolekcii geopriestorových „oblastí“:

Príklad 3: Použitie operátora dopytu $nearsphere

Prípadne máme operátor $nearsphere, ktorý je podobný operátoru $nearSphere, ale $nearSphere zohľadňuje pri výpočte vzdialeností guľový tvar Zeme.

db.area.find(
{
miesto: {
$nearSphere: {
$geometry: {
typ: 'bod' ,
súradnice: [- 60,9667 , 30,78 ]
},
$minDistance: 1000 ,
$maxDistance: 5000
}
}
}
)

V príklade používame operátor $nearsphere geopriestorového dopytu. Operátor $nearspehere tu hľadá dokument, ktorého najbližšie body sú blízko k bodom, ktoré sú špecifikované v dotaze, a body sú nastavené na pole súradnicových polí.

Potom výsledky spresníme nastavením parametrov $minDistance a $maxDistance. Parameter $minDistance zaisťuje, že vrátené dokumenty sú od určeného bodu vzdialené najmenej 1000 metrov, zatiaľ čo parameter $maxDistance obmedzuje výsledky na miesta, ktoré nie sú vzdialené viac ako 5000 metrov.

Dokument sa zobrazí vo výstupe s umiestnením v rámci zadaného metra od bodu s danými súradnicami:

Príklad 4: Použitie operátora dotazu $geoWithin

Ďalej máme operátor $geoWithin v MongoDB, ktorý sa používa na geopriestorové dotazy na nájdenie dokumentov, ktoré sú úplne v rámci určeného tvaru, ako je napríklad kruh. Urobme si nasledujúcu ukážku dopytu $geoWithin:

db.area.find({ umiestnenie:

{ $geoWithin:

{ $centerSphere: [ [ - 60,93414657 , 30,82302903 ], 3 / 3963,2 ] } } })

V príklade používame operátor $geoWithin na nájdenie dokumentov kolekcie „area“ v určitej kruhovej oblasti na 2D guli. Na tento účel špecifikujeme operátor $centerSphere vnútri operátora $geoWithin, ktorý berie dva argumenty ako centrický bod, ktorý tu pravdepodobne predstavuje súradnicový bod, a polomer kruhu, ktorý predstavuje hodnotu vzdialenosti v míľach.

Výsledný dokument sa získa nasledujúcim spôsobom, ktorý predstavuje geopriestorový bod, ktorý spadá do kruhu, ktorý je definovaný daným stredovým bodom a polomerom približne 3 míle:

Príklad 5: Použitie operátora dotazu $geoNear

Operátor $geoNear je navyše aj geopriestorový operátor, ktorý sa používa na agregačný kanál. Vykoná geopriestorový dotaz a vráti dokumenty, ktoré sú zoradené podľa ich blízkosti k určenému bodu. Tu sme dali operátor $geoNear, ktorý sa volá v rámci agregačného kanála.

db.area.aggregate([
{
$geoNear: {
blízko: { typ: 'bod' , súradnice: [ - 60,99279 , 30,719296 ] },
vzdialenostné pole: 'dist.calcalcal' ,
maxDistance: 2 ,
dotaz: { kategória: 'záhrada' },
includeLocs: 'dist.location' ,
sférický: pravda
}
}
])

V príklade voláme agregovanú metódu MongoDB a definujeme v nej operátor $geoNear. Operátor $geoNear je nastavený s niekoľkými parametrami na určenie správania dotazu. Najprv nastavíme parameter „blízko“, ktorý poskytuje hodnoty „súradníc“ ako referenčný bod pre vyhľadávanie.

Potom použijeme parameter „distanceField“ na špecifikáciu poskytnutého poľa ako poľa výsledku. Toto pole výsledku sady uchováva vzdialenosť medzi každým dokumentom a referenčným bodom. Ďalej definujeme parameter „maxDistance“ s hodnotou „2“, ktorá predstavuje maximálnu vzdialenosť v metroch.

Potom máme parameter „dotaz“, ktorý filtruje dokumenty podľa poľa „kategória“ a berie do úvahy iba dokumenty, ktorých „kategória“ je „Parky“. Potom zavoláme parameter „includeLocs“, ktorý obsahuje informácie o polohe. Nakoniec špecifikujeme parameter „sférický“ s hodnotou „true“, ktorá vypočíta vzdialenosti pomocou 2D sférického súradnicového systému.

Agregačný kanál predstavuje dokument vo výstupe, ktorý zobrazuje informácie podľa parametra. Nasledujúce pole „dist.calculated“ zobrazuje vzdialenosť každého dokumentu od referenčného bodu:

Záver

Dozvedeli sme sa, že geopriestorové možnosti MongoDB nám pomáhajú efektívne spracovávať a vyhľadávať informácie založené na polohe. Naučili sme sa implementáciu geopriestorovej funkcie pomocou rôznych operátorov pomocou vzorového programu. Máme oveľa viac funkcií a metód, ktoré sú tiež prospešné pre širokú škálu aplikácií.