【问题标题】:storing latitude and longitude for a route存储路线的纬度和经度
【发布时间】:2011-03-14 22:26:03
【问题描述】:

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

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

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. 如果不是这样做的更好方法是什么

更新: 所以另一个表叫做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 错了吗?

【问题讨论】:

    标签: sql database database-design


    【解决方案1】:

    这对我来说看起来不错。

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

    另一个表应该命名为Routes,而这个表应该命名为RoutePoints或只是Points或其他信息。

    对于 SQL,当您想使用 INNER JOIN 时,您已经使用了 CROSS 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
    

    这可能行得通。

    【讨论】:

    • 是的..我只是在这里以R为例。
    • 很高兴听到!你让我很担心。但是结构看起来不错!如果您需要其他字段,例如计算点之间的距离,请稍后添加!
    • 我更新了我的问题...介意帮忙吗?我的 SQL 技能生疏了
    • 如果我还想查看用户名/用户 ID,那么每列都会显示用户名/用户 ID?所以这个表不是3NF?
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      这在很大程度上取决于您在存储这些信息后要如何处理这些信息。如果您只想打印给定路线的地图,您的表格设置可能没问题。如果您想知道两条路线是否相交或重叠,您可能应该了解有关地理信息系统 (GIS) 的更多信息。 GIS Stackexchange 是开始提问的好地方。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-16
        • 1970-01-01
        • 2012-03-03
        • 2017-08-22
        • 2020-07-27
        • 1970-01-01
        • 2010-09-27
        相关资源
        最近更新 更多