WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Räknja ut avstånd mellan koordinater (https://www.wn.se/forum/showthread.php?t=1067297)

spyvingen 2016-09-14 08:11

Räknja ut avstånd mellan koordinater
 
Någån får gärna flytta denna om ni anser det vara fel forum :)

Någon här som har koll på hur man räknar ut avståndet mellan koordinaten jag är på och en annan koordinat?

Om jag tex befinner mig på :
57.702044, 11.963587

Och vill veta hur långt det är till :
57.702285, 11.964660

Är egentligen inte nog med meter tex men jag vill kunna få ut om det är tillräckligt nära eller inte.

Tillräckligt nära är ju en definitionsfråga men jag tänker att man kollar avståndet på google mapps så ser man ju ungefär hur många meter det är mellan två punkter och sedan bara sätter en gräns utefter det.

Min tanke är att man tar den ena minus den andra vilket jag antar i vissa fall blir minus och vissa fall plus. Men det talet bör ju vara ett värde på hur långt jag är ifrån målet i grader iaf och sedan sätter man bara en gräns för hur många grader som är nära.

I just detta exempel så blev resultatet -0,000241 och -0,001073 så om jag anser att 0,001 är nära så kollar jag bara om resultatet från detta är <> +- 0,001.
Och i detta fallet är ju andra talet för långt ifrån så det är inte "nära".

Har jag tänkt rätt eller fel?

Jag är väldigt novis på detta med koordinater så be kind :)


Tack på förhand

tartareandesire 2016-09-14 10:02

Eftersom jorden inte är platt så är det inte helt trivialt.

Här hittar du allt du behöver:
http://www.movable-type.co.uk/scripts/latlong.html
http://www.codecodex.com/wiki/Calcul...nts_on_a_Globe

Går ju att förenkla genom att utgå från att jorden faktiskt är platt om du inte behöver några exakta siffror.

spyvingen 2016-09-14 10:52

Citat:

Ursprungligen postat av tartareandesire (Inlägg 20519938)
Eftersom jorden inte är platt så är det inte helt trivialt.

Här hittar du allt du behöver:
http://www.movable-type.co.uk/scripts/latlong.html
http://www.codecodex.com/wiki/Calcul...nts_on_a_Globe

Går ju att förenkla genom att utgå från att jorden faktiskt är platt om du inte behöver några exakta siffror.

Tack för svar :)

Om jag nu skulle räkna med att jorden är platt skulle det diffa mycket om avståndet jag är ute efter är typ 15-20 meter? Om det då diffar en eller två är jag inte så noga med.

Ock självklart använder jag uråldrig ASP och koder i och det fanns inga exempel för det :)

eNamn 2016-09-14 12:25

Du är på rätt spår.
Bara det att du med din beräkning kontrollerar om den andra punkten ligger innanför en kvadrat som omger den första punkten.

Vill du ha avståndet får du den med pythagoras sats

dx=Abs(-0,000241)
dy=Abs(0,001073)

Avstånd = Roten(dx*dx+dy*dy)

Och jorden är ju platt ;) i det här fallet.

spyvingen 2016-09-14 12:32

Ok now you lost me :)

Matte är inte direkt nån av mina starka sidor heller :)

Jag tänker lite så här

if < 0,001 or > -0,001 then
you are close
else
you are not close
end if

Gör jag det för simpelt då?
I mitt lilla huvud så bör ju detta ge mig typ en fyrkant som man måste hålla sig inom man jag kan ha helt fel nu :)

[edit]

och med 0,001 så är ju det resultatet av subtraktionen jag nämnde innan

spyvingen 2016-09-14 12:41

Jag tror jag nästan kopplade nu :)

Du tänker att man hellre vill ha snittet på den rektangel (alltså långsidan på en rätvinklig triangel) jag får fram för att få det lite mer exakt?

Frågan är om man har en triangel så är väl mitten på långsidan kortare än de två hörnen? Men det kanske blir mer exakt än att göra en rektangel?

Förstod jag dig rätt nu?
Eller är jag helt lost nu?

spyvingen 2016-09-14 12:59

1 bifogad(e) fil(er)
Bifogade en bild nu.

Om jag förstår det rätt och om stjärnan är punkten vi ska jämföra mot.

Jag har räknat ut punkt A du har räknat ut punkten C

Stämmer det?

Och det man egentligen vill veta är punkt B men det är för jobbigt att räkna ut? :)

eNamn 2016-09-14 13:32

1 bifogad(e) fil(er)
Jodå , med pythagoras sats så får du avståndet till punkt B i ditt exempel.

I bifogad bild känner du till avstånden A och B och kan då räkna ut C.

eNamn 2016-09-14 13:46

Programkoden

HTML-kod:

    a = 11.963587 - 11.96466
    b = 57.702044 - 57.702285
    c = Sqr(a * a + b * b)
    If c < 0.001 Then
        ' you are close
    Else
        ' you are not close
    End If


spyvingen 2016-09-14 13:51

Ahh nu är jag med tack så mycket för hjälpen :)

yakuzaemme 2016-09-14 17:28

Citat:

function Distance($p1, $p2, $p3, $p4)
{
$earthRadius = 3958;
$distance = number_format(($earthRadius * pi() * sqrt(($p1 - $p3) * ($p1 - $p3) + cos($p1 / 57.29578) * cos($p3 / 57.29578) * ($p2 - $p4) * ($p2 - $p4) ) / 180) * 1.609344, 3) + 0.040;
if($distance < 0.1) return '0.1 km';
else if($distance > 1) return number_format(($distance), 1).' mil';
else if($distance > 0.1) return number_format($distance, 1).' km';
else return $distance.' km';
}
Du får själv översätta till ASP :D

Alternativt om du vill hämta det direkt ur databas (och sortera etc därefter)

Citat:

SELECT places.*, ( 3959 * acos(cos(radians({$latitude})) * cos(radians(latitud)) * cos(radians(longitud) - radians({$longitude})) + sin(radians({$latitude})) * sin(radians(latitud)))) AS distance FROM places ORDER BY distance ASC

spyvingen 2016-09-15 13:54

Det löste sig galant tack för all hjälp "eNamn".

spyvingen 2016-09-15 14:02

Tack yakuzaemme men det där är typ grekiska för mig.
Koden i ASP ficvk jag ihop men blir lite räddd för sql koden :)
Får labba lite på sql servern och se om jag kan kan kopiera bara och ersätta $ och mina kolumnnamn :)

spyvingen 2016-09-15 14:17

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20519952)
Du får själv översätta till ASP :D

Alternativt om du vill hämta det direkt ur databas (och sortera etc därefter)

Citat:

SELECT mytable.*, ( 3959 * acos(cos(radians(57.70853911)) * cos(radians('lat')) * cos(radians('long') - radians(11.9916889)) + sin(radians(11.9916889)) * sin(radians('lat')))) AS distance FROM mytable ORDER BY distance asc

Kollumnnamn är long och lat
Den koden ovan ger samma svar på alla rader under distance "4041.8847018190277"

Jag måste gjort nått fel kan du se vad det är?

jayzee 2016-09-15 15:48

Är man någorlunda modern och använder Microsoft SQL Server 2008 och uppåt kan man faktiskt få ut avstånd i km via geography datatypen.

Se svaret i mitten.

yakuzaemme 2016-09-15 15:52

Citat:

Ursprungligen postat av spyvingen (Inlägg 20519975)
Kollumnnamn är long och lat
Den koden ovan ger samma svar på alla rader under distance "4041.8847018190277"

Jag måste gjort nått fel kan du se vad det är?

Du har placerat det sista värdet (latitud) fel och skrivit longitude istället.

Korrigering:

Citat:

SELECT mytable.*, ( 3959 * acos(cos(radians(57.70853911)) * cos(radians('lat')) * cos(radians('long') - radians(11.9916889)) + sin(radians(57.70853911)) * sin(radians('lat')))) AS distance FROM mytable ORDER BY distance asc

spyvingen 2016-09-15 15:54

Kör MySQL
Server version: 5.7.13-log - Source distribution

spyvingen 2016-09-15 15:56

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20519982)
Du har placerat det sista värdet (latitud) fel och skrivit longitude istället.

Korrigering:

Testade det du citerade nu och får fortfarande 4041,xxxx som svar på alla rader :(

yakuzaemme 2016-09-15 16:06

Citat:

Ursprungligen postat av spyvingen (Inlägg 20519984)
Testade det du citerade nu och får fortfarande 4041,xxxx som svar på alla rader :(

Du har fälten lat/long med citattecken, som strängar. Testa ta bort citattecken (')

spyvingen 2016-09-15 16:29

Citat:

Ursprungligen postat av yakuzaemme (Inlägg 20519986)
Du har fälten lat/long med citattecken, som strängar. Testa ta bort citattecken (')

Nu fick jag till det körde med ` istället för long blev fet stil så antar att det finns i mysql

Vad är det för måttenhet är det meter eller grader på nått sätt eller hur är det?

spyvingen 2016-09-15 16:59

Citat:

Ursprungligen postat av spyvingen (Inlägg 20519987)
Nu fick jag till det körde med ` istället för long blev fet stil så antar att det finns i mysql

Vad är det för måttenhet är det meter eller grader på nått sätt eller hur är det?

Kom på att meter kan det givetvis inte vara :)
Dock kilometer kan det stämma?

yakuzaemme 2016-09-15 17:00

Citat:

Ursprungligen postat av spyvingen (Inlägg 20519987)
Nu fick jag till det körde med ` istället för long blev fet stil så antar att det finns i mysql

Vad är det för måttenhet är det meter eller grader på nått sätt eller hur är det?

Miles. Om du vill ändra till km använder du 6371 istället för 3959

spyvingen 2016-09-15 18:21

Ahh kanon tack så mycket :)

Riktigt snyggt att lösa det redan i databasen istället för massa uträkningar på sidan :)

spyvingen 2016-09-16 07:33

Citat:

SELECT mytable.*, (6371 * acos(cos(radians(57.707859)) * cos(radians(`lat`)) * cos(radians(`long`) - radians(11.990338)) + sin(radians(57.707859)) * sin(radians(`lat`)))*1000) AS distance FROM mytable ORDER BY distance ASC limit 1
Så detta blev slutresultatet för er som ä intresserade den visar alltså hur många meter det är mellan två gps koordinater om jag nu inte gjort fel i min SQL :)

eNamn 2016-09-16 15:47

Great result! Användbart.


Alla tider är GMT +2. Klockan är nu 21:07.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson