Пространственное расстояние Mysql с использованием POINT -Не работает

. Моя цель — использовать mysql POINT (lat,long )для поиска ближайших объектов в базе данных. Я пытаюсь сделать что-то вроде того, что показано в нижней части этого руководства http://www.scribd.com/doc/2569355/Geo-Distance-Search-with-MySQL.. Вот что у меня есть:

Таблица:

CREATE TABLE mark (
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(20) DEFAULT NULL,
loc POINT NOT NULL,
SPATIAL KEY loc (loc)
) ENGINE=MyISAM;

Вставка тестовых -данных:

 INSERT INTO mark (loc,name) VALUES (POINT(59.388433,10.415039), 'Somewhere 1');
 INSERT INTO mark (loc,name) VALUES (POINT(63.41972,10.39856), 'Somewhere 2');

Объявление функции расстояния:

 DELIMITER $$
 CREATE FUNCTION `distance`
 (a POINT, b POINT)
 RETURNS double DETERMINISTIC
 BEGIN
 RETURN
 round(glength(linestringfromwkb(linestring(asbinary(a),
 asbinary(b)))));
 END $$
 DELIMITER;     

Пытаюсь использовать функцию поиска ex.:

 SELECT name, distance(mark.loc, GeomFromText( ' POINT(31.5 42.2) ' )) AS cdist
 FROM mark
 ORDER BY
 cdist limit 10;

или:

 SELECT DISTINCT
 dest.name,
 distance(orig.loc, dest.loc) as sdistance
 FROM
 mark orig,
 mark dest
 having sdistance < 10
 ORDER BY
 sdistance limit 10;

Проблема, которую я получаю, это :ОШИБКА 1367 (22007 ):Недопустимое негеометрическое значение 'aswkb (a@0 )', найденное во время синтаксического анализа, или ОШИБКА 1416 (22003 ):Невозможно получить объект геометрии из данных, которые вы отправляете в поле ГЕОМЕТРИЯ

Я не могу понять, как это решить. Важно то, что функцию «расстояние» можно использовать динамически.

Я также пробовал это решение:Найдите расстояние между двумя точками в MYSQL. (с использованием типа данных Point)

Это моя версия mysql mysql Ver 14.14 Distrib 5.5.23, для Linux (x86 _64 )с использованием readline 5.1

Надеюсь, чей-то опыт поможет мне. Ваше здоровье!

6
задан Community 23 May 2017 в 11:50
поделиться