如何将点附加到LINESTRING SQL

时间:2017-08-21 14:08:17

标签: mysql geometry append vertices

我有一张points的桌子,这是一个LINESTRING。我在那里有一排,在该栏中有一些点。

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

2 个答案:

答案 0 :(得分:3)

MYSQL Spatial功能不包含任何附加LINESTRING的解决方案,但我已经尝试过一种解决方法。

  1. 获取值

    设置@gval =(从persistentDataPath中选择ST_AsText(路由),其中id = 5);

  2.   

    我将表命名为'spatial'并添加了一个列为'route'的数据类型为linestring

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

      设置@gval = replace(@gval,')',',8.5684875 76.8520767)'); 更新spatial设置路线= GEOMFROMTEXT(@gval),其中id = 5;

    2. 这对我有用。

答案 1 :(得分:0)

  

说我要跟踪我在单车上的位置,并将纬度/经度发送到服务器。服务器保持一个LINESTRING代表我的路线到当前点,我想每行驶几秒钟添加一个点,反映我的路线显然,随着LINESTRING大小的增加,将其转换为文本,添加点,然后转换回空间数据的效率越来越低,我想知道是否有一个函数可以将点直接直接附加到文本末尾LINESTRING。我希望这有意义吗?

在这种情况下,通常您会

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

在MySQL和PostgreSQL中,您实际上并不想为每个点插入都附加到LINESTRING上。在MVCC数据库中,通常UPDATE行必须重写 entire 行。在某些情况下,这可能根本无关紧要,但是如果您要编写100多个点路线,则我不会采用该方法。

ℹ在PostGIS中,这有点容易,因为您拥有空间聚合,这些聚合在MySQL中不可用,例如ST_MakeLine。因此,您可以执行SELECT ST_MakeLine(pt ORDER BY pointTime) FROM table GROUP BY bike_route;。您还可以使用诸如ST_AddPoint之类的功能,该功能可以将POINT添加到LINESTRING中(如果您的路由很短或您不在乎繁重的写操作)。