|
|
|
โปรแกรมเมอร์ GPS ช่วยหน่อยครับ เรื่องการคำนวณหาระยะทางจากพิกัดGPS ครับ |
|
|
|
|
|
|
|
อ่านดู 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณมากครับ เดี๋ยวลองค้นดู
|
|
|
|
|
Date :
2011-01-19 14:15:14 |
By :
stricken |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โอ้ววว ขอบคุณมากครับ .... สุดยอดเลย ๘้าน้อยขอคาราวะ
|
|
|
|
|
Date :
2011-01-19 14:55:17 |
By :
stricken |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ยังไม่ได้อะครับ แต่ตอนนี้สามารถแปลงเป็นพิกัดของ 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
คอนนี้สามารถคำนวณได้แล้วถือว่าใกล้เคียงตามสูตรที่คุณ 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เผอิญศึกษษเรื่องนี้พอดีครับ
ตอนนี้แก้ได้แล้วครับ
ก่อนจะส่งค่า lat longไปคำนวณ ต้องแปลงค่าจากdegrees เป็นRadians ก่อนครับ จะใกล้เคียง ของ
http://www.ig.utexas.edu/outreach/googleearth/latlong.html นี้ครับ
|
|
|
|
|
Date :
2011-02-25 11:43:46 |
By :
thandon |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ใช่คะ ต้องทำการเขียนฟังก์ชันแปลงจาก องศาเป็นเรเดียนก่อนถึงจะคำนวณได้ตามที่คุณping บอกเลยคะ
|
|
|
|
|
Date :
2011-03-25 12:13:07 |
By :
knightmon |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ช่วยดูหน่อยครับ ทำไมระยะทางคำนวนออกมามันไกลจากความเป้นจริงจังครับ
อันนี้ระยะจริงครับ
แต่ตอนนี้ได้ค่า 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้ได้ค่าเท่ากันคับทั้งสองแบบ แต่ไม่ตรงกับระยะจริง ตอนนี้คำนวนได้ 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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มีประโยชน์มากครับ
|
|
|
|
|
Date :
2012-03-28 16:15:52 |
By :
ืnat |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
พี่ค่ะ ขอรบกวนสอบถามหน่อยค่ะ พอดีนู๋ทำโปรเจคจบเกี่ยวกับการหาพื่นที่ตั้ง คล้ายๆเวลาเชคอินใฟบุ๊ค แต่อยากได้ที่มันใกล้เครียงที่สุดมีวิธีไหนบ้างค่ะ
ปล.ถ้าพี่สะดวก ช่วยแอดเมลล์มาหานู่หน่อยน่ะค่ะ [email protected]
|
|
|
|
|
Date :
2012-09-03 16:37:17 |
By :
อุ้ม |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
http://stackoverflow.com/questions/11416767/implementing-vincentys-formula-in-php
ตัวนี้ใช้ vincenty formula ลองดูครับเผื่อมีประโยชน์
|
|
|
|
|
Date :
2012-10-11 12:36:22 |
By :
lulzsec |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากได้ ฟรีเลน โปรแกรมเมอทำจีพีเอส
ติดต่อloftatsima.nattaphon@จีเมลดอดคอม
|
|
|
|
|
Date :
2016-07-04 11:20:52 |
By :
นะ |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
การแปลง พิกัดให้เป็น เรเดียน ทำอย่างไงครับ
|
|
|
|
|
Date :
2019-03-09 18:17:39 |
By :
วิทยา |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|