J'essaie de stocker une base de données d'emplacements GPS et d'exécuter des requêtes qui trouvent les points dans un rayon donné et aussi les points les plus proches. J'utilise mysql et j'ai regardé les extensions spatiales. Je ne suis pas sûr si je vois comment utiliser réellement les extensions spatiales pour faire ce que je recherche dans les requêtes de rayon d'emplacement.Procédure de base de données pour les emplacements
Voici donc ce que im penser à mes options:
stocker les coordonnées GPS de latitude et tant que variables indexées float dans la db. Lorsque j'obtiens un point de coordonnées GPS et une plage, calculez les valeurs max et min lat et long à rechercher et ensuite trier en fonction d'une fonction de distance à l'intérieur de ceux-ci à commander.
Utilisez l'extension spatiale. Je ne suis pas très sûr que cela fonctionnera. La fonction Distance() n'est pas implémentée. L'utilisation d'un index spatial nécessite de trouver une boîte englobante (faisable) et d'appeler la fonction de boîte englobante MBRContains pour trouver les points qui sont dans cette boîte englobante. Cependant, un point a une limite de zéro, donc la fonction MBRContains ne fonctionne pas sur les points.
Je ne suis pas sûr de ce que la méthode standard pour le faire est (il ne semble pas comme il y a un) et apprécierait des mots d'expérience/pensées/aide à la décision. J'utilise actuellement mysql 5.13 et suis assez sûr que même 5.5 n'a pas la métrique de distance.
Aussi - même si 2. fonctionne, lequel sera le plus rapide? S'il vous plaît laissez-moi savoir quelles sont vos pensées et surtout si vous êtes sûr/ont vu quelque chose de travail pour les recherches rapides et grandes!
Mysql Index Spatial: http://dev.mysql.com/doc/refman/5.5/en/using-a-spatial-index.html
Vous n'avez pas besoin d'espace pour les recherches lat/longues, juste quelques trigs de base. http://code.google.com/apis/maps/articles/phpsqlsearch.html est une aide précieuse pour le découvrir. – tadamson
cela va-t-il être assez rapide pour gérer quelques millions? –
Vous pouvez filtrer la majorité des points avec un WHERE MyLon BBoxLonMin ET MyLat BBoxLatMin Après que vous êtes à une petite minorité d'enregistrements, alors cherchez à obtenir une distance réelle. –
geographika