Рисование маршрутов между двумя маркерами - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь написать приложение для Android для доставки, поэтому мне нужно нарисовать путь, по которому грузоотправитель должен следовать по моей карте.Я добавил Google Maps API, и я могу получить свое местоположение и пункт назначения на карте (хранится в FireBase), но у меня возникли некоторые проблемы при рисовании маршрутов.

Вот мой код:

public class TrackingActivity extends FragmentActivity implements OnMapReadyCallback {

private GoogleMap mMap;

FusedLocationProviderClient fusedLocationProviderClient;
LocationCallback locationCallback;
LocationRequest locationRequest;
Location mLastLocation;
Marker mCurrentMarket;
Polyline polyLine;

SessionManager sessionManager;
IGeoCoordinate mService;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_tracking);
    mService = sessionManager.getGeoCodeService();

    // Obtain the SupportMapFragment and get notified when the map is ready to be used.
    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
            .findFragmentById(R.id.map);
    mapFragment.getMapAsync(this);

    buildLocationRequest();
    buildLocationCallBack();

    fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
    fusedLocationProviderClient.requestLocationUpdates(locationRequest,locationCallback, Looper.myLooper());
}
@Override
public void onMapReady(GoogleMap googleMap) {
    mMap = googleMap;

   fusedLocationProviderClient.getLastLocation().addOnSuccessListener(new OnSuccessListener<Location>() {
       @Override
       public void onSuccess(Location location) {
           mLastLocation = location;
           LatLng myLocation = new LatLng(location.getLatitude(), location.getLongitude());
           mCurrentMarket = mMap.addMarker(new MarkerOptions().position(myLocation).title("My location"));
           mMap.moveCamera(CameraUpdateFactory.newLatLng(myLocation));
           mMap.animateCamera(CameraUpdateFactory.zoomTo(16.0f));

       }
   });
}

Рисование маршрутов:

public void drawRoute(final LatLng myLocation, Colis_Livreur colis_livreur )
{
    //CLEAR ALL POLYLNE
    if(polyLine!=null)
    {
        polyLine.remove();
    }
    if (colis_livreur.getLatLng()!=null && !colis_livreur.getLatLng().isEmpty() )
    {
        String [] LatLng = colis_livreur.getLatLng().split(",");
        LatLng colisLocation = new LatLng(Double.parseDouble(LatLng[0]),Double.parseDouble(LatLng[1]));


        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.box);
        bitmap = SessionManager.scaleBitmap(bitmap, 70, 70);

        MarkerOptions marker = new MarkerOptions().icon(BitmapDescriptorFactory.fromBitmap(bitmap))
                .title("Colis de " + sessionManager.getLivreurDetail().getTel())
                .position(colisLocation);
        mMap.addMarker(marker);


        mService.getDirection(mLastLocation.getLatitude()+","+mLastLocation.getLongitude(),
                colisLocation.latitude+","+colisLocation.longitude,"AIzaSyBqgc9e_SwSKwHc2QQe_6F5vdGjDW__Vfk").enqueue(new Callback<String>() {
            @Override
            public void onResponse(Call<String> call, Response<String> response) {
                new ParserTask().execute(response.body().toString());
            }

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

            }
        });
    }
}

И функция, которая анализирует объект JSON:

private class ParserTask extends AsyncTask<String,Integer, List<List<HashMap<String,String>>>> {
    @Override
    protected List<List<HashMap<String, String>>> doInBackground(String... strings) {
        JSONObject jObject;
        List<List<HashMap<String,String>>> routes =null;
        try{
            jObject = new JSONObject(strings[0]);
            DirectionJSONParser parser = new DirectionJSONParser();

            routes = parser.parse(jObject);
        }
        catch (JSONException e ) {e.printStackTrace();}
        return routes;
    }

    @Override
    protected void onPostExecute(List<List<HashMap<String, String>>> lists) {
        super.onPostExecute(lists);
        ArrayList<LatLng> points = new ArrayList<LatLng>();;
        PolylineOptions lineOptions = new PolylineOptions();;
        lineOptions.width(10);
        lineOptions.color(Color.RED);
        // Traversing through all the routes
        for(int i=0;i<lists.size();i++){
            // Fetching i-th route
            List<HashMap<String, String>> path = lists.get(i);
            // Fetching all the points in i-th route
            for(int j=0;j<path.size();j++){
                HashMap<String,String> point = path.get(j);
                double lat = Double.parseDouble(point.get("lat"));
                double lng = Double.parseDouble(point.get("lng"));
                LatLng position = new LatLng(lat, lng);
                points.add(position);
            }
            // Adding all the points in the route to LineOptions
            lineOptions.addAll(points);

        }

        // Drawing polyline in the Google Map for the i-th route
        if(lineOptions != null){mMap.addPolyline(lineOptions);}//to avoid crash
    }
}

Я не получаю никакой ошибки, все работает нормально, за исключением того, что маршрутне отображается!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...