如何将点附加到 LINESTRING SQL

How to append points to LINESTRING SQL

我有一个 table 和 points,这是一个 LINESTRING。我在那里有一行在所述列中有一些点。

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

MYSQL 空间函数不包含任何用于附加 LINESTRING 的解决方案,但我已经为您尝试了一个解决方法。

  1. 获取值

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

I named the table as 'spatial' and added a column as 'route' which is of datatype linestring

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

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

这对我很有用。

Say I am tracking my position on a cycle ride and sending the lat/lng to a server The server keeps a LINESTRING representing my route up to the current point I would like to add a point every few seconds as I travel, to reflect my route Obviously as the LINESTRING grows in size, it gets increasingly inefficient to convert it to text, add a point, then convert back to spatial data I was wondering if there was a function to efficiently append a point directly to the end of the LINESTRING. I hope that makes sense?

在这种情况下,通常你会

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

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

ℹ 在 PostGIS 中,这会稍微容易一些,因为您拥有 空间聚合 ,而这些在 MySQL 中不可用,例如 [=21] =] 将 POINT 添加到 LINESTRING (如果您的路线很短或者您不关心写入繁重的更新)。