android - OverlayItem not updating on location change (OSM) -


i using osmdroid.

i have managed post adding overlay osmdroid creata overlay static item on specific location.

now trying make map little bit more dynamic. when location change overlayitem (which marking specific location on map) update also.

this tried do. map update overlayitem doesnt.

code:

package com.test.overlay;  import java.util.arraylist; import org.osmdroid.defaultresourceproxyimpl; import org.osmdroid.resourceproxy; import org.osmdroid.tileprovider.tilesource.tilesourcefactory; import org.osmdroid.util.geopoint; import org.osmdroid.views.mapcontroller; import org.osmdroid.views.mapview; import org.osmdroid.views.overlay.itemizediconoverlay; import org.osmdroid.views.overlay.itemizedoverlay; import org.osmdroid.views.overlay.overlayitem; import org.osmdroid.views.util.constants.mapviewconstants;  import android.app.activity; import android.location.location; import android.location.locationlistener; import android.location.locationmanager; import android.os.bundle; import android.widget.toast;  public class samplewithminimapitemizedoverlay extends activity implements         locationlistener, mapviewconstants {      private mapview mmapview;     private mapcontroller mapcontroller;     private locationmanager mlocmgr;     private itemizedoverlay<overlayitem> mmylocationoverlay;     private resourceproxy mresourceproxy;     int longtitude = 31987968;     int latitude = 34783155;      @override     public void oncreate(bundle savedinstancestate)     {         super.oncreate(savedinstancestate);          mresourceproxy = new defaultresourceproxyimpl(getapplicationcontext());         setcontentview(r.layout.main);          mmapview = (mapview) this.findviewbyid(r.id.mapview);         mmapview.settilesource(tilesourcefactory.mapnik);         mmapview.setbuiltinzoomcontrols(true);         mmapview.setmultitouchcontrols(true);         mapcontroller = this.mmapview.getcontroller();         mapcontroller.setzoom(15);         geopoint point2 = new geopoint(longtitude, latitude); // centre map here         geopoint point3 = new geopoint(longtitude + 2000, latitude + 2000); // icon                                                                             // goes                                                                             // here         // 31.987968,34.783155          mapcontroller.setcenter(point2);         mlocmgr = (locationmanager) getsystemservice(location_service);         mlocmgr.requestlocationupdates(locationmanager.gps_provider, 1000, 100,                 this);          arraylist<overlayitem> items = new arraylist<overlayitem>();         // put overlay icon little way map centre         items.add(new overlayitem("here", "sampledescription", point3));          /* ontaplistener markers, shows simple toast. */         this.mmylocationoverlay = new itemizediconoverlay<overlayitem>(items,                 new itemizediconoverlay.onitemgesturelistener<overlayitem>()                 {                     @override                     public boolean onitemsingletapup(final int index,                             final overlayitem item)                     {                         toast.maketext(samplewithminimapitemizedoverlay.this,                                 "item '" + item.mtitle, toast.length_long)                                 .show();                         return true; // 'handled' event.                     }                      @override                     public boolean onitemlongpress(final int index,                             final overlayitem item)                     {                         toast.maketext(samplewithminimapitemizedoverlay.this,                                 "item '" + item.mtitle, toast.length_long)                                 .show();                         return false;                     }                 }, mresourceproxy);         this.mmapview.getoverlays().add(this.mmylocationoverlay);         mmapview.invalidate();     }      -------//here tried change !!!!!!!!!---------------     -- map location being updated not overlayitem.     public void onlocationchanged(location location)     {         latitude = (int) (location.getlatitude() * 1e6);         longtitude = (int) (location.getlongitude() * 1e6);         toast.maketext(samplewithminimapitemizedoverlay.this,                 "location changed. lat:" + latitude + " long:" + longtitude ,                 toast.length_long).show();         geopoint gpt = new geopoint(latitude, longtitude);         mapcontroller.setcenter(gpt);         mmapview.invalidate();     }      @override     public void onproviderdisabled(string arg0)     {     }      @override     public void onproviderenabled(string provider)     {     }      @override     public void onstatuschanged(string provider, int status, bundle extras)     {     }  } 

thanks,

ray.

this should work ok

.

public class samplewithminimapitemizedoverlay extends activity implements         locationlistener, mapviewconstants {      private mapview mmapview;     private mapcontroller mapcontroller;     private locationmanager mlocmgr;     private itemizedoverlay<overlayitem> mmylocationoverlay;     private resourceproxy mresourceproxy;     int mlongtitude = 31987968;     int mlatitude = 34783155;     arraylist<overlayitem> mitems;     @override     public void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);          mresourceproxy = new defaultresourceproxyimpl(getapplicationcontext());         setcontentview(r.layout.main);          mmapview = (mapview) this.findviewbyid(r.id.mapview);         mmapview.settilesource(tilesourcefactory.mapnik);         mmapview.setbuiltinzoomcontrols(true);         mmapview.setmultitouchcontrols(true);         mapcontroller = this.mmapview.getcontroller();         mapcontroller.setzoom(15);         geopoint point2 = new geopoint(mlongtitude, mlatitude); // centre map here         geopoint point3 = new geopoint(mlongtitude + 2000, mlatitude + 2000); // icon                                                                             // goes         // 31.987968,34.783155         mapcontroller.setcenter(point2);         mlocmgr = (locationmanager) getsystemservice(location_service);         mlocmgr.requestlocationupdates(locationmanager.gps_provider, 1000, 100,                 this);          mitems = new arraylist<overlayitem>();         // put overlay icon little way map centre         mitems.add(new overlayitem("here", "sampledescription", point3));          /* ontaplistener markers, shows simple toast. */         // refer gesture listemer name         this.mmylocationoverlay = new itemizediconoverlay<overlayitem>(mitems,                 new glistener() , mresourceproxy);         this.mmapview.getoverlays().add(this.mmylocationoverlay);         mmapview.invalidate();     }      //we can't use anonymous class anymore if want change position     // of overlays/icons when location changed, give name     class glistener implements onitemgesturelistener<overlayitem> {         @override         public boolean onitemlongpress(int index, overlayitem item) {             toast.maketext(samplewithminimapitemizedoverlay.this, "item " + item.mtitle,                     toast.length_long).show();              return false;         }          @override         public boolean onitemsingletapup(int index, overlayitem item) {             toast.maketext(samplewithminimapitemizedoverlay.this, "item " + item.mtitle,                     toast.length_long).show();             return true; // 'handled' event.          }      }     // -------//here tried change !!!!!!!!!---------------     // -- map location being updated not overlayitem.     public void onlocationchanged(location location) {         mlatitude = (int) (location.getlatitude() * 1e6);         mlongtitude = (int) (location.getlongitude() * 1e6);         toast.maketext(samplewithminimapitemizedoverlay.this,                 "location changed. lat:" + mlatitude + " long:" + mlongtitude,                 toast.length_long).show();         geopoint gpt = new geopoint(mlatitude, mlongtitude);         mapcontroller.setcenter(gpt);         mitems.clear(); // comment out line if want new icon each change of position         mitems.add(new overlayitem("new", "sampledescription", gpt));         // change overlay         this.mmylocationoverlay = new itemizediconoverlay<overlayitem>(mitems,                 new glistener() , mresourceproxy);         this.mmapview.getoverlays().clear();         this.mmapview.getoverlays().add(this.mmylocationoverlay);         mmapview.invalidate();     }      @override     public void onproviderdisabled(string arg0) {     }      @override     public void onproviderenabled(string provider) {     }      @override     public void onstatuschanged(string provider, int status, bundle extras) {     }  } 

just comment/uncomment mitems.clear(); line depending on whether want new marker each time change position. (the icon appears atthe position have moved to)


Comments

Popular posts from this blog

c# - SharpSVN - How to get the previous revision? -

c++ - Is it possible to compile a VST on linux? -

url - Querystring manipulation of email Address in PHP -