4 May 2012

Google Map v2 in android

Hello Friends,

If you have developed any app that contains Google Maps v1, It’s time to upgrade it to Google Maps V2 as google maps version 1 deprecated officially on December 3rd, 2012 and it won’t work anymore. This article aims to give knowledge about how to implements newer Google Maps into your applications. If you have already worked with V1, implementing V2 is very easy.



Follow steps for creating Api key as well Google play service here.

activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <fragment
        android:id="@+id/map"
        android:name="com.google.android.gms.maps.MapFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</RelativeLayout>

MainActivity.java


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends Activity
{
 // Google Map
 private GoogleMap googleMap;

 @Override
 protected void onCreate(Bundle savedInstanceState)
 {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  try 
  {
   // Loading map
   initilizeMap();

   // Changing map type
   googleMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
   // googleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);
   // googleMap.setMapType(GoogleMap.MAP_TYPE_SATELLITE);
   // googleMap.setMapType(GoogleMap.MAP_TYPE_TERRAIN);
   // googleMap.setMapType(GoogleMap.MAP_TYPE_NONE);
   

   // Showing / hiding your current location
   googleMap.setMyLocationEnabled(true);

   // Enable / Disable zooming controls
   googleMap.getUiSettings().setZoomControlsEnabled(false);

   // Enable / Disable my location button
   googleMap.getUiSettings().setMyLocationButtonEnabled(true);

   // Enable / Disable Compass icon
   googleMap.getUiSettings().setCompassEnabled(true);

   // Enable / Disable Rotate gesture
   googleMap.getUiSettings().setRotateGesturesEnabled(true);

   // Enable / Disable zooming functionality
   googleMap.getUiSettings().setZoomGesturesEnabled(true);

   double latitude = 17.385044;
   double longitude = 78.486671;

   // lets place some 10 random markers
   for (int i = 0; i < 10; i++) 
   {
    // random latitude and logitude
   double[] randomLocation = createRandLocation(latitude,
      longitude);

    // Adding a marker
   MarkerOptions marker = new MarkerOptions().position(
   new LatLng(randomLocation[0], randomLocation[1]))
   .title("Hello Maps " + i);

   Log.e("Random", "> " + randomLocation[0] + ", "
   + randomLocation[1]);

    // changing marker color
    if (i == 0)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_AZURE));
    if (i == 1)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_BLUE));
    if (i == 2)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_CYAN));
    if (i == 3)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
    if (i == 4)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA));
    if (i == 5)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_ORANGE));
    if (i == 6)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_RED));
    if (i == 7)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_ROSE));
    if (i == 8)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_VIOLET));
    if (i == 9)
   marker.icon(BitmapDescriptorFactory
   .defaultMarker(BitmapDescriptorFactory.HUE_YELLOW));

   googleMap.addMarker(marker);

   // Move the camera to last position with a zoom level
    if (i == 9) 
    {
  CameraPosition cameraPosition = new CameraPosition.Builder()
  .target(new LatLng(randomLocation[0],      randomLocation[1])).zoom(15).build();
  googleMap.animateCamera(CameraUpdateFactory
  .newCameraPosition(cameraPosition));
    }
   }

  } catch (Exception e) 
  {
   e.printStackTrace();
  }

 }

 @Override
 protected void onResume()
 {
  super.onResume();
  initilizeMap();
 }

 /**
  * function to load map If map is not created it will create it for you
  * */
 private void initilizeMap() 
 {
  if (googleMap == null) 
  {
  googleMap = ((MapFragment) getFragmentManager().findFragmentById(
     R.id.map)).getMap();

   // check if map is created successfully or not
   if (googleMap == null) 
   {
   Toast.makeText(getApplicationContext(),
   "Sorry! unable to create maps", Toast.LENGTH_SHORT)
      .show();
   }
  }
 }

 /*
  * creating random postion around a location for testing purpose only
  */
 private double[] createRandLocation(double latitude, double longitude) 
 {
  return new double[] { latitude + ((Math.random() - 0.5) / 500),
    longitude + ((Math.random() - 0.5) / 500),
    150 + ((Math.random() - 0.5) * 10) };
 }
}

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="info.androidhive.googlemapsv2"
    android:versionCode="1"
    android:versionName="1.0" >

    <permission
        android:name="info.androidhive.googlemapsv2.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="info.androidhive.googlemapsv2.permission.MAPS_RECEIVE" />

    <uses-sdk
        android:minSdkVersion="7"
        android:targetSdkVersion="17" />

    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

    <!-- Required to show current location -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

    <!-- Required OpenGL ES 2.0. for Maps V2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <!-- Requires OpenGL ES version 2 -->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name="info.androidhive.googlemapsv2.MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppBaseTheme" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Goolge API Key -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="API Key" />
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
    </application>

</manifest>

Google API :

Google provide many API for perform operation on GPS.

1. Display Pin on Google map Using GOOGLE API either address OR lat&lng

 CASE 1:  http://maps.google.co.in/maps?q=address here
 CASE 2:  http://maps.google.com/maps?q=loc:"lat,lng"



2.  Reverse GEOCODING (Get data using Address OR latlng)

CASE 1: http://maps.google.com/maps/api/geocode/json?address=ahmedabad,gujrat

         CASE 2: https://maps.googleapis.com/maps/api/geocode/json?latlng=23.1378156,72.7053737

3. Route between location

       http://maps.google.com/maps?&saddr=slat,slon&daddr=dlat,dlon"

Here, saddr -> source address daddr -> destination address slat -> source latitude
slon -> source longitude dlat -> destination latitude dlon -> destination longitude


Here is the more Reference to use google map :

Display current location on Google Map:

http://wptrafficanalyzer.in/blog/showing-current-location-in-google-maps-with-gps-and-locationmanager-in-android/

http://www.androidhive.info/2012/01/android-working-with-google-maps/

http://android-er.blogspot.in/2009/11/display-marker-on-mapview-using.html

http://android-codes-examples.blogspot.in/2011/04/google-map-example-in-android-with-info.html

http://android-er.blogspot.in/2012/06/add-mylocationoverlay-on-openstreetmap.html

http://android-er.blogspot.in/2012/05/create-multi-marker-openstreetmap-for.html

Route Map in Android:

Uri uri = Uri.parse("http://maps.google.com/maps?&saddr=slat,slon&daddr=dlat,dlon");


Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);

Google MapV2 Reference link:
http://ramsandroid4all.blogspot.in/2013/03/google-maps-android-api-v2.html
http://patesush.blogspot.in/2012/12/how-to-create-app-for-google-map-v2-in.html

http://www.solutionanalysts.com/blog/android-custom-marker-icon-google-map-android-api-v2
http://wptrafficanalyzer.in/blog/custom-marker-icon-for-google-maps-android-api-v2/
http://wptrafficanalyzer.in/blog/gps-and-google-map-in-android-applications-series/

Google Map Operation:
http://androidmapv2.blogspot.in/

I will be happy if you will provide your feedback or follow this blog. Any suggestion and help will be appreciated.

Thank you :)

2 comments: