简体   繁体   English

如何在两个Latlong点之间画线?

[英]How to draw line between two Latlong points?

Using Polyline i can able to create a path between two points. 使用Polyline我可以在两点之间创建一条路径。

but when i am using these two points (Ahmedabad to New york) polyline is not create. 但当我使用这两点(艾哈迈达巴德到纽约)折线不是创造。 else it works if there is no SEA between two points. 否则,如果两点之间没有SEA,它就可以工作。

i'am getting issue when points are like 我喜欢积分问题

在此输入图像描述

but in this case its working from Bhuj to Ahmedabad 但在这种情况下,它从普杰到艾哈迈达巴德工作 在此输入图像描述

Finally I got the Answer how Ola and Uber app doing these.. 最后,我得到了答案奥拉优步应用程序如何做这些..

在此输入图像描述

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

You can draw like below one 你可以像下面那样画画

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

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM