【问题标题】:Create polygon using ST_GeomFromText使用 ST_GeomFromText 创建多边形
【发布时间】:2021-02-15 14:27:55
【问题描述】:

我正在尝试创建一个多边形,而在 MySQL 中,这样做的方法是使用我所看到的 ST_GeomFromText (POLYGON (') ,但我需要能够使用变量而不仅仅是一个字符串。

例如。而不是

SELECT ST_GeomFromText('POLYGON((-71.1776585052917 42.3902909739571,-71.1776820268866 42.3903701743239,
-71.1776063012595 42.3903825660754,-71.1775826583081 42.3903033653531,-71.1776585052917 42.3902909739571))');

使用类似的东西

SET @p1 = POINT(-71.1776585052917, 42.3902909739571);
SET @p2 = POINT(-71.1776820268866, 42.3903701743239);
SET @p3 = POINT(-71.1776063012595, 42.3903825660754);
SET @p4 = POINT(-71.1775826583081, 42.3903033653531);

SELECT ST_GeomFromText('POLYGON(@p1, @p2, @p3, @p4, @p1)');

关于如何实现这一目标的任何想法? 附:我第一次在这里提问。

【问题讨论】:

    标签: mysql variables polygon point


    【解决方案1】:

    不确定这是否是最好的解决方案,但我修复它的方法是使用这种方法。

        SET @p1 = ST_GeometryFromText(CONCAT('POINT(',(lat-@POINT_DISTANCE),' ',(lon+@POINT_DISTANCE),')'), 4326);
        SET @p2 = ST_GeometryFromText(CONCAT('POINT(',(lat+@POINT_DISTANCE),' ',(lon+@POINT_DISTANCE),')'), 4326);
        SET @p3 = ST_GeometryFromText(CONCAT('POINT(',(lat+@POINT_DISTANCE),' ',(lon-@POINT_DISTANCE),')'), 4326);
        SET @p4 = ST_GeometryFromText(CONCAT('POINT(',(lat-@POINT_DISTANCE),' ',(lon-@POINT_DISTANCE),')'), 4326);
    
        SET @str = CONCAT('POLYGON((',
            ST_X(@p1),
            ' ',
            ST_Y(@p1),
            ',',
            ST_X(@p2),
            ' ',
            ST_Y(@p2),
            ',',
            ST_X(@p3),
            ' ',
            ST_Y(@p3),
            ',',
            ST_X(@p4),
            ' ',
            ST_Y(@p4),
            ',',
            ST_X(@p1),
            ' ',
            ST_Y(@p1),
    
         '))');
    
    SET @POLY = ST_GeomFromText(@str, 4326);
         
    SELECT id FROM user_details force index(user_details_location) WHERE ST_CONTAINS(@POLY, user_details.location);
    
    

    基本上只是很多串联,而且似乎有效。

    【讨论】:

      猜你喜欢
      • 2019-04-08
      • 2016-02-19
      • 1970-01-01
      • 2013-04-07
      • 2021-11-08
      • 2019-10-14
      • 2020-06-07
      • 2019-07-20
      • 1970-01-01
      相关资源
      最近更新 更多