Я только что провел тест с таблицей из 1976 ресторанов:
ID lon lat poi_name
-- --------- -------- ---------------------------------------------
1 -114.063 51.0466 Palomino Smokehouse: Calgary, AB
2 -114.055 51.0494 Bookers BBQ Grill and Crab Shack: Calgary, AB
3 -86.97871 34.58037 Big Bob Gibson's Original: Decatur, AL
4 -87.01763 34.56587 Big Bob Gibson's #2: Decatur, AL
5 -86.364 32.26995 DJ's Old Post Office: Hope Hull, AL
...
Используя функцию GreatCircleDistance
, доступную из ...
http://www.cpearson.com/excel/LatLong.aspx
... Я выполнил следующий запрос, чтобы вычислить расстояние от заданной точки
PARAMETERS prmLon IEEEDouble, prmLat IEEEDouble;
SELECT BBQ2.ID, BBQ2.lon, BBQ2.lat, BBQ2.poi_name,
GreatCircleDistance([prmLat],[prmLon],[lat],[lon],True,False) AS km
FROM BBQ2;
, и результаты вернулись менее чем за секунду.
Затем, чтобы вернуть результаты в пределах определеннойколичество километров от заданной точки, которое я использовал
PARAMETERS prmLon IEEEDouble, prmLat IEEEDouble, prmWithinKm IEEEDouble;
SELECT * FROM
(
SELECT BBQ2.ID, BBQ2.lon, BBQ2.lat, BBQ2.poi_name,
GreatCircleDistance([prmLat],[prmLon],[lat],[lon],True,False) AS km
FROM BBQ2
)
WHERE km <= [prmWithinKm];
и снова результаты вернулись менее чем за секунду.