【问题标题】:Get polygon points mysql获取多边形点mysql
【发布时间】:2011-07-03 13:34:46
【问题描述】:

我在 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 中取回这个多边形的顶点(点)?为什么我要问的意思是,稍后我想找出一个点是否在多边形内。为了实现这一点,我希望我需要多边形顶点。

【问题讨论】:

  • 你的意思是外环+内环dev.mysql.com/doc/refman/5.0/en/…
  • 不,插入多边形后,我不再知道它的顶点,因为我没有将这些顶点存储在数据库中。现在,如果可能的话,我怎样才能取回这些顶点(以 WKT 格式)?

标签: php mysql polygon


【解决方案1】:

要回答您的问题,一个不错的选择是输出 GeoJSON 格式。 在此处查看更多信息:(https://dev.mysql.com/doc/refman/5.7/en/spatial-geojson-functions.html)

select ST_AsGeoJSON(g) from geom;

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

要进一步扩展它以从 Polygon 封装的 coordinates 表中选择所有 points,您可以执行以下操作:

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

【讨论】:

    【解决方案2】:

    如果您想确定一个点是否在多边形中,您不需要派生单个顶点来执行此操作。 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)")
    );
    

    【讨论】:

      【解决方案3】:

      如果您想要返回 WKT:SELECT AsText(g) FROM geom;

      【讨论】:

      • 谢谢,但我得到的结果是 BLOB 类型。如何从中获取顶点?
      • 你应该得到文本格式的WKT,见pastebin.com/H8ztP2pK,它可以很容易地解析为点。如果没有,我很好奇您使用的是哪个版本。
      • 感谢 Wrikken,这对我帮助很大。你摇滚!
      • @Wrikken:你能检查一下你分享的链接吗?它似乎坏了。你能告诉我再回答一次吗?
      • @user2959196:唯一的东西是 mysql cli 历史记录,显示了asText() 的工作原理。这并没有改变答案本身。 It looked a lot like this。这确实意味着您必须在应用程序代码中再次自己解析 POLYGON(或任何几何形状)字符串。在不同的行或列中获得点并没有什么魔法。大多数语言都会有某种 WKT 解析器,无论是在其核心、模块还是在用户空间代码中。
      猜你喜欢
      • 1970-01-01
      • 2013-05-26
      • 2020-11-10
      • 1970-01-01
      • 2016-11-20
      • 2013-10-03
      • 2020-02-11
      • 1970-01-01
      • 2014-10-06
      相关资源
      最近更新 更多