Имейте это так, чтобы всякий раз, когда вы добавляете город в свою базу данных, запускается фрагмент кода (в автономном режиме), который вычисляет ближайший город к каждому вашему городу. Вы можете сделать так, чтобы каждый город указывал на другой город в качестве ближайшего города с иностранным ключом.
Теперь, когда у вас есть все предварительно рассчитано, всякий раз, когда есть живой запрос с названием города, вы просто нажимаете на базу данных с названием города, и вы можете добраться до ближайшего города по указанной вами иностранной клавише. (город --- иностранный ключ ---> город)
Теперь это будет очень быстро, поскольку вы предварительно рассчитали ближайший город в автономном режиме и можете сразу же возвращать результат при каждом запросе в реальном времени.
Но как часто вы планируете добавить город? Вероятно, не так часто. Таким образом, предварительный расчет в автономном режиме будет редким, даже если это займет немного времени. Но живые запросы отвечают очень быстро. (другие уже рекомендовали формулу для расчета расстояния, поэтому я пропущу эту часть!)