วิธีการรับโปรไฟล์ความสูงสำหรับติดตามจีพีเอส?


15

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

ใครบ้างมีคำแนะนำในวิธีที่ง่ายที่สุดในการทำเช่นนี้ ทั้งสองเทคนิคที่ฉันกำลังพิจารณาอยู่:

  • ใช้Google Elevation API

    API นี้ค่อนข้างใช้งานง่าย แต่ก็ยังต้องการขั้นตอนเล็กน้อยที่ไม่สำคัญเนื่องจากมีข้อ จำกัด การใช้งาน: ส่งตัวอย่างสูงสุด 512 ตัวอย่างต่อคำขอหนึ่งครั้งและจำนวนคะแนนตามเส้นทางนั้น จำกัด (ตามความยาว URL) เช่นกัน

    ฉันคาดหวังว่าตัวกรอง gpsbabel จะทำให้การกรองง่ายขึ้นเพื่อลดจำนวนแทร็กลงในจำนวนที่เหมาะสม (ไม่มีจุดที่อยู่ใกล้กว่า 100 ม. หรือมากกว่านั้นเนื่องจากความละเอียดของข้อมูลระดับความสูง) แต่ปัญหายังคงเป็นแผนที่ เส้นทางที่เรียบง่ายนี้กลับสู่เส้นทางเดิมเนื่องจากความยาวจะแตกต่างกัน

    หรือหากไม่เหมาะสำหรับระบบอัตโนมัติแนวทางที่ดีที่สุดอาจให้ผู้ใช้เลือกจุดตัดขวางบนแผนที่ด้วยตนเอง

  • การดาวน์โหลดข้อมูลShuttle Radar Topography Mission (SRTM)และทำแบบสอบถามในเครื่อง

    นี่คือสิ่งที่ฉันไม่มีประสบการณ์ดังนั้นคำแนะนำใด ๆ เกี่ยวกับวิธีการต้อนรับที่เป็นไปได้ ชุดข้อมูลมีขนาดเท่าใด ต้องใช้ซอฟต์แวร์ GIS ใดและสามารถเขียนสคริปต์ในลักษณะที่เหมาะสมได้หรือไม่ ฉันไม่ต้องการให้มีการเขียนขั้นตอนวิธีการสุ่มตัวอย่างและการแก้ไขที่เสียงเหมือนความเจ็บปวด ประสิทธิภาพที่เป็นไปได้ของวิธีการดังกล่าวคืออะไร? (ฉันต้องการให้มันค่อนข้างเร็วและรันบนเว็บเซิร์ฟเวอร์ VPS ที่ จำกัด หน่วยความจำ ... )


รายละเอียดเพิ่มเติมเกี่ยวกับการตอบคำถามของ @ MerseyViking ดาวน์โหลดข้อมูลจากhttp://srtm.csi.cgiar.org/SELECTION/inputCoord.asp :

มีไทล์ 72 x 24 แต่ละไฟล์ซิปขนาด 20mb ที่คลายออกเป็นไฟล์ TIF ขนาด 16 บิต 72.1mb (6001x6001 พิกเซล)

นั่นคือ ~ 120 gb ซึ่งมากกว่าที่ฉันสามารถเก็บได้ การปล่อยให้มันบีบอัดและไม่สนใจมหาสมุทรจะลดลงเหลือ 10 กิกะไบต์ซึ่งอาจใหญ่เกินไป การโหลดข้อมูลตามต้องการจะช่วยลดพื้นที่จัดเก็บข้อมูลที่จำเป็นลงอย่างมาก แต่เว็บไซต์ต้นทางช้า (ฉันเพิ่งได้รับ 10kb / s) ทำให้การทำเช่นนั้นไม่ได้ผล


ดังนั้นคุณต้องการความคุ้มครองทั่วโลกจริงเหรอ?
underdark

ไม่ฉันไม่ต้องการมหาสมุทรและมีความสุขกับการยกเว้นพื้นที่นอกชุดข้อมูล SRTM (หรือคล้ายกัน) จะมีกลุ่มก้อนขนาดใหญ่ของแอฟริกาจีนและอเมริกาใต้ที่ไม่จำเป็นต้องได้รับการคุ้มครอง แต่ฉันไม่รู้ว่ามันเป็นอะไรล่วงหน้าดังนั้นหากการรับข้อมูลตามความต้องการนั้นเร็วพอจะดีกว่า มีทุกอย่างในพื้นที่หรือเพียงแค่ outsource การค้นหาทั้งหมดไปยังบุคคลที่สาม (เช่น Google)
Tom

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

แทร็กส่วนใหญ่มาจากการวิ่งและขี่จักรยานดังนั้นระหว่าง 5km กับ 100km การไล่ระดับสีโดยทั่วไปน้อยกว่า 5-10% ดังนั้นฉันคิดว่าอะไรที่มีความละเอียดน้อยกว่าชุดข้อมูล SRTM ก็จะไม่น่าสนใจเกินไป ... นอกเหนือจากการแสดงโปรไฟล์ระดับความสูงฉันยังต้องการคำนวณระดับความสูงที่ได้ / สูญหายสูงสุด / ระดับความสูงต่ำสุด ฯลฯ
ทอม

คำตอบ:


9

สำหรับโซลูชันในพื้นที่ GRASS สามารถเขียนสคริปต์เพื่อทำสิ่งนี้:

# extract raster values at our points
# use cubic convolution for interpolation between DEM locations
v.drape in=my_pts out=pts_srtm_elev type=point rast=srtm_dem method=cubic

ฉันใช้งานเวอร์ชันขยายนี้หนึ่งในเคสการใช้งานของฉันและประสิทธิภาพของ v.drape นั้นไม่มีปัญหาเลย



5

ดูเหมือนว่าคุณต้องการสิ่งนี้เป็นโซลูชั่นทั่วไปเช่นการมีข้อมูลระดับความสูงของโลกที่มีให้คุณสำหรับทุกแทร็กที่คุณต้องการประมวลผลดังนั้นจึงไม่ต้องการเก็บข้อมูล CGIAR ทั้งหมดในเครื่อง gpsvisualizer.com ที่กล่าวถึงข้างต้น (@Llaves) อาจเป็นทางออกที่ดีที่สุดของคุณ

หากคุณไม่ต้องการความละเอียดสูงชุดข้อมูล GTOPO (กริด 1 กม.) จะมีขนาดเพียง ~ 300MB สำหรับดาวเคราะห์ทั้งใบ ไม่เช่นนั้นชุดข้อมูล ASTER GDEM (30m) และ SRTM ดั้งเดิม (90m) จะมีอยู่ แต่เมื่อคุณชี้ให้เห็นข้อมูลจำนวนมาก (ขนาดของข้อมูล ASTER สามารถลดลงได้หลังจากดาวน์โหลดโดยการลบไฟล์ PDF ที่แถมซึ่งมักจะใหญ่กว่าข้อมูลระดับความสูงจริง - ชุดข้อมูลของแอฟริกาลดลง 40% เมื่อฉันทำสิ่งนี้!)

ใน R คุณสามารถแยกโปรไฟล์การยกระดับจากชุดข้อมูลใด ๆ เหล่านี้ได้อย่างรวดเร็ว - แม้ว่าการโหลดแรสเตอร์อาจใช้เวลาส่วนใหญ่ ใช้ฟังก์ชั่น readGPX ที่กำหนดเองขนาดเล็กและ gpsbabel เพื่อประมวลผลข้อมูล GPX:

#Load elevation model and process track:
dem <- raster("E020N40.DEM")
track <- readGPXt("trackfile.gpx")
coordinates(track) <- ~Longitude+Latitude
proj4string(track) <- "+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs"
#Overlay (extract) the elevation data for the track points:
track$profile <- extract(dem, track)
track <- as.data.frame(track)

'track' เป็นตารางคะแนน GPS ที่มี lat / lon, ข้อมูล GPX มาตรฐานอื่น ๆ (ความเร็ว, ระดับความสูงของ gps, ฯลฯ ) และคอลัมน์ 'profile' ซึ่งระบุระดับความสูงที่จุดนั้น


4

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

ชุดข้อมูล ASTER GDEM เป็นการสำรวจความละเอียดที่สูงกว่าล่าสุดที่ความละเอียดแนวนอน ~ 30m แต่คุณภาพมักจะต่ำกว่าข้อมูล SRTM ที่สอดคล้องกัน

ฉันไม่ทราบว่าข้อมูลการยกระดับความละเอียดของ Google อยู่ที่ใด แต่ฉันจะไม่แปลกใจถ้ามันเป็นไปตาม SRTM ดังนั้นการใช้ Google API อาจให้ผลลัพธ์ที่คล้ายกันกับคุณโดยใช้กระบวนการในท้องถิ่น

จากคำตอบของ @underdark หากเป็นระบบบนเว็บที่เรียบง่ายGRASS GISน่าจะเป็นหนทางที่จะไป ฉันใช้r.profileสำหรับการทำแปลงข้อมูลอย่างง่าย ๆ ด้วยความสำเร็จ แต่ฉันไม่แน่ใจว่าใช้วิธีการแก้ไขแบบใด มันอาจเป็นเพียงเพื่อนบ้านที่ใกล้ที่สุด แก้ไข : มองไปที่รหัสที่มา , r.profileไม่ใช้ที่ใกล้ที่สุดเพื่อนบ้านดังนั้นคุณอาจได้รับบางสิ่งประดิษฐ์บันไดก้าว

อีกทางเลือกหนึ่งคือการเขียนสคริปต์ Python โดยใช้GDALและNumPyซึ่งอาจใช้งานได้มากกว่านี้เล็กน้อย แต่จะทำให้เป็นโซลูชันที่กำหนดเองได้ดี


3

ก่อนอื่นคุณควรระบุชนิดของความแม่นยำแนวนอน / แนวตั้งที่คุณพึงพอใจ

แต่ลองดูที่นี่จากมุมมองการปฏิบัติ:

  • แผ่น SRTM3 แต่ละแผ่นมี1200x1200 เซลล์แต่ละเซลล์เป็นค่าจำนวนเต็มสองไบต์ซึ่งแสดงถึงระดับความสูงเป็นเมตร นั่นคือประมาณ2.75 MBของข้อมูลดิบที่ไม่มีการบีบอัด
  • มีแผ่นกระเบื้อง 14042 SRTM3 นั่นคือ cca ข้อมูลดิบ38 GB
  • คุณต้องการที่จะครอบคลุมทั่วทั้งโลกจริง ๆ ? ฉันคิดว่าไม่มีความสนใจในการแสดงโปรไฟล์ระดับความสูงของแทร็ก GPS ในใจกลางทะเลทรายซาฮารา, โกบีหรือไซบีเรียดังนั้นจึงเป็นไปไม่ได้ที่คุณจะคุ้มกันถ้าคุณมีเงินสดรัดกุม (BTW: SRTM3 ไม่ครอบคลุม ทั้งโลกดังนั้นคุณไม่จำเป็นต้องกังวลเกี่ยวกับสถานที่ต่าง ๆ เช่นกรีนแลนด์และแอนตาร์กติกา;))
  • ด้วยการบีบอัดและการเข้ารหัสข้อมูลที่ชาญฉลาดคุณสามารถลดขนาดชุดข้อมูลลงได้อย่างมาก ค่าระดับความสูงอยู่ระหว่าง 0 ถึง 8848 ดังนั้นจึงไม่ใช้สองบิตที่เหลือ คุณสามารถเข้ารหัสระดับความสูงผ่านการบีบอัดเดลต้าเพื่อลดความมันยิ่งขึ้นไปอีก คุณยังสามารถละทิ้งความแม่นยำในแนวตั้งบางส่วน (ไปยังพูด 2m ซึ่งจะช่วยให้คุณเพิ่มบิตหนึ่งบิตสำหรับแต่ละเซลล์
  • ขึ้นอยู่กับชนิดของแทร็ก GPS ที่จะใช้สำหรับ (เดินขี่จักรยานขับรถ ... ) คุณควรเก็บข้อมูลไว้ในแผ่นกระเบื้องขนาดเล็ก (พูด 0.25x0.25 องศา) เป็นไฟล์บนดิสก์หรือแถวในตารางฐานข้อมูล
  • ใช้แคชหน่วยความจำที่ฉลาดสำหรับกระเบื้องเพื่อให้คุณไม่จำเป็นต้องโหลดซ้ำที่ใช้บ่อย
  • การคำนวณระดับความสูงจากเซลล์เป็นส่วนที่ง่ายของธุรกิจทั้งหมดนี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.