Google Map Road API 没有插入路径,也没有给出平滑的路线

Posted

技术标签:

【中文标题】Google Map Road API 没有插入路径,也没有给出平滑的路线【英文标题】:Google Map Road API not interpolating path and not giving smooth route 【发布时间】:2016-07-01 17:20:37 【问题描述】:

我正在尝试使用 Roads Inspector 中的道路 API 为以下路线路径获得顺畅的路线,但没有获得顺畅的路线。Google 道路 api 未能提供顺畅的路线。路线的某些部分与实际道路路线不顺畅,例如在转弯处,在桥梁等处。请寻找下面的路线路径并提供解决方案以沿着实际道路获得顺畅的路线/更准确的路线。

积分:

42.04144333333333,-88.060575|42.04123666666667,-88.06014333333333|42.04119166666667,-88.06017166666666|42.040835,-88.05990166666666|42.03982666666667,-88.05242333333334|42.03903666666667,-88.04572333333333|42.03903833333333,-88.04572|42.038495,-88.04141833333334|42.03774666666666,-88.03593833333333|42.037683333333334,-88.03549|42.034861666666664,-88.03204166666667|42.02808,-88.031215|42.02045666666667,-88.03131166666667|42.012881666666665,-88.02988833333333|42.00522333333333,-88.02747666666667|41.997353333333336,-88.02500333333333|41.98961333333333,-88.02349333333333|41.982191666666665,-88.02351333333333|41.97412833333333,-88.02447333333333|41.96599,-88.02588166666666|41.95825833333333,-88.027075|41.952605,-88.03345|41.945281666666666,-88.0377|41.937595,-88.03779333333334|41.92935,-88.037845|41.92084333333333,-88.03799166666667|41.91231,-88.038075|41.90379,-88.038145|41.89564,-88.03784166666667|41.887255,-88.036495|41.87881,-88.03291666666667|41.87096833333333,-88.03694333333334|41.863101666666665,-88.04085166666667|41.85484833333334,-88.04049166666667|41.848978333333335,-88.03315166666667|41.842145,-88.02940833333334|41.83407,-88.02922|41.826135,-88.029025|41.820256666666666,-88.02674333333333|41.813515,-88.02884833333333|41.80965333333333,-88.03722166666667|41.810065,-88.04824833333333|41.8104,-88.06018333333333|41.81016666666667,-88.07216833333334|41.80704166666666,-88.08223833333334|41.80573666666667,-88.09275|41.80591166666667,-88.10409166666666|41.80608,-88.11518333333333|41.80625166666667,-88.12632166666667|41.806415,-88.13737333333333|41.80649666666667,-88.14849166666667|41.80653,-88.15959333333333|41.80652666666667,-88.17042666666667|41.805715,-88.181295|41.80482833333333,-88.19194333333333|41.803918333333336,-88.202765|41.80304666666667,-88.212815|41.802146666666665,-88.22354833333333|41.801383333333334,-88.23485666666667|41.80068833333333,-88.24686666666666|41.8,-88.25845333333334|41.799368333333334,-88.26976833333333|41.798743333333334,-88.28041666666667|41.80003166666667,-88.28312833333334|41.795566666666666,-88.28211666666667|41.79022,-88.28205833333334|41.785465,-88.28198|41.784135,-88.28193833333333|41.782473333333336,-88.283865|41.78230833333333,-88.28874666666667|41.782226666666666,-88.288225|41.781863333333334,-88.287305|41.78176833333333,-88.28751333333334|41.78176833333333,-88.28751333333334

points in the "inspector"

【问题讨论】:

问题跟踪器中可能相关的问题:Issue 9436: Roads-API - Snapping point defects 问题跟踪器中可能相关的问题:Issue 9078: Road snapping not working correctly, even though Directions API shows data exists. 问题跟踪器仍然没有解决此问题的任何问题。有人知道这个问题的解决方案或更好的答案吗? 【参考方案1】:

您的点看起来不像 GPS 跟踪器的完整输出(设计此 API 的用例),因此您的延伸距离太远。请提高 GPS 记录的分辨率以获得更好的输出。

【讨论】:

google road API 期望 GPS 记录的分辨率是多少? 谢谢布雷特。我会尝试预期的分辨率【参考方案2】:

谷歌地图似乎不能捕捉远点, (如果之间的距离大于 300m - 400m)。

作为一种解决方案,我在相距太远的点之间添加了一些假点。

现在谷歌地图可以正确捕捉我的路线。

List<LatLon> extendedPointsList = new List<LatLon>();
var lastLatLon = OrigionalRoute[0];
extendedPointsList.Add(lastLatLon);
indexesBeforeAddingPoints.Add(0);

for (int i = 1; i < OrigionalRoute.Count; i++)

    var currentLatlon = OrigionalRoute[i];
    double estimatedDistance = 
    getEstimatedDistanceBetweenPoints(currentLatlon, lastLatLon);

    //estimated 400 meters
    if (estimatedDistance > 0.004)
    
        //estimated 340 meters
        int countOfPoints = (int)Math.Round(estimatedDistance / 0.0034); 


        if (countOfPoints > 1)
        
            var latDiff = (currentLatlon.Lat - lastLatLon.Lat) / countOfPoints;
            var lonDiff = (currentLatlon.Lon - lastLatLon.Lon) / countOfPoints;

            for (int j = 1; j < countOfPoints; j++)
            
                var aveLat = lastLatLon.Lat + (latDiff * j);
                var aveLon = lastLatLon.Lon + (lonDiff * j);

                indexesBeforeAddingPoints.Add(i - 1);
                extendedPointsList.Add(new LatLon(aveLat, aveLon));
            
        
    

    indexesBeforeAddingPoints.Add(i);
    extendedPointsList.Add(currentLatlon);

    lastLatLon = currentLatlon;


OrigionalRoute = extendedPointsList;

估计距离的方法(我忽略了地球的球体和投影)。

private static double getEstimatedDistanceBetweenPoints(LatLon pointA, LatLon pointB)

    return Math.Sqrt(Math.Pow((pointA.Lat - pointB.Lat), 2) + Math.Pow((pointA.Lon - pointB.Lon), 2));

【讨论】:

以上是关于Google Map Road API 没有插入路径,也没有给出平滑的路线的主要内容,如果未能解决你的问题,请参考以下文章

Google Map API 无法插入到 url,包括 Google Map Json

打开eclipse后应该怎样安装 Google map API ?在Android sDK Manager列表中没有找到Google map API 这应该

iOS Google Map API错误

在Xamarin中使用Google Map

Google Developer 控制台“Google Map Android API V2”选项未查看启用

如何将获取的API响应正确地插入表中