排序位置类型 ArrayList 以在 Mapbox 中跟踪路由

Posted

技术标签:

【中文标题】排序位置类型 ArrayList 以在 Mapbox 中跟踪路由【英文标题】:Ordering Position type ArrayList to trace route in Mapbox 【发布时间】:2017-04-14 04:04:59 【问题描述】:

今天我遇到了一个肯定不常见的问题,但我整天都在解决这个问题,但没有任何结果。

我想要什么:我想在多个点之间绘制一条折线,考虑到路线必须是其中 LESS DISTANCE 的路线,而不是用户选择目的地的方式。

上下文:我有一个 LatLng ArrayList,当用户点击地图时,它会被填充,点击的 LatLng 会自动存储到 ArrayList 中。然后,我将其转换为 Position 数组列表以使用 setCoordinates() 方法。 另外,我有一个“原点”,这将是用户的当前位置。我已经建立了一个普通的来做测试。

问题:当用户单击目的地时,ArrayList 以他单击的方式填充,而不考虑最近的目的地是什么,这就是我想要实现的目标,跟踪路线只考虑到点之间的距离必须是最短的。

这是我的示例代码(请注意,如果可以在考虑距离的情况下订购“al”ArrayList,则路线可能会成功):

        for (int i=0; i<= direcciones.size() - 1; i++) 
            LatLng tri = direcciones.get(i);
            Position p = Position.fromCoordinates(tri.getLongitude(), tri.getLatitude());
            al.add(i, p);
        
        MapboxDirections client = new MapboxDirections.Builder()
                .setAccessToken(Mapbox.getAccessToken())
                .setOrigin(Position.fromCoordinates(-56.1645, -34.9011))
                .setCoordinates(al)
                .setProfile(DirectionsCriteria.PROFILE_DRIVING)
                .build();

提前谢谢你!

【问题讨论】:

【参考方案1】:

听起来你想使用我刚刚在pull request 中添加的优化旅行。它解决了traveling salesman 的问题。它与方向 API 非常相似,但请求有点不同:

MapboxOptimizedTrips.Builder builder = new MapboxOptimizedTrips.Builder()
  .setAccessToken(Mapbox.getAccessToken())
  .setProfile(DirectionsCriteria.PROFILE_DRIVING)
  .setSource(DirectionsCriteria.SOURCE_FIRST)
  .setOverview(DirectionsCriteria.OVERVIEW_FULL);

MapboxOptimizedTrips client = builder.setCoordinates(coords).build();
client.enqueueCall(new Callback<OptimizedTripsResponse>() 
  @Override
  public void onResponse(Call<OptimizedTripsResponse> call, Response<OptimizedTripsResponse> response) 

    drawLine(response.body().getTrips().get(0).getGeometry());
  

  @Override
  public void onFailure(Call<OptimizedTripsResponse> call, Throwable throwable) 
    Timber.e("Calling optimize trips failed: ", throwable);
  
);

【讨论】:

好吧,终于明白了。还有一个问题。为了调用 OptimizedTrips 构建器,我必须在 build.gradle 文件中导入什么库? 它将包含在 libjava-services 库的 2.1 版本中(即将推出)。

以上是关于排序位置类型 ArrayList 以在 Mapbox 中跟踪路由的主要内容,如果未能解决你的问题,请参考以下文章

java中在arraylist表中的字符串类型数值怎么取

Java:就地对 ArrayList 进行排序

面向对象第一次练手-------ArrayList集合类对象冒泡排序类型转换

循环以在 JAVA 中的 JSONObject 内获取相同的对象 N 次

日期ArrayList的排序

Java中的ArrayList怎么进行冒泡排序