简体   繁体   English

获取多边形点mysql

[英]Get polygon points mysql

i have created a table in mysql to store polygon data:我在 mysql 中创建了一个表来存储多边形数据:

CREATE TABLE geom (g GEOMETRY);

And i inserted a polygon into it, using the following syntax:我使用以下语法在其中插入了一个多边形:

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

Now how can i get back the vertices (points) of this polygon in mysql?现在我怎样才能在mysql中取回这个多边形的顶点(点)? Why i am asking means, later i want to find whether a point is inside a polygon.为什么我要问手段,后来我想找出一个点是否在多边形内。 And to achieve this, i hope i need the polygon vertices.为了实现这一点,我希望我需要多边形顶点。

如果你想要 WKT 回来: SELECT AsText(g) FROM geom;

To answer your question, a great option would be to output the GeoJSON format.要回答您的问题,一个不错的选择是输出 GeoJSON 格式。 See more here: ( https://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html )在此处查看更多信息:( https://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html

select ST_AsGeoJSON(g) from geom;

To help with your actual problem of selecting points in the bounding polygon: @jcorry has a great solution with ST_Contains为了帮助您在边界多边形中选择点的实际问题:@jcorry 有一个很好的解决方案ST_Contains

To further expand this out to select all point s from a coordinates table that the Polygon encapsulates, you can do something like:要进一步扩展它以从 Polygon 封装的coordinates表中选择所有point ,您可以执行以下操作:

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

If you want to find whether a point is in a polygon, you don't need to derive the individual vertices to do that.如果要查找点是否在多边形中,则不需要派生各个顶点来执行此操作。 There's a function in MySQL (5.6+) for this: 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)")
);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM