2016-08-26 3 views
0

У меня есть MySQL таблицы и запрос, чтобы получить расстояние в заданном радиусе:ST_Length единица измерения тип

SELECT 
     *, 
(ST_Length(LineStringFromWKB(LineString(location, GeomFromText("POINT(55.525211 30.492340)"))))) AS distance        
    FROM 
     `#__positions` 
    HAVING 
     distance < radius 

Например, я wan't, чтобы получить все записи в радиусе 2 миль. Но моя проблема, поскольку я не знаю, что устройство возвращается ST_Length. Если это степень как я могу преобразовать это в мили?

-определение стол таблицы содержит много пространственных точек по всему миру. Спасибо.

ответ

1

Я не пользователь MYSQL, но из того, что я могу сказать, он похож на MSSQL в этом отношении.

Я верю GeomFromText является декартивным, и если да, то ST_Length не даст вам то, что вы хотите.

Попробуйте это, чтобы быть уверенным:

SELECT 
ST_Length(
    LineStringFromWKB(
    LineString(
     GeomFromText("POINT(0 0)"), 
     GeomFromText("POINT(1 0)") 
    ) 
) 
) 

Если что дает значение 1, то вы операцию в декартовой или плоско-плоскости, координаты.

В вашем вопросе вы спросили, вернулась ли единица, степень, и это почти так.

Проблема в том, что не все градусы равны. Притворись, что ты в нескольких шагах от северного полюса; вы можете пройти между 0 градусами долготы и 90 градусами долготы в несколько шагов. Если вы оделись на экваторе, вам придется пересечь океан. Это означает, что степень не конвертируется в длину.

Из (по общему признанию, небольшого) количества поисковых запросов, которые я сделал по этой проблеме, похоже, что в MYSQL нет встроенной функции, чтобы дать вам измерение поверхности земного шара. Я считаю, что лучше всего написать функцию, чтобы использовать формулу haversine, чтобы определить ваши расстояния.

Смежные вопросы