存储路线的纬度和经度

时间:2011-03-14 22:26:04

标签: sql database database-design

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

现在我的表格设置方式如下:

RouteID订单纬度经度

但是一条路线可以有多套纬度和经度,所以它变为:

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并且它引用了这个Route表。 问题是: 1.这看起来合理吗?

  1. 如果不是更好的方法,
  2. 更新 所以另一个表称为TEMP,它具有以下格式

    TempID RouteID UserID AttributeX AttributeY

    当我做SQL时:

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

    在我的表中,目前UserID 1有两条路线,但它会打印出每个格子两次。 我的SQL错了吗?

3 个答案:

答案 0 :(得分:2)

这对我来说很好看。

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

另一个表可能应该命名为Routes,此表可能应该命名为RoutePoints或仅Points或其他信息。

对于SQL,如果要使用CROSS JOIN,则使用了INNER JOIN

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

这可能有效。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

很大程度上取决于您在存储后要对此信息执行的操作。如果您只想打印出给定路线的地图,那么您的桌面设置就可以了。如果您想知道两条路线是相交还是重叠,您可能应该了解更多有关Geogrpahic信息系统(GIS)的信息。 GIS Stackexchange是开始提问的好地方。