我想確定Linestring是否有Point .... f.e.Mysql空間擴展。如何檢查Linestring是否包含一個點?
SET ls = geomfromtext('LINESTRING(1 0,3 0)');
SET p = geomfromtext('POINT(2 0)');
如果我做CONTAINS(ls,p)
我是真的。但沒有一點(2 0)在線
我需要完全包含。有沒有什麼功能呢?
我想確定Linestring是否有Point .... f.e.Mysql空間擴展。如何檢查Linestring是否包含一個點?
SET ls = geomfromtext('LINESTRING(1 0,3 0)');
SET p = geomfromtext('POINT(2 0)');
如果我做CONTAINS(ls,p)
我是真的。但沒有一點(2 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點上它的存在。
我嘗試了所有功能,從文檔和他們非做什麼,我需要。 f1。
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$$
我覺得它很慢,因爲我不使用空間索引。我如何在我的功能內使用它? – Billion
1000行需要17秒 – Billion
我主要依賴於SQLFiddle在不同的機器上,其中什麼都不能安裝。我會嘗試你的功能。與此同時,你可以請看看這個[在mysql中使用空間索引時性能差](http://gis.stackexchange.com/questions/5357/poor-performance-when-using-spatial-indexes- in-mysql)我在想,這可能是你想要發佈你的問題的地方。我還會看看我是否可以將它移動到那裏。因爲然後真正的專家可以幫助你:) – bonCodigo
不應該你使用'intersect'? – bonCodigo
它給出了錯誤的結果。請參閱下面的答案 – Billion