Vaikka olen ohjelmaa toteuttamassa PHP:llä, niin pistän tämän tänne koska ongelma ei ole varsinaisesti kieleen liittyvä.
Minulla on tietokanta jossa on maantietellisiä paikkoja koordinaatteineen. Nyt pitäisi selvittää mitä paikkoja jää kahden annetun paikan väliin.
Eli esim.
Helsinki: 60.206734, 24.932098
Tampere: 61.49813, 23.786774
niiden väliin jää (vaikkei ihan linjalle)
Hämeenlinna: 60.996421, 24.477539
Mutta millä tuon saisi laskettua? Tai tuonhan saa laskettua vain noiden annettujen koordinaattejen erotuksella. Mutta matkat saattavat olla aika pitkiä, jolloin pitäisi jotenkin laskea etäisyys ja sen mukaan säätää "herkkyyttä".
Itse lähtisin toteuttamaan sillä idealla, että laskisin näiden pisteiden(helsinki - tampere) määräämän suoran yhtälön ja sitten tarkastelisin pisteen etäisyyttä suorasta.
Lisäksi on hyvä tarkastaa, että tutkittava piste(tässä tapauksessa hämeenlinna) on vaikkapa näiden helsinki-tampere -pisteiden "määräämän" neliön sisällä. Tietenkin päinvastaisessa järjestyksessä :)
Tarkka ratkaisu riippuu siitä, mitä haluat tehdä. Seuraavissa A on lähtöpaikka, B on kohdepaikka ja X on kolmas kaupunki.
Yksi tapa olisi laskea etäisyys AB ja summa AX + XB ja katsoa tästä, kuinka paljon kierros pidentäisi matkaa. Tämä tapa ottaa mukaan myös väärässä suunnassa lähellä olevia paikkoja.
Toinen tapa on laskea trigonometrian avulla, kuinka suuressa kulmassa suoraan reittiin nähden kaupunki X on. Rajataan siis nelikulmio, jonka kärjet ovat A ja B sekä kaksi pistettä näiden puolivälissä määrätyllä etäisyydellä sivussa suoralta reitiltä.
Kolmas vaihtoehto on laskea suorakulmaiset kolmiot AXP ja BXP, missä P on suoralla AB kaupungin X kohdalla oleva piste. Etäisyyksistä AP, BP ja PX voidaankin sitten keksiä ihan mikä tahansa kaava alkuperäiseen ongelmaan.
Seuraava toimii pallolla ja yleisesti 3D-monistoilla:
1. Määritä geodeesi paikkojen A ja B välille.
2. Kiinnitä "herkkyys" ja tarkastele aluetta, missä geodeesin jokaisesta pisteestä piirretään ympyrä, jonka säde on "herkkyys". Näin syntyy juoksuradan muotoinen alue.
3. Tarkasta, onko annettu paikka tuossa alueessa. Tarkistus menee helposti piirtämällä geodeesin tarkistettavasta pisteestä A:han ja katsomalla, leikkaako geodeesi juoksuradan muotoisen alueen reunaa.
Kiitti, hyviä ajatuksia. Päädyin käyttämään Metabolixin ideaa ja laskea etäisyyksiä. Se sopi tähän tarpeeseeni parhaiten ja tuolla tavalla laskemisen onnistui vierittää tietokannalle ilman kovin suurta rasitusta palvelimelle.
Aihe on jo aika vanha, joten et voi enää vastata siihen.