2011-03-14 51 views
0

我想存储一串由数据库中的一对纬度和经度系列组成的路线。我希望能够获得给定密钥的所有路由。存储路线的经度和纬度

我的表设置了现在的方法如下:

路由ID订购纬度经度

但路线可以有很多套的纬度和经度的,所以就变成:

RouteID Order Latitude Longitude 
1   0  X   Y 
1   1  X   Y 
1   2  X   Y 
1   3  X   Y 
1   4  X   Y 
2   0  X   Y 
2   1  X   Y 

我有另一个名为R的表,它有RouteID,它引用了这个路由表。 现在的问题是: 1.这看起来合理吗?

  1. 如果没有什么是做这个

更新更好的方法: 所以其他表称为TEMP,它具有以下格式

TempID路由ID用户名AttributeX AttributeY

当我做一个SQL:

SELECT R.LATITUDE, R.LONGITUDE 
FROM TEMP T, ROUTE R 
WHERE T.UserID =1 
ORDER BY R.ORDER ASC ; 

而在我的表格中,当前的用户ID 1有两条路线,但是它打印出每个格子两次。 我的SQL错了吗?

回答

2

这对我来说很合适。

但是不要用名为R的表污染世界。想想那个追随你的家伙,R是什么意思?

其他表应该可能被命名为Routes,该表可能应该被命名为RoutePoints或者只是Points或其他信息。

SELECT R.LATITUDE, R.LONGITUDE 
FROM TEMP T INNER JOIN ROUTE R ON T.ROUTEID = R.ROUTEID 
WHERE T.UserID =1 
ORDER BY R.ORDER ASC 

可能的工作:

和SQL,当你想使用INNER JOIN你用了CROSS JOIN

+1

是的..我只是把R作为例子在这里。 – aherlambang 2011-03-14 23:38:18

+0

好听!你让我在那里担心。但结构看起来很好!如果您需要其他字段,例如点之间的计算距离 - 稍后添加它们! – 2011-03-14 23:44:40

+0

我更新了我的问题......帮助我的想法?我的SQL技能是生锈的 – aherlambang 2011-03-14 23:53:43

0

这很大程度上取决于您在存储该信息后想要处理的信息。如果你只是想打印一张给定路线的地图,你的桌面设置就可以。如果您想知道两条路线是相交还是重叠,您应该了解更多关于地理信息系统(GIS)的信息。 GIS Stackexchange是开始提问的好地方。

+0

和MikeEast的+100 - 好名字势在必行! – thursdaysgeek 2011-03-14 22:37:42

+0

是的,我想要做的就是打印一张路线图。没有其他的... – aherlambang 2011-03-14 23:37:53

1

您很可能想要使用空间填充曲线或空间索引。我用它来存储邮政编码,并用缩放级别的1个操作符来查询它们。欢迎您通过phpclasses.org(hilbert-curve)下载我的课程。