SQL LINESTRING()与多行

时间:2015-06-09 13:15:11

标签: mysql sql mysqli gps

我将LINESTRING()的路线的GPS坐标存储在一行中。当我想处理这些数据时,我需要使用其他功能,即X()Y()ASTEXT()GEOMFROMTEXT()等。

我在想,如果不是更好的另一张表,其中一个GPS坐标将存储在一行中。因此,对于每个路由,我将在该表中有N行。

我的问题是,您认为,如果速度更快,或者更好地存储每条路线一行LINESTRING()的路线的GPS坐标?

1 个答案:

答案 0 :(得分:0)

如果我是你,我肯定会创建一个每行有一个纬度/经度对的新表。这是经典的规范化数据库格式。

确保包含一列,允许您按正确的顺序放置每条路线的点。例如,

 route_id int   (fk to route table)
 point_seq int   (counts the points in the route 0,1,2, etc)
 lat float
 lon float

在此设计方案中,表的主键是(route_id, point_seq)

的组合

您可能想要创建复合索引(lat, lon, route_id, point_seq)以允许efficient coverage位置查询。

LINESTRING和朋友是OpenGIS extension to MySQL的一部分。有一些使用该扩展的映射系统。但是,它具有复合空间/非空间索引不可用的关键缺点(现在)。这减缓了很多空间查询。