ios - Calculating MAX and MIN Latitude and Longitude with distance from Location - Objective C -
i need compute max , min latitude , longitude values location distance.
i have thousands of locations stored in coredata, , want show ones within 5km users location.
how can approach problem?
here's possible solution:
macros convert degrees radians
#define deg2rad(degrees) ((degrees) / 180.0 m_pi)
macros hold searching distance
#define searchdistance 5.00 //float value in km
set minimum , maximum latitude, longitude values
float minlat = userlocation.coordinate.latitude - (searchdistance / 69); float maxlat = userlocation.coordinate.latitude + (searchdistance / 69); float minlon = userlocation.coordinate.latitude - searchdistance / fabs(cos(deg2rad(userlocation.coordinate.latitude))*69); float maxlon = userlocation.coordinate.longitude + searchdistance / fabs(cos(deg2rad(userlocation.coordinate.latitude))*69);
create predicate follows
nspredicate *predicate = [nspredicate predicatewithformat:@"latitude <= %f , latitude >= %f , longitude <= %f , longitude >= %f", maxlat, minlat, maxlon, minlon];
this create square around userlocation
, check if given location falls coordinates.
update: swift 2.* implementation
first create function compute degrees radians
func deg2rad(degrees:double) -> double{ return degrees * m_pi / 180 }
compute , create minimum , maximum latitude
, longitude
values
let searchdistance:double = 5.00 //float value in km let minlat = userlocation.coordinate.latitude - (searchdistance / 69) let maxlat = userlocation.coordinate.latitude + (searchdistance / 69) let minlon = userlocation.coordinate.longitude - searchdistance / fabs(cos(deg2rad(userlocation.coordinate.latitude))*69) let maxlon = userlocation.coordinate.longitude + searchdistance / fabs(cos(deg2rad(userlocation.coordinate.latitude))*69)
last create nspredicate
query coredata
locations. in case querying values latitude
, longitude
should change match coredata
object
let predicate = nspredicate(format: "latitude <= \(maxlat) , latitude >= \(minlat) , longitude <= \(maxlon) , longitude >= \(minlon)")
Comments
Post a Comment