Optimisation des Geoqueries avec ParseSwift SDK pour iOS
Nous utilisons le terme Geoqueries pour désigner le type de requêtes dont les conditions impliquent des champs de type ParseGeoPoint. Il est recommandé d'utiliser la structure ParseGeoPoint pour stocker des données de localisation géographique dans une base de données Back4App. Le ParseSwift SDK fournit un ensemble de méthodes qui nous permet de requêter des données selon des conditions appliquées sur des données de type ParseGeoPoint.
Pour compléter ce tutoriel, vous aurez besoin de :
- Une application iOS de base pour tester les requêtes
Comprendre comment requêter des données en utilisant des conditions sur des données de localisation géographique.
Toute requête effectuée sur une base de données Back4App se fait via la classe générique Query<U>. Le paramètre générique U (conforme au ParseObject protocole) est le type de données des objets que nous essayons de récupérer de la base de données.
Étant donné un type de données comme MyObject, nous récupérons ces objets d'une base de données Back4App de la manière suivante
Vous pouvez en savoir plus sur la Query<U> classe ici dans la documentation officielle.
Avant de commencer à exécuter des requêtes, nous devrions stocker quelques données d'exemple sur une base de données Back4App. En suivant le guide de démarrage rapide, vous pouvez configurer et lier votre application iOS d'exemple à votre base de données Back4App. Pour ce guide, nous allons stocker des informations sur les villes. Nous utilisons la structure suivante pour organiser les informations d'une ville :
Maintenant, nous procédons à stocker les données d'échantillon. Cette étape peut être mise en œuvre en utilisant Swift ou directement depuis la console sur la plateforme Back4App.
Trier les résultats
Avec les données d'exemple sauvegardées, nous pouvons commencer à effectuer différents types de requêtes.
Pour notre premier exemple, nous allons sélectionner toutes les villes et les trier en fonction de leur distance par rapport à un point géographique de référence. Nous mettons en œuvre cette requête en passant une contrainte à l' Query<City> objet. La méthode near(key:geoPoint:) disponible via le ParseSwift SDK nous permet de construire une telle contrainte. Comme arguments, nous passons le nom du champ (généralement appelé key) contenant le geoPoint de référence.
Sélectionner des résultats dans une région donnée
Supposons que nous voulons sélectionner des villes dans une certaine région. Nous pouvons y parvenir avec une contrainte créée par la méthode withinKilometers(key:geoPoint:distance:). En arguments, nous passons le nom du champ contenant la localisation de la ville, le centre de la région (un ParseGeoPoint de type de données) et la distance maximale (en km) qu'une ville peut être de ce centre de région. Pour sélectionner toutes les villes qui sont à au plus 3000km de Kingston - Jamaïque, nous pouvons le faire de la manière suivante
De plus, lorsque la distance est donnée en miles au lieu de kilomètres, nous pouvons utiliser le withinMiles(key:geoPoint:distance:sorted:) méthode.
Une méthode moins courante, withinRadians(key:geoPoint:distance:sorted:), est également disponible si la distance est donnée en radians. Son utilisation est très similaire aux méthodes précédentes.
Sélectionner des résultats dans un polygone donné
Dans l'exemple précédent, nous avons sélectionné des villes dans une région représentée par une région circulaire. Dans le cas où nous devons avoir une forme non circulaire pour la région, le ParseSwift SDK nous permet de construire de telles régions à partir de leurs sommets.
Maintenant, l'objectif de cet exemple est de sélectionner des villes à l'intérieur d'un polygone à cinq sommets. Ces sommets sont exprimés en utilisant le ParseGeoPoint struct. Une fois que nous avons créé les sommets, nous instancions un ParsePolygon. Ce polygone est ensuite passé à la withinPolygon(key:polygon:) méthode (fournie par le ParseSwift SDK) pour construire la contrainte qui nous permettra de sélectionner des villes à l'intérieur de ce polygone.
De nos jours, effectuer des opérations sur des données de localisation pour offrir des services personnalisés est très important. Back4App, avec le ParseSwift SDK facilite la mise en œuvre de ce type d'opérations.