Dickhi Skrevet 8. januar 2009 Del Skrevet 8. januar 2009 Heisann folkens Sliter litt med et problem her. Jeg har et array med gps posisjoner + jeg har posisjonen av hvor jeg befinner meg nå. Hvordan kan jeg finne ut hvilke posisjon i arrayet som er nærmest min nåværende posisjon? Takk for alle svar Lenke til kommentar
___ Skrevet 8. januar 2009 Del Skrevet 8. januar 2009 Heisann folkens Sliter litt med et problem her. Jeg har et array med gps posisjoner + jeg har posisjonen av hvor jeg befinner meg nå. Hvordan kan jeg finne ut hvilke posisjon i arrayet som er nærmest min nåværende posisjon? Takk for alle svar Sjekk http://www.movable-type.co.uk/scripts/latlong.html Werner Lenke til kommentar
Dickhi Skrevet 8. januar 2009 Forfatter Del Skrevet 8. januar 2009 Fant følgende kode i C: double CalculateDistance( double nLat1, double nLon1, double nLat2, double nLon2 ) { double nRadius = 6371; // Earth's radius in Kilometers // Get the difference between our two points then convert the difference into radians double nDLat = ToRad(nLat2 - nLat1); double nDLon = ToRad(nLon2 - nLon1); nLat1 = ToRad(nLat1); nLat2 = ToRad(nLat2); double nA = pow ( sin(nDLat/2), 2 ) + cos(nLat1) * cos(nLat2) * pow ( sin(nDLon/2), 2 ); double nC = 2 * atan2( sqrt(nA), sqrt( 1 - nA )); double nD = nRadius * nC; return nD; // Return our calculated distance } Problemet er at argumentene denne funksjonen bruker må jo være av datatypen double, men de dataene jeg finner på f.eks google earth er som dette: Latitude: 59°55'54.51"N Longitude: 10°43'22.28"E Noen som vet hvordan disse dataene gjøres om så de kan brukes i denne funksjonen? Lenke til kommentar
___ Skrevet 8. januar 2009 Del Skrevet 8. januar 2009 Fant følgende kode i C: double CalculateDistance( double nLat1, double nLon1, double nLat2, double nLon2 ) { double nRadius = 6371; // Earth's radius in Kilometers // Get the difference between our two points then convert the difference into radians double nDLat = ToRad(nLat2 - nLat1); double nDLon = ToRad(nLon2 - nLon1); nLat1 = ToRad(nLat1); nLat2 = ToRad(nLat2); double nA = pow ( sin(nDLat/2), 2 ) + cos(nLat1) * cos(nLat2) * pow ( sin(nDLon/2), 2 ); double nC = 2 * atan2( sqrt(nA), sqrt( 1 - nA )); double nD = nRadius * nC; return nD; // Return our calculated distance } Problemet er at argumentene denne funksjonen bruker må jo være av datatypen double, men de dataene jeg finner på f.eks google earth er som dette: Latitude: 59°55'54.51"N Longitude: 10°43'22.28"E Noen som vet hvordan disse dataene gjøres om så de kan brukes i denne funksjonen? Geografiske koordinater vises gjerne på denne formen. De er inndelt i grader, minutter og sekunder. For å ta breddegraden (latituden) i eksempelet ditt, gjør vi følgende for å konvertere til desimal form: 59 + (55 / 60) + (54.51 / 3600) = 59.9318083333 Nord for ekvator er breddegraden positiv, mens den sør for ekvator er negativ. Lengdegraden (longituden) i eksempelet ditt blir på desimal form: 10 + (43 / 60) + (22.28 / 3600) = 10.7228555556 Vest for nullmeridianen er lengdegraden negativ, mens øst for nullmeridianen er lengdegraden positiv. Observer at jeg deler minuttdelen av koordinatet med 60, fordi det er 60 minutter i en grad, mens sekunddelen deles med 3600, fordi det er 3600 sekunder i en grad. Gjør forøvrig oppmerksom på at Google Earth kan konfigureres til å vise koordinatene på desimalform. Werner Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå