Android Google Map how to check if the gps location is inside the circle -


i'm trying detect if user in radius of marker , using users gps location. have marker's coordinates, don't know how calculate whether user in area. i've tried use following, when current location inside circle keep getting "outside" message.

public class mapaescola extends fragmentactivity {      private googlemap googlemap;     private serializable escolas;     private progressdialog dialog;     private circle mcircle;     private marker mmarker;        @targetapi(build.version_codes.ice_cream_sandwich)     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          getactionbar().setdisplayhomeasupenabled(true);         getactionbar().sethomebuttonenabled(true);          setcontentview(r.layout.maps);          // loading map         initilizemap();          // changing map type         googlemap.setmaptype(googlemap.map_type_normal);          // showing / hiding current location         googlemap.setmylocationenabled(true);          // enable / disable zooming controls         googlemap.getuisettings().setzoomcontrolsenabled(true);          // enable / disable 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);          bundle = getintent().getbundleextra("extra");         arraylist<escolas> objects = (arraylist<escolas>) extra.getserializable("array");           try {              for(int = 0; < objects.size(); ++) {                 system.out.println(" escolas " + objects.get(i).getlatitude() + " " + objects.get(i).getlongitude());                  float latitude = objects.get(i).getlatitude();                 float longitude = objects.get(i).getlongitude();                  googlemap.movecamera(cameraupdatefactory.newlatlngzoom(new latlng(-23.316281, -51.155528), 15));                  markeroptions options = new markeroptions();                  // setting position of marker                  options.position(new latlng(latitude, longitude));                  googlemap = ((mapfragment) getfragmentmanager().findfragmentbyid(r.id.map)).getmap();                  latlng latlng = new latlng(latitude, longitude);                 drawmarkerwithcircle(latlng);                   googlemap.setonmylocationchangelistener(new googlemap.onmylocationchangelistener() {                     @override                     public void onmylocationchange(location location) {                         float[] distance = new float[2];                          location.distancebetween( mmarker.getposition().latitude, mmarker.getposition().longitude,                                 mcircle.getcenter().latitude, mcircle.getcenter().longitude, distance);                          if( distance[0] > (mcircle.getradius() / 2)  ){                             toast.maketext(getbasecontext(), "outside", toast.length_long).show();                         } else {                             toast.maketext(getbasecontext(), "inside", toast.length_long).show();                         }                      }                 });                 }            } catch (exception e) {             e.printstacktrace();         }     }       private void drawmarkerwithcircle(latlng position){         double radiusinmeters = 500.0;         int strokecolor = 0xffff0000; //red outline         int shadecolor = 0x44ff0000; //opaque red fill          circleoptions circleoptions = new circleoptions().center(position).radius(radiusinmeters).fillcolor(shadecolor).strokecolor(strokecolor).strokewidth(8);         mcircle = googlemap.addcircle(circleoptions);          markeroptions markeroptions = new markeroptions().position(position);         mmarker = googlemap.addmarker(markeroptions);     }        private void initilizemap() {          if (googlemap == null) {             googlemap = ((mapfragment) getfragmentmanager().findfragmentbyid(                     r.id.map)).getmap();              // check if map created or not             if (googlemap == null) {                 toast.maketext(getapplicationcontext(),                         "não foi possível carregar o mapa", toast.length_short)                         .show();             }         }     }      @targetapi(build.version_codes.honeycomb)     @override     public void onbackpressed() {          super.onbackpressed();         finish();      }      @override     public boolean oncreateoptionsmenu(menu menu) {         // todo auto-generated method stub         menuinflater inflater = getmenuinflater();         inflater.inflate(r.menu.menu_main, menu);          return super.oncreateoptionsmenu(menu);     }      @targetapi(build.version_codes.honeycomb)     public boolean onoptionsitemselected(menuitem item) {           switch (item.getitemid()) {              case android.r.id.home:                 super.onbackpressed();                 finish();                  return true;           }          return true;      }      @override     protected void onresume() {         super.onresume();         initilizemap();     }   } 

i ran updated code , figured out main problem is.

you should using location passed onmylocationchange() callback, uses current location tell if device within circle or not:

googlemap.setonmylocationchangelistener(new googlemap.onmylocationchangelistener() {                 @override                 public void onmylocationchange(location location) {                     float[] distance = new float[2];                      /*                     location.distancebetween( mmarker.getposition().latitude, mmarker.getposition().longitude,                             mcircle.getcenter().latitude, mcircle.getcenter().longitude, distance);                             */                      location.distancebetween( location.getlatitude(), location.getlongitude(),                             mcircle.getcenter().latitude, mcircle.getcenter().longitude, distance);                      if( distance[0] > mcircle.getradius() ){                         toast.maketext(getbasecontext(), "outside, distance center: " + distance[0] + " radius: " + mcircle.getradius(), toast.length_long).show();                     } else {                         toast.maketext(getbasecontext(), "inside, distance center: " + distance[0] + " radius: " + mcircle.getradius() , toast.length_long).show();                     }                  }             }); 

here full working example ran, it's pared down version of original code:

public class mainactivity extends actionbaractivity {      private googlemap googlemap;     private serializable escolas;     private progressdialog dialog;     private circle mcircle;     private marker mmarker;        @targetapi(build.version_codes.ice_cream_sandwich)     @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          getsupportactionbar().setdisplayhomeasupenabled(true);         getsupportactionbar().sethomebuttonenabled(true);          setcontentview(r.layout.activity_main);          // loading map         initilizemap();          // changing map type         googlemap.setmaptype(googlemap.map_type_normal);          // showing / hiding current location         googlemap.setmylocationenabled(true);          // enable / disable zooming controls         googlemap.getuisettings().setzoomcontrolsenabled(true);          // enable / disable 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);         // bundle = getintent().getbundleextra("extra");         //arraylist<escolas> objects = (arraylist<escolas>) extra.getserializable("array");           try {                //test outside                double mlatitude = 37.77657;                double mlongitude = -122.417506;                   //test inside                 //double mlatitude = 37.7795516;                 //double mlongitude = -122.39292;                   googlemap.movecamera(cameraupdatefactory.newlatlngzoom(new latlng(mlatitude, mlongitude), 15));                  markeroptions options = new markeroptions();                  // setting position of marker                  options.position(new latlng(mlatitude, mlongitude));                  //googlemap = ((supportmapfragment) getsupportfragmentmanager().findfragmentbyid(r.id.map)).getmap();                  latlng latlng = new latlng(mlatitude, mlongitude);                 drawmarkerwithcircle(latlng);                   googlemap.setonmylocationchangelistener(new googlemap.onmylocationchangelistener() {                     @override                     public void onmylocationchange(location location) {                         float[] distance = new float[2];                          /*                         location.distancebetween( mmarker.getposition().latitude, mmarker.getposition().longitude,                                 mcircle.getcenter().latitude, mcircle.getcenter().longitude, distance);                                 */                          location.distancebetween( location.getlatitude(), location.getlongitude(),                                 mcircle.getcenter().latitude, mcircle.getcenter().longitude, distance);                          if( distance[0] > mcircle.getradius()  ){                             toast.maketext(getbasecontext(), "outside, distance center: " + distance[0] + " radius: " + mcircle.getradius(), toast.length_long).show();                         } else {                             toast.maketext(getbasecontext(), "inside, distance center: " + distance[0] + " radius: " + mcircle.getradius() , toast.length_long).show();                         }                      }                 });             } catch (exception e) {             e.printstacktrace();         }     }       private void drawmarkerwithcircle(latlng position){         double radiusinmeters = 500.0;         int strokecolor = 0xffff0000; //red outline         int shadecolor = 0x44ff0000; //opaque red fill          circleoptions circleoptions = new circleoptions().center(position).radius(radiusinmeters).fillcolor(shadecolor).strokecolor(strokecolor).strokewidth(8);         mcircle = googlemap.addcircle(circleoptions);          markeroptions markeroptions = new markeroptions().position(position);         mmarker = googlemap.addmarker(markeroptions);     }        private void initilizemap() {          if (googlemap == null) {             googlemap = ((supportmapfragment) getsupportfragmentmanager().findfragmentbyid(                     r.id.map)).getmap();              // check if map created or not             if (googlemap == null) {                 toast.maketext(getapplicationcontext(),                         "não foi possível carregar o mapa", toast.length_short)                         .show();             }         }     }      @targetapi(build.version_codes.honeycomb)     @override     public void onbackpressed() {          super.onbackpressed();         finish();      }      @override     public boolean oncreateoptionsmenu(menu menu) {         // todo auto-generated method stub         menuinflater inflater = getmenuinflater();         inflater.inflate(r.menu.menu_main, menu);          return super.oncreateoptionsmenu(menu);     }      @targetapi(build.version_codes.honeycomb)     public boolean onoptionsitemselected(menuitem item) {           switch (item.getitemid()) {              case android.r.id.home:                 super.onbackpressed();                 finish();                  return true;           }          return true;      }      @override     protected void onresume() {         super.onresume();         initilizemap();     }   } 

results of inside circle:

inside

results of outside circle:

outside


Comments

Popular posts from this blog

IF statement in MySQL trigger -

c++ - What does MSC in "// appease MSC" comments mean? -

javascript - Blogger related post gadget image Resize s72-c [ Need Expert Help ] -