Ответ 1
Километры в радианах или расстояние и в радианах
Я прибыл сюда, был смущен, затем я посмотрел несколько видеофильмов об академии Хана, и в тот момент это имело больше смысла, и тогда я смог реально взглянуть на уравнения из других источников, чтобы получить дополнительное образование.
Здесь мой ход мыслей.
Я вижу диаграмму о радианах и сначала думаю, что радиус от точки геолокации неверен.
Вместо этого представьте, что земля идеально разрезана пополам и просто сфокусируйтесь на одной из половинок.
- Теперь поверните эту половину к себе и посмотрите на математическую диаграмму.
- Представьте себе математическую диаграмму, которая показывает, как центр Земли измеряет край земли на основе длины дуги, после того как вся земля искривлена, поэтому любое измерение будет искривлено на поверхности земли.
- Радианы подобны градусам в круге, а длина дуги - буквально расстояние между A и B на математической диаграмме.
- Для вас это прямая линия с высоты птичьего полета, но на самом деле это просто кривая в трехмерном пространстве вдоль края земли.
- Эврика! У меня в голове зажглась лампочка.
distance = earth radius * radians
Таким образом, с некоторой очень легкой алгеброй...
radians = distance / earth radius
км
radians = distance in km / 6371
ми
radians = distance in mi / 3959
Иногда думать об этом весело.
Еще раз проверьте это... https://www.translatorscafe.com/unit-converter/en/length/7-89/kilometer-Earth%E2%80%99s%20equatorial%20radius/
Теперь в отношении Mongo v3.2, в частности, с использованием mongoose в node.js
Несмотря на все мои усилия, mongo не будет вести себя правильно, как описано для запроса $ geoNear по 2d индексу. никогда не работал
let aggregate = [
{
$geoNear: {
near: { type: 'Point', coordinates: lonLatArray },
spherical: false,
distanceField: 'dist.calculated',
includeLocs: 'dist.location',
maxDistance: distanceInMeters / (6371 * 1000),
query: {
mode: 'nearme',
fcmToken: { $exists: true }
}
}
},
{ $skip: skip },
{ $limit: LIMIT }
];
Однако, когда я перешел на индекс 2dsphere, он работал отлично.
let aggregate = [
{
$geoNear: {
near: { type: 'Point', coordinates: lonLatArray },
spherical: true,
distanceField: 'dist.calculated',
includeLocs: 'dist.location',
maxDistance: distanceInMeters,
query: {
mode: 'nearme',
fcmToken: { $exists: true }
}
}
},
{ $skip: skip },
{ $limit: LIMIT }
];
Но образование никогда не кажется пустой тратой времени.