Core Data and Core Location

百般思念 提交于 2019-11-26 11:57:43

问题


I have a Core Data database with latitude and longitude properties. Is there a way to use Core Location\'s getDistanceFrom: method to find the five nearest locations to a CLLocation obtained from the GPS? Do I have to load all the objects using Core Data and parse through them, using getDistanceFrom: on each one or is there an easier way?


回答1:


You will have to iterate through them one by one; as far as I know there is no other way to do it.

However, you can make this more efficient by using a bounding box when you get the items from core data - this will reduce the number of objects that will be returned.

i.e. Something like

float latMax = wantedLat + 1;
float latMin = wantedLat - 1;
float lngMax = wantedLng + 1;
float lngMin = wantedLng - 1;
NSPredicate *predicate = [NSPredicate
    predicateWithFormat:@"lat > %f and lat < %f and lng > %f and lng < %f",
    latMin, latMax, lngMin, lngMax];

Though, depending on how much data you have and how closely it's spaced, you will want to use a different number than 1!

Sam

PS Also, I haven't taken into account the fact that longitude wraps!




回答2:


You can't use CoreData to find the nearest object, but might want to narrow down the query by using a bounding box. To find the nearest object, you might prefer to use simply the difference in lat/long which is considerably faster than calculating the actual distances.

I had a similar question:

CoreData: Find minimum of calculated property




回答3:


The following example is almost what you are looking for. It uses a SQLite function to calculate the distance in the ORDER BY clause (Haversine formula). Problem is that this example does not use Core-Data, but the SQLite API directly.

http://www.thismuchiknow.co.uk/?p=71



来源:https://stackoverflow.com/questions/2176127/core-data-and-core-location

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!