вы знаете, я делал запросы широты и долготы в Starbucks около 5 лет назад ...
и, в основном, мы хотели соотнести магазины с распределительными центрами. Я работал в их операционном отделе, и они честно не могли сказать, какой магазин был поставлен конкретным складом.
Итак, я пришел к этому алгоритму «магического круга».
в основном, у них было несколько запросов, которые выглядели так:
выберите * из таблицы1, таблицы2, где UdfDistance (table1.Lat, table1.Long, table2.Lat, table2.Long)> = 250
Я закончил тем, что придумал что-то ДЕЙСТВИТЕЛЬНО похожее, но оно работало НАМНОГО быстрее
выбрать * из таблицы1, таблицы2, где UdfDistance (table1.Lat, table1.Long, table2.Lat, table2.Long)> = 250
и table1.Lat между (table2.Lat - 1) и (table2.Lat + 1)
и table1.Long между (table2.Long - 1) и (table2.Long + 1)
По сути, не пытайтесь сравнивать две географические точки, если между ними была разница в 1 градус (широта и долгота).
Другими словами - он использовал НОРМАЛЬНЫЕ ОТНОСИТЕЛЬНЫЕ ИНДЕКСЫ, чтобы отфильтровать большую часть значений, а затем вычисление расстояния UDF было ОЧЕНЬ МНОГО информации для обработки.
Надеюсь, это поможет, я постараюсь помочь уточнить, если мне нужно