使用 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);
基本上只是很多串联,而且它似乎有效。
我正在尝试创建一个多边形,在 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);
基本上只是很多串联,而且它似乎有效。