Незаконное негеометрическое значение ‘aswkb (…)’, найденное во время синтаксического анализа

#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;