1

我正在尝试确定 Linestring 是否有 Point.... fe

SET ls = geomfromtext('LINESTRING(1 0,3 0)');
SET p = geomfromtext('POINT(2 0)');

如果我这样做,CONTAINS(ls,p)我有真实的。但是没有点(2 0)在行

我需要完全包含。它有什么功能吗?

4

2 回答 2

0

我尝试了文档中的所有功能,但没有一个能满足我的需要。铁

SELECT ASTEXT(path) FROM paths WHERE INTERSECTS(path, GEOMFROMTEXT('POINT(604 0)'))

给出“错误”的结果

LINESTRING(572 0,600 0,601 0,602 0,603 0,604 0,605 0,606 0,607 0,608 0,402 0)
LINESTRING(402 0,609 0,610 0,611 0,612 0,613 0,614 0,615 0,616 0,617 0,618 0,619 0,620 0,621 0,622 0,623 0)
LINESTRING(359 0,449 0,801 0,422 0,802 0,803 0,498 0)
LINESTRING(572 0,795 0,796 0,797 0,798 0,799 0,800 0,345 0,359 0)
LINESTRING(792 0,768 0,793 0,794 0,572 0)
LINESTRING(342 0,904 0,905 0,906 0)
LINESTRING(912 0,914 0,915 0,916 0,341 0)
LINESTRING(344 0,917 0,918 0,919 0,920 0,800 0)
LINESTRING(918 0,922 0,923 0,924 0,925 0,926 0,927 0,343 0)
LINESTRING(940 0,947 0,948 0,949 0,604 0)

MBRWITHIN 给出相同的结果

我写了一个函数,但它非常非常慢:

FUNCTION `IDIL`(`id` INT, `line` LINESTRING) RETURNS INT(1)
    NO SQL
    DETERMINISTIC
BEGIN
DECLARE n INT DEFAULT 0; 
DECLARE p1X INT(20); 
DECLARE p1Y INT(20); 
DECLARE p1 POINT; 
DECLARE i INT DEFAULT 0; 
DECLARE result INT(1) DEFAULT 0; 
SET n = NUMPOINTS(line); 
WHILE i<n DO 
    SET p1 = POINTN(line, (i+1)); 
    SET p1X = X(p1); 
    SET p1Y = Y(p1); 
    IF p1X=id OR p1Y=id THEN RETURN 1; END IF; 
    SET i = i + 1; 
END WHILE; 
RETURN result; 
    END$$
于 2012-11-29T10:50:13.027 回答
0

你能看看这篇文章的以下参考吗

  • SQLFIDDLE

    SET @ls = 'LineString(1 0,3 0)';

    SET @xs = geomfromtext(@ls);

    SET @p = geomfromtext('POINT(2 0)');

    SELECT MBRWithin(@xs,@p);

对不起,我给出了错误的链接。

结果

MBRWITHIN(@XS,@P)
0

看着你的线 1 0, 3 0 --> 2 0 点存在于它上面。

在此处输入图像描述

于 2012-11-29T10:19:58.200 回答