Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 107,936

HOME > .NET Framework > Forum > โปรแกรมเมอร์ GPS ช่วยหน่อยครับ เรื่องการคำนวณหาระยะทางจากพิกัดGPS ครับ



 

โปรแกรมเมอร์ GPS ช่วยหน่อยครับ เรื่องการคำนวณหาระยะทางจากพิกัดGPS ครับ

 



Topic : 054719



โพสกระทู้ ( 153 )
บทความ ( 0 )



สถานะออฟไลน์




ผมได้ข้อมูลพิกัด GPS มาเป็นลักษณะนี้ครับ

จุดที่ 1 >>> ละติจูด(x1)= 1351.7367 ลองติจูน(x2) = 10032.0364
จุดที่ 2 >>> ละติจูด(y1) = 1351.7358 ลองติจูด(y2) = 10032.0397

ซึ่งผมก็ไม่ทราบว่าค่าพิกัดเหล่านี้ได้มาอย่างไร ?

output ที่ต้องการคือ ระยะทางระหว่าง 2 พิกัด โดยมีหน่วยเป็นกิโลเมตรครับ

รบกวนด้วยนะครับ



Tag : .NET







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-01-19 13:08:19 By : stricken View : 23592 Reply : 20
 

 

No. 1



โพสกระทู้ ( 242 )
บทความ ( 0 )



สถานะออฟไลน์


อ่านดู GooGle มีมากมายครับ ไม่รู้พอช่วยได้ไหมครับ
Go To : อ่านพิกัด แผนที่


ไปเจอมาครับ

1 องศา=60 ลิบดา
1 ลิบดา=60 พิลิบดา

1 องศา = 60 ไมล์ทะเล
1 ไมล์ทะเล = 1,852 เมตร

1 พิลิบดา = 60x1852/60/60 = 30.86 เมตร








ประวัติการแก้ไข
2011-01-19 13:36:54
2011-01-19 13:43:22
2011-01-19 14:13:17
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-19 13:36:14 By : EucifeR
 


 

No. 2



โพสกระทู้ ( 153 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากครับ เดี๋ยวลองค้นดู
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-19 14:15:14 By : stricken
 

 

No. 3



โพสกระทู้ ( 242 )
บทความ ( 0 )



สถานะออฟไลน์


Haversine formula

Harversine formula เป็นสมการในการหา
ระยะห่างระหว่าง GPS สองตัว โดยใช้ละติจูด และลอง
ติจูดมาคำนวนหาระยะห่าง จากสูตร

Δlat = lat2− lat1
Δlong = long2− long1
a = sin²(Δlat/2) + cos(lat1).cos(lat2).sin²(Δlong/2)
c = 2.atan2(√a, √(1−a))
d = R.c


โดยที่ R = รัศมีโลก (รัศมีโลกเฉลี่ย = 6,371
กิโลเมตร)
d = ระยะห่างระหว่าง GPS สองตัว
lat1 = ละติจูดที่ได้จาก GPS ตัวที่ 1
lat2 = ละติจูดที่ได้จาก GPS ตัวที่ 2
long1 = ลองจิจูดที่ได้จาก GPS ตัวที่ 1
long2 = ลองจิจูดที่ได้จาก GPS ตัวที่ 2

นี้เลยลองแกะดูไปสดุดเจอมา
http://www.ig.utexas.edu/outreach/googleearth/latlong.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-19 14:29:30 By : EucifeR
 


 

No. 4



โพสกระทู้ ( 153 )
บทความ ( 0 )



สถานะออฟไลน์


โอ้ววว ขอบคุณมากครับ .... สุดยอดเลย ๘้าน้อยขอคาราวะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-19 14:55:17 By : stricken
 


 

No. 5



โพสกระทู้ ( 153 )
บทความ ( 0 )



สถานะออฟไลน์


ยังไม่ได้อะครับ แต่ตอนนี้สามารถแปลงเป็นพิกัดของ google ได้แล้วครับ

พิกัดที่ 1 คือ 13.8622283333333, 100.534103333333
พิกัดที่ 2 คือ 13.8622633333333, 100.534011666667

ซึ่งเมื่อเอาไปใส่ใน google ได้ระยะทางประมาณ 7 เมตร


ซึ่งเอาไปคำนวณตามวิธีของคุณ Shadow[L] ผลก็ไม่ได้ 7 เมตรครับ

ผมเขียนโค้ด คุณ Shadow[L] ให้มา
แบบแรก
Code (VB.NET)
Dim Olat, Olong, a, c, d, R As Double
R = 6371 'Earth’s Radius
Olat = lat2 - lat1
Olong = long2 - long1
a = Pow((Sinh(Olat / 2)), 2) + (Cos(lat1) * Cos(lat2) * Pow(Sinh(Olong / 2), 2))
c = 2 * Atan2(Sqrt(a), Sqrt(1 - a))
d = R * c


แบบที่2
Code (VB.NET)
Dim d, R As Double
R = 6371
d = Acos(Sin(lat1) * Sin(lat2) + Cos(lat1) * Cos(lat2) * Cos(long2 - long1)) * R


2 แบบแรก ผลออก 27 กิโลนู้นครับ!!! คงผิดตรงไหนแน่ๆ -o-*

ผมก็ลองเอาพิกัด ไปใส่ใน เว็บ http://www.ig.utexas.edu/outreach/googleearth/latlong.htmlที่คุณ Shadow[L] ให้มา
ผลคือ
คำนวณ

มันก็ไม่ตรงอยู่ดี แต่ก็ต่างกันแค่ 3 เมตร

มีวิธีที่แม่นยำกว่านี้มั้ยครับ

ปล. พิกัด 2 จุดใน comment นี้ คนละพิกัดกับข้างบนครับ


ประวัติการแก้ไข
2011-01-19 16:30:56
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-19 16:28:48 By : stricken
 


 

No. 6



โพสกระทู้ ( 153 )
บทความ ( 0 )



สถานะออฟไลน์


คอนนี้สามารถคำนวณได้แล้วถือว่าใกล้เคียงตามสูตรที่คุณ Shadow[L] ให้มาครับ

แต่ว่าคลาดเคลื่อนเล็กน้อย

เพราะว่าสูตรที่คุณ Shadow[L] ให้มาคือสูตร Haversine's formula คือการคำนวณระยะทางระหว่างจุด 2 จุดบนพื้นผิวทรงกลม
สูตรนี้เลยคลาดเคลื่อนเล็กน้อย (25 กิโลเมตร คลาดเคลื่อน 15 เมตร)

แต่ว่าโลกมันเป็นทรงรี เลยต้องใช้สูตรของ Vincenty's formulae ซึ่งเป็นการคำนวณระยะทางระหว่างจุด 2 จุดบนพื้นทรงรี

คือว่ามัน advance เกินครับ
ตามนี้อะคับ http://en.wikipedia.org/wiki/Vincenty's_formulae

ใครพอมีฟังชั่นของ Vincenty บ้างหรือว่าเขียนให้ได้เป็นภาษา VB บ้างครับ ฮ่าฮ่าฮ่า...ๆ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-01-22 10:30:46 By : stricken
 


 

No. 7



โพสกระทู้ ( 41 )
บทความ ( 0 )



สถานะออฟไลน์


เผอิญศึกษษเรื่องนี้พอดีครับ
ตอนนี้แก้ได้แล้วครับ


ก่อนจะส่งค่า lat longไปคำนวณ ต้องแปลงค่าจากdegrees เป็นRadians ก่อนครับ จะใกล้เคียง ของ
http://www.ig.utexas.edu/outreach/googleearth/latlong.html นี้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-02-25 11:43:46 By : thandon
 


 

No. 8



โพสกระทู้ ( 8 )
บทความ ( 0 )



สถานะออฟไลน์


ใช่คะ ต้องทำการเขียนฟังก์ชันแปลงจาก องศาเป็นเรเดียนก่อนถึงจะคำนวณได้ตามที่คุณping บอกเลยคะ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-03-25 12:13:07 By : knightmon
 


 

No. 9



โพสกระทู้ ( 345 )
บทความ ( 0 )



สถานะออฟไลน์


ช่วยดูหน่อยครับ ทำไมระยะทางคำนวนออกมามันไกลจากความเป้นจริงจังครับ
อันนี้ระยะจริงครับ

gg

แต่ตอนนี้ได้ค่า 86.9963795386 กับ 57.9981405576

Code (PHP)
<?
$R = 6371 ;
$lat_prd=14.8495;
$lng_prd=103.495;
$tlat =$lat_prd- 14.85467;
$tlng = $lng_prd - 103.48357;
$a = Pow((Sinh($tlng / 2)), 2) + (Cos(14.8495) * Cos(14.8495) * Pow(Sinh($tlng / 2), 2));
$c = 2 * Atan2(Sqrt($a), Sqrt(1 - $a));
$d = $R * $c;
echo $d;
?>

<?
$R = 6371;
$lat_prd=14.8495;
$lng_prd=103.495;
$d = Acos(Sin(14.85467) * Sin($lat_prd) + Cos(14.85467) * Cos($lat_prd) * Cos($lng_prd - 103.48357)) * $R;
echo $d;
?>




ประวัติการแก้ไข
2011-06-23 19:19:58
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-23 19:19:11 By : buraratn
 


 

No. 10



โพสกระทู้ ( 345 )
บทความ ( 0 )



สถานะออฟไลน์


ตอนนี้ได้ค่าเท่ากันคับทั้งสองแบบ แต่ไม่ตรงกับระยะจริง ตอนนี้คำนวนได้ 57.9981405576 ค่าความเป็นจริงคือ1.356 km
Code (PHP)
<?
$R = 6371;
$lat_prd=14.8495;
$lng_prd=103.495;
$d = Acos(Sin(14.85467) * Sin($lat_prd) + Cos(14.85467) * Cos($lat_prd) * Cos($lng_prd - 103.48357)) * $R;
echo $d;
?>



Code (PHP)
<?
$R=6371;
$lat_prd=14.8495;//lat1
$lng_prd=103.495;//lng1
$dlat=( 14.85467-$lat_prd);
$dlon=(103.48357 -$lng_prd);
$a=sin($dlat/2)*sin($dlat/2)+cos($lat_prd)*cos( 14.85467)*sin($dlon/2)*sin($dlon/2);
$c=2*atan2(sqrt($a),sqrt (1-$a));
$d=$R*$c;
echo $d;
?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-06-23 19:42:52 By : buraratn
 


 

No. 11

Guest


http://jittagornp.blogspot.com/2011/07/gps-2-javascript.html

ตามลิงค์นี้ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-07-27 20:48:36 By : joshour
 


 

No. 12

Guest


มีประโยชน์มากครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-28 16:15:52 By : ืnat
 


 

No. 13

Guest


ตอบความคิดเห็นที่ : 10 เขียนโดย : buraratn เมื่อวันที่ 2011-06-23 19:42:52
รายละเอียดของการตอบ ::
สูตรตามนี้ครับ แต่พิกัดให้แปลงเป็น Radians ก่อนครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-30 03:00:48 By : 1234
 


 

No. 14

Guest


พี่ค่ะ ขอรบกวนสอบถามหน่อยค่ะ พอดีนู๋ทำโปรเจคจบเกี่ยวกับการหาพื่นที่ตั้ง คล้ายๆเวลาเชคอินใฟบุ๊ค แต่อยากได้ที่มันใกล้เครียงที่สุดมีวิธีไหนบ้างค่ะ


ปล.ถ้าพี่สะดวก ช่วยแอดเมลล์มาหานู่หน่อยน่ะค่ะ [email protected]
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-09-03 16:37:17 By : อุ้ม
 


 

No. 15

Guest


http://stackoverflow.com/questions/11416767/implementing-vincentys-formula-in-php

ตัวนี้ใช้ vincenty formula ลองดูครับเผื่อมีประโยชน์
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-10-11 12:36:22 By : lulzsec
 


 

No. 16

Guest


ผมกำลังทำอยู่ครับ พอดีทำได้แล้วเลยมาแบ่งปันนะ มีำรถามอีกได้นะครับ
ฟังก์ชัน PHP หาครับ

Code (PHP)
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
  $theta = $lon1 - $lon2;
  $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
  $dist = acos($dist);
  $dist = rad2deg($dist);
  $miles = $dist * 60 * 1.1515;
  $unit = strtoupper($unit);

  if ($unit == "K") {
    return ($miles * 1.609344);
  } else if ($unit == "N") {
      return ($miles * 0.8684);
    } else {
        return $miles;
      }
}


วิธีเรียกใช้
$direc=distance($lat,$lon1,$lat2,$lon2,"K");
$lat = x1(ของคุณ)
$lon1 = y1(ของคุณ)
$lat2 = x2(ของคุณ)
$lon2 =y2(ของคุณ)

K = หน่วยเป็น กิโลเมตร

ลองดู echo $direc;
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-10 14:35:33 By : iceFrog
 


 

No. 17

Guest


ตอบความคิดเห็นที่ : 16 เขียนโดย : iceFrog เมื่อวันที่ 2015-02-10 14:35:33
รายละเอียดของการตอบ ::
ค่าละติจูด ลองติจูดที่ได้ ไม่ทราบว่า เป็นค่าแบบที่ได้จาก google map ป่าวค่ะ พอดีต้องการตัวเลขแบบนั้นอ่ะคะ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2015-02-11 04:09:40 By : bebe
 


 

No. 18

Guest


อยากได้ ฟรีเลน โปรแกรมเมอทำจีพีเอส
ติดต่อ[email protected]จีเมลดอดคอม
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2016-07-04 11:20:52 By : นะ
 


 

No. 19

Guest


$lat1=9.120672;
$lon1=99.293367;
$lat2=9.153352;
$lon2=99.196423;
$lat = $lat2-$lat1;
$lon = $lon2-$lon1;
$c = sqrt(pow($lat,2) + pow($lon,2));
$km = $c/(1/108.4);
echo $km;
เป็นการคำนวนโดยใช้ อาศา
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2017-08-20 22:43:59 By : kowit
 


 

No. 20

Guest


การแปลง พิกัดให้เป็น เรเดียน ทำอย่างไงครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2019-03-09 18:17:39 By : วิทยา
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : โปรแกรมเมอร์ GPS ช่วยหน่อยครับ เรื่องการคำนวณหาระยะทางจากพิกัดGPS ครับ
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: Voake, Comcube, รับทำเว็บไซต์ รับเขียนโปรแกรม

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2019 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 , 08-9968-0655 อัตราราคา คลิกที่นี่