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:
- select * from lokation where y between 55.15 AND 55.55 and x between 9.98 AND 10.38
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