Sie können die mysql räumliche Erweiterung verwenden und den Breiten- und Längengrad als Punktdatentyp speichern und daraus einen räumlichen Index machen. Auf diese Weise können Sie die Koordinaten entlang einer Kurve neu anordnen, die Dimension reduzieren und räumliche Informationen bewahren. Sie können den räumlichen Index als Begrenzungsrahmen verwenden, um die Abfrage zu filtern, und dann die Harvesine-Formel verwenden, um das optimale Ergebnis auszuwählen. Ihr Begrenzungsrahmen sollte größer sein als der Radius des Großkreises. Mysql verwendet einen rtree mit einem räumlichen Index und mein Beispiel handelte von einer z-Kurve oder einer Hilbert-Kurve:https://softwareengineering.stackexchange.com/questions/113256/was-ist-der-unterschied-zwischen-btree-und-rtree-indexing .Dann können Sie eine Geokoordinate direkt in eine Punktspalte einfügen:http://dev.mysql.com/doc/refman/5.0/en/erstellen-räumlicher-werte.html . Oder Sie können einen Geometriedatentyp verwenden:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . Dann können Sie die MBRcontains-Funktion wie folgt verwenden: http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html oder andere Funktionen:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Daher benötigen Sie einen Begrenzungsrahmen. Hier sind einige Beispiele:
- Lat Lng-Werte in MySQL mit Spatial Point Type
- https://gis.stackexchange.com/questions/28333/how-to-speed-up-this-simple-mysql-points-in-the-box-query
Hier ist ein einfaches Beispiel mit Punktdatentyp:
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
Ich bin mir nicht sicher, ob es funktioniert, weil es eine Radiusvariable mit einer Bounding-Box-Funktion verwendet. Es scheint mir, dass MBRwithin etwas einfacher ist, weil es kein Argument braucht:Mysql:Optimierung der Suche nach Superknoten im verschachtelten Set-Baum .