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.