我的目标是使用mysql POINT(纬度,经度),以在数据库中找到附近的实体。 我试图做这样的事情在本教程的底部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;
要使用该功能来搜索例:
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;
我得到的问题是:ERROR 1367(22007):非法非几何“aswkb(一@ 0)”在分析过程中发现的价值,或者ERROR 1416(22003):无法从数据中获取几何对象发送到几何领域
我似乎无法弄清楚如何解决这个问题。 重要的是,“距离”功能可以动态地使用。
我也曾尝试这种解决方案: 查找MYSQL两点之间的距离。 (使用点数据类型)
这是我的MySQL版本的MySQL版本14.14 5.5.23 DISTRIB,使用readline的5.1的Linux(x86_64的)
希望某人的专业知识能帮助我。 干杯!