【问题标题】:Google Maps API V3 - Check whether a co-ordinate is near a DirectionRoute in the backendGoogle Maps API V3 - 检查坐标是否在后端的方向路线附近
【发布时间】:2013-02-22 14:38:49
【问题描述】:

我正在使用 Google Maps API V3 在我的 Java Web 应用程序中创建自定义地图,并使用 MySql 作为数据库。

我有一个功能可以通过前端添加自定义标记并将标记坐标(纬度/经度)保存在后端。

我打算在前端添加方向搜索功能,并将结果(单条路线)保存在后端。

每当添加标记时,我都想找出标记位置附近的所有路线(预先保存)。

有人可以建议我一种存储路线详细信息的有效方法以及将其与标记坐标进行比较的方法吗?

注意:

我已经了解了 Way points 和 overview_path,但它们都没有提供完整的坐标列表来与标记坐标进行比较。

提前致谢

【问题讨论】:

    标签: javascript mysql google-maps-api-3


    【解决方案1】:

    如果您将航路点的坐标保存在数据库中,您可以使用Haversine formula 搜索离您的标记最近的航路点 此查询包含公式并使用PDO

    $stmt = $dbh->prepare("SELECT  name, lat, lng, ( 3959 * acos( cos( radians(?) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(?) ) + sin( radians(?) ) * sin( radians( lat ) ) ) ) AS distance FROM mytable HAVING distance < ? ORDER BY distance LIMIT 0 , 1");
        // Assign parameters
        $stmt->bindParam(1,$center_lat);//lat coordinate of user
        $stmt->bindParam(2,$center_lng);//lng coordinate of user
        $stmt->bindParam(3,$center_lat);//lat coordinate of user
        $stmt->bindParam(4,$radius);//Radius in miles 
    

    【讨论】:

    • 我想存储大约 10K 条路线,每条路线的路点可能在数百到数千,因此点数将是十万。按原样存储所有路点是否有效,或者是否有任何其他方式仅存储最少的点集? MySql 表在查询如此庞大的数据集时表现是否良好?
    • @Deepak 该查询在 500,000 行 MySQL 数据库上运行耗时 2.08 秒。
    【解决方案2】:

    当您将路线保存在数据库中时,使用 geohashing 计算路线经过的所有边界框并将它们存储在另一个表中(使用 2 个字段 - geohash,route_id 作为 PRIMARY)。

    当您搜索路线时,以用户位置为中心,距离为半径,计算所有在一个圆圈中的边界框,然后使用geohash IN (circle_hashes) 进行查询。

    【讨论】:

      猜你喜欢
      • 2014-05-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 2011-05-02
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多