【问题标题】:Polyline is not following the actual path betweeen two locations折线未遵循两个位置之间的实际路径
【发布时间】:2018-01-31 06:48:46
【问题描述】:

我从 Google Directions API 获取纬度和经度,并使用它们显示两个位置之间的折线。正在绘制折线,但未遵循它必须遵循的确切道路或路径。

这是我的截图-

Screenshot 1

Screenshot 2

这是我获取 LatLngs 并显示折线的代码。

 public void requestDirections(final String mode, String origin, String destination)
{
    final ProgressDialog progress=new ProgressDialog(this);
    progress.setMessage("Finding route");
    progress.show();


    Retrofit retrofit= new Retrofit.Builder().baseUrl("https://maps.googleapis.com/").addConverterFactory(GsonConverterFactory.create()).build();
    Call<DirectionResponse> call=retrofit.create(ApiDirections.class).getDirections(mode, origin, destination);
    call.enqueue(new Callback<DirectionResponse>() {
        @Override
        public void onResponse(Call<DirectionResponse> call, Response<DirectionResponse> response) {


            for(int i=0; i<response.body().getRoutes().get(0).getLegs().get(0).getSteps().size(); i++)
            {
                LatLng startLoc=new LatLng(response.body().getRoutes().get(0).getLegs().get(0).getSteps().get(i).getStartLocation().getLat(), response.body().getRoutes().get(0).getLegs().get(0).getSteps().get(i).getStartLocation().getLng());
                LatLng endLoc=new LatLng(response.body().getRoutes().get(0).getLegs().get(0).getSteps().get(i).getEndLocation().getLat(), response.body().getRoutes().get(0).getLegs().get(0).getSteps().get(i).getEndLocation().getLng());

                Polyline polyline=response.body().getRoutes().get(0).getLegs().get(0).getSteps().get(i).getPolyline();

                DataHandler.startingLocations.add(startLoc);
                DataHandler.endingLocations.add(endLoc);
                System.out.println("Starting Loc "+i+" "+startLoc);
                System.out.println("Ending Loc "+i+" "+endLoc);
                System.out.println("polyline "+i+" "+polyline.getPoints());


            }
            LatLng endLocation=new LatLng(response.body().getRoutes().get(0).getLegs().get(0).getEndLocation().getLat(), response.body().getRoutes().get(0).getLegs().get(0).getEndLocation().getLng());
            marker=mMap.addMarker(new MarkerOptions().position(endLocation).flat(true));

            marker.setTag(destinationName);
            mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(DataHandler.startingLocations.get((response.body().getRoutes().get(0).getLegs().get(0).getSteps().size())/2), 10));
            polylineOptions=new PolylineOptions();
            polylineOptions.addAll(DataHandler.endingLocations);
            polylineOptions.color(getResources().getColor(R.color.colorAccent));
            polylineOptions.width(12);
            polylineOptions.startCap(new RoundCap());
            polylineOptions.endCap(new RoundCap());



            mMap.addPolyline(polylineOptions);
            textViewJourneyDistance.setText(response.body().getRoutes().get(0).getLegs().get(0).getDistance().getText());
            textViewJourneyTime.setText(response.body().getRoutes().get(0).getLegs().get(0).getDuration().getText());



            progress.dismiss();

        }

        @Override
        public void onFailure(Call<DirectionResponse> call, Throwable t) {

            progress.dismiss();
        }
    });
}
 public interface ApiDirections{

    @GET("maps/api/directions/json?key=My_API_KEY")
    Call<DirectionResponse> getDirections(@Query("mode") String mode,
                                          @Query("origin") String origin,
                                          @Query("destination") String destination);
}

【问题讨论】:

    标签: android google-maps android-studio polyline


    【解决方案1】:

    你需要得到routelist

     ArrayList<LatLng> routelist = new ArrayList<LatLng>();
                            if (response.body().getRoutes().size() > 0) {
                                ArrayList<LatLng> decodelist;
                                Route routeA = response.body().getRoutes().get(0);
                                Log.e("ad", "Legs length : " + routeA.getLegs().size());
                                if (routeA.getLegs().size() > 0) {
                                    List<Steps> steps = routeA.getLegs().get(0).getSteps();
                                    Log.e("ad", "Steps size :" + steps.size());
                                    Steps step;
                                    Location location;
                                    String polyline;
                                    for (int i = 0; i < steps.size(); i++) {
                                        step = steps.get(i);
                                        location = step.getStart_location();
                                        routelist.add(new LatLng(location.getLat(), location.getLng()));
                                        Log.e("ad", "Start Location :" + location.getLat() + ", " + location.getLng());
                                        polyline = step.getPolyline().getPoints();
                                        decodelist = RouteDecode.decodePoly(polyline);
                                        routelist.addAll(decodelist);
                                        location = step.getEnd_location();
                                        routelist.add(new LatLng(location.getLat(), location.getLng()));
                                        Log.e("ad", "End Location :" + location.getLat() + ", " + location.getLng());
    
    
                                        Integer disInMeters = routeA.getLegs().get(0).getDistance().getValue();
                                        int kilometers = (int) (disInMeters * 0.001);
    
    
                                    }
                                }
                            }
    
                            if (routelist.size() > 0) {
    
    
                                PolylineOptions rectLine = new PolylineOptions().width(10).color(ContextCompat.getColor(SendSomethingTodayActivityThree.this, R.color.colorPrimary));
    
                                for (int i = 0; i < routelist.size(); i++) {
                                    rectLine.add(routelist.get(i));
                                }}
    

    它对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-04
      • 1970-01-01
      • 1970-01-01
      • 2016-02-11
      • 2016-08-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多