Avatar billede hadaps Nybegynder
13. april 2004 - 17:44 Der er 11 kommentarer og
1 løsning

Beregne afstand mellem koordinater

Hvordan kan man beregne den korteste afstand mellem 2 punkter i km?

jeg har en fil hvor dataene ligger sådan:

Pt107    55,7574    8,9252   
Pt108    55,7574    8,9252
Pt109    55,7574    8,9250
Pt110    55,7574    8,9251
Pt111    55,7574    8,9252
Pt112    55,7575    8,9253
Pt113    55,7576    8,9250
Pt114    55,7576    8,9250
Pt115    55,7577    8,9251
Pt116    55,7577    8,9250
Pt117    55,7577    8,9250
Pt128    55,7576    8,9251

Hvordan kan man så lave en routine, som kører listen igennem, og til sidst har beregnet hvor langt der dem samlede afstand er gennem alle punkter.
Dvs. afstand fra p107 til p108 + afstand fra p108 til p109 osv...
Avatar billede hadaps Nybegynder
13. april 2004 - 17:51 #1
glemte lige den første linie, som fortæller hvad der er i hvilke kolonner:
Name    Latitude    Longitude
Avatar billede ellebaek Nybegynder
13. april 2004 - 17:56 #2
<%
i = 1
afstand = 0
Do While not f.AtEndOfStream
  linie = f.ReadLine
  myarr = split(linie,vbTab)

if i mod 2 = 0 then
  afstand = afstand + sqrt( ((X-myarr(1))*(X-myarr(1))) + ((Y-myarr(2))*(Y-myarr(2))))
else
  X = myarr(1)
  Y = myarr(2)
end if
i = i+1
Loop

response.write afstand
%>

Noget i den her stil måske ?
Du skal muligvis rette til i linien der beregner afstanden, kan ikke helt huske afstandsformlen, har defineret den som : sqrt((X-X0)^2+(Y-Y0)^2)
samtidig skal du rette den type du benytter til at adskille de forskellige dele i filen. Jeg har i koden sat den til at være en tabulator...
Avatar billede ellebaek Nybegynder
13. april 2004 - 17:58 #3
ups... Der manglede lige 3 linier i toppen...

Sæt dem her ind først ;-)
Husk at rette filnavnet..

Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("dinfil.txt")
Set f = fso.OpenTextFile(filespec,1)
Avatar billede hadaps Nybegynder
13. april 2004 - 18:22 #4
jeg får denne melding:

Type mismatch: 'sqrt'
Avatar billede hadaps Nybegynder
13. april 2004 - 18:24 #5
men kommer det ud i km, når man bare bruger alm afstandsformel?
Avatar billede ellebaek Nybegynder
13. april 2004 - 18:39 #6
den almindelige afstandsfunktion returnere længder i den størrelse som er angivet i dine koordinater...

Jeg havde lavet en fejl...

Sqrt skal rettes til sqr

Altså:
<%
Set fso = CreateObject("Scripting.FileSystemObject")
filespec = Server.Mappath("dinfil.txt")
Set f = fso.OpenTextFile(filespec,1)
i = 1
afstand = 0
Do While not f.AtEndOfStream
  linie = f.ReadLine
  myarr = split(linie,vbTab)

if i mod 2 = 0 then
  afstand = afstand + sqr( ((X-myarr(1))*(X-myarr(1))) + ((Y-myarr(2))*(Y-myarr(2))))
else
  X = myarr(1)
  Y = myarr(2)
end if
i = i+1
Loop

response.write afstand
%>
Avatar billede hadaps Nybegynder
13. april 2004 - 19:29 #7
ja det ved jeg godt...
men laver du nogle hop her for at få det i km, eller er det automatisk det, når man bruger disse koordinater?
Avatar billede montago Praktikant
13. april 2004 - 20:56 #8
hvis dine koordinater er skrevet i kilometer... bliver resultatet vist i kilometer...

dette kaldes Præfix
Avatar billede ellebaek Nybegynder
13. april 2004 - 21:34 #9
jeg ved ikke hvad type dine koordinater er i, men hvis de er i kilometer, så er det som montago skriver, så bliver resultatet også vist i kilometer.
Avatar billede ellebaek Nybegynder
15. april 2004 - 09:15 #10
har du fået det til at virke ?
Avatar billede hadaps Nybegynder
17. maj 2004 - 17:31 #11
ja tak... og unskyld det forsinkede svar...
vil du smide et svar?
Avatar billede ellebaek Nybegynder
17. maj 2004 - 22:14 #12
så pyt da ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester