Mongodb геопространственных индексов, 2d против 2dsphere

Согласно документам, это говорит о двухмерных индексах:

2d-индекс поддерживает вычисления на плоской евклидовой плоскости. 2d-индекс также поддерживает вычисления только на расстоянии в сфере, но для геометрических вычислений (например, $ geoWithin) в сфере сохраняйте данные как объекты GeoJSON и используйте тип индекса 2dsphere.

Мало что я не понимаю..

  1. Я не понимаю, что подразумевается под расстоянием только, означает ли это Аккорд (та линия, которая соединяет две точки поверхности через линию "внутри" поверхности)?
  2. Как этот расчет работает против долготы и широты Земли? Если это было разработано для евклидова пространства, как оно выражает расстояние в радианах?
  3. Вместо этого, используя индексы 2dsphere, он правильно вычисляет расстояние между двумя точками, но работает без указания линий 360 долготы и 180 линий широты. Он запрограммирован специально для долготы и широты Земли?
  4. Если 3. выше правильно. учитывает ли это, что Земля является сплющенным сфероидом, а не идеальной сферой?

1 ответ

  1. Нет. Это означает, что расстояние по поверхности, используя формулу Haversine.
  2. Я не уверен, что вы пытаетесь спросить относительно того, "как оно выражает расстояние в радианах", но если вы имеете в виду, как значения угла широты / долготы и дельты преобразуются в радианы, это: PI * angle / 180.0. Чтобы получить полную формулу Haversine, перейдите по этой ссылке для реализации на 84 языках: http://rosettacode.org/wiki/Haversine_formula
  3. В индексах 2dsphere используется элемент данных WGS84 (который определяет границы). См.: http://spatialreference.org/ref/epsg/4326/.
  4. Не глядя на их код невозможно сказать. Но учитывая, что они используют WGS84 и говорят о "земной сфере", это очень сомнительно. Я предполагаю, что они используют Haversine (таким образом, вычисления расстояния - только приближение).
Другие вопросы по тегам