Обновление (тор):
Ладно, из ваших собственных комментариев кажется, что вы делаете подразумеваете тор - поверхность пончика - а не сферу. ( Это большая разница, и вы должны отредактировать свой вопрос : назвать его сферой - неправильно .)
Для этого ответ довольно прост - картезианская формула, которую вы даете, более или менее верна. Однако вам нужно обернуть расстояния так, чтобы все, что больше или равно 250 = 500/2, было переведено в число от 0 до 250.
Так что ответ примерно такой (я вообще не знаю PHP, поэтому, возможно, потребуется изменить синтаксис)
dx1 = min(dx, 500-dx)
dy1 = min(dy, 500-dy);
distance = Math.sqrt(dx1*dx1 + dy1*dy1);
(Предполагается, что вы определили dx и dy как абсолютную величину различий.)
Только что нашел эту подпрограмму , которая реализует те же вычисления в красиво упакованной функции.
Оригинальный ответ (сфера):
Вы не объяснили, как ваши (x, y) координаты отображаются на точки на сфере!
Существует (буквально) бесконечное количество вариантов, каждый из которых соответствует отдельной проекции карты , и формула для каждого из них различна. Обратите внимание, что независимо от того, какой выбор вы сделаете, значение этих двух координат очень разное.
Если ваши (x, y) действительно долгота и широта, например, существует множество консервативных формул (например, haversine), но вам придется сначала перевести 0-> 499 в 0-> 360 градусов для долготы и -90-> 90 градусов по широте. (Обратите внимание, что lon и lat ведут себя по-разному на сфере!)
Но я подчеркиваю, что любой выбор , который вы сделаете, будет искажать плоскую геометрию, которую вы получите, если вы нанесете на график (x, y), а не то, как она действительно выглядит на сфере.
(Наконец, если вы действительно имеете в виду, что верхний край такой же, как нижний, а правый такой же, как левый, то у вас, вероятно, есть тор, а не сфера!)