Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL Breiten- und Längentabelle einrichten

Sie sollten die Punkte in einer einzigen Spalte vom Datentyp Point speichern die Sie mit einem SPATIAL indizieren können index (wenn Ihr Tabellentyp MyISAM ist ):

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

Dadurch wird die Geschwindigkeit von Abfragen wie "alle innerhalb eines bestimmten Radius finden" drastisch verbessert.

Beachten Sie, dass es besser ist, einfaches TM zu verwenden metrische Koordinaten (Ostwert und Nordwert) anstelle von Polarkoordinaten (Breitengrad und Längengrad). Für kleine Radien sind sie genau genug und die Berechnungen werden stark vereinfacht. Wenn alle Ihre Punkte auf einer Hemisphäre liegen und weit von den Polen entfernt sind, können Sie einen einzigen Mittelmeridian verwenden.

Sie können natürlich immer noch Polarkoordinaten verwenden, aber die Formeln zur Berechnung des MBR und die Entfernung wird komplexer.