Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 获取多边形点mysql_Php_Mysql_Polygon - Fatal编程技术网

Php 获取多边形点mysql

Php 获取多边形点mysql,php,mysql,polygon,Php,Mysql,Polygon,我在mysql中创建了一个表来存储多边形数据: CREATE TABLE geom (g GEOMETRY); 我用以下语法在其中插入了一个多边形: INSERT INTO geom (g) VALUES(PolygonFromText('POLYGON(( 9.190586853 45.464518970, 9.190602686 45.463993916, 9.191572471 45.464001929, 9.191613325 45.463884676, 9.192136130 45.

我在mysql中创建了一个表来存储多边形数据:

CREATE TABLE geom (g GEOMETRY);
我用以下语法在其中插入了一个多边形:

INSERT INTO geom (g)
VALUES(PolygonFromText('POLYGON((
9.190586853 45.464518970,
9.190602686 45.463993916,
9.191572471 45.464001929,
9.191613325 45.463884676,
9.192136130 45.463880767,
9.192111509 45.464095594,
9.192427961 45.464117804,
9.192417811 45.464112862,
9.192509035 45.464225851,
9.192493139 45.464371079,
9.192448471 45.464439002,
9.192387444 45.464477861,
9.192051402 45.464483037,
9.192012814 45.464643592,
9.191640825 45.464647090,
9.191622331 45.464506215,
9.190586853 45.464518970))')
);

现在我如何在mysql中获取该多边形的顶点(点)?为什么我要问的意思是,以后我想知道一个点是否在多边形内。为了实现这一点,我希望我需要多边形顶点。

如果您想要回WKT:
从geom中选择AsText(g)

如果要查找点是否位于多边形中,不需要导出各个顶点即可。MySQL(5.6+)中有一个函数:

SELECT ST_Contains(PolygonFromText('POLYGON((
9.190586853 45.464518970,
9.190602686 45.463993916,
9.191572471 45.464001929,
9.191613325 45.463884676,
9.192136130 45.463880767,
9.192111509 45.464095594,
9.192427961 45.464117804,
9.192417811 45.464112862,
9.192509035 45.464225851,
9.192493139 45.464371079,
9.192448471 45.464439002,
9.192387444 45.464477861,
9.192051402 45.464483037,
9.192012814 45.464643592,
9.191640825 45.464647090,
9.191622331 45.464506215,
9.190586853 45.464518970))'), PointFromText("POINT(10 42)")
);

要回答您的问题,一个很好的选择是输出GeoJSON格式。 请参阅此处的更多信息:()

为了帮助您解决在边界多边形中选择点的实际问题:@jcorry有一个很好的解决方案,即
ST_Contains

要进一步展开此操作以从多边形封装的
坐标表中选择所有
,可以执行以下操作:

select
ST_X(point) as x,
ST_Y(point) as y   
from coordinates
where ST_Contains(
    (select g from geom limit 1), 
    point
)

你是说外环+内环不,插入多边形后,我不知道它的顶点了,因为我没有把这些顶点存储在数据库中。现在,如果可能的话,我怎样才能取回这些顶点(WKT格式)?谢谢,但我得到的结果是BLOB类型。。如何从中提取顶点?您应该以文本格式获取WKT,请参阅,这可以轻松解析点。如果没有,我很好奇你用的是哪个版本。谢谢瑞肯,这对我帮助很大。你太棒了@你能检查一下你共享的链接吗?它好像坏了。您能再告诉我一次答案吗?@user2959196:唯一的问题是mysql cli历史记录,显示了
asText()
的工作方式。这并没有改变答案本身。这确实意味着您必须在应用程序代码中再次解析
多边形
(或任何几何体)字符串。在不同的行或列中获得分数并没有什么神奇之处。大多数语言都会有某种WKT解析器,无论是在其核心、模块中还是在用户代码中。
select
ST_X(point) as x,
ST_Y(point) as y   
from coordinates
where ST_Contains(
    (select g from geom limit 1), 
    point
)