Mongodb геопространственных индексов, 2d против 2dsphere
Согласно документам, это говорит о двухмерных индексах:
2d-индекс поддерживает вычисления на плоской евклидовой плоскости. 2d-индекс также поддерживает вычисления только на расстоянии в сфере, но для геометрических вычислений (например, $ geoWithin) в сфере сохраняйте данные как объекты GeoJSON и используйте тип индекса 2dsphere.
Мало что я не понимаю..
- Я не понимаю, что подразумевается под расстоянием только, означает ли это Аккорд (та линия, которая соединяет две точки поверхности через линию "внутри" поверхности)?
- Как этот расчет работает против долготы и широты Земли? Если это было разработано для евклидова пространства, как оно выражает расстояние в радианах?
- Вместо этого, используя индексы 2dsphere, он правильно вычисляет расстояние между двумя точками, но работает без указания линий 360 долготы и 180 линий широты. Он запрограммирован специально для долготы и широты Земли?
- Если 3. выше правильно. учитывает ли это, что Земля является сплющенным сфероидом, а не идеальной сферой?
1 ответ
- Нет. Это означает, что расстояние по поверхности, используя формулу Haversine.
- Я не уверен, что вы пытаетесь спросить относительно того, "как оно выражает расстояние в радианах", но если вы имеете в виду, как значения угла широты / долготы и дельты преобразуются в радианы, это: PI * angle / 180.0. Чтобы получить полную формулу Haversine, перейдите по этой ссылке для реализации на 84 языках: http://rosettacode.org/wiki/Haversine_formula
- В индексах 2dsphere используется элемент данных WGS84 (который определяет границы). См.: http://spatialreference.org/ref/epsg/4326/.
- Не глядя на их код невозможно сказать. Но учитывая, что они используют WGS84 и говорят о "земной сфере", это очень сомнительно. Я предполагаю, что они используют Haversine (таким образом, вычисления расстояния - только приближение).