【问题标题】:How to draw line between two Latlong points?如何在两个拉特隆点之间画线?
【发布时间】:2017-09-24 22:04:13
【问题描述】:

使用 Polyline 我可以在两点之间创建一条路径。

但是当我使用这两点时 (艾哈迈达巴德到纽约) 不创建折线。 否则,如果两点之间没有 SEA,它会起作用。

当积分像这样时我会遇到问题

但在这种情况下,它从普杰到艾哈迈达巴德工作

【问题讨论】:

    标签: android google-maps path google-polyline


    【解决方案1】:

    最后我得到了 OlaUber 应用程序如何做到这些的答案..

    ArrayList<LatLng> points = new ArrayList<LatLng>();
                    PolylineOptions polyLineOptions = new PolylineOptions();
                    points.add(new LatLng(from_latitude,from_longitude));
                    points.add(new LatLng(to_latitude,to_longitude));
                    polyLineOptions.width(7 * 1);
                    polyLineOptions.geodesic(true);
                    polyLineOptions.color(activity.getResources().getColor(R.color.black));
                    polyLineOptions.addAll(points);
                    Polyline polyline = mMap.addPolyline(polyLineOptions);
                    polyline.setGeodesic(true);
    

    【讨论】:

    • 也不工作。我试过你的代码。让我知道是否需要其他东西。
    【解决方案2】:
     solution 1:
    
        private void showDirection(LatLng source, LatLng destination) {
    
        Map<String, String> hashMap = new HashMap<String, String>();
    
        final String url = "http://maps.googleapis.com/maps/api/directions/json?origin="
                + source.latitude
                + ","
                + source.longitude
                + "&destination="
                + destination.latitude
                + ","
                + destination.longitude
                + "&sensor=false";
        new HttpRequester(activity, hashMap, StaticValues.ServiceCode.GET_ROUTE, true,
                this);
        Utils.showCustomProgressDialog(activity,
                getString(R.string.text_getting_direction), false, null);
    }
    
    
    solution 2:
    private void build_retrofit_and_get_response(String type) {
    
        String url = "https://maps.googleapis.com/maps/";
    
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(url)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    
        RetrofitMaps service = retrofit.create(RetrofitMaps.class);
    
        Call<Example> call = service.getDistanceDuration("metric", StartLocation.latitude + "," + StartLocation.longitude,
                EndLocation.latitude + "," + EndLocation.longitude, type);
    
        call.enqueue(new Callback<Example>() {
            @Override
            public void onResponse(Response<Example> response, Retrofit retrofit) {
    
                try {
                    //Remove previous line from map
                    if (line != null) {
                        line.remove();
                    }
                    // This loop will go through all the results and add marker 
    on each location.
                    for (int i = 0; i < response.body().getRoutes().size(); i++) {
                        String distance = response.body().getRoutes().get(i).getLegs().get(i).getDistance().getText();
                        String time = response.body().getRoutes().get(i).getLegs().get(i).getDuration().getText();
    //          activity.setTitleActionBar("Distance:" + distance + ", Duration:" + time);
                        String encodedString = response.body().getRoutes().get(0).getOverviewPolyline().getPoints();
                        List<LatLng> list = decodePoly(encodedString);
                        line = mGoogleMap.addPolyline(new PolylineOptions()
                                .addAll(list)
                                .width(10)
                                .color(Color.RED)
                                .geodesic(true)
                        );
                    }
                } catch (Exception e) {
                    Log.d("onResponse", "There is an error");
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onFailure(Throwable t) {
                Log.d("onFailure", t.toString());
            }
        });
    
    }
    

    【讨论】:

    • type = "驾驶" 或 "步行"
    • 兄弟使用22.970385、72.577455和41.029469、-77.618526并绘制路径..你不会得到输出..先试试..然后告诉我
    【解决方案3】:

    你可以像下面这样画

     PolylineOptions rectOptions = new PolylineOptions();
        LatLng polLatLng = null;
        if (points.size() > 0) {
            ArrayList<LatLng> pathPoint = new ArrayList<LatLng>();
            for (int k = 0; k < points.size(); k++) {
                double polLat = points.get(k).latitude;
                double polLng = points.get(k).longitude;
                pathPoint.add(new LatLng(polLat, polLng));
                polLatLng = new LatLng(polLat, polLng);
            }
            double startLatitude = points.get(0).latitude;
            double startLongitude = points.get(0).longitude;
            double endLatitude = points.get(points.size() - 1).latitude;
            double endLongitude = points.get(points.size() - 1).longitude;
            LatLng start = new LatLng(startLatitude, startLongitude);
            LatLng end = new LatLng(endLatitude, endLongitude);
    
            mMap.addMarker(new MarkerOptions().position(start).title("start"));
            mMap.addMarker(new MarkerOptions().position(end).title("end"));
            mMap.moveCamera(CameraUpdateFactory.newLatLng(polLatLng));
            mMap.animateCamera(CameraUpdateFactory.zoomTo(10));
            rectOptions.addAll(pathPoint);
            rectOptions.width(10);
            rectOptions.color(Color.BLUE);
            mMap.addPolyline(rectOptions);
    

    【讨论】: