【问题标题】:How do I select from a table in MySQL 8 using ST_contains?如何使用 ST_contains 从 MySQL 8 中的表中进行选择?
【发布时间】:2019-12-18 21:17:52
【问题描述】:

我有一个名为“community”的表,其中有一列名为坐标,类型为 Point。

我有一个矩形。

我正在尝试选择 .coordinate 位于该矩形内的所有行。

这就是我想要做的:

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”在此位置对于此服务器版本等无效。

如何正确编写此查询?

【问题讨论】:

    标签: mysql gis mysql-8.0


    【解决方案1】:

    知道了。

    我只需要边界矩形的两个对角。

    然后:

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

    就是这样!

    【讨论】:

      【解决方案2】:

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

      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`);
      

      demo on 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`);
      

      【讨论】:

      • 我应该如何改变角的顺序以适应矩形的定义?是否有任何函数可以让我从 MySQL 中获得一个具有较少角(例如,两个相对)或顺序无关紧要的边界矩形?
      • @BorisK 更新了答案并添加了更多信息。希望对您有所帮助。
      • 谢谢。我找到了一种更直接的方法,使用 MySQL 8.0 中提供的新语法。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-20
      • 1970-01-01
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多