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?
Répondre
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.
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. –
D'accord - les choses ont changé avec MySQL 5.6.1 mais je n'ai pas encore testé non plus – TheSteve0
Je vois des tonnes de fonctions listées à cette ressource. Pouvez-vous clarifier? –
- 1. Rails: Comment trouver() tous les enregistrements uniques dans certains champs?
- 2. Afficher tous les enregistrements actifs requêtes
- 3. Trouver tous les enregistrements sans les associés
- 4. Distinct requête MySQL retourner tous les enregistrements
- 5. Comment dit-on dans SQL/ActiveRecord, "Trouver tous les enregistrements où l'attribut est nul ou 'x'"?
- 6. Déterminer le rayon X et le rayon Y d'une ellipse
- 7. MYSQL où x dans tous
- 8. Comment trouver tous les enregistrements qui ne sont PAS dans ce tableau? (MySql)
- 9. procédure de troncature pour tous les enregistrements
- 10. Utilisez gréer tous les enregistrements dans une table MySQL
- 11. trouver tous les nombres inférieurs à x dans un BST
- 12. Supprimer tous les enregistrements existent dans toutes les tables
- 13. Trouver tous les enregistrements qui ont un champ non nul?
- 14. Comment limiter les enregistrements composés dans MYSQL?
- 15. Supprimer tous les enregistrements dans NSManagedObjectContext
- 16. MySQL, sélectionnez les enregistrements avec au moins X caractères correspondants
- 17. obtenir tous les marqueurs dans un rayon donné sql
- 18. Obtenir tous les enregistrements enfant
- 19. requête MySQL pour les enregistrements de comptage
- 20. MySQL: intervalle moyen entre les enregistrements
- 21. Solr Comment supprimer tous les enregistrements SAUF ceux d'un tableau?
- 22. Comment filtrer les enregistrements dans les enregistrements d'échafaudage actif imbriqués?
- 23. Comment trouver tous les cycles d'une chaîne dans Ruby?
- 24. Comment parcourir tous les 10 enregistrements en utilisant les appels MYSQL et jquery ajax
- 25. Comment supprimer tous les enregistrements d'une table ayant des enregistrements correspondants dans une autre table
- 26. Comment empêcher plusieurs requêtes Web de traiter les mêmes enregistrements?
- 27. Comment parcourir tous les enregistrements dans SQLite db?
- 28. Les Rails détruisent tous les enregistrements, sauf les plus récents.
- 29. MySQL: sélectionner les X les plus petites valeurs
- 30. Comment extraire les enregistrements et tous les enregistrements enfants dans une base de données dans les entités ADO.NET?
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. –
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