Как показать маршрут трассы, используя поли линию в Android - PullRequest
0 голосов
/ 21 ноября 2018

Я занимаюсь разработкой приложения для отслеживания автобусов, в котором я получаю местоположение с помощью службы с сервера.Теперь я хочу показать движение автобуса и нарисовать правильную полилинию.Я достиг части этого, но столкнулся с двумя основными проблемами:

  1. Каждый раз, когда отображается маркер автобуса, он не удаляется.Таким образом, старый след автобуса все еще присутствует.Несмотря на то, что я достиг места назначения, я вижу много значков автобусов.

  2. Я могу нарисовать ломаную линию, соединив широту и долготу, но иногда она показывает прямую линию.

Я приложил два снимка экрана для этого.enter image description here

enter image description here Код, который я использовал здесь:

private void setmMap() {
    progressDialog.show();

    if (broadcastReceiver == null)
        broadcastReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                Log.d("Testing", "inside the setmap");
                 // show progress dialog
                try {
                    double latitude = intent.getDoubleExtra("lat", 22.560214);
                    double longitude = intent.getDoubleExtra("longi", 22.560214);
                    Log.d("SetMap", intent.getExtras().getString("time"));
                    LatLng startLocation = new LatLng(latitude, longitude);
                    m.setPosition(startLocation);
                    points.add(startLocation);

                    PolylineOptions options = new PolylineOptions().width(5).color(Color.BLUE).geodesic(true);
                    for (int i = 0; i < points.size(); i++) {
                        LatLng point = points.get(i);
                        options.add(point);
                    }
                    line = mMap.addPolyline(options); //add Polyline
                    mMap.moveCamera(CameraUpdateFactory.newLatLng(startLocation));
                    mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(startLocation, 15));
                    progressDialog.cancel();
                    Geocoder geocoder;
                    List<Address> addresses;
                    geocoder = new Geocoder(context, Locale.getDefault());
                    addresses = geocoder.getFromLocation(latitude, longitude, 1);

                    String address = addresses.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
                    String city = addresses.get(0).getLocality();
                    String state = addresses.get(0).getAdminArea();
                    String country = addresses.get(0).getCountryName();
                    String postalCode = addresses.get(0).getPostalCode();
                    String strLoc = "Latitude:: "+latitude+"  ::Longitude::  "+longitude+"  ::Address::  "+address+"  "+city+" "+
                            state;
                    Toast.makeText(getApplicationContext(),strLoc, Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    e.printStackTrace();
                    progressDialog.cancel();
                }
            }
        };
    registerReceiver(broadcastReceiver, new IntentFilter("carLocationService"));
}

Спасибо, Ариндам.

1 Ответ

0 голосов
/ 22 ноября 2018

1) вы не показываете часть кода, где добавлен маркер m, возможно, что код выполняется несколько раз;

2) кажется, что период опроса датчика местоположения шины довольно большой и не позволяет отслеживать шинуповороты (автобус может сделать несколько поворотов между известными местами).Таким образом, вам нужно интерполировать путь между известными автобусными местоположениями, например, с помощью Google Directions API .

...