sql >> Database >  >> RDS >> Mysql

MySQL-tabel voor breedtegraad en lengtegraad

U moet de punten opslaan in een enkele kolom van het datatype Point die u kunt indexeren met een SPATIAL index (als uw tabeltype MyISAM is) ):

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

Dit zal de snelheid van zoekopdrachten zoals "vind alles binnen een bepaalde straal" drastisch verbeteren.

Merk op dat het beter is om gewoon TM . te gebruiken metrische coördinaten (oost en noord) in plaats van polair (breedte- en lengtegraad). Voor kleine radii zijn ze nauwkeurig genoeg en zijn de berekeningen sterk vereenvoudigd. Als al je punten zich in één hemishpere bevinden en ver van de polen zijn, kun je een enkele centrale meridiaan gebruiken.

Je kunt natuurlijk nog steeds poolcoördinaten gebruiken, maar de formules voor het berekenen van de MBR en de afstand zal complexer zijn.



  1. De 8 meest populaire databases

  2. PHP, MySQL en tijdzones

  3. Hoe MySQL JDBC 08001 Databaseverbindingsfout op te lossen?

  4. Overschrijf de Query Optimizer voor uw T-SQL-joins met FORCEPLAN