sql >> Database >  >> RDS >> Mysql

Trage locatiegebaseerde zoekopdracht met zoekresultaten

U kunt de ruimtelijke extensie mysql gebruiken en de breedte- en lengtegraad opslaan als een puntgegevenstype en er een ruimtelijke index van maken. Op die manier kunt u de coördinaten langs een curve opnieuw ordenen en de dimensie verkleinen en ruimtelijke informatie behouden. U kunt de ruimtelijke index gebruiken als een selectiekader om de query te filteren en vervolgens de harvesine-formule gebruiken om het optimale resultaat te kiezen. Uw selectiekader moet groter zijn dan de straal van de grootcirkel. Mysql gebruikt een rtree met een ruimtelijke index en mijn voorbeeld ging over een z-curve of een hilbert-curve:https://softwareengineering.stackexchange.com/questions/113256/what-is-the-difference-between-btree-and-rtree-indexing .Dan kunt u een geocoördinaat rechtstreeks in een puntkolom invoegen:http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html . Of u kunt een geometriegegevenstype gebruiken:http:// markmaunder.com/2009/10/10/mysql-gis-extensions-quick-start/ . Dan kun je de MBRcontains-functie als volgt gebruiken: http://dev.mysql.com/doc/refman/4.1/en/relations-on-geometry-mbr.html of andere functies:http://dev.mysql.com/doc/refman/5.5/en/functions-for-testing-spatial-relations-between-geometric-objects.html . Daarom heb je een selectiekader nodig. Hier zijn enkele voorbeelden:

Hier is een eenvoudig voorbeeld met puntgegevenstype:

    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

Ik weet niet zeker of het werkt omdat het een radiusvariabele gebruikt met een begrenzingsvakfunctie. Het lijkt mij dat MBRwithin een beetje eenvoudiger is, omdat het geen argument nodig heeft:Mysql:optimalisatie van het vinden van superknooppunten in geneste setboom .



  1. SQL-query:volgorde op lengte van tekens?

  2. #1273 – Onbekende sortering:‘utf8mb4_unicode_520_ci’

  3. Simuleer ORDER BY in SQLite UPDATE om de uniciteitsbeperking aan te pakken

  4. Wat is het juiste SQL-type om een ​​.Net Timespan met waarden> 24:00:00 op te slaan?