iphone - MKMapView's user location is wrong on startup or resume -
when start application fresh, or resume after long time, mkmapview's notion of userlocation wrong , shows me in middle of sea.
i using following code:
self.mapview.centercoordinate = self.mapview.userlocation.location.coordinate; [mapview setcentercoordinate:self.mapview.userlocation.location.coordinate zoomlevel:zoom_level animated:yes];
happens after lengthy resume of app or brand new start....
that's expected behavior : user location isn't tracked iphone using gps (it consume battery). map displayed, mkmapview
instance shows last 'best' user position knows , then, improves accuracy activating tracking (this seamless process, don't have care it) .
you can monitor when mkmapview
updates user location on map implementing mkmapviewdelegate
protocol. implement :
- (void)mapview:(mkmapview *)mapview didupdateuserlocation:(mkuserlocation *)userlocation { cllocationaccuracy accuracy = userlocation.location.horizontalaccuracy; if (accuracy ......) { } }
(more info apple documentation here )
the code above in example checks accuracy of position being displayed mapview , reacts accordingly.
[edit]
if showing user location in middle of sea @ first bother you, can hide user location until location accurate/fresh enough.
so, set showsuserlocation
property of mkmapview
no
@ first until accurate enough location (thanks previous delegate callback) , set yes
.
doing you, avoid displaying location not accurate or old diplayed (there timestamp
property in cllocation
check wether it's old location or not)
n.b:you don't have create cllocationmanager
instance on side, mkmapview creates 1 internally , publish locations receives via delegate selector.
Comments
Post a Comment