Per concentrarsi su (a):
In passato, ho precalcolato le parti, memorizzando lat, long, xaxis, yaxis e zxais, dove x, y e z sono definite come:
xaxis = cos(radians(Lat)) * cos(radians(Lon))
yaxis = cos(radians(Lat)) * sin(radians(Lon))
zaxis = sin(radians(Lat))
La distanza può quindi essere calcolata utilizzando SQL liberamente come (acos( xaxis * $xaxis + yaxis * $yaxis + zaxis * $zaxis ) * 6367.0 / 1.852)
(dove quelli che iniziano con $ sono precalcolati per il punto di partenza in questione nello stesso modo di cui sopra)
Il pre-calcolo in questo modo spinge il trigger relativamente costoso a un evento occasionale e semplifica la query.