Længde og breddegrader. Udtræk ud fra radius

Tags:    sql matematik

Hej Udvikleren,

I min database har jeg en masse lokationer, hvor jeg har defineret længde og breddegraderne for det.
Hvordan ville jeg f.eks. kunne udtrække alle lokationer i en radius af 1km fra f.eks.(55.3503111,10.1756639), eller en defineret rektangel.


Det er fordi jeg indsætter disse på en Google Map, men da jeg har omkring 9.000 lokationer, vil det være rigtig meget at indsætte på mappet samtidig, så jeg vil kun loade de lokationer som er inden i min viewport.



2 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 2 karma
Sorter efter stemmer Sorter efter dato
En mulig løsning:

1a. Find ud af hvor mange længde og breddegrader der er på 1km. Hvis man antager at dine lokationer er indenfor for få breddegrader og længdegrader, kan du nok finde to konstanter. F.eks. 0.2 grad per kilometer.

Så skal du udtrække data. En hurtig approximering ville være at danne en rektangel. F.eks. hvis du gerne vil finde alt indenfor en 1km af dit eksempel, så kan du lægge 0.2 til og fra.

Øverste venstre hjørne: (55.35 + 0.2, 10.18 - 0.2) = (55.55, 9.98)
Nederste højre hjørne: (55.35 - 0.2, 10.18 + 0.2) = (55.15, 10.38)

Så udtrykker du blot:

Fold kodeboks ind/udSQL kode 


Problemet med denne løsning er at du får alle løsninger i en rektangel i stedet for en ellipse hvilket resulterer i at du får 27% for mange lokationer du så efterfølgende skal filtrere.

En anden løsning er at lave en mere detaljeret query. Jeg har lavet et eksempel her som dog ikke tager højde for det faktisk er grader, men i stedet antager det et simpelt koordinatsystem. Den henter kun de lokationer der er indenfor en afstand af 1.2km fra koordinat (31, 31): http://sqlfiddle.com/#!9/0818a/17 .



Indlæg senest redigeret d. 22.11.2015 19:13 af Bruger #14645
Ja, det da helt klart en mulig løsning. Super simpel og lige til :) !



t