如何对ios目标c中的领域数据进行地理距离排序?
Posted
技术标签:
【中文标题】如何对ios目标c中的领域数据进行地理距离排序?【英文标题】:How to do geo distance sorting on realm data in ios objective c? 【发布时间】:2016-12-24 10:26:10 【问题描述】:我在领域数据中存储不同的位置点。现在我想根据与特定纬度和经度(或中心点)的距离对领域数据进行排序。领域中是否有任何方法可以对数据进行排序,或者我必须计算两点之间的距离,然后使用距离进行排序,如下面的代码。
RLMResults *getdata = [PersonDB allObjects];
CLLocation *locA = [[CLLocation alloc] initWithLatitude:lat1 longitude:long1];
for (int i = 0; i < [getdata count]; i++)
PersonDB *person = [getdata objectAtIndex:i];
CLLocation *locB = [[CLLocation alloc] initWithLatitude: person.
lat longitude: person.
long];
CLLocationDistance distance = [locA distanceFromLocation:locB];
RLMRealm *realm = [RLMRealm defaultRealm];
[realm beginWriteTransaction];
person.distance = distance;
[realm commitWriteTransaction];
RLMResults *realm_data = [PersonDB allObjects];
realm_data = [realm_data sortedResultsUsingProperty:@"distance" ascending:YES];
我发现需要半径和区域的基于 swift 的库 RealmGeoQueries。我不想定义任何界限。
【问题讨论】:
【参考方案1】:首先,导入模块;
import GeoQueries
使用 MapView MKCoordinateRegion 搜索;
let results = try! Realm()
.findInRegion(type: YourModelClass.self, region: mapView.region)
以米为单位在中心周围搜索;
let results = try! Realm()
.findNearby(YourModeltype: Class.self, origin: mapView.centerCoordinate, radius: 500, sortAscending: nil)
以米为单位过滤 Realm 结果;
let results = try! Realm()
.objects(YourModelClass.self)
.filter("type", "restaurant")
.filterGeoRadius(center: mapView.centerCoordinate, radius: 500, sortAscending: nil)
【讨论】:
【参考方案2】:不幸的是,Realm 目前不支持基于地理的操作,因此您必须使用库或您提供的代码。不过,这是我们want to add in the future 的东西——如果你想看到它,请随时在 GitHub 票上添加评论!
【讨论】:
感谢您的回复。【参考方案3】:我是RealmGeoQueries 的创建者,您可以在 Swift 中执行此操作:
let results = Realm().objects(Point).sortByDistance(center: centerCoordinate, ascending: true)
你不需要其他任何东西。
【讨论】:
我会试试这个。谢谢。以上是关于如何对ios目标c中的领域数据进行地理距离排序?的主要内容,如果未能解决你的问题,请参考以下文章