Personnellement, je ne suis jamais allé aussi loin, mais j'ai utilisé une courbe en Z pour stocker des points 2D. Cela a très bien fonctionné, et n'a pas ressenti le besoin d'essayer de mettre en œuvre la courbe d'hilbert pour de meilleurs résultats.
Cela devrait vous permettre de filtrer rapidement les points qui ne sont pas proches. Dans le pire des cas, vous devez toujours scanner plus de 25% de votre tableau pour trouver des points dans une zone.
La façon de procéder est de diviser les x y z en binaire et de les assembler en une seule valeur en utilisant la courbe. J'aurais aimé avoir un script SQL prêt, mais j'en ai juste un pour la courbe en 2D qui est beaucoup plus facile à faire.
Modifier:
Désolé, vous savez peut-être déjà tout cela et vraiment à la recherche d'échantillons SQL, mais j'ai quelques ajouts:
- Je ne suis pas sûr que les 25% pire des cas Le scan est également vrai pour les avions 3D. Il pourrait être plus élevé, ne pas avoir le cerveau en ce moment pour vous dire;).
- Ce type de courbe vous aidera à trouver les plages où vous devez effectuer une recherche. Si vous avez 2 coordonnées, vous pouvez les convertir en nombre hilbert-curve pour trouver la section de votre table dont vous avez besoin pour rechercher les éléments qui correspondent exactement à votre requête.
- Vous pourriez être en mesure d'étendre ce concept pour trouver des voisins, mais pour utiliser la courbe, vous êtes toujours «coincé» pour regarder dans les plages.
merci pour la réponse, je peux essayer la courbe Z (ou en 3D parfois, il est connu sous le nom Commande de Morton). J'ai vu un plug-in pour PostgreSQL: http://www.sai.msu.su/~megera/wiki/README_q3c peut-être y en aura-t-il un autre pour MySQL ... – Arman
Désolé pour la confusion, mais le pire des cas pour Z -Courbe (nombre de morton) est de 50%, pour la courbe de Hilbert, elle est de 25%. J'ai écrit un ensemble de 3 petits articles sur mon blog à propos de la courbe en Z: http://www.rooftopsolutions.nl/blog/search?criteria=morton – Evert