如何对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中的领域数据进行地理距离排序?的主要内容,如果未能解决你的问题,请参考以下文章

Solr - 如何按地理空间距离排序并返回距离?

计算大型数据集的地理点之间的距离

目标 C:如何列出具有最近地理位置的位置集

[算法系列]算法一 地理空间距离计算优化

C语言冒泡排序

Swift如何按距离对表格视图进行排序