Mongodb геопространствен индекс срещу GoogleMaps Directions Service



Наскоро работих върху малък проект за услуги, базирани на местоположението, и намерението ми беше да намеря най-близкото такси (с GPS) в рамките на даден радиус от желаещ пътник (телефон с Android с GPS). Исках да използвам геопространствените индекси на MongoDB, но се оказа, че геопространствените индекси работят върху lat-longs и изчисляват изместване между две точки, а не разстояние. В моя случай търсенето беше ограничено в рамките на град и трябваше да използвам услугата за упътвания на Google Maps, защото тя показва разстоянието като по пътя, очакваното време и т.н.

Това означава ли, че геопространствените индекси имат смисъл само когато изместването е достатъчно голямо, така че разстоянието и изместването стават по същество еднакви?


person Aafreen Sheikh    schedule 05.09.2012    source източник


Отговори (1)


Геопространствените индекси имат за цел да имат бързо извличане на данни въз основа на позиция в многоизмерно пространство. Ако имате данните за позицията на кабината в база данни на MongoDB, можете да използвате геопространствен индекс, за да изберете бързо намален набор от кабини, които е по-вероятно да бъдат най-близките, но все пак ще трябва да изчислите разстоянието по пътя (и евентуално времето за шофиране), използвайки алгоритъм на пътната мрежа.

Например знаете, че ако най-близкото (по права линия) такси е на 20 км от вас, знаете, че всяко такси извън радиуса от 20 км със сигурност ще бъде по-далеч (по пътя) от първото, което сте намерили, така че вие не се интересуват от тях. След това можете да използвате пространствения индекс на MongoDB, за да получите всички таксита в радиус от 20 км и след това можете да намерите сред тях кое има минималното разстояние.

person pqnet    schedule 05.09.2012
comment
се съгласи и след това използвайте матрицата на разстоянието API на Google Карти, за да намерите разстоянията между вашето подмножество от данни. - person Mano Marks; 06.09.2012
comment
@pqnet благодаря за отговора, но кабината с денивелация от 21 км всъщност може да е по-близо до пътя от тази с денивелация от 20 км (представете си прав път за 21 км и криволичещ път за 20 км)..и MongoDB няма да знае това.. точно това ми е проблема :( - person Aafreen Sheikh; 06.09.2012
comment
кривият път не може да бъде по-къс от правия път. Това е основно свойство на триъгълника. - person pqnet; 06.09.2012
comment
поне на евклидови пространства: тъй като сте на квазисферична повърхност, може да се наложи да изчислите геодезическата (или поне долна граница за нея), но все пак можете да сте сигурни, че преминаването направо от А до Б е по-кратко или равен на всеки път, преминаващ от А до Б. - person pqnet; 06.09.2012
comment
Сравнението на маршрутите за шофиране за намиране на най-близката кола не е строго геопространствено запитване, то е оценка на няколко фактора, включително: разстояние за шофиране, време за пътуване и ограничения на трафика. Използването на бързо географско търсене за стесняване на кандидатите за предоставяне на Матрица на разстоянието би бъде добър подход (хубав API, посочен от @ManoMarks!). - person Stennie; 07.09.2012