iOS: stockage d'un file de données volumineux avec coordonnées de localization pour les requêtes fréquentes

Je voudrais find un moyen optimal de stocker l'information à partir d'un grand file de données (jusqu'à 1,5 Go) contenant des coordonnées de données de localization . Le file contient également des informations supplémentaires sur l'location, telles que: nom de l'location, icône de l'location.

Je dois pouvoir interroger la structure de données en fonction de l'location actuel de l'user et récupérer «n» les locations les plus proches (où n est généralement un nombre relativement petit, tel que 30) à l'location actuel de l'user.

J'ai lu un post suggérant d'utiliser une structure de données "grid" , qui reflète vraiment le système de coordonnées géocharts actuel (latitiude et longitide).

Ma solution actuelle serait d'initialiser une masortingce comme une grid de localization où chaque cellule représente un parallèle et un méridien. La cellule contient alors la reference à un tableau d'locations dans cette "zone" spécifique (définie par le parallèle et le méridien).

En termes de type de données: un NSArray est initialisé en tant que nombre maximal de méridiens et l'autre en tant que nombre maximal de parallèles . Chaque cellule contiendra alors un NSMutableArray de tous les locations dans cette cellule spécifique (par ex. Latitude 50.-, longitude 0.-). De là, je vais avoir une list de tous les locations dans cette cellule et je peux récupérer des données telles que l'location le plus proche de l'location actuel de l'user.

Cette infrastructure de données vous semble-t-elle raisonnable ou existe-t-il une approche ou une bibliothèque «à la fine pointe de la technologie» pour ce faire?

L'inconvénient de cette solution est que dans le cas où la majeure partie de l'location du file est dans une certaine zone géographique, la structure de données, telle que définie, aurait des zones (cellules) avec une intensité élevée des locations et des zones d'intensité inférieure . D'où mon instinct, j'ai besoin d'une sorte de structure de données qui s'équilibre de façon dynamic .

Aucune suggestion?

Je copy ma réponse d'une autre question qui request essentiellement la même chose:

Jetez un oeil à m-tree. Il existe également de nombreux autres index spatiaux: http://en.wikipedia.org/wiki/Spatial_database Initialement, vous construisez la structure de données (l'index) et plus tard, vous effectuez simplement une requête de plage.

De la page wiki pour m-trees:

Pour un object de requête donné Q ∈ D et une distance de search maximale r (Q), la plage de search de plage (Q, r (Q)) sélectionne tous les objects indexés Oj tels que d (Oj, Q) ≤ r (Q). [2] La page wikipedia pour le m-tree a aussi l'algorithm pour les requêtes de distance.

Vous pouvez effectuer des requêtes de plage en time sous-linéaire. Cela ne fonctionne aussi que si la mesure de distance que vous utilisez obéit à l'inégalité de sortinganlge. Si la haversine (je n'en ai jamais dirigé auparavant), obéit à l'inégalité sortingangular, cela devrait marcher pour vous.