Search code examples
androidgoogle-mapsandroid-mapsandroid-maps-extensions

Android Google Map coordinate


Currently doing a simple app that contain google map. and i would like to link to next activity when the user click on a designed coordinate but it is not working and there is no error, please help me

double latitude = 1.34503109;

    double longitude = 103.94008398;

    LatLng latLng = new LatLng(latitude, longitude);

    gMap.setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng latLng) {
            Intent i = new Intent(Activity_Selecting_Bus.this,
                    Activity_Bus_Selected.class);
            startActivity(i);

        }
    });

Solution

  • If I understand correctly you have markers set up in your map and when user clicks on a marker you start another activity. The following code should work (in SupportMapFragment):

    getMap().setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
      @Override
      public boolean onMarkerClick(Marker marker) {
        // do the thing!
        return true;
      }
    });
    

    If you don't have markers and want to listen for a certain location click use this instead:

    getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
      @Override
      public void onMapClick(LatLng latLng) {
        // do the thing!
      }
    });
    

    In this case you probably want to start the activity when the user clicks "close enough" to a certain location. I use this library http://googlemaps.github.io/android-maps-utils/ which contains method

    SphericalUtil.computeDistanceBetween(LatLng from, LatLng to)
    

    which returns distance between two LatLngs in meters.

    EDIT Example:

    First you define where the user has to click and which activity does that particular click launch:

    private static final HashMap<LatLng, Class<? extends Activity>> sTargets = new HashMap();
    
    static {
        sTargets.put(new LatLng(34.0204989,-118.4117325), LosAngelesActivity.class);
        sTargets.put(new LatLng(42.755942,-75.8092041), NewYorkActivity.class);
        sTargets.put(new LatLng(42.352711,-83.099205), DetroitActivity.class);
    }
    
    private static final int RANGE_METERS = 200 * 1000; // 200 km range
    

    Then when the user clicks on the map, you compute distance to each point. If it fits, you launch the activity.

    getMap().setOnMapClickListener(new GoogleMap.OnMapClickListener() {
        @Override
        public void onMapClick(LatLng input) {
            for(Map.Entry<LatLng,<? extends Activity>> entry : sTargets.entrySet()) {
                LatLng ll = entry.getKey();
                boolean inRange = SphericalUtil.computeDistanceBetween(input, ll) < RANGE_METERS;
                if (inRange) {
                    Class<? extends Activity> cls = entry.getValue();
                    Intent i = new Intent(getActivity(), cls);
                    getActivity().startActivity(i);
                    break; // stop calculating after first result
                }
            }
        }
    });