Можете да използвате пространственото разширение на mysql и да запазите географската ширина и дължина като точков тип данни и да го направите пространствен индекс. По този начин можете да пренаредите координатите по крива и да намалите измерението и да запазите пространствената информация. Можете да използвате пространствения индекс като ограничително поле, за да филтрирате заявката и след това да използвате формулата на harvesine, за да изберете оптималния резултат. Вашата ограничителна кутия трябва да е по-голяма от радиуса на големия кръг. Mysql използва rtree с някакъв пространствен индекс и моят пример беше за z крива или крива на Hilbert:https://softwareengineering.stackexchange.com/questions/113256/what-is-the-difference-between-btree-and-rtree-indexing .След това можете да вмъкнете геокоордината директно в колона с точка:http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html . Или можете да използвате тип данни за геометрия:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . След това можете да използвате функцията MBRcontains така: http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html или всякакви други функции:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Следователно имате нужда от ограничаваща кутия. Ето някои примери:
- Съхранение на Lat Lng стойности в MySQL с помощта на пространствен тип точка
- https://gis.stackexchange.com/questions/28333/how-to-speed-up-this-simple-mysql-points-in-the-box-query
Ето един прост пример с точков тип данни:
CREATE SPATIAL INDEX sx_place_location ON place (location)
SELECT * FROM mytable
WHERE MBRContains
(
LineString
(
Point($x - $radius, $y - $radius),
Point($x + $radius, $y + $radius)
)
location
)
AND Distance(Point($x, $y), location) <= $radius
Не съм сигурен дали работи, защото използва променлива радиус с функция за ограничаваща кутия. Струва ми се, че MBRwithin е малко по-прост, защото не се нуждае от никакви аргументи:Mysql:Оптимизиране на намирането на супер възел във вложено дърво на набори .