How to show multiple markers on MapFragment in Google Map API v2?
Solution 1
I do it like this to show car positions on the map with markers of different colors:
private void addMarkersToMap() {
mMap.clear();
for (int i = 0; i < Cars.size(); i++) {
LatLng ll = new LatLng(Cars.get(i).getPos().getLat(), Cars.get(i).getPos().getLon());
BitmapDescriptor bitmapMarker;
switch (Cars.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(Cars.get(i).getName())
.snippet(getStateString(Cars.get(i).getState())).icon(bitmapMarker)));
Log.i(TAG,"Car number "+i+" was added " +mMarkers.get(mMarkers.size()-1).getId());
}
}
}
Cars 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()
Solution 2
To add multiple markers to map while converting address (ie. 123 Testing Street Lodi ca) to LatLng using geoCoder, the example code below will work.
// convert address to lng lat and add markers to map
public void addMarkersToMap() {
mMap.clear();
Double[] latitude = new Double[addressArrayList.size()];
Double[] longitude = new Double[addressArrayList.size()];
String[] addrs = new String[addressArrayList.size()];
addrs = addressArrayList.toArray(addrs);
List<Address> addressList;
if (addrs != null && addrs.length > 0) {
for (int i = 0; i < addrs.length; i++) {
try {
addressList = geoCoder.getFromLocationName(addrs[i], 1);
if (addressList == null || addressList.isEmpty() || addressList.equals("")) {
addressList = geoCoder.getFromLocationName("san francisco", 1);
}
latitude[i] = addressList.get(0).getLatitude();
longitude[i] = addressList.get(0).getLongitude();
System.out.println("latitude = " + latitude[i] + " longitude = " + longitude[i]);
mMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude[i], longitude[i]))
.title(namesArrayList.get(i))
.snippet(addressArrayList.get(i))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE))
.alpha(0.7f)
);
} catch (Exception e) {
e.printStackTrace();
} // end catch
}
}
} //end addMarkersToMap
Solution 3
I don't know maybe u fixed the code and now it's ok, but in the onCreate()
if (getIntent().getExtras() != null) {
final Bundle bundle = getIntent().getBundleExtra("LOCATION");
mLatitude = bundle.getDouble("LATITUDE");
mLatitude = bundle.getDouble("LONGITUDE");
}
the second mLatitude
I think it has to be mLongitude
just like u call it in the next rows.
Sorry if I'm late with the answer and is useless.
Related videos on Youtube
Shrikant Ballal
Hello, I am Shrikant Ballal, Staff Engineer - Android at YML. Interested in Android, Kotlin, Dev Tools, Processes and CI/CD.
Updated on July 09, 2022Comments
-
Shrikant Ballal almost 2 years
I am using
Google Map API v2
in my application to show Maps.I have followed all the steps, that is to be followed to enable Google Map in my application.
public class PinLocationOnMapView extends FragmentActivity { private double mLatitude = 0.0, mLongitude = 0.0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); SupportMapFragment fragment = SupportMapFragment.newInstance(); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment).commit(); } }
If I use this code, it shows me map, but if I provide my latitude/longitude values, map tiles does not load, and I see only white tiles.
Following is the code written in onCreate() of above class:
if (getIntent().getExtras() != null) { final Bundle bundle = getIntent().getBundleExtra("LOCATION"); mLatitude = bundle.getDouble("LATITUDE"); mLongitude = bundle.getDouble("LONGITUDE"); } else { finish(); } GoogleMapOptions options = new GoogleMapOptions(); LatLng latLng = new LatLng(mLatitude, mLongitude); CameraPosition cameraPosition;// = new CameraPosition(latLng, 0, 0, 0); cameraPosition = CameraPosition.fromLatLngZoom(latLng, (float) 14.0); options.mapType(GoogleMap.MAP_TYPE_SATELLITE).camera(cameraPosition) .zoomControlsEnabled(true).zoomGesturesEnabled(true); SupportMapFragment fragment = SupportMapFragment.newInstance(options); getSupportFragmentManager().beginTransaction() .add(android.R.id.content, fragment).commit();
Also, I have a list of lat/long values. I want to show them on
MapFragment
, how to show multiple markers onMapFragment
?I tried with
MapView
andItemizedOverlay
, but it didn't work for me. I believe I have correctly created theSHA1
key to get theAPI
key, because if that was wrong, I could not see map usingMapFragment
as well, but I can see that if I don't pass the lat/log value.