Можем ли мы найти расстояние до двух или более геопоинтов в запросе, используя $geoNear
от точки запроса?
Transport.aggregate([
{
$geoNear: {
near: first_route.origin.geocode,
spherical: true,
distanceField: "origin.distance",
key: "route.origin.geocode"
}
},
{ $match: query },
Я расскажу сценарий.У меня есть коллекция документов, которая содержит список автобусных услуг, поэтому каждый документ будет содержать сведения о поездке с начальным геопунктом (A), конечным геопунктом (B) и линией строк, определяющей путь вместе со временем начала.Таким образом, пользователи могут приходить и искать автобус, задавая начальное (AU) и конечное (BU) геопункт (используя Google API).Что я делаю здесь, чтобы запросить шину, так это то, что я буферизую выбранные пользователем геопоинты, используя turfjs, и проверяю, пересекает ли она линейную строку в mongodb, используя $geoIntersects
.Теперь я получу автобусы от A до B и от B до A, как результат, я хочу отфильтровать B из A из результата (пользователь может искать суб-маршрут между фактическим автобусным маршрутом).Для этого я хочу найти расстояние от начальной точки (A) автобуса до «начальной точки пользователя (AU)» и «конечной точки, выбранной пользователем (BU)», из этих расстояний я всегда могу убедиться, что A-AU меньшечем A-BU и, таким образом, отфильтровываем шины от B до A. Документ, как показано ниже, я удалил несколько координат, чтобы уменьшить длину данных.Я предпочитаю логические предложения также для решения этой проблемы.
{
"_id": "5bb21fe97c877c39e0bbc694",
"route": {
"origin": {
"geocode": {
"type": "Point",
"coordinates": [
10.0601903,
76.6350827
]
},
"geocode_buffered": {
"type": "Polygon",
"coordinates": [
[ ]
]
},
"place": "Kothamangalam, Kerala, India",
"place_id": "ChIJqY5hYBLmBzsRB1zUid9GIqM"
},
"destination": {
"geocode": {
"type": "Point",
"coordinates": [
9.9894229,
76.57897490000005
]
},
"geocode_buffered": {
"type": "Polygon",
"coordinates": [
[ ]
]
},
"place": "Muvattupuzha, Kerala, India",
"place_id": "ChIJ8_D2nYzdBzsR5WJwzP9sULQ"
},
"geocodes": {
"type": "LineString",
"coordinates": [
[
10.06028,
76.63511000000001
],
[
10.06042,
76.6346
],
[
10.060490000000001,
76.63411
],
[
9.989220000000001,
76.58159
],
[
9.989450000000001,
76.5794
],
[
9.98943,
76.57932000000001
],
[
9.98935,
76.57905000000001
]
]
},
"route_index": 0,
"route_name": "NH85"
},
"access_type": "public",
"type": "bus",
"day_frequency": [
1,
2,
3,
4,
5,
6,
7
],
"duration_days": 0,
"duration_hours": 0.23,
"created_on": "2018-10-01T13:20:26.006Z",
"title": "Rx100",
"description": "Ls",
"timings": [
{
"departure": "13:00",
"destination": "13:23",
"_id": "5bb21fe97c877c39e0bbc692",
"trackings": []
}
],
"__v": 0
}