【问题标题】:iOS - Build polyline from Google Maps Directions API responseiOS - 从 Google Maps Directions API 响应构建折线
【发布时间】:2016-04-20 12:52:19
【问题描述】:

如何从 Directions API JSON 响应中获取 polyline

使用overview_polyline 不是一个选项,因为它只是实际polyline 的平滑版本。

我还尝试从步骤中获取开始和结束位置坐标,但是这些只会给我一个非常不准确的polyline,因为它们只包含几个坐标。

如何从路线响应中获得准确的polyline

编辑:使用@SaxonDruce 答案,我可以得到准确的折线,但是它们看起来像这样:

【问题讨论】:

    标签: ios google-maps-sdk-ios google-polyline


    【解决方案1】:

    基于the sample response,您需要以下内容:

    response.routes[0].legs[0].steps[i].polyline.points
    

    所以,获取第一条路线,然后是第一段,然后循环步骤,然后获取折线,然后获取点。

    【讨论】:

    • 但这会给我每一步单独编码的折线,因此每一步都需要使用多个 GMSPath 来绘制它们。如何将它们组合成一个 GMSPath?此外,使用这种方法,线条非常不稳定,边缘很锋利!
    • 您的方法效果很好,但唯一的问题是(由于单独为步骤绘制每条折线)线条看起来非常分段且不均匀(请参阅编辑后的答案)。
    • @BalázsVincze 对于第一个问题,我发现 stackoverflow.com/a/24096653/148241 有一些代码可以将多个 GMSPath 对象组合成一个 GMSMutablePath
    • 对于第二个问题,看起来编码的折线将坐标四舍五入到最接近的米。请参阅 stackoverflow.com/questions/10207351/…stackoverflow.com/questions/22394224/…。我不确定您是否可以对此采取任何措施来从 Google API 获得更准确的响应。也许你可以过滤掉靠近的点?你仍然会得到片段,但它们会更长,所以看起来会更好。
    【解决方案2】:

    要添加到saxon druce 的答案,您可以循环第一站的所有步骤并将所有点组合成一条折线。

    List<LatLng> points = new ArrayList<>();
    for (DirectionsStep step : legs[i].steps) {
        points.addAll(step.polyline.decodePath());
    }
    EncodedPolyline legPolyline = new EncodedPolyline(points);
    

    【讨论】:

      猜你喜欢
      • 2017-08-21
      • 2023-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多