使用 ST_GeomFromText 创建多边形

Create polygon using ST_GeomFromText

我正在尝试创建一个多边形,在 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)');

关于如何实现这一点有什么想法吗? P.S。第一次在这里提问

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

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

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