Сохранение местоположения в списке массивов, если изменяется onLocationChanged - PullRequest
0 голосов
/ 06 декабря 2018

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

Вот мой код выше, я застрял прямо сейчас, чтобы иметь возможность сохранить местоположение в списке массивов, потому что, если я сохранил местоположение в первом значении, когда я вызываю массив list.get (I +1) я получаю ошибку IndexOutOFBounds.

Любая идея, как написать, что при каждом изменении местоположения location.latlng будет сохраняться в списке массивов, а затем значения списка массивов будут отображаться в полилинии.

Вот мойкод ниже:

Спасибо!

        @Override
        public void onLocationChanged(Location location){

            double latitude = location.getLatitude();
            double longitude = location.getLongitude();




            //is called only once
            lat.add(latitude);
            lng.add(longitude);


            //second coordinates
            lat.add(latitude);
            lng.add(longitude);


            Geocoder geocoder = new Geocoder(getApplicationContext());

            try {
                List<Address> addresses =
                        geocoder.getFromLocation(latitude, longitude, 1);
                String result = addresses.get(0).getLocality()+":";
                result += addresses.get(0).getCountryName();
                LatLng latLng = new LatLng(latitude, longitude);
                if (marker != null){
                    marker.remove();
                    marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));
                    int i = 0;
                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                                .clickable(true)
                                .add
                                        (       new LatLng(lat.get(i), lng.get(i)),
                                                new LatLng(lat.get(i + 1), lng.get(i + 1))
                                        ));

                        polyline.setEndCap(new RoundCap());
                        polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                        polyline.setColor(COLOR_BLACK_ARGB);
                        polyline.setJointType(JointType.ROUND);
                        polyline.setColor(COLOR_BLACK_ARGB);

                        }
                    else
                    {
                        marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));
                    int i = 0;
                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                            .clickable(true)
                            .add
                                    (       new LatLng(lat.get(i),lng.get(i)),
                                            new LatLng(lat.get(i+1),lng.get(i+1))
                                    ));

                    polyline.setEndCap(new RoundCap());
                    polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                    polyline.setColor(COLOR_BLACK_ARGB);
                    polyline.setJointType(JointType.ROUND);
                    polyline.setColor(COLOR_BLACK_ARGB);

                    }


            } catch (IOException e)
            {

                e.printStackTrace();

            }
        }

1 Ответ

0 голосов
/ 06 декабря 2018

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

    locationListener = new LocationListener() {


        ArrayList<Double> lastLat= new ArrayList<>();
        ArrayList<Double>lastLong= new ArrayList<>();
        int i = 0;


        @Override
        public void onLocationChanged(Location location){

            double latitude = location.getLatitude();
            double longitude = location.getLongitude();
            lastLat.add(latitude);
            lastLong.add(longitude);


            Geocoder geocoder = new Geocoder(getApplicationContext());

            try {
                List<Address> addresses =
                        geocoder.getFromLocation(latitude, longitude, 1);
                String result = addresses.get(0).getLocality()+":";
                result += addresses.get(0).getCountryName();
                LatLng latLng = new LatLng(latitude, longitude);
                if (marker != null){
                    marker.remove();
                    marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));

                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                                .clickable(true)
                                .add
                                        (

                                                new LatLng(latitude, longitude),
                                                new LatLng(lastLat.get(i), lastLong.get(i))

                                        ));


                        polyline.setEndCap(new RoundCap());
                        polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                        polyline.setColor(COLOR_BLACK_ARGB);
                        polyline.setJointType(JointType.ROUND);
                        polyline.setColor(COLOR_BLACK_ARGB);
                        i++;
                    }
                    else
                    {
                        marker = mMap.addMarker(new MarkerOptions().position(latLng).title(result));
                    int i = 0;
                    Polyline polyline = mMap.addPolyline(new PolylineOptions()
                            .clickable(true)
                            .add
                                    (

                                            new LatLng(latitutde,longitude),
                                            new LatLng(lastLat.get(i),lastLong.get(i))



                                    ));
                    polyline.setEndCap(new RoundCap());
                    polyline.setWidth(POLYLINE_STROKE_WIDTH_PX);
                    polyline.setColor(COLOR_BLACK_ARGB);
                    polyline.setJointType(JointType.ROUND);
                    polyline.setColor(COLOR_BLACK_ARGB);

                        i++; }

                        } catch (IOException e)
            {

                e.printStackTrace();

            }
        }
...