การผจญภัยในการเขียนโปรแกรมและการพัฒนา GPS: บทช่วยสอนเกี่ยวกับภูมิสารสนเทศ

เผยแพร่แล้ว: 2022-03-11

ทั้งหมดนี้เริ่มต้นจากการเดินป่าที่ Zbevnica เมื่อ 10 กว่าปีที่แล้ว ฉันมี GPS ใหม่กับฉัน และเพื่อนของฉันมี GPS ที่เชื่อมต่อกับโทรศัพท์ Windows ME การปีนเขานั้นยอดเยี่ยมมาก แต่เมื่อเรากลับไปที่รถ เราประหลาดใจที่เห็นว่า GPS ตัวหนึ่งอ้างว่าเราเดินไปแล้ว 6.2 กม. ในขณะที่อีกตัวรายงาน 6.7 กม. คนหนึ่งอ้างว่าระดับความสูงที่เพิ่มขึ้นของเรา (กล่าวคือ ผลรวมของส่วนขึ้นเนินทั้งหมดของการเดินป่าของเรา) อยู่ที่ 300 ม. ในขณะที่อีกส่วนหนึ่งรายงานว่าเป็น 500 ม.

การเป็นโปรแกรมเมอร์ (และในที่สุดก็เป็นโปรแกรมเมอร์ GIS) ฉันรู้สึกทึ่งกับปัญหาในทันที ฉันพูดกับตัวเองว่า “สิ่งนี้ ไม่ ควรจะยากนักที่จะแก้ไขด้วยสคริปต์ง่ายๆ” ท้ายที่สุด รอยทาง GPS เป็นเพียงรายการของทูเพิลในรูปแบบของ (ละติจูด ลองจิจูด ระดับความสูง) ใช่ไหม

ไม่ได้จริงๆ

ด้วยเหตุนี้ ฉันจึงได้เริ่มต้นการเดินทางสู่โลกอันน่าทึ่งของเส้นทาง GPS ข้อผิดพลาดในการติดตาม และโดยทั่วไปแล้ว การเขียนโปรแกรม GIS

ระบบข้อมูลเชิงพื้นที่ (GIS) เป็นโดเมนขนาดใหญ่และซับซ้อน ครอบคลุมการประมาณการแผนที่และข้อมูล geodetic datum) การประมวลผลข้อมูล raste และ vecto และการสำรวจระยะไกล การแนะนำโดเมนนี้อย่างครอบคลุมจะเกินขอบเขตของบทความนี้ และเนื่องจากการมุ่งเน้นไปที่ปัญหาเฉพาะมักจะเป็นวิธีที่มีประโยชน์ในการแนะนำตัวเองให้รู้จักกับโดเมนใหม่ อย่างไรก็ตาม ฉันจะนำเสนอความท้าทายบางประการของ GIS ที่ฉันพบและวิธีแก้ปัญหาที่เป็นไปได้ กล่าวคือ:

  • วิธีรับรู้ ทำความเข้าใจ และแก้ไขข้อผิดพลาดการติดตาม GPS โดยทางโปรแกรม
  • วิธีคำนวณและรับข้อมูลที่เป็นประโยชน์เพิ่มเติมจากแทร็ก GPS

สำหรับผู้เริ่มต้น เส้นทาง GPS ไม่ได้ เป็นเพียงชุดของทูเพิล (ละติจูด ลองจิจูด ระดับความสูง) อุปกรณ์ที่ใช้ GPS จำนวนมากจะให้ข้อมูลเมตา เช่น เวลา อัตราการเต้นของหัวใจ และอื่นๆ อุปกรณ์ GPS บางตัวจะให้ข้อมูลเกี่ยวกับความแม่นยำของข้อมูล เรียกอีกอย่างว่า "การเจือจางความแม่นยำ" แต่น่าเสียดายที่อุปกรณ์ GPS ส่วนใหญ่ โดยเฉพาะอย่างยิ่งอุปกรณ์ระดับล่างที่ครองตลาด จะไม่ให้ข้อมูลนี้ และเราถูกทิ้งให้อยู่กับความท้าทายในการสรุปความถูกต้องของอุปกรณ์ด้วยตัวเราเอง (และแก้ไขให้ถูกต้องหากเป็นไปได้ ).

เริ่มต้นด้วยอัลกอริธึมหนึ่งที่เป็นไปได้ในการตรวจจับอุปกรณ์ GPS ระดับล่าง (เช่น สมาร์ทโฟนส่วนใหญ่) ซึ่งมักจะมีข้อมูล GPS คุณภาพต่ำ

ข้อผิดพลาดในระดับความสูงและนิสัยแปลก ๆ

หากคุณอาศัยอยู่ในส่วนใดส่วนหนึ่งของโลก คุณอาจสังเกตเห็นบางอย่างที่แปลกเกี่ยวกับความแม่นยำของระดับความสูงของ GPS เมื่อคุณบันทึกเส้นทางด้วยสมาร์ทโฟนของคุณ เมื่อคุณตรวจสอบระดับความสูง ระดับความสูงเหล่านั้นจะถูกบันทึกอย่างสม่ำเสมอว่าสูงหรือต่ำ (โดยค่าคงที่) มากกว่าระดับความสูงที่ถูกต้อง ตัวอย่างเช่น ฉันอาศัยอยู่ใน Višnjan (โครเอเชีย) และ Android ของฉันคอยบอกฉันว่าฉันอยู่สูงจากระดับความสูงจริงประมาณ 35-40 เมตร

ตัวอย่างเช่น นี่คือกราฟระดับความสูงของ GPS จากการปีนเขาสั้นๆ ที่ฉันทำเมื่อไม่กี่เดือนที่ผ่านมา:

กราฟนี้แสดงปัญหาเกี่ยวกับความแม่นยำในการยกระดับ GPS ในการเขียนโปรแกรม GIS

สองสิ่งที่ควรทราบที่นี่

อย่างแรกเลย “เนิน” ในส่วนแรกของข้อมูล GPS ที่บันทึกไว้นั้นถูกสร้างขึ้นโดยอุปกรณ์ อย่างสมบูรณ์ ในขณะที่กราฟดูเหมือนจะบ่งบอกว่าจุดสูงสุดในการปีนเขาของเราอยู่ห่างจากจุดเริ่มต้นเพียงไม่กี่ร้อยเมตร ในความเป็นจริงแล้วมันคือประมาณ 4 กม. ต่อมา

ประการที่สอง สิ่งที่สำคัญกว่า (และมอง ไม่ เห็นบนกราฟ) ก็คือ กราฟทั้งหมดไม่ถูกต้อง ค่าระดับความสูงได้รับการรายงานอย่างสม่ำเสมอว่าสูงกว่าความเป็นจริงประมาณ 30-40 เมตร เนื่องจากเราจะพูดถึงรายละเอียดเพิ่มเติมในบทความนี้

เมื่อเราสามารถตรวจพบว่าเส้นการเดินทางมีข้อผิดพลาดเหล่านี้ เราสามารถสรุปได้ว่าอุปกรณ์นั้นน่าจะเป็น GPS คุณภาพต่ำ

สิ่งเหล่านี้สามารถเกิดขึ้นได้กับอุปกรณ์ GPS ราคาถูก และเมื่อเราตรวจพบว่าเส้นการเดินทางมีข้อผิดพลาดเหล่านี้ เราสามารถสรุปได้ว่าอุปกรณ์นั้นน่าจะเป็น GPS คุณภาพต่ำ ดังนั้นจึงคาดได้ว่าจะมีข้อผิดพลาดอื่นๆ ด้วยเช่นกัน ไม่ใช่แค่ข้อผิดพลาดในระดับความสูง ซึ่งเป็นเรื่องปกติในอุปกรณ์ดังกล่าว

ข้อผิดพลาดในการยกระดับการเริ่มต้น

มีสองเทคนิคที่อุปกรณ์ GPS ใช้ในการกำหนดระดับความสูง: "ความสูง GPS" (ตามที่ระบบดาวเทียม GPS รายงานไปยังอุปกรณ์) และ "ระดับความสูงของบรรยากาศ" (คำนวณโดยอุปกรณ์ตามการอ่านค่าความดันบรรยากาศ) ไม่สมบูรณ์แบบ

ค่าระดับความสูงของ GPS อาจมีข้อผิดพลาดเล็กๆ น้อยๆ มากมาย (โดยทั่วไปจะอยู่ในช่วง +/- 10 ม.) ซึ่งอาจเป็นปัญหาโดยเฉพาะหากเราตัดสินใจคำนวณค่าระดับความสูงที่เพิ่มขึ้นสะสมในภายหลัง ในทางกลับกัน ระดับความสูงของบรรยากาศมีความอ่อนไหวไม่เพียงต่อความสูงเท่านั้น แต่ยังรวมถึงสภาพอากาศด้วย ซึ่งสามารถแนะนำชุดของความไม่ถูกต้องของตัวเองได้

อุปกรณ์บางอย่างจึงใช้วิธีไฮบริด โดยใช้การอ่านความกดอากาศเพื่อบันทึกระดับความสูง แต่ใช้การอ่าน GPS เพื่อช่วย (อีกครั้ง) ปรับเทียบค่าเหล่านั้น เพื่อช่วยอธิบายการเปลี่ยนแปลงของสภาพอากาศ (ความดัน) และอื่นๆ ด้วยอุปกรณ์ดังกล่าว เมื่อเริ่มต้นเส้นทาง ระดับความสูงของบรรยากาศอาจผิดพลาดได้อย่างสมบูรณ์ แต่แล้วการปรับเทียบใหม่ด้วยข้อมูลดาวเทียม GPS ที่มากขึ้นเรื่อยๆ ข้อมูลระดับความสูงจะมีความน่าเชื่อถือมากขึ้น ดังนั้นจึงไม่ใช่เรื่องแปลกที่อุปกรณ์ดังกล่าวจะพบข้อผิดพลาดในการเริ่มต้น "เนินเขาปลอม" ที่เราสังเกตเห็นก่อนหน้านี้ในกราฟระดับความสูงของเรา

ความคลาดเคลื่อนของระดับความสูง GPS อย่างต่อเนื่อง

เพื่ออธิบายข้อผิดพลาดที่สอดคล้องกันในการรายงานระดับความสูง เราต้องกลับไปที่ภูมิศาสตร์ของโรงเรียนประถมศึกษาของเรา ครูวิชาภูมิศาสตร์มักจะอธิบายว่าโลกไม่ใช่ทรงกลมแต่เป็นทรงรี หากสิ่งนี้เป็นจริง ความสูงก็จะคำนวณทางคณิตศาสตร์ได้ง่าย แต่มันไม่ใช่ โลกไม่ปกติ ในความเป็นจริง มันเหมือนกับ มันฝรั่งที่มีรูปร่างคล้ายทรงรี มากกว่าทรงรีที่สมบูรณ์แบบ ซึ่งหมายความว่าสำหรับการพัฒนา GIS คุณต้องมีชุดข้อมูลระดับความสูงโดยละเอียดสำหรับเกือบทุกจุดบนโลก ใน geodesy นั้น ทรงรีอ้างอิง (aka datum) เป็นพื้นผิวที่กำหนดไว้ทางคณิตศาสตร์ซึ่งใกล้เคียงกับ geoid ซึ่งเป็นร่างที่ "จริงกว่า" ของโลก

ยิ่งไปกว่านั้น สิ่งสำคัญคือต้องตระหนักว่า แม้แต่ Datum เหล่านี้เป็นเพียงการ ประมาณ รูปร่างที่แท้จริงของพื้นผิวโลกเท่านั้น บางคนทำงานได้ดีกว่าในบางส่วนของโลก และบางคนทำงานได้ดีกว่าในส่วนอื่นๆ ตัวอย่างเช่น รูปภาพด้านล่าง (สร้างโดยใช้ไลบรารี Ruby ของฉัน) แสดงให้เห็นว่า Earth แตกต่างจากแบบจำลองทรงรีที่นิยมใช้กันทั่วไปอย่างไร (ข้อมูล WGS84) ส่วนสีดำแสดงถึงส่วนต่างๆ ของโลกด้านบน และสีขาวแสดงถึงส่วนต่างๆ ของโลกด้านล่าง ซึ่งเป็นทรงรีในอุดมคติ (รูปทรงของทวีปและเกาะแสดงเป็นสีแดง)

แผนภูมินี้แสดงพื้นผิวโลกซึ่งสร้างโดยห้องสมุด Ruby สำหรับการเขียนโปรแกรมเชิงพื้นที่และ GIS

คุณจะเห็นได้ว่าอินเดียอยู่ใต้วงรี WGS84 โดยทางใต้อยู่ต่ำสุด (เกือบ -100 เมตร!) และยุโรปอยู่เหนือมัน

เนื่องจากอุปกรณ์ GPS คุณภาพต่ำไม่ได้ใช้ Datum ดังกล่าว พวกมันจึงคำนวณระดับความสูงโดยสมมติว่ามีทรงรีที่สมบูรณ์แบบ ดังนั้นความไม่ถูกต้องที่สอดคล้องกันของพวกเขา

การตรวจจับและแก้ไขข้อผิดพลาดระดับความสูง GPS

ในการพัฒนาแอป GPS การตรวจพบว่าอุปกรณ์ที่บันทึกเส้นทางของเรามีข้อผิดพลาดประเภทนี้สามารถทำได้โดยใช้ชุดข้อมูล Earth Gravitational Model EGM2008 ซึ่งบางครั้งเรียกว่าชุดข้อมูล "geoid undulations" ด้วย EGM2008 เราสามารถประมาณความแตกต่างระหว่างพื้นผิวโลกจริงกับทรงรีในอุดมคติได้

ด้วย EGM2008 เราสามารถประมาณความแตกต่างระหว่างพื้นผิวโลกจริงกับทรงรีในอุดมคติได้

แต่หากต้องการทราบว่าเส้นทาง GPS ของเรา มีข้อผิดพลาดนี้หรือไม่ เราต้องการอีกสิ่งหนึ่ง นั่นคือระดับความสูงที่ แท้จริง ฐานข้อมูลสาธารณะที่สามารถเป็นประโยชน์สำหรับวัตถุประสงค์นี้คือภารกิจภูมิประเทศเรดาร์กระสวย (SRTM) SRTM เป็นฐานข้อมูลแบบแรสเตอร์ที่ให้ค่าระดับความสูงที่ความละเอียดประมาณทุกๆ 30 เมตร (ที่เส้นศูนย์สูตร) ​​สำหรับสหรัฐอเมริกา และทุกๆ 90 เมตรสำหรับส่วนอื่นๆ ของโลก ตัวอย่างเช่น เมื่อคำนวณค่า SRTM สำหรับจุดในแทร็กด้านบน กราฟอื่น (เส้นสีน้ำเงิน) จะปรากฏขึ้น:

เครื่องมือที่ยอดเยี่ยมสำหรับการพัฒนาแอป GPS คือฐานข้อมูล SRTM ของค่าระดับความสูงของ GIS

ความรำคาญเล็กน้อยที่นี่คือขอบหยาบของกราฟ แต่สิ่งนี้ทำให้เรียบได้ง่าย โปรดทราบว่าการปรับให้เรียบเราจะสูญเสียความแม่นยำเพียงเล็กน้อย (ถ้ามี) เนื่องจาก SRTM เองนั้นให้จุดที่ไม่ต่อเนื่องที่ตำแหน่งเท่ากันเท่านั้น ซึ่งเราจำเป็นต้องสอดแทรกในทุกกรณี ต่อไปนี้คือเวอร์ชันของกราฟก่อนหน้าที่มีการซ้อนทับเส้นสีแดงซึ่งแสดงถึงข้อมูล SRTM ที่ปรับให้เรียบ:

นี่คือแผนภูมิข้อมูลระดับความสูง GPS ที่ปรับให้เรียบจากฐานข้อมูล SRTM

ทั้งหมดนี้สามารถทำได้ง่าย ๆ โดยบังเอิญ โดยใช้ไลบรารี GPS Python ของฉัน:

  • srtm.py: a python parser สำหรับข้อมูลระดับความสูงของ Shuttle Radar Topography Mission (SRTM)
  • gpxpy: ไลบรารี python อย่างง่ายสำหรับการแยกวิเคราะห์และจัดการไฟล์ GPX (GPX, รูปแบบการแลกเปลี่ยน GPS เป็นรูปแบบข้อมูล XML ที่มีน้ำหนักเบาสำหรับข้อมูล GPS)

สำหรับผู้ใช้ Ruby ยังมีไลบรารีตัวแยกวิเคราะห์ Geoelevations.rb ของฉันสำหรับ SRTM และ EGM2008 undulations

เมื่อตรวจพบความผิดปกติเหล่านี้แล้ว ขึ้นอยู่กับประเภทของซอฟต์แวร์ที่เรากำลังใช้งาน เราสามารถ (a) แก้ไขข้อผิดพลาดโดยอัตโนมัติด้วยตัวเราเอง หรือ (b) เพียงแจ้งผู้ใช้ว่าข้อมูลระดับความสูงนั้นถูกตรวจพบแล้ว

นอกจากนี้ เนื่องจากมีอัลกอริธึมต่างๆ ที่สามารถใช้เพื่อแก้ไขข้อผิดพลาดในการยกระดับ GPS เหล่านี้โดยทางโปรแกรม เราอาจต้องการให้ผู้ใช้มีตัวเลือกในการเลือกอัลกอริธึมที่จะใช้ (เช่น ผู้ใช้ต้องการให้เราใช้ข้อมูล SRTM ที่ปรับให้เรียบหรือไม่ “ตามที่เป็น” หรือผู้ใช้ต้องการให้เราใช้ข้อมูล SRTM เพื่อช่วยแก้ไขระดับความสูงที่อุปกรณ์รายงาน)

ปรับแทร็กให้เรียบและลบค่าผิดปกติ

หากนักฟุตบอลสวมอุปกรณ์ GPS และบันทึกการแข่งขัน แทร็กที่ได้จะดูยุ่งเหยิง สนามแข่งขันจะเต็มไปด้วยแทร็กที่ประกอบด้วยการเลี้ยวที่เฉียบคม การเร่งความเร็ว และการชะลอตัวจำนวนมาก

โชคดีที่กรณีส่วนใหญ่ที่ผู้ใช้ GPS จะไม่มีรูปแบบเดียวกันนี้ - เส้นติดตาม GPS (และการเร่งความเร็ว) จะค่อนข้างราบรื่น ในกรณีดังกล่าว จุดที่ผิดปกติในเส้นทางของเราถือได้ว่าเกิดจากข้อผิดพลาด ดังนั้นจึงสามารถลบค่าผิดปกติดังกล่าวออกได้อย่างสมเหตุสมผลด้วยฟังก์ชันการปรับให้เรียบ

ในฐานะนักพัฒนา GIS การปรับให้เรียบมักจะทำได้โดยการวนซ้ำผ่านจุดต่างๆ และ เปลี่ยน พิกัดตามค่าของพิกัดที่อยู่ใกล้เคียง ตัวอย่างเช่น เราสามารถเปลี่ยนทุกละติจูดและลองจิจูดด้วยอัลกอริทึมดังต่อไปนี้:

 points[n].latitude = points[n-1].latitude * 0.3 + points[n].latitude * .4 + points[n+1].latitude * .3 points[n].longitude = points[n-1].longitude * 0.3 + points[n].longitude * .4 + points[n+1].longitude * .3

ยิ่งค่าสัมประสิทธิ์มากเท่าใด ผลกระทบของจุดข้างเคียงที่สัมพันธ์กันก็จะยิ่งมากขึ้นตามตำแหน่งที่แก้ไขของจุดปัจจุบัน สัมประสิทธิ์ที่ฉันใช้ในตัวอย่างนี้ (0.3, 0.4, 0.3) ค่อนข้างเข้าใจได้ง่าย แต่ในกรณีส่วนใหญ่ คุณจะต้องให้ผลรวมของมันเท่ากับ 1.0 (ตัวอย่างเช่น วิธีการที่ซับซ้อนกว่านั้น คือ ใช้ระยะห่างระหว่างจุด จากนั้นยิ่งจุดใกล้กันมากเท่าใด สัมประสิทธิ์ที่สอดคล้องกันก็จะยิ่งมากขึ้นเท่านั้น)

ต่อไปนี้คือตัวอย่างแทร็กที่มีข้อผิดพลาดแบบสุ่มจำนวนมาก:

หนึ่งในความท้าทายในการติดตาม GPS ที่ยิ่งใหญ่ที่สุดในการพัฒนา GIS คือการติดตามที่มีข้อผิดพลาดแบบสุ่มจำนวนมาก

สังเกตว่าเส้นทางเดินตามเส้นทางได้ไม่ดี มีทางเลี้ยวที่แหลมคมและขรุขระมาก และบางครั้งก็เบี่ยงออกจากเส้นทางที่คาดไว้ทั้งหมด

หลังจากการทำซ้ำหลายครั้ง "เรียบ" แทร็กเดียวกันนี้จะถูกเปลี่ยนเป็น:

หลังจากขจัดข้อผิดพลาดในการติดตามให้เรียบแล้ว การติดตาม GPS ในโปรแกรมนี้ยังไม่สมบูรณ์ แต่ดีกว่า

แม้ว่าจะดีกว่ามาก แต่ก็ยังถือว่าไม่สมบูรณ์ โปรดทราบว่ายังมีสถานที่ (โดยเฉพาะใกล้กลางเส้นทาง) ที่ทางยังคงเบี่ยงออกจากถนน

มีอย่างอื่นที่คุณสามารถลองได้ ในบางภูมิภาค และสำหรับบางแอปพลิเคชัน GPS คุณยังสามารถใช้ข้อมูล OpenStreetMap (OSM) เพื่อลองเดาเส้นทางที่ถูกต้อง จากนั้น "สแนป" จุดไปยังบรรทัดใหม่นี้ แม้ว่าวิธีนี้มักจะมีประโยชน์ แต่ก็อาจไม่สมบูรณ์ได้เช่นกัน เช่น ในกรณีที่ข้อมูล OSM มีเส้นคู่ขนานสองเส้น (เช่น ทางหลวงและถนนใกล้เคียง) หรือเส้นทางใกล้เคียงหลายเส้นทาง

หากเราสามารถสรุปได้ว่าเส้นทางนั้นเป็นเส้นทางเดินป่า และมีตัวเลือกให้ชิดกับทางหลวงหรือเส้นทางใกล้เคียง เราสามารถสรุปได้อย่างปลอดภัยว่าเส้นทางนั้นเป็นเส้นทางเดินป่า ไม่ใช่ทางหลวง

ในกรณีเช่นนี้ วิธีแก้ไขที่เป็นไปได้คือพยายามตรวจหาประเภทของกิจกรรม โดยใช้เทคนิคบางอย่างที่กล่าวถึงเพิ่มเติมในบทความนี้ ตัวอย่างเช่น หากเราสามารถอนุมานได้ว่าเส้นทางนั้นเป็นเส้นทางเดินป่าและมีตัวเลือกให้ชิดกับทางหลวงหรือเส้นทางใกล้เคียง เราสามารถสรุปได้อย่างปลอดภัยว่าเส้นทางนั้นเป็นเส้นทางเดินป่า ไม่ใช่ทางหลวง

นอกจากนี้ โปรดทราบด้วยว่าในขณะที่ตัวอย่างนี้แสดงให้เห็นถึงความเรียบของพิกัดพื้นผิว (เช่น ลองจิจูด/ละติจูด) การทำให้เรียบอาจเป็นเทคนิคที่ถูกต้องเท่าเทียมกันในการขจัดความคลาดเคลื่อนในข้อมูลระดับความสูงหรือข้อมูลชั่วคราว หรือแม้แต่ในข้อมูลอัตราการเต้นของหัวใจและรอบขาของจักรยาน

ตัวอย่างของประโยชน์เพิ่มเติมและการใช้การปรับให้เรียบอาจรวมถึง:

  • การคำนวณการเพิ่มระดับความสูงทั้งหมด ในการคำนวณระดับความสูงที่เพิ่มขึ้นทั้งหมดในแทร็ก ยังไม่เพียงพอที่จะรวม "การกระโดด" ขึ้นเนินเล็กๆ ทั้งหมด เนื่องจากมักจะมีข้อผิดพลาดเล็กน้อย การปรับระดับความสูงให้เรียบก่อนทำผลรวมสามารถช่วยบรรเทาปัญหานี้ได้
  • การกำจัดค่าผิดปกติ หลังจาก "ปรับให้เรียบ" แล้ว จุดที่อยู่ห่างจากแทร็กมากเกินไปจะตรวจจับได้ง่ายขึ้น สิ่งเหล่านี้มักจะถือว่ามีค่าผิดปกติ และผู้ใช้จะได้รับแจ้งให้ถามว่าควรลบออกหรือไม่

มีปัญหาประเภทหนึ่งที่อัลกอริธึมนี้สั้น: ในบางกรณี GPS จะบันทึกเส้นทางที่ราบรื่น แต่เส้นทางจะ "เปลี่ยน" ตามความแตกต่างคงที่ในบางทิศทาง ในกรณีเช่นนี้ การปรับให้เรียบอาจทำให้เส้นเรียบขึ้น แต่ไม่สามารถแก้ไขข้อผิดพลาดในกะนี้ได้

ปัญหาเพิ่มเติมที่ไม่ชัดเจน แต่มีนัยสำคัญเกี่ยวกับเทคนิคการปรับให้เรียบอย่างง่ายที่เราได้อธิบายไว้คือ การเปลี่ยนแปลงแก้ไขจุดทั้งหมด (หรือเกือบทั้งหมด) ในเส้นทาง แม้แต่จุดที่อาจไม่ผิดพลาด แม้ว่าแนวทางที่ง่ายกว่านี้มักจะเป็นวิธีแก้ปัญหาที่สมเหตุสมผลสำหรับผู้ใช้ GPS ทั่วไป แต่อัลกอริธึมการปรับให้เรียบที่มีความซับซ้อนมากขึ้นก็สามารถนำมาใช้ในการเขียนโปรแกรม GIS ได้อย่างแน่นอน ในบางกรณี อาจเป็นการดีกว่าถ้าเพียงแค่เอาค่าผิดปกติออกโดยไม่ทำให้เรียบ ทั้งนี้ขึ้นอยู่กับผู้ใช้ อุปกรณ์ และแอปพลิเคชัน

การตรวจจับความเร็วสูงสุด

การตรวจจับความเร็วสูงสุดของเส้นทางนั้นค่อนข้างง่าย หากเรามีพิกัดและการประทับเวลาของจุดทั้งหมดบนเส้นทาง เพียงคำนวณความเร็วระหว่างจุดและหาค่าสูงสุด ดูเหมือนตรงไปตรงมา

แต่อย่าลืมว่า เรากำลังจัดการกับอุปกรณ์ GPS ระดับล่าง และเราไม่เชื่อถือข้อมูลอย่างเต็มที่ ซึ่งอาจมีส่วนสำคัญในการคำนวณของเรา หากอุปกรณ์บันทึกตำแหน่งทุกๆ 5 เมตร และ ณ จุดหนึ่งทำผิดพลาดโดยวางจุดผิดตำแหน่ง 10 เมตร แสดงว่าส่วนนั้นของแทร็กอาจเร็วกว่าที่เป็นอยู่ 3 เท่า!

วิธีหนึ่งที่ใช้กันทั่วไปในโลกของการพัฒนา GIS คือการดึงความเร็วทั้งหมดระหว่างจุดต่างๆ จากนั้นจึงลบ 5% แรกสุด (เช่น ใช้เปอร์เซ็นต์ไทล์ที่ 95) โดยหวังว่า 5% ที่ถูกกำจัดออกจะเป็นข้อผิดพลาดส่วนใหญ่ แต่สิ่งนี้เป็นที่ยอมรับว่าไม่เป็นไปตามหลักวิทยาศาสตร์และไม่ได้รับรองผลลัพธ์ที่ถูกต้อง ในการทดลองเทคนิคนี้ ฉันได้ลองใช้ค่าเปอร์เซ็นไทล์ที่แตกต่างกัน และพบว่าบางค่าใช้ได้ดีกับอุปกรณ์ GPS ตัวหนึ่ง บางตัวก็ใช้ได้ดีสำหรับตัวอื่นๆ บางตัวก็ใช้ได้ดีสำหรับการเดินป่าและบางตัวก็เหมาะสำหรับการปั่นจักรยาน แต่ในกรณีส่วนใหญ่ ผลลัพธ์ก็ไม่ ถูก ต้องสำหรับฉัน

หลังจากลองใช้อัลกอริธึมหลายๆ ตัว สิ่ง ที่ ใช้ได้ผลสำหรับฉันนั้นง่ายมาก: การเพิ่มตัวกรองอื่นเพื่อขจัดความสุดขั้ว ไม่เพียงแต่ความเร็วเท่านั้น แต่ยังรวมถึงระยะทางด้วย ดังนี้:

  1. จัดเรียงคะแนน ตามระยะห่าง ระหว่างเพื่อนบ้านและลบด้านบน 5%
  2. (ไม่บังคับ:) ปรับแทร็กให้เรียบ (แนวนอนและ/หรือแนวตั้ง)
  3. จัดเรียงคะแนน ตามความเร็ว ระหว่างเพื่อนบ้านและลบด้านบน 5%
อัลกอริธึมนี้ให้ผลลัพธ์ที่ค่อนข้างน่าเชื่อถือ แม้กระทั่งสำหรับแทร็กจากอุปกรณ์ GPS ราคาถูกที่มีข้อผิดพลาดแบบสุ่ม

จากประสบการณ์ของฉัน อัลกอริธึมนี้ให้ผลลัพธ์ที่น่าเชื่อถือ แม้กระทั่งสำหรับแทร็กจากอุปกรณ์ GPS ราคาถูกที่มีข้อผิดพลาดแบบสุ่ม

ประเภทกิจกรรม

ในหลายกรณี ความเร็วเฉลี่ยเพียงพอที่จะกำหนดประเภทกิจกรรม ตัวอย่างเช่น หากความเร็วเฉลี่ยคือ 5 กม./ชม. อาจเป็นเส้นทางเดิน/ปีนเขา ในขณะที่หากความเร็วเฉลี่ยอยู่ที่ 30 กม./ชม. อาจเป็นเส้นทางปั่นจักรยาน เป็นต้น

แต่ถ้าความเร็วเฉลี่ยอยู่ที่ 12 กม./ชม. คุณจะไม่แน่ใจว่าผู้ใช้กำลังปั่นจักรยานเสือภูเขาหรือวิ่งอยู่ ในกรณีเช่นนี้ ความเร็ว สูงสุด ในบางครั้งอาจช่วยแยกความแตกต่างระหว่างกิจกรรมทั้งสองประเภท โดยเฉพาะอย่างยิ่ง เราสามารถใช้ข้อเท็จจริงที่ว่านักวิ่งแทบจะไม่ได้ความเร็วมากกว่าสองเท่าของค่าเฉลี่ย ในขณะที่นักปั่นจักรยานทำเป็นประจำ (เช่น ขณะลงเนินบนเส้นทางที่ไม่ท้าทายเกินไป)

ดังนั้น แทร็กที่มีความเร็วเฉลี่ย 12 กม. และความเร็วสูงสุด 18 กม. อาจถูกบันทึกขณะวิ่ง ในขณะที่แทร็กที่มีความเร็วเฉลี่ย 12 กม. และความเร็วสูงสุด 30 กม. อาจถูกบันทึกขณะปั่นจักรยานเสือภูเขา (แน่นอนว่าเราต้องแน่ใจว่าความเร็วสูงสุดที่คำนวณได้นั้นถูกต้อง เพื่อที่จะทำงานได้อย่างน่าเชื่อถือ)

เปอร์เซ็นต์ของท้องฟ้าที่มองเห็นได้: พร็อกซีที่ชาญฉลาดสำหรับการตรวจจับข้อผิดพลาดของ GPS

ความแม่นยำของการวัด GPS แต่ละครั้ง (เช่น ละติจูด ลองจิจูด และระดับความสูง) ขึ้นอยู่กับจำนวนดาวเทียมที่มองเห็นได้ในขณะที่ทำการบันทึกเป็นอย่างมาก ดังนั้น หากเราสามารถระบุได้ว่า "อยู่ในมุมมอง" ดาวเทียมกี่ดวงในขณะที่บันทึกแต่ละครั้ง เราอาจใช้วิธีนั้นในการประมาณความแม่นยำของการบันทึกนั้น ตัวอย่างเช่น หากเราทราบ เช่น ว่าดาวเทียม GPS ที่จำเป็นทั้งหมดอยู่ในมุมมอง เราอาจถือว่าข้อมูล GPS ที่เกี่ยวข้องมีความแม่นยำในระดับสูง ในทางกลับกัน ถ้าเรารู้ว่าไม่มีดาวเทียม GPS อยู่ในสายตา เราอาจถือว่าข้อมูลนั้นมีแนวโน้มที่จะผิดพลาดได้

แต่ก่อนที่คุณจะตื่นเต้นเกินไป ให้พิจารณาความซับซ้อนของการพยายามแก้ปัญหา GIS ดังกล่าว ก่อนอื่น คุณจะต้องรู้ว่าระบบดาวเทียม GPS ใดที่อุปกรณ์ของคุณสามารถสื่อสารได้ มีระบบกำหนดตำแหน่งบนพื้นโลกดั้งเดิมในสหรัฐอเมริกา, European Gallileo และระบบ Russian GLONASS อุปกรณ์บางอย่างใช้งานได้กับดาวเทียมประเภทนี้ทั้งหมด แต่หลายเครื่องไม่สามารถใช้งานได้ และอุปกรณ์จำนวนมากไม่ได้รายงานว่าใช้ระบบใด

แต่มีวิธีที่ชาญฉลาดในการหลีกเลี่ยงความซับซ้อนนี้และได้ค่าประมาณคร่าวๆ ของจำนวนดาวเทียมในมุมมอง: ใช้เปอร์เซ็นต์ของท้องฟ้าที่มองเห็นได้เป็นตัวแทนสำหรับจำนวนดาวเทียมที่มองเห็นได้ ท้องฟ้าที่มองเห็นได้น้อยลงหมายความว่า GPS ของเราสามารถ "มองเห็น" (หรือมองเห็นได้) ด้วยดาวเทียมจำนวนน้อยลง แต่เราจะคำนวณเปอร์เซ็นต์ของท้องฟ้าที่มองเห็นได้บนจุดใดๆ บนโลกได้อย่างไร วิธีแก้ปัญหานั้นค่อนข้างง่ายจริงๆ: เราสามารถคำนวณเส้นขอบฟ้ารอบตัวเราได้โดยใช้ข้อมูล SRTM ที่กล่าวถึงก่อนหน้านี้

ตัวอย่างเช่น นี่คือเส้นขอบฟ้าหากคุณอยู่ในหุบเขาด้านล่าง Triglav (ยอดเขาสูงสุดของสโลวีเนีย) ตามที่คำนวณโดยใช้ SRTM:

ภาพเส้นขอบฟ้าของหุบเขาด้านล่าง Triglav สร้างขึ้นโดยใช้รหัส GIS

(สำหรับผู้ที่สนใจ สามารถอ่านโค้ดของฉันเพื่อสร้างภาพนี้ได้ที่นี่)

ภาพนี้โดยทั่วไปสร้างจากชั้นของกราฟระดับความสูงที่เท่ากันเมื่อมองจากจุดศูนย์กลาง ยิ่งพื้นที่สีน้ำเงินเข้มขึ้นเท่าใด ชั้นระดับความสูงก็จะยิ่งไกลออกไป ยิ่งพื้นที่สีน้ำเงินจางลงเท่าใด ชั้นระดับความสูงก็จะยิ่งใกล้ขึ้นเท่านั้น จุดสูงสุดที่วาดแสดงถึงเส้นขอบฟ้า หากดาวเทียม GPS อยู่ใต้เส้นนี้บนท้องฟ้า อุปกรณ์ของเราอาจไม่สามารถมองเห็น (หรือมองเห็นได้) โดยมัน (โปรดทราบว่าถึงแม้ภาพจะวาดเป็นรูปสี่เหลี่ยมผืนผ้าแบนราบ แต่ในความเป็นจริง คุณจะต้องมีความรู้พื้นฐานเกี่ยวกับเรขาคณิตทรงกลมเพื่อคำนวณพื้นที่ใต้เส้นขอบฟ้าอย่างเหมาะสม)

วิธีนี้มีประโยชน์ในสถานการณ์ต่างๆ เช่น การปีนเขา ซึ่งคุณอาจไปจากการอยู่ในหุบเขาลึก (ที่มีการรับสัญญาณ GPS ไม่ดี) ไปจนถึงอยู่บนสันเขา (ด้วยการรับสัญญาณที่ดีกว่ามาก) นี่อาจเป็นตัวบ่งชี้ที่มีประโยชน์ว่าส่วนใดของแทร็กของคุณที่อาจเกิดข้อผิดพลาดได้ง่ายกว่า

สิ่งที่ควรทราบอีกประการหนึ่งคือนี่ไม่ใช่สัญลักษณ์แสดงหัวข้อย่อยสีเงินสำหรับตรวจจับข้อผิดพลาดระดับความสูงของ GPS ประการแรก พื้นที่ส่วนใหญ่ของโลกไม่ได้เป็นภูเขา และถึงแม้จะเป็นพื้นที่ก็ตาม ก็ยังอยู่ในจิตวิทยาของเราที่จะประเมินค่าระดับความสูงที่สูงไป เปอร์เซ็นต์ที่แท้จริงของท้องฟ้าที่มองเห็นได้นั้นมากกว่า 75% ในพื้นที่ส่วนใหญ่ที่มีคนอาศัยอยู่ แต่อย่างไรก็ตาม วิธีนี้มีประโยชน์ในบางสถานการณ์ เช่น การปีนเขาที่ซึ่งคุณอาจไปจากการอยู่ในหุบเขาลึก (ที่มีการรับสัญญาณ GPS ไม่ดี) ไปจนถึงอยู่บนสันเขา (ซึ่งการรับสัญญาณดาวเทียมน่าจะดีกว่ามาก) แม้ว่าวิธีนี้จะไม่ใช่ตัววัดที่สมบูรณ์ถึงจำนวนข้อผิดพลาดของแทร็ก แต่อาจเป็นตัวบ่งชี้ที่มีประโยชน์ว่าส่วนใดของแทร็กของคุณที่อาจเกิดข้อผิดพลาดได้มากกว่าวิธีอื่นๆ

สรุป

เราได้พูดถึงข้อผิดพลาดในการติดตาม GPS ทั่วไปบางประเภทที่คาดหวังได้จากอุปกรณ์ GPS ระดับล่าง เราได้ให้ความเข้าใจเกี่ยวกับสาเหตุของปัญหา ตลอดจนเทคนิคการเขียนโปรแกรม GIS สำหรับการแก้ไข

ในบางกรณี เราสามารถแก้ไขเส้นทางด้วยความมั่นใจในระดับสูง ในกรณีอื่นๆ อย่างน้อย เราสามารถแจ้งเตือนผู้ใช้ถึงบางส่วนของแทร็กที่น่าสงสัยได้ ในกรณีที่เราไม่แน่ใจ มีตัวเลือกให้ผู้ใช้สามารถแก้ไขเส้นทางได้ด้วยตนเอง โดยได้รับความช่วยเหลือจากภาพถ่ายทางอากาศและแผนที่ การคาดเดาความน่าจะเป็นของเราสามารถช่วยเน้นส่วนต่างๆ ของแทร็กที่เราตรวจพบว่ามีโอกาสเกิดข้อผิดพลาดสูงขึ้น

ในหลายกรณี เทคนิคที่เราได้สรุปไว้อาจเป็น "โซลูชัน 80%" ที่น่าพอใจ โดยให้ผู้ใช้อุปกรณ์ GPS ระดับล่างมีการปรับปรุงระดับความเที่ยงตรงของเส้นทาง GPS โดยอัตโนมัติในระดับที่เหมาะสม