Kuinka ottaa käyttöön MongoDB:n geospatiaalisia ominaisuuksia

Kuinka Ottaa Kayttoon Mongodb N Geospatiaalisia Ominaisuuksia



MongoDB:n geospatiaalinen ominaisuus tarjoaa yksinkertaisen tavan tallentaa maantieteelliset tiedot tietokantaan. Pohjimmiltaan voimme tallentaa geospatiaaliset tiedot MongoDB:hen GeoJSON-objekteina. GeoJSON on ilmainen ja avoimen lähdekoodin muoto, joka riippuu JavaScript Object Notationista yksinkertaisilla maantieteellisillä tiedoilla. Tämä toiminto on tärkeä sovelluksille, jotka vaativat sijaintiin perustuvia palveluita, kuten kartoitusprosessia, sijaintihakuun perustuvaa prosessia ja muita. Tämä artikkeli kattaa geospatiaalisen ominaisuuden esimerkkitoteutuksen kanssa.

Asiakirjojen lisääminen paikkatietokokoelmaan

MongoDB Geospatial -ominaisuuden toimivuuden osoittamiseksi tarvitsemme asiakirjat tietylle kokoelmalle. Lisäämme muutaman asiakirjan 'alue'-kokoelmaan seuraavan kuvan mukaisesti:

db.area.insertMany( [
{
nimi: 'Lastenpuisto' ,
sijainti: { tyyppi: 'Kohta' , koordinaatit: [ - 60,97 , 30.77 ] },
kategoria: 'Puutarha'
},
{
nimi: 'Opiskelijaalue' ,
sijainti: { tyyppi: 'Kohta' , koordinaatit: [ - 60,9928 , 30,7193 ] },
kategoria: 'Puutarha'
},
{
nimi: 'Jalkapallokenttä' ,
sijainti: { tyyppi: 'Kohta' , koordinaatit: [ - 60,9375 , 30,8303 ] },
kategoria: 'Stadion'
}
] )

Meillä on asiakirjoja, jotka sisältävät sijaintitiedot, kuten koordinaatit. Lisäksi luomme kenttään geospatiaalisen indeksin geospatiaalisen kyselyn suorituskyvyn optimoimiseksi.









Esimerkki 1: $geoIntersects-kyselyoperaattorin käyttäminen

Ensinnäkin meillä on geospatiaalisen ominaisuuden $geoIntersects-operaattori, joka leikkaa tarjotun kohteen. Harkitse seuraavaa $geoIntersects-operaattorin toteutusta:



db.area.find({ sijainti: { $geoIntersects: { $geometry: { type: 'Kohta' ,

koordinaatit: [ - 60,97 , 30.77 ] } } } })

Esimerkissä kutsumme 'alue'-kokoelmaa yhdessä 'etsi'-toiminnon kanssa. Find()-menetelmälle välitämme 'sijainti'-kenttäjoukot geospatiaalisen ominaisuuden $geoIntersects-kyselyoperaattorille. Tätä käytetään tarkistamaan, leikkaako määritetty piste geometriakenttään tallennetun geometrian kanssa.





Sitten $geoIntesects-operaattori ottaa $geometry-operaattorin, jossa tyyppikenttä on asetettu 'Piste'-arvolla ja koordinaattikenttä annetaan 'koordinaatit'-arvoilla. Tässä $geometria määritellään geospatiaalista vertailua varten.

Seuraava tulos on paikka, josta odotettu asiakirja noudetaan ja jossa geometriakenttä sisältää geometrisen objektin, joka leikkaa määritetyn pisteen:



Esimerkki 2: $near Query Operatorin käyttö

$near-operaattori on myös geospatiaalinen ominaisuus, jota käytetään geospatiaaliseen kyselyyn tunnistaakseen asiakirjat, jotka ovat maantieteellisesti lähellä tiettyä paikkaa. Se hakee asiakirjat, jotka on järjestetty niiden läheisyyden mukaan määritettyyn sijaintiin. Tässä tarjoamme $near-operaattorin toteutuksen:

db.area.find(
{
sijainti:
{ $lähellä :
{
$geometry: { tyyppi: 'Kohta' ,  koordinaatit: [ - 60,9667 , 30.78 ] },
$minDistance: 1000 ,
$maxEtäisyys: 5000
}
}
}
)

Esimerkissä määrittelemme 'alue'-kokoelman 'sijainti'-kentän 'etsi'-toiminnon sisällä. Sitten asetamme geospatiaalisen ominaisuuden $near-kyselyoperaattorin kyseiseen 'sijainti'-kenttään. $near-operaattori etsii lähipistettä annetulla koordinaattipisteellä. Seuraavaksi käytämme $minDistance- ja $maxDistance-parametreja $near-operaattorissa, jotka on varustettu tietyillä arvoilla hakeaksemme asiakirjat määritetyllä etäisyysalueella annetusta pisteestä.

Asiakirja haetaan tulosteessa, joka on lähellä määritettyjä paikkoja tai kiinnostavia kohteita geospatiaalisen 'alue' kokoelmassa:

Esimerkki 3: $nearsphere-kyselyoperaattorin käyttäminen

Vaihtoehtoisesti meillä on $nearsphere-operaattori, joka on samanlainen kuin $near-operaattori, mutta $nearSphere ottaa huomioon Maan pallomuodon etäisyyksiä laskettaessa.

db.area.find(
{
sijainti: {
$nearSphere: {
$geometry: {
tyyppi: 'Kohta' ,
koordinaatit: [- 60,9667 , 30.78 ]
},
$minDistance: 1000 ,
$maxEtäisyys: 5000
}
}
}
)

Esimerkissä käytämme geospatiaalisen kyselyn operaattoria $nearsphere. $nearspehere-operaattori etsii tässä asiakirjaa, jonka lähimmät pisteet ovat lähellä kyselyssä määritettyjä pisteitä, ja pisteet asetetaan koordinaattikenttätaulukkoon.

Sen jälkeen tarkennamme tuloksia määrittämällä parametrit $minDistance ja $maxDistance. $minDistance-parametri varmistaa, että palautetut asiakirjat ovat vähintään 1000 metrin päässä määritetystä pisteestä, kun taas $maxDistance-parametri rajoittaa tulokset paikkoihin, jotka ovat enintään 5000 metrin päässä.

Asiakirja näytetään tulosteessa, jonka sijainti on tietyn metrin sisällä pisteestä annetuilla koordinaatteilla:

Esimerkki 4: $geoWithin-kyselyoperaattorin käyttäminen

Seuraavaksi meillä on MongoDB:ssä $geoWithin-operaattori, jota käytetään geospatiaalisiin kyselyihin sellaisten asiakirjojen löytämiseksi, jotka ovat täysin tietyn muodon, kuten ympyrän, sisällä. Otetaan seuraava esittely $geoWithin-kyselystä:

db.area.find({ sijainti:

{ $geoWithin:

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

Esimerkissä käytämme $geoWithin-operaattoria etsimään 'alue'-kokoelman dokumentit tietyltä 2D-pallon ympyrämäiseltä alueelta. Tätä varten määritämme $geoWithin-operaattorin sisällä $centerSphere-operaattorin, joka ottaa kaksi argumenttia keskipisteeksi, joka todennäköisesti edustaa koordinaattipistettä tässä, ja ympyrän säteen, joka edustaa etäisyyden arvoa maileina.

Tuloksena oleva asiakirja noudetaan seuraavassa, joka edustaa geospatiaalista pistettä, joka osuu ympyrään, jonka määrittää annettu keskipiste ja noin 3 mailin säde:

Esimerkki 5: $geoNear-kyselyoperaattorin käyttäminen

Lisäksi $geoNear-operaattori on myös geospatiaalinen operaattori, jota käytetään yhdistämisputkistoon. Se suorittaa geospatiaalisen kyselyn ja palauttaa asiakirjat, jotka on lajiteltu niiden läheisyyden mukaan tiettyyn pisteeseen. Tässä olemme antaneet $geoNear-operaattorin, jota kutsutaan aggregointiputken sisällä.

db.area.aggregate([
{
$geoNear: {
lähellä: { tyyppi: 'Kohta' , koordinaatit: [ - 60,99279 , 30.719296 ] },
distanceField: 'dist.calculated' ,
maxDistance: 2 ,
kysely: { kategoria: 'Puutarha' },
includeLocs: 'dist.location' ,
pallomainen: totta
}
}
])

Esimerkissä kutsumme MongoDB:n aggregaattimenetelmää ja määrittelemme sen sisällä $geoNear-operaattorin. $geoNear-operaattorille on asetettu useita parametreja kyselyn käyttäytymisen määrittämiseksi. Ensin asetamme 'lähellä'-parametrin, joka tarjoaa 'koordinaatit'-arvot haun viitepisteeksi.

Sitten käytämme 'distanceField'-parametria määrittääksemme annetun kentän tuloskenttään. Tämä asetettu tuloskenttä tallentaa kunkin asiakirjan ja vertailupisteen välisen etäisyyden. Seuraavaksi määritämme 'maxDistance'-parametrin arvolla '2', joka edustaa suurinta etäisyyttä metreinä.

Sen jälkeen meillä on 'kysely'-parametri, joka suodattaa asiakirjat 'luokka'-kentän mukaan ja ottaa huomioon vain ne asiakirjat, joissa 'luokka' on 'Puistot'. Kutsumme sitten 'includeLocs'-parametria sisältämään sijaintitiedot. Lopuksi määritämme 'pallomaisen' parametrin 'true'-arvolla, joka laskee etäisyydet käyttämällä 2D pallomaista koordinaattijärjestelmää.

Aggregointiliukuhihna edustaa tulosteessa olevaa asiakirjaa, joka näyttää parametrin tiedot vastaavasti. Seuraava 'dist.calculated' -kenttä näyttää kunkin asiakirjan etäisyyden vertailupisteestä:

Johtopäätös

Saimme tietää, että MongoDB:n geospatiaaliset ominaisuudet auttavat meitä käsittelemään ja kyselemään sijaintiin perustuvia tietoja tehokkaasti. Opimme geospatiaalisen ominaisuuden toteutusta sen eri operaattoreiden avulla esimerkkiohjelman avulla. Meillä on paljon enemmän toimintoja ja menetelmiä, jotka ovat hyödyllisiä myös monenlaisissa sovelluksissa.