How to effectively use Google Maps API V2(with MapFragment, Google Map, Marker etc) to an older app that uses API V1(with MapView, GeoPoint etc),

StackOverflow https://stackoverflow.com/questions/16535276

Question

I was working on a Google Map based project for over 6 months. I was using Google Maps API V1 and its developer API keys. While I was trying to release the app I understood that Google API V1 got deprecated! When I read about Google Maps API V2, I found that MapView, GeoPoint, OverlayItem are usually replaced with fragment, Marker, MapFragment, Google Map etc.

my original XML looks like this

<?xml version="1.0" encoding="utf-8"?>
 <com.google.android.maps.MapView  xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/mapView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:apiKey="**************my old api key**************"/>

Now Google does not provide this key, I need to add a map, and show my overlay items on the same. I am notally confused with this new API.

My Java File looks exactly like

public class PlacesMapActivity extends MapActivity {
    // Nearest places
    PlacesList nearPlaces;

    // Map view
    MapView mapView;

    // Map overlay items
    List<Overlay> mapOverlays;

    AddItemizedOverlay itemizedOverlay;


    GeoPoint geoPoint;
    // Map controllers
    MapController mc;

    Drawable defaultMarker;

    double latitude;
    double longitude;
    OverlayItem overlayitem;

    String p_u_name;
    Place reference;





    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.map_places);

        // Getting intent data
        Intent i = getIntent();

        reference = (Place) i.getSerializableExtra("place_reference");

        // Users current geo location
        String user_latitude = i.getStringExtra("user_latitude");
        String user_longitude = i.getStringExtra("user_longitude");

        // Nearplaces list
        nearPlaces = (PlacesList) i.getSerializableExtra("near_places");

        mapView = (MapView) findViewById(R.id.mapView);
        mapView.setBuiltInZoomControls(true);

        mapOverlays = mapView.getOverlays();

        // Geopoint to place on map
        geoPoint = new GeoPoint((int) (Double.parseDouble(user_latitude) * 1E6),(int) (Double.parseDouble(user_longitude) * 1E6));

        // Drawable marker icon
        Drawable drawable_user = this.getResources().getDrawable(R.drawable.mark_red);

        itemizedOverlay = new AddItemizedOverlay(drawable_user, this);

        // Map overlay item
        overlayitem = new OverlayItem(geoPoint, "Your Location","That is you!");

        itemizedOverlay.addOverlay(overlayitem);

        mapOverlays.add(itemizedOverlay);
        itemizedOverlay.populateNow();



        Drawable drawable = this.getResources().getDrawable(R.drawable.mark_blue);

            itemizedOverlay = new AddItemizedOverlay(drawable, this);

            mc = mapView.getController();

        // These values are used to get map boundary area
        // The area where you can see all the markers on screen
        int minLat = Integer.MAX_VALUE;
        int minLong = Integer.MAX_VALUE;
        int maxLat = Integer.MIN_VALUE;
        int maxLong = Integer.MIN_VALUE;

        // check for null in case it is null
        if (nearPlaces.results != null) {



            // loop through all the places
            for (Place place : nearPlaces.results) {

                latitude = place.geometry.location.lat; // latitude
                longitude = place.geometry.location.lng; // longitude

                // Geopoint to place on map
                geoPoint = new GeoPoint((int) (latitude * 1E6),
                        (int) (longitude * 1E6));

                // Map overlay item
                overlayitem = new OverlayItem(geoPoint,"0",place.reference);

                itemizedOverlay.addOverlay(overlayitem);

                // calculating map boundary area
                minLat  = (int) Math.min( geoPoint.getLatitudeE6(), minLat );
                minLong = (int) Math.min( geoPoint.getLongitudeE6(), minLong);
                maxLat  = (int) Math.max( geoPoint.getLatitudeE6(), maxLat );
                maxLong = (int) Math.max( geoPoint.getLongitudeE6(), maxLong );
            }
            mapOverlays.add(itemizedOverlay);

            // showing all overlay items
            itemizedOverlay.populateNow();
        }


        // Adjusting the zoom level so that you can see all the markers on map
        mapView.getController().zoomToSpan(Math.abs( minLat - maxLat ), Math.abs( minLong - maxLong ));
        MapController controller = mapView.getController();
        controller.setZoom(15);

        // Showing the center of the map
        mc.animateTo(new GeoPoint((maxLat + minLat)/2, (maxLong + minLong)/2 ));
        mapView.postInvalidate();

    }



    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

}

I want to know if there is any means to use my old code to support Google Maps API V2?

Was it helpful?

Solution

The easiest way to migrate to v2 is to remove all the code you have now and write it from scratch.

Android API v1 and v2 do not map 1 to 1.

thank you

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top