#mysql #gis
#mysql #гис
Вопрос:
Я использовал руководство от http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html итак, я создал две таблицы, вставил некоторые данные, и когда я попытался получить некоторые данные с помощью такого скрипта
SELECT
c.cab_driver,
ROUND(GLength(LineStringFromWKB(LineString(AsBinary(c.cab_loc),
AsBinary(a.address_loc)))))
AS distance
FROM cab c, address a
WHERE a.address = 'Foobar street 110'
ORDER BY distance ASC LIMIT 1;
я получил сообщение об ошибке: «Код ошибки: 1367 Недопустимое негеометрическое значение ‘aswkb ( c
. cab_loc
)’, найденное во время синтаксического анализа»
Есть предложения?
У меня есть некоторый прогресс в этом вопросе, я попытался запустить
SELECT
asbinary(c.cab_loc)
FROM usercoordinates.cab c;
и я получаю NULL в каждой строке, но если я использую astext, я получаю ТОЧКУ (…) в каждой строке
Наконец-то я понял это, возможно, не лучшее решение, но, тем не менее
SELECT
c.cab_driver,
Round(glength(LineStringFromWKB(LineString(GeomFromText(astext(c.cab_loc)),GeomFromText(astext(a.address_loc)))))) AS distance
FROM cab c, address a
WHERE a.address = 'Foobar street 99'
ORDER BY distance ASC LIMIT 1;
Комментарии:
1. Если вы решили свою собственную проблему, напишите ответ, а затем примите его! Таким образом, следующий пользователь сможет найти ваше решение.
2. да, чувак, я почти уверен, что ответил на это … никогда не принимал мой ответ, а затем опубликовал свой ответ в вопросе …?
Ответ №1:
SELECT c.cab_driver,
Round(glength(LineStringFromWKB(LineString(GeomFromText(astext(c.cab_loc)),
GeomFromText(astext(a.address_loc)))))) AS distance
FROM cab c, address a
WHERE a.address = 'Foobar street 99'
ORDER BY distance ASC LIMIT 1;
Комментарии:
1. Вы можете быть более конкретными? Это не дает нужных вам результатов или вообще не подходит для вашего варианта SQL?
2. Я имел в виду, что sql ДЕЙСТВИТЕЛЬНО работал для меня. Он вернул ожидаемые результаты, как в руководстве.
Ответ №2:
Очень уродливое решение, но другого я тоже не смог найти.
Кстати, мы можем немного сократить запрос, используя дополнительную функцию переноса:
DELIMITER $$
DROP FUNCTION IF EXISTS pointIt $$
CREATE function pointIt (src POINT)
RETURNS POINT
BEGIN
RETURN GeomFromText(astext(src));
END $$
DELIMITER ;
Ответ №3:
Мне пришлось внести некоторые небольшие изменения в решение Hituptony для Mysql 5.6:
SELECT c.cab_driver,
Round(glength(LineStringFromWKB(LineString(c.cab_loc,
a.address_loc)))) AS distance
FROM cab c, address a
WHERE a.address = 'Foobar street 99'
ORDER BY distance ASC LIMIT 1;