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:

  1. macros convert degrees radians

    #define deg2rad(degrees) ((degrees) / 180.0 m_pi) 
  2. macros hold searching distance

    #define searchdistance 5.00 //float value in km 
  3. 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); 
  4. 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

Popular posts from this blog

apache - Remove .php and add trailing slash in url using htaccess not loading css -

javascript - jQuery show full size image on click -