Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Точное расстояние между двумя точками в пространственной таблице MySQL в км

Автор вопроса: FrildorenОтветов: 1

Привет.

Я видел несколько сообщений и ответов на эту тему, но я думаю, что приведенный результат может быть не совсем точным.

Допустим, у меня есть строки с разными точками с долготой и широтой в пространственной таблице MySQL. Я просто хочу получить расстояние между ними с помощью простого запроса SELECT. Я пытался:

GLENGTH(
        LINESTRINGFROMWKB(
            LINESTRING(
                GEOMFROMTEXT(
                    ASTEXT(
                        POINTFROMWKB(
                            POINT( X(user_location) , Y(user_location))))),
                GEOMFROMTEXT(
                    ASTEXT(
                        POINTFROMWKB(
                            POINT( $latitude, $longitude )))))))*100

Я знаю, что это "уродливо", и боюсь, что результат не будет дан в километрах.

Как я должен это сделать? Большое спасибо.

  • Было бы полезно отформатировать формулу, чтобы она была читабельной. Кроме того, то, что вы ищете, известно как гаверсинус или формула расстояния по большому кругу. O. Jones 27.09.2012
  • Кроме того: это зависит от того, насколько точным вы должны быть. Если вы делаете приложение для поиска магазинов, формула гаверсинуса подойдет. Если вы делаете инженерный план моста, вам нужно узнать о картографических проекциях; земля не идеально сферическая. O. Jones 27.09.2012

phpspatial

Ответы

Ответ 1 · рейтинг 3 · jsist

Метод, который вы используете, не даст вам точных результатов вообще. Поскольку GLENGTH использует простую декартову формула расстояния. Вы также можете прочитать в комментариях здесь, Страница GLENGTH в MySQL о том, что ее нельзя использовать на сферических поверхностях, она предназначена для декартовой плоскости.

В этом ответе Stackoverflow есть это модифицированная формула, и как ее использовать ясно объяснено, взгляните на нее. Вам нужно будет изменить это в соответствии с вашими целями. Но он определенно подскажет вам, как действовать дальше.

Надеюсь, поможет...

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы