我有一张points
的桌子,这是一个LINESTRING。我在那里有一排,在该栏中有一些点。
我有一个字符串形式的第二组点,我想将这些点附加到现有行。有没有办法在MySQL中执行此操作而不将点选为文本,手动合并字符串然后更新行中的points
?
答案 0 :(得分:3)
MYSQL Spatial功能不包含任何附加LINESTRING的解决方案,但我已经尝试过一种解决方法。
获取值
设置@gval =(从persistentDataPath
中选择ST_AsText(路由),其中id = 5);
我将表命名为'spatial'并添加了一个列为'route'的数据类型为linestring
使用替换功能并输入所需的纬度(或点)来附加字符串
设置@gval = replace(@gval,')',',8.5684875 76.8520767)');
更新spatial
设置路线= GEOMFROMTEXT(@gval),其中id = 5;
这对我有用。
答案 1 :(得分:0)
说我要跟踪我在单车上的位置,并将纬度/经度发送到服务器。服务器保持一个LINESTRING代表我的路线到当前点,我想每行驶几秒钟添加一个点,反映我的路线显然,随着LINESTRING大小的增加,将其转换为文本,添加点,然后转换回空间数据的效率越来越低,我想知道是否有一个函数可以将点直接直接附加到文本末尾LINESTRING。我希望这有意义吗?
在这种情况下,通常您会
POINT
。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
中(如果您的路由很短或您不在乎繁重的写操作)。