我正在尝试确定 Linestring 是否有 Point.... fe
SET ls = geomfromtext('LINESTRING(1 0,3 0)');
SET p = geomfromtext('POINT(2 0)');
如果我这样做,CONTAINS(ls,p)
我有真实的。但是没有点(2 0)在行
我需要完全包含。它有什么功能吗?
我正在尝试确定 Linestring 是否有 Point.... fe
SET ls = geomfromtext('LINESTRING(1 0,3 0)');
SET p = geomfromtext('POINT(2 0)');
如果我这样做,CONTAINS(ls,p)
我有真实的。但是没有点(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$$
你能看看这篇文章的以下参考吗
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 点存在于它上面。