Varje plats i världen har en koordinat som anges med longitud och latitud. Du kan läsa mer om koordinatsystemet t.ex. på Wikipedia. Det går att omvandla en adress till en koordinat med t.ex. Google, använder du FileMaker finns det en färdig byggsten som hjälper dig med konverteringen.
Du kan också hämta koordinater från flera sammanställningar på internet, t.ex. över sevärdheter, fartkameror eller bensinstationer, och importera i din FileMaker-databas.
Med FileMaker Go 12 finns möjligheten att hämta koordinaterna från den plats du befinner dig på. Det finns en ny funktion som heter Location som returnerar longitud och latitud med hjälp av GPS-en i din iPhone/iPad. (Du kan inte använda funktionen i FileMaker Pro.)
Du kan t.ex. göra en knapp som hämtar longitud och latitud till två globala fält (gLongitude respektive gLatitude), manuset kan se ut så här:
Ange variabel [$plats; Substitute(Location ( 0;10);[",";"¶"];[".";","]) Tilldela fält [gLongitude; GetValue($plats;1)] Tilldela fält [gLatitude; GetValue($plats;2)] Verkställ post []
Det första manussteget hämtar platsen med funktionen Location, byter decimalpunkt till komma samt ser till att värdena hamnar på två rader för att enklare kunna hämta dem i nästa steg med funktionen GetValue.
Hur långt är det då till närmaste bensinstation från den plats du befinner dig på? Eller till närmaste sevärdhet? Det beror förstås på vilken väg du tar och det finns säkert någon beräkning från Google Maps (kanske återkommer till det) men det går att räkna avståndet fågelvägen med en enkel(?) formel som kallas Haversins formel.
Antag att du har platser med geografiska koordinater i en tabell, en post per koordinat, med platsens koordinater i fältenLongitude och Latitude.
Omvandlat till FileMaker-formel blir avståndsberäkningen med Haversins formel så här:
6371 * // jordens medelradie i km (omvandlar resultatet till km) Let([ longitude0 = gLongitud; latitude0 = gLatitud; longitude1 = Substitute(Longitude;".";","); latitude1 = Substitute(Latitude;".";",") ]; Acos( Cos(Radians( latitude0 )) * Cos(Radians( latitude1 )) * Cos(Radians( longitude0 ) - Radians( longitude1 )) + Sin(Radians( latitude0 )) * Sin(Radians( latitude1 )) ) )
Du kan sedan söka efter de som är närmast, t.ex. avstånd <50 km och sortera dem i avståndsordning. Det går också att visa dem alla samtidigt på en karta med t.ex. Google Maps. Tänk på att det blir en icke-indexerad sökning varför du inte kan ha obegränsat med poster.
Exempel
Du kan använda funktionen för att hitta platser när dig. Jag har gjort en liten databas med camping- och badplatser runt om i Sverige, vilket passar bra nu på sommaren. Till varje camping- eller badplats finns koordinater (longitud och latitud).
När jag klickar på knappen Visa i appen söker FileMaker fram de närmaste campingplatserna och badplatserna inom en radie av 50 km och visar dem i en lista (bilden till vänster). Avståndet från den plats jag befinner mig på (just nu på Mallverkstans kontor) är angivet i km. Bilden till höger visar camping- och badplatserna på en karta, gröna markörer är campingplatser, blå badplatser och den röda markören anger var jag är.