使用POINT的Mysql空间距离 - 不工作

OMA*_*OMA 6 mysql spatial geolocation geospatial

我的目标是使用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;
Run Code Online (Sandbox Code Playgroud)

插入一些测试数据:

 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');
Run Code Online (Sandbox Code Playgroud)

声明距离功能:

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

尝试使用该功能搜索ex.:

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

要么:

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

我得到的问题是:ERROR 1367(22007):在解析过程中找到非法的非几何'aswkb(a @ 0)'值,或ERROR 1416(22003):无法从发送到GEOMETRY字段的数据中获取几何对象

我似乎无法弄清楚如何解决这个问题.重要的是"距离"功能可以动态使用.

我也试过这个解决方案:找到MYSQL中两点之间的距离.(使用Point数据类型)

这是我的mysql版本mysql Ver 14.14 Distrib 5.5.23,适用于Linux(x86_64),使用readline 5.1

希望有人的专业知识可以帮助我.干杯!

OMA*_*OMA 7

所以我最终将此作为计算距离的查询,例如:

 SELECT  glength(LineStringFromWKB(LineString(GeomFromText(astext(PointFromWKB(POINT(63.424818,10.402457)))),GeomFromText(astext(PointFromWKB(POINT(663.422238,10.398996)))))))*100 
 AS distance;
Run Code Online (Sandbox Code Playgroud)

我将它乘以100以得到以千米为单位的近似值.结果不准确,但"确定".如果有人知道更好的方式,请随时发表评论.