Możesz użyć rozszerzenia przestrzennego mysql i zapisać szerokość i długość geograficzną jako typ danych punktu i uczynić go indeksem przestrzennym. W ten sposób możesz zmienić kolejność współrzędnych wzdłuż krzywej, zmniejszyć wymiar i zachować informacje przestrzenne. Możesz użyć indeksu przestrzennego jako ramki ograniczającej do filtrowania zapytania, a następnie użyć formuły Harvesine, aby wybrać optymalny wynik. Twoje pole ograniczające powinno być większe niż promień wielkiego koła. Mysql używa rtree z pewnym indeksem przestrzennym, a mój przykład dotyczył krzywej Z lub krzywej Hilberta:https://softwareengineering.stackexchange.com/questions/113256/co-is-the-difference-between-btree-and-rtree-indexing .Następnie możesz wstawić współrzędną geograficzną bezpośrednio do kolumny punktów:http://dev.mysql.com/doc/refman/5.0/en/tworzenie-wartości-przestrzennych.html . Możesz też użyć typu danych geometrii:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-szybki-start/ . Następnie możesz użyć funkcji MBRcontains w następujący sposób: http://dev.mysql.com/doc/refman/4.1/en/relacje-on-geometry-mbr.html lub inne funkcje:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Dlatego potrzebujesz ramki ograniczającej. Oto kilka przykładów:
- Przechowywanie Lat Wartości długości w MySQL przy użyciu typu punktu przestrzennego
- https://gis.stackexchange.com/questions/28333/how-to-speed-up-this-simple-mysql-points-in-the-box-query
Oto prosty przykład z typem danych punktu:
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
Nie jestem pewien, czy to działa, ponieważ używa zmiennej promienia z funkcją ograniczającą. Wydaje mi się, że MBRwithin jest nieco prostszy, ponieważ nie wymaga żadnych argumentów:Mysql:Optymalizacja znajdowania super węzła w zagnieżdżonym drzewie zestawu .