sql >> Databasteknik >  >> RDS >> Mysql

Snabbaste sättet att hitta avstånd mellan två lat/långa punkter

  • Skapa dina poäng med Point värden för Geometry datatyper i MyISAM tabell. Från och med Mysql 5.7.5, InnoDB tabeller stöder nu även SPATIAL index.

  • Skapa en SPATIAL index på dessa punkter

  • Använd MBRContains() för att hitta värdena:

      SELECT  *
      FROM    table
      WHERE   MBRContains(LineFromText(CONCAT(
              '('
              , @lon + 10 / ( 111.1 / cos(RADIANS(@lat)))
              , ' '
              , @lat + 10 / 111.1
              , ','
              , @lon - 10 / ( 111.1 / cos(RADIANS(@lat)))
              , ' '
              , @lat - 10 / 111.1 
              , ')' )
              ,mypoint)
    

, eller i MySQL 5.1 och över:

    SELECT  *
    FROM    table
    WHERE   MBRContains
                    (
                    LineString
                            (
                            Point (
                                    @lon + 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat + 10 / 111.1
                                  ),
                            Point (
                                    @lon - 10 / ( 111.1 / COS(RADIANS(@lat))),
                                    @lat - 10 / 111.1
                                  ) 
                            ),
                    mypoint
                    )

Detta kommer att välja alla punkter ungefär inom rutan (@lat +/- 10 km, @lon +/- 10km) .

Detta är faktiskt inte en ruta, utan en sfärisk rektangel:latitud- och longitudbundet segment av sfären. Detta kan skilja sig från en vanlig rektangel på Franz Joseph Land , men ganska nära den på de flesta bebodda platser.

  • Använd ytterligare filtrering för att markera allt inuti cirkeln (inte kvadraten)

  • Använd eventuellt ytterligare finfiltrering för att ta hänsyn till det stora cirkelavståndet (för stora avstånd)



  1. I tsql är en Insert med en Select-sats säker när det gäller samtidighet?

  2. MySQL - Betydelse av PRIMÄRNYCKEL, UNIK NYCKEL och NYCKEL när de används tillsammans när du skapar en tabell

  3. Backup Management Tips för TimescaleDB

  4. Escape SQL LIKE-värde för Postgres med psycopg2