1

Currently I have an app that gets the phones GPS location in the background and adds the longitude and latitude coordinates to two separate array lists, I know this part is working fine, however when I do my button click to plot the points to my map it only plots the very first point when I have hundreds in my array list

btnPrevious.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            for(int i = 0;i<latitude.size();i++)
            {
                mMap.addMarker(new MarkerOptions().position(new LatLng(latitude.get(i), longitude.get(i))).title("LOCATION " + latitude.get(i) + ", " + longitude.get(i)));

                Log.d("LOCATION", latitude.get(i)+ "," + longitude.get(i));


            }
            Log.d("Count", ""+longitude.size());


        }
    });
1
  • Could you post the Log? Commented May 5, 2015 at 13:46

2 Answers 2

5

Try this code, I am taking a list of Data class which contains latitude and longitude information which i am setting in Marker options to display on the map. If you want to animate camera you can pass the builder instance to animateCamera and the maps will animate you to all the markers which has been added.

private void insertMarkers(List<Data> list) {
        final LatLngBounds.Builder builder = new LatLngBounds.Builder();

        for (int i = 0; i < list.size(); i++) {
            final Lat Lng position = new LatLng(list.get(i).getCurrent_lat(), list.get(i).getCurrent_lng());
            final MarkerOptions options = new MarkerOptions().position(position);

            mMaps.addMarker(options);

            builder.include(position);
        }

    }
Sign up to request clarification or add additional context in comments.

1 Comment

Could you explain it a little more please?
0

I do it like this to show motors positions on the map with markers of different colors:

private void addMarkersToMap() {
mMap.clear();
for (int i = 0; i < Motors.size(); i++) {         
        LatLng ll = new LatLng(Motors.get(i).getPos().getLat(), Motors.get(i).getPos().getLon());
        BitmapDescriptor bitmapMarker;
        switch (Motors.get(i).getState()) {
        case 0:
            bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED);
            Log.i(TAG, "RED");
            break;
        case 1:
            bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_GREEN);
            Log.i(TAG, "GREEN");
            break;
        case 2:
            bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE);
            Log.i(TAG, "ORANGE");
            break;
        default:
            bitmapMarker = BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED);
            Log.i(TAG, "DEFAULT");
            break;
        }               
        mMarkers.add(mMap.addMarker(new MarkerOptions().position(ll).title(Motors.get(i).getName())
                .snippet(getStateString(Motors.get(i).getState())).icon(bitmapMarker)));

        Log.i(TAG,"Car number "+i+"  was added " +mMarkers.get(mMarkers.size()-1).getId());
    }
}

}

Motors is an ArrayList of custom objects and mMarkers is an ArrayList of markers.

Note : You can show map in fragment like this:

private GoogleMap mMap;

....

private void setUpMapIfNeeded() {
    // Do a null check to confirm that we have not already instantiated the
// map.
if (mMap == null) {
    // Try to obtain the map from the SupportMapFragment.
    mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
    // Check if we were successful in obtaining the map.
    if (mMap != null) {
        setUpMap();
    }
}

}

private void setUpMap() {
// Hide the zoom controls as the button panel will cover it.
mMap.getUiSettings().setZoomControlsEnabled(false);

// Add lots of markers to the map.
addMarkersToMap();

// Setting an info window adapter allows us to change the both the
// contents and look of the
// info window.
mMap.setInfoWindowAdapter(new CustomInfoWindowAdapter());

// Set listeners for marker events. See the bottom of this class for
// their behavior.
mMap.setOnMarkerClickListener(this);
mMap.setOnInfoWindowClickListener(this);
mMap.setOnMarkerDragListener(this);

// Pan to see all markers in view.
// Cannot zoom to bounds until the map has a size.
final View mapView = getSupportFragmentManager().findFragmentById(R.id.map).getView();
if (mapView.getViewTreeObserver().isAlive()) {
    mapView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        @SuppressLint("NewApi")
        // We check which build version we are using.
        @Override
        public void onGlobalLayout() {
            LatLngBounds.Builder bld = new LatLngBounds.Builder();
for (int i = 0; i < mAvailableCars.size(); i++) {           
        LatLng ll = new LatLng(Cars.get(i).getPos().getLat(), Cars.get(i).getPos().getLon());
        bld.include(ll);            
}
LatLngBounds bounds = bld.build();          
mMap.moveCamera(CameraUpdateFactory.newLatLngBounds(bounds, 70));
            mapView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

        }
    });
}
} 

And just call setUpMapIfNeeded() in onCreate()

1 Comment

My idea is to place markers at set intervals when the user has the app running and are moving, so every time the user moves the minimum distance a new marker is placed with the rest of them so that a route is shown using the markers, would this code allow me to do this?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.