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

この記事の次のリファレンスを確認してください。

  • 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 に答える
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 に答える