我正在尝试确定Linestring是否有Point .... f.e。
SET ls = geomfromtext('LINESTRING(1 0,3 0)');
SET p = geomfromtext('POINT(2 0)');
如果我CONTAINS(ls,p)
我是真的。但是没有点(2 0)在行
我需要完全包含。它有什么功能吗?
答案 0 :(得分:0)
请您查看this article
上的以下参考资料 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点。
答案 1 :(得分:0)
我尝试了文档中的所有功能,而不是他们做我需要的。 F.E.
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$$