Google Map Road API没有插入路径而没有给出平滑路径

时间:2016-03-16 01:37:44

标签: google-maps google-maps-api-3 google-roads-api

我正在尝试使用Roads Inspector中的道路API获得以下路线路径的平滑路线,但没有获得平滑路线.Google road 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"

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

Google地图似乎不会突破远点, (如果距离超过300米 - 400米)。

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

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

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));
}