Как использовать геопространственные расширения MySQL со сферической геометрией

Я хотел бы сохранить тысячи точек широты / долготы в базе данных MySQL. Мне удалось настроить таблицы и добавить данные с использованием геопространственных расширений, где столбец «координата» представляет собой точку (широта, долгота).

Проблема:

Я хочу быстро найти «N» ближайших записей к градусам широты «X» и долготе «Y». Поскольку функция Distance () еще не реализована, я использовал функцию GLength () для вычисления расстояния между (X, Y) и каждой из записей, сортировки по возрастанию расстояния и ограничения результатов N. Проблема в том, что это не вычисление кратчайшего расстояния со сферической геометрией. Это означает, что если Y = 179,9 градуса, список ближайших записей будет включать только долготы, начиная с 179. 9 и уменьшается, хотя существуют более близкие записи с долготой, увеличивающейся с -179,9.

Как обычно справляются с неравномерностью долготы при работе со сферической геометрией в базах данных? Должно быть простое решение этой проблемы, но я должен просто искать не то, потому что не нашел ничего полезного.

Должен ли я просто забыть о функции GLength () и создать свою собственную функцию для вычисления углового разделения? Если я сделаю это, будет ли он по-прежнему быстрым и воспользуются ли преимущества геопространственных расширений?

Спасибо!

josh


ОБНОВЛЕНИЕ:

Это именно то, что я описываю выше. Однако это только для SQL Server. По-видимому, SQL Server имеет типы данных Geometry и Geography. География делает именно то, что мне нужно. Есть ли что-то подобное в MySQL?

5
задан Joshua 8 January 2011 в 21:50
поделиться