2010-07-09 8 views
4

J'ai une table dans une base de données MySQL avec une colonne de géométrie spatiale de type POINT. J'aimerais pouvoir prendre un point au centre d'une carte et trouver tous les enregistrements dans X miles (ou n'importe quelle distance) de celui-ci. Je ne peux pas sembler trouver un bon exemple ou une explication de la façon de faire cela qui ne soit pas lourdement dans les mathématiques géométriques. Je suis heureux de suivre cette voie, mais je voudrais d'abord essayer de le résoudre avec une véritable base de données spatiale.Comment utilisez-vous les requêtes spatiales MySQL pour trouver tous les enregistrements dans le rayon X?

+0

Je voulais juste noter que non j'essaie de résoudre cela en utilisant la technique (pas aussi précise, mais juste en train d'essayer pour l'instant) d'un polygone avec des points de données. Ma requête ressemble à ceci. SELECT * d'entreprise O MB MBRCont-ils (GeomFromText ('Polygon ((30 -100, 30 -90, 25 -90, 25 -100, 30 -100))'), géolocalisation) J'ai un enregistrement dans le tableau avec un lat de 39 et un long de -94. Si je comprends bien, cela devrait apparaître dans le résultat et ce n'est pas le cas. Donc, c'est un autre angle sur la question. –

+0

Vous le faites mal (ou juste compliqué). Calculer le cadre de délimitation en PHP en utilisant https://github.com/anthonymartin/GeoLocation.php, puis interroger comme «WHERE lat entre minL ET maxL et lon entre minO et maxO». C'est une recherche de zone carrée au lieu d'un cercle mais votre carte web est rectangulaire de toute façon, n'est-ce pas? – Slawa

Répondre

3

Cela ne fonctionnera pas car MySQL n'a pas réellement implémenté le code pour que cela fonctionne. Ils utilisent uniquement des requêtes de boîte englobante.

Notez qu'il n'y a pas de fonctions énumérées ici: http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html

Je recommanderais en utilisant PostGIS ou Spatialite à la place.

+3

Cela n'est plus vrai à partir de MySQL 5.6.1: http://dev.mysql.com/doc/refman/5.6/fr/fonctionnements-pour-testing-spatial-relations-between-geometric-objects.html#function_st -Contient. Mais je ne peux pas (encore) attester la performance de ces fonctions. –

+0

D'accord - les choses ont changé avec MySQL 5.6.1 mais je n'ai pas encore testé non plus – TheSteve0

+1

Je vois des tonnes de fonctions listées à cette ressource. Pouvez-vous clarifier? –

Questions connexes