簡體   English   中英

如何使用 ST_contains 從 MySQL 8 中的表中進行選擇?

[英]How do I select from a table in MySQL 8 using ST_contains?

我有一個名為“社區”的表,其中有一列名為坐標,類型為 Point。

我有一個矩形。

我正在嘗試選擇 .coordinates 落在該矩形內的所有行。

這是我想要做的:

SELECT * FROM `tribemap-db`.community
WHERE ST_Contains(POLYGON(34.6002788228068 31.821252014924383, 
35.21282317828298 31.821252014924383,
34.6002788228068 32.08220723021857,
35.21282317828298 32.08220723021857), community.coordinates);

這給了我一個錯誤:

對於此服務器版本等,“SELECT”在此位置無效。

如何正確編寫此查詢?

您可以使用以下解決方案:

SELECT * 
FROM `tribemap-db`.`community`
WHERE ST_Contains(ST_GeomFromText('Polygon((35.21282317828298 31.821252014924383, 35.21282317828298 32.08220723021857, 34.6002788228068 32.08220723021857, 34.6002788228068 31.821252014924383, 35.21282317828298 31.821252014924383))'), `community`.`coordinates`);

dbfiddle.uk 上的演示

我更改了以下內容以解決此問題:

您可以使用 MySQL Workbench 檢查多邊形。 有一個空間視圖和表單編輯器來查看定義的結果。

您當前對矩形的定義(附加的第一個點也作為最后一個點):

在此處輸入圖片說明

矩形的更改定義(更改了點的順序並將第一個點添加為最后一個點):

在此處輸入圖片說明


是否有任何函數可以讓我從 MySQL 獲得一個具有較少角(例如,兩個相對)的邊界矩形?

您可以使用ST_MakeEnvelope創建具有兩個相對點的矩形:

SELECT * 
FROM `tribemap-db`.`community`
WHERE ST_CONTAINS(ST_MakeEnvelope(ST_GeomFromText('Point(35.21282317828298 31.821252014924383)'), ST_GeomFromText('Point(34.6002788228068 32.08220723021857)')), `community`.`coordinates`);

-- or using syntax (without ST_GeomFromText) possible on MySQL 8.0+
SELECT * 
FROM `tribemap-db`.`community`
WHERE ST_Contains(ST_MakeEnvelope(Point(35.21282317828298, 31.821252014924383), Point(34.6002788228068, 32.08220723021857)),  `community`.`coordinates`);

在此處輸入圖片說明

知道了。

我只需要邊界矩形的兩個對角。

進而:

SELECT * 
FROM `tribemap-db`.`community`
WHERE ST_CONTAINS(ST_MakeEnvelope(
            Point(34.60, 32.08),
            Point(35.21, 31.82)
            ), community.coordinates);

就是這樣!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM