2011-05-26 34 views
4

我使用教程从http://dev.mysql.com/tech-resources/articles/4.1/gis-with-mysql.html 在分析过程中发现的价值,所以我创建了两个表,插入一些数据,当我试图使用这些脚本的一些数据得到非法非几何“aswkb(...)”

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(ccab_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; 
+2

如果你解决了你自己的问题,写一个答案然后接受它!这样下一个人就能找到你的解决方案。 – 2012-06-30 12:18:02

+0

yea老兄,我很确定我回答了这个问题...从未接受我的回答,然后发布我的问题答案...? – Hituptony 2013-05-02 15:09:37

回答

3
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

此sql查询确实有效。 – Francisco 2014-11-30 20:26:18

+0

你能更具体吗?它没有给出你需要的结果,或者它根本不适用于你的SQL风格? – Hituptony 2014-12-01 13:47:52

+0

我的意思是SQL DID为我工作。它返回了教程中的预期结果。 – Francisco 2014-12-01 15:55:51

0

非常丑陋的解决方案,但我可以没有找到另一个。

顺便说一句,我们可以通过使用额外的包装功能,缩短查询一点:

DELIMITER $$ 
DROP FUNCTION IF EXISTS pointIt $$ 
CREATE function pointIt (src POINT) 
RETURNS POINT 
BEGIN 
RETURN GeomFromText(astext(src)); 
END $$ 
DELIMITER ; 
0

我不得不做出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;