vendredi, 3 mars 2006, 11:04 PM - Géo-référence, PHP, MySQL
Un site web qui offre un contenu dynamique en fonction des informations personnelles des visiteurs, ce n'est pas un secret, c'est une clef vers le succès. Plus vous aurez des informations, plus vous aurez la possibilité d'offrir un service de qualité et +.Parmi ces informations, les coordonnées terrestres de l'utilisateur peuvent s'avérer être une mine d'or. Vous pouvez les obtenir par son adresse IP, mais il vaut mieux lui demander son code postal: dans les 2 cas, des bases de données existent pour faire la relation avec la latitude / longitude. (Pour un exemple de modèle de données complet, regardez Service canadien de toponymie - Modèle de données et dictionnaire de données - format pdf).
À quoi peut bien servir de connaître l'endroit où est situé votre visiteur? Entre autres, cela vous permet d'afficher des résultats de recherche triés par proximité et/ou d'afficher du contenu relatif à sa région.
Si vous désirez connaître uniquement la distance entre le point X et le point Y, vous pouvez effectuer l'opération à l'aide d'une fonction PHP que vous trouverez facilement en cherchant sur le web. Mais si vous désirez connaître la distance entre le point X et plusieurs autres points, situer le point X dans une zone et trier le résultat, il est beaucoup plus simple pour vous et plus efficace pour votre serveur d'effectuer ces opérations avec MySQL. Je vous propose de voir quelques exemples.
Les exemples suivants vont fonctionner à partir de ces données:
<?php |
Pour commencer, prenons d'abord la latitude et la longitude de notre visiteur (le format du code postal devrait être préalablement validé):
<?php |
Le code qui suit affiche la distance entre un code postal donné et tous les autres disponibles dans la table zip_sample. Les données sont triées par proximité.
<?php |
Pour savoir si votre visiteur fait partie d'une région quelconque, ça se complique surtout par le fait qu'il faut connaître les coordonnées qui la délimitent. Si vous n'avez pas ces coordonnées, mais que vous avez une carte avec les régions dessinées à la craie, utilisez Toporama - vous pouvez cliquer sur un point précis pour obtenir ses informations (par exemple, pour C1 j'obtiens "Degrés décimaux : 45.86° N 73.228° O" que je convertis par latitude = 45.86 et longitude = -73.228).
Latitude | Longitude | |
C1: | 45.86 | -73.228 |
C2: | 45.693 | -72.954 |
C3: | 45.291 | -73.481 |
C4: | 45.352 | -74.127 |
C5: | 45.726 | -73.912 |
Maintenant que nous connaissons les coordonnées de notre région, nous pouvons ajouter le polygone comme une donnée dans une nouvelle table. Pour ce faire, nous devons d'abord créer une table qui contiendra une colonne spatiale de type Polygon et, ensuite, nous utiliserons les fonctions géométriques de MySQL pour l'insertion des coordonnées. (Pour référence, lisez le chapitre 18 de la documentation MySQL: Spatial Extensions)
<?php |
Nous avons enfin tout ce qu'il nous faut pour vérifier si notre visiteur fait partie de notre région:
<?php |
Nous savons maintenant comment trier des informations selon la proximité et comment trouver la région dans laquelle se situe notre visiteur. Mais ce n'était qu'un bref aperçu du potentiel des fonctions spatiales. Beaucoup d'autres possibilités s'offrent à nous, il n'en tient qu'à notre imagination!
[ ajout commentaire ] | [ 0 trackbacks ] | permalink