Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to show multiple markers on MapFragment in Google Map API v2?

Tags:

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 on MapFragment?

I tried with MapView and ItemizedOverlay, but it didn't work for me. I believe I have correctly created the SHA1 key to get the API key, because if that was wrong, I could not see map using MapFragment as well, but I can see that if I don't pass the lat/log value.

like image 684
Shrikant Ballal Avatar asked Dec 13 '12 07:12

Shrikant Ballal


People also ask

How do I add multiple markers to Google Maps API?

You just need this code: var marker = new google. maps. Marker({ position: new google.

How many markers can Google Maps API handle?

2048 characters in URL is just under 100 GeoCode values. So, again no more than 100 markers.


1 Answers

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()

like image 164
slezadav Avatar answered Sep 21 '22 11:09

slezadav