【问题标题】:How to append points to LINESTRING SQL如何将点附加到 LINESTRING SQL
【发布时间】:2017-08-21 14:08:17
【问题描述】:

我有一张带有points 的表,它是一个LINESTRING。我在其中有一排在所述列中有一些点。

我有第二组点,形式为字符串,我想将这些点附加到现有行。有没有办法在 MySQL 中做到这一点,而不选择点作为文本,手动合并字符串然后更新行中的 points

【问题讨论】:

  • 当您说您有第二组以字符串形式存在的点时?你什么意思?那个字符串是什么形式的?可以发ST_Point()吗?
  • 假设我正在骑自行车跟踪我的位置并将 lat/lng 发送到服务器 服务器保留一个 LINESTRING 代表我到当前点的路线 我想每隔几秒添加一个点当我旅行时,以反映我的路线显然随着 LINESTRING 大小的增长,将其转换为文本、添加一个点、然后转换回空间数据变得越来越低效我想知道是否有一个函数可以有效地直接附加一个点到 LINESTRING 的末尾。我希望这是有道理的?

标签: mysql geometry append vertices


【解决方案1】:

MYSQL Spatial 函数不包括任何附加 LINESTRING 的解决方案,但我已经为您尝试过一种解决方法。

  1. 获取价值

    set @gval = (select ST_AsText(route) from spatial where id =5);

我将表格命名为“空间”,并添加了一个数据类型为线串的“路线”列

  1. 使用替换功能附加字符串并输入您所需的纬度(或点)

    设置@gval = replace(@gval, ')', ',8.5684875 76.8520767)'); 更新spatial set route =GEOMFROMTEXT(@gval) where id=5;

这对我很有用。

【讨论】:

    【解决方案2】:

    假设我正在骑自行车跟踪我的位置并将 lat/lng 发送到服务器 服务器保留一个 LINESTRING 代表我到当前点的路线 我想在旅行时每隔几秒添加一个点,以反映我的路线显然,随着 LINESTRING 大小的增加,将其转换为文本、添加一个点、然后转换回空间数据变得越来越低效我想知道是否有一个函数可以有效地将一个点直接附加到末尾线串。我希望这是有道理的?

    在这种情况下,通常你会

    1. 为每个新数据点创建一个新行。新行应该有时间,还有你的POINT
    2. 然后您将创建一个视图(或物化视图),将这些点行聚合成一个LINESTRING。为此,请参阅this question

    在 MySQL 和 PostgreSQL 中,您并不想为每个点插入附加到 LINESTRING。在 MVCC 数据库中,通常UPDATE一行需要重写整个行。在某些情况下,这可能根本不重要,但如果您要编写 100 多条路线,我不会采用这种方法。

    ℹ 在 PostGIS 中这会稍微容易一些,因为您有 空间聚合 在 MySQL 中不可用,例如 ST_MakeLine。所以你可以做SELECT ST_MakeLine(pt ORDER BY pointTime) FROM table GROUP BY bike_route;。您还可以使用 ST_AddPoint 之类的函数,它将 POINT 添加到 LINESTRING (如果您的路线很短或者您不关心大量写入的更新)。

    【讨论】:

      猜你喜欢
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多