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)

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?


Alla tider är GMT +2. Klockan är nu 03:11.

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