Estoy almacenando diferentes puntos de ubicación en los datos del reino. Ahora quiero ordenar los datos del reino en función de la distancia desde la latitud y longitud particulares (o punto central). ¿Hay algún método en el reino para ordenar datos o tengo que calcular la distancia entre dos puntos y luego usar la distancia para ordenar como el código a continuación?

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];

Encontré la biblioteca rápida RealmGeoQueries que requería radio y región. No quiero definir ningún límite.

3
Sid Mhatre 24 dic. 2016 a las 13:26

3 respuestas

La mejor respuesta

Primero, módulo de importación;

import GeoQueries

Buscar con MapView MKCoordinateRegion;

let results = try! Realm()
    .findInRegion(type: YourModelClass.self, region: mapView.region)

Busque alrededor del centro con radio en metros;

let results = try! Realm()
    .findNearby(YourModeltype: Class.self, origin: mapView.centerCoordinate, radius: 500, sortAscending: nil)

Filtrar resultados de Reino con radio en metros;

let results = try! Realm()
    .objects(YourModelClass.self)
    .filter("type", "restaurant")
    .filterGeoRadius(center: mapView.centerCoordinate, radius: 500, sortAscending: nil)
1
user5644609user5644609 30 ene. 2017 a las 08:13

Soy el creador de RealmGeoQueries y puedes hacerlo en Swift:

let results = Realm().objects(Point).sortByDistance(center: centerCoordinate, ascending: true)

No necesitas nada más.

0
mhergon 4 ene. 2017 a las 19:15

Desafortunadamente, Realm actualmente no admite operaciones geográficas, por lo que tendrá que usar una biblioteca o el código que proporcionó. Sin embargo, es algo que queremos agregar en el futuro - si quieres verlo, ¡siéntete libre de agregar un comentario en ese boleto de GitHub!

1
AustinZ 27 dic. 2016 a las 19:24