Како имплементирати МонгоДБ геопросторне карактеристике

Kako Implementirati Mongodb Geoprostorne Karakteristike



Геопросторна карактеристика МонгоДБ-а пружа једноставан начин за складиштење географских података у бази података. У суштини, можемо да складиштимо геопросторне податке у МонгоДБ као ГеоЈСОН објекте. ГеоЈСОН је бесплатан формат отвореног кода који зависи од ЈаваСцрипт нотације објеката са једноставним географским подацима. Ова функционалност је важна за апликације које захтевају услуге засноване на локацији као што је процес мапирања, на основу претраге локације и друго. Овај чланак покрива геопросторну карактеристику са примером имплементације.

Додавање докумената у колекцију за геопросторне карактеристике

Да бисмо демонстрирали функционалност МонгоДБ Геоспатиал функције, потребни су нам документи за одређену колекцију. Убацујемо неколико докумената у колекцију „подручја“ као што је приказано у наставку:

дб.ареа.инсертМани( [
{
име: 'Дечији парк' ,
локација: { тип: 'Тачка' , координате: [ - 60.97 , 30.77 ] },
категорија: 'Башта'
},
{
име: 'Студентски простор' ,
локација: { тип: 'Тачка' , координате: [ - 60.9928 , 30.7193 ] },
категорија: 'Башта'
},
{
име: 'Фудбалски терен' ,
локација: { тип: 'Тачка' , координате: [ - 60.9375 , 30.8303 ] },
категорија: 'Стадион'
}
])

Имамо документе који садрже податке о локацији као што су координате. Поред тога, креирамо геопросторни индекс на терену да бисмо оптимизовали перформансе геопросторних упита.









Пример 1: Коришћење оператора упита $геоИнтерсецтс

Прво, имамо оператор $геоИнтерсецтс геопросторне карактеристике који се укршта са датим објектом. Размотрите следећу имплементацију оператора $геоИнтерсецтс:



дб.ареа.финд({ локација: { $геоИнтерсецтс: { $геометри: { тип: 'Тачка' ,

координате: [ - 60.97 , 30.77 ] } } } })

У примеру, ми зовемо колекцију „област“ заједно са операцијом „пронађи“. Методу финд() прослеђујемо сетове поља „локација“ оператору упита $геоИнтерсецтс геопросторне карактеристике. Ово се користи за проверу да ли се наведена тачка сече са геометријом која је сачувана у пољу геометрије.





Затим, $геоИнтесецтс оператор узима оператор $геометри где је поље типа постављено са вредношћу „Тачка“, а поље за координате је дато са вредностима „координата“. Овде је $геометрија дефинисана за геопросторно поређење.

Следећи излаз је место где се преузима очекивани документ и где поље геометрије садржи геометријски објекат који се пресеца са наведеном тачком:



Пример 2: Коришћење оператора упита $неар

Оператор $неар је такође геопросторна карактеристика која се користи за геопросторне упите за идентификацију докумената који су географски близу датог места. Он преузима документе који су распоређени према њиховој близини наведеној локацији. Овде пружамо имплементацију оператора $неар:

дб.ареа.финд(
{
локација:
{ $близу :
{
$геометри: { тип: 'Тачка' ,  координате: [ - 60.9667 , 30.78 ] },
$минДистанце: 1000 ,
$макДистанце: 5000
}
}
}
)

У примеру, дефинишемо поље „локација“ колекције „област“ унутар операције „пронађи“. Затим постављамо $неар оператор упита геопросторне карактеристике на то поље „локација“. $неар оператор тражи блиску тачку са датом тачком координата. Затим користимо параметре $минДистанце и $макДистанце у оператору $неар који имају одређене вредности за преузимање докумената унутар специфицираног опсега удаљености од дате тачке.

Документ се преузима у излазу који се налази у близини наведених локација или тачака од интереса у геопросторној колекцији „области“:

Пример 3: Коришћење оператора упита $неарспхере

Алтернативно, имамо оператор $неарспхере који је сличан $неар оператору, али $неарСпхере узима у обзир сферни облик Земље приликом израчунавања удаљености.

дб.ареа.финд(
{
локација: {
$неарСпхере: {
$геометри: {
тип : 'Тачка' ,
координате : [ - 60.9667 , 30.78 ]
},
$минДистанце: 1000 ,
$макДистанце: 5000
}
}
}
)

У примеру користимо оператор $неарспхере геопросторног упита. Оператор $неарспехере овде тражи документ чије су најближе тачке близу тачкама које су наведене у упиту, а тачке су постављене на низ координатних поља.

Након тога, прецизирамо резултате успостављањем параметара $минДистанце и $макДистанце. Параметар $минДистанце осигурава да су враћени документи удаљени најмање 1000 метара од наведене тачке, док параметар $макДистанце ограничава резултате на локације које нису удаљене више од 5000 метара.

Документ се приказује у излазу са локацијом унутар одређеног метра од тачке са датим координатама:

Пример 4: Коришћење оператора упита $геоВитхин

Затим имамо оператор $геоВитхин у МонгоДБ-у који се користи за геопросторне упите за проналажење докумената који су у потпуности унутар одређеног облика као што је круг. Хајде да имамо следећу демонстрацију упита $геоВитхин:

дб.ареа.финд({ локација:

{ $геоВитхин:

{ $центерСпхере: [ [ - 60.93414657 , 30.82302903 ], 3 / 3963.2 ] } } })

У примеру, користимо оператор $геоВитхин да пронађемо документе колекције „подручја“ унутар одређене кружне области на 2Д сфери. За ово, специфицирамо оператор $центерСпхере унутар оператора $геоВитхин који узима два аргумента као центричну тачку, која вероватно представља координатну тачку овде, и радијус круга који представља вредност удаљености у миљама.

Резултирајући документ се преузима у наставку и представља геопросторну тачку која спада у круг који је дефинисан датом централном тачком и полупречником од приближно 3 миље:

Пример 5: Коришћење оператора упита $геоНеар

Штавише, $геоНеар оператор је такође геопросторни оператор који се користи за агрегациони цевовод. Изводи геопросторни упит и враћа документе који су сортирани по њиховој близини одређеној тачки. Овде смо дали оператор $геоНеар који се позива унутар агрегационог цевовода.

дб.ареа.аггрегате([
{
$геоНеар: {
у близини: { типе: 'Тачка' , координате: [ - 60.99279 , 30.719296 ] },
дистанцеФиелд: 'дист.цалцулатед' ,
макДистанце: 2 ,
упит: { категорија: 'Башта' },
инцлудеЛоцс: 'дист.лоцатион' ,
сферни: истинит
}
}
])

У примеру, позивамо агрегатни метод МонгоДБ-а и дефинишемо оператор $геоНеар унутар њега. Оператор $геоНеар је постављен са неколико параметара за одређивање понашања упита. Прво, постављамо параметар „неар“ који обезбеђује вредности „координата“ као референтну тачку за претрагу.

Затим користимо параметар „дистанцеФиелд“ да наведемо дато поље као поље исхода. Ово постављено поље исхода чува растојање између сваког документа и референтне тачке. Затим дефинишемо параметар „макДистанце” са вредношћу „2″ која представља максимално растојање у метрима.

Након тога имамо параметар „упит“ који филтрира документе по пољу „категорија“ и узима у обзир само оне документе код којих је „категорија“ „Паркови“. Затим позивамо параметар „инцлудеЛоцс“ да садржи информације о локацији. Коначно специфицирамо „сферични“ параметар са „труе“ вредношћу која израчунава растојања користећи 2Д сферни координатни систем.

Цјевовод агрегације представља документ у излазу који приказује информације у складу са параметром. Следеће поље „дист.цалцулатед“ приказује удаљеност сваког документа од референтне тачке:

Закључак

Сазнали смо да нам геопросторне могућности МонгоДБ-а помажу да ефикасно обрађујемо и тражимо информације засноване на локацији. Научили смо имплементацију геопросторне карактеристике користећи њене различите операторе са примером програма. Имамо много више функционалности и метода које су такође корисне за широк спектар апликација.