sql >> Database teknologi >  >> RDS >> Mysql

Langsom placeringsbaseret søgeresultatforespørgsel

Du kan bruge mysql rumlige udvidelse og gemme breddegrad og længdegrad som en punktdatatype og gøre det til et rumligt indeks. På den måde kan du omorganisere koordinaterne langs en kurve og reducere dimensionen og bevare rumlig information. Du kan bruge det rumlige indeks som en afgrænsningsboks til at filtrere forespørgslen og derefter bruge harvesine-formlen til at vælge det optimale resultat. Din afgrænsningsramme skal være større end radius af den store cirkel. Mysql bruger et rtree med et rumligt indeks, og mit eksempel handlede om en z-kurve eller en hilbert-kurve:https://softwareengineering.stackexchange.com/questions/113256/what-is-the-difference-between-btree-and-rtree-indexing .Så kan du indsætte en geokoordinat direkte i en punktkolonne:http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html . Eller du kan bruge en geometridatatype:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . Så kan du bruge MBRcontains-funktionen som sådan: http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html eller andre funktioner:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Derfor har du brug for en afgrænsningsramme. Her er nogle eksempler:

Her er et simpelt eksempel med punktdatatype:

    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

Jeg er ikke sikker på, om det virker, fordi det bruger en radiusvariabel med en bounding-box-funktion. Det forekommer mig, at MBRwithin er en smule enklere, fordi det ikke behøver nogen argumenter:Mysql:Optimering af at finde supernode i indlejret sættræ .



  1. Indsættelse og hentning af billeder i mysql gennem python

  2. Implementering af Hacker News-rangeringsalgoritmen i SQL

  3. SQL Developer 4.0 udgivet

  4. Sådan eksporteres forespørgselsresultater til en .txt-fil, når du bruger SQLcl (Oracle)