[英]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`);
我更改了以下內容以解決此問題:
ST_GeomFromText
以獲取幾何對象。您可以使用 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.