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

Привет.

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

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

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

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

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


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


Ответы (1)


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

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

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

person jsist    schedule 27.09.2012
comment
Спасибо посмотрю - person Frildoren; 27.09.2012