Aby skupić się na (a):
W przeszłości wstępnie obliczyłem części, przechowując łaty, długie, xaxis, yaxis i zxais, gdzie x, y &z są zdefiniowane jako:
xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))
Odległość można następnie obliczyć za pomocą SQL luźno jak (acos( xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis ) * 6367.0 / 1.852)
(gdzie te zaczynające się od $ są wstępnie obliczone dla danego punktu początkowego w taki sam sposób jak powyżej)
Obliczenia wstępne w ten sposób przenoszą stosunkowo kosztowny wyzwalacz do jednorazowego zdarzenia i upraszczają zapytanie.