При синтаксическом анализе обнаружено недопустимое не геометрическое значение aswkb (...) - PullRequest
4 голосов
/ 26 мая 2011

Я использовал учебник из 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, я получаю POINT (...) в каждой строке

Наконец-то я понял, возможно, не лучшее решениено все же

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;

Ответы [ 3 ]

3 голосов
/ 18 июля 2012
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;
0 голосов
/ 11 августа 2013

Мне пришлось внести небольшие изменения в решение 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;
0 голосов
/ 07 мая 2013

Очень уродливое решение, но я тоже не смог найти другое.

Кстати, мы можем немного сократить запрос, используя дополнительную функцию wrap:

DELIMITER $$
DROP FUNCTION IF EXISTS pointIt $$
CREATE function pointIt (src POINT)
RETURNS POINT
BEGIN
RETURN GeomFromText(astext(src));
END $$
DELIMITER ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...