GPS 트랙의 고도 프로파일을 얻는 방법은 무엇입니까?


15

GPS로 기록 된 트랙 (모델에 따라 매우 신뢰할 수없는 고도 데이터가 있고 때로는 전혀없는 경우)에 대해 상당히 정확한 고도 프로파일을 얻고 싶습니다.

누구나 가장 쉬운 방법에 대한 힌트가 있습니까? 지금까지 고려하고있는 두 가지 기술은 다음과 같습니다.

  • 은 Using 구글 고도 API를

    이 API는 비교적 사용하기 쉽지만 사용 제한으로 인해 사소하지 않은 몇 가지 단계가 여전히 필요합니다. 요청 당 최대 512 개의 샘플이 반환되며 경로를 따라 포인트 수가 제한됩니다 (URL 길이에 따라).

    gpsbabel 단순화 필터 를 사용하여 트랙을 적절한 수의 포인트로 줄일 수있을 것으로 예상합니다 (고도 데이터의 해상도로 인해 100m 이상에 가까운 지점이 없음). 이 단순화 된 트랙은 길이가 다르기 때문에 원래 경로로 되돌아갑니다.

    또는 이것이 자동화에 적합하지 않은 경우 가장 좋은 방법은 사용자가 맵에서 전송 지점을 수동으로 선택하도록하는 것입니다.

  • SRTM (Shuttle Radar Topography Mission) 데이터를 다운로드하고 로컬로 쿼리를 수행합니다.

    이것은 내가 경험하지 않은 것이므로 이것이 실현 가능한 방법에 대한 제안은 환영합니다. 데이터 세트는 얼마나 큽니까? 어떤 GIS 소프트웨어가 필요하며 적절한 방식으로 스크립트를 작성할 수 있습니까? 나는 고통스럽게 들리는 샘플링 및 보간 알고리즘을 작성하지 않아도됩니다 . 그러한 접근 방식의 가능한 성능은 무엇입니까? (메모리 제한 VPS 웹 서버에서 꽤 빠르게 실행해야합니다 ...)


@MerseyViking의 답변을 http://srtm.csi.cgiar.org/SELECTION/inputCoord.asp 에서 다시 다운로드하여 구체화하는 추가 세부 정보 :

72 x 24 개의 타일이 있으며 각각 약 20mb zip 파일로 72.1mb 16 비트 TIF 파일 (6001x6001 픽셀)로 압축 해제됩니다.

그것은 ~ 120 기가 바이트, 내가 저장할 수있는 것 이상입니다. 압축 상태를 유지하고 대양을 무시하면 10GB로 줄어 들지만 여전히 너무 큽니다. 주문형 데이터를로드하면 필요한 저장 공간이 크게 줄어들지 만 소스 사이트가 느려서 (10kb / s 만 받고) 비현실적입니다.


따라서 실제로 전 세계 범위가 필요합니까?
underdark

아니요, 바다가 필요하지 않으며 SRTM (또는 유사한) 데이터 세트 외부의 영역을 제외하는 것이 좋습니다. 다룰 필요가없는 많은 아프리카, 중국 및 남미 지역이있을 것입니다. 그러나 사전에 무엇인지 알지 못합니다. 따라서 주문형 데이터를 충분히 빨리 얻는 것이 아니라면 더 좋습니다. 로컬로 가져 오거나 모든 쿼리를 타사 (예 : Google)에 아웃소싱하십시오.
Tom

이 트랙은 얼마나 걸립니까? 추적 점과 고도에 어떤 종류의 해상도가 필요합니까?
Simbamangu

트랙은 대부분 달리기와 사이클링에서 발생하므로 5km에서 100km 사이입니다. 일반적인 그라디언트는 5-10 % 미만이므로 SRTM 데이터 세트보다 훨씬 낮은 해상도를 가진 것은 너무 흥미롭지 않을 것이라고 생각합니다 ... 고도 프로파일 표시 외에 높이 / 손실, 최대 / 높이를 계산하고 싶습니다. 최소 고도 등
Tom

답변:


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 데이터 세트 (1km 그리드)는 지구 전체에서 ~ 300MB에 불과합니다. 그렇지 않으면 ASTER GDEM (30m) 및 원본 SRTM (90m) 데이터 세트를 사용할 수 있지만 많은 데이터가 있습니다. (실제 고도 데이터보다 큰 번들로 제공되는 PDF를 제거하여 다운로드 후 ASTER 데이터의 크기를 줄일 수 있습니다.이 작업을 수행하면 아프리카 데이터 세트가 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)

'트랙'은 현재 위도 / 경도, 기타 표준 GPX 데이터 (속도, GPS 고도 등) 및 해당 지점의 고도를 나타내는 '프로필'열이 포함 된 GPS 포인트 표입니다.


4

SRTM 데이터는 특정 지역에서 쉽게 다운로드 할 수 있습니다 . 과거에는 이 사이트 를 사용해 왔습니다. 파일 크기가 크지 않기 때문에이를 지리 참조 된 TIFF로 가져올 수 있습니다. 전 세계를 다운로드하는 데 시간이 걸릴 수 있지만 몇 개의 타일은 꽤 넓은 영역을 다룹니다. 발생할 수있는 문제는 대부분의 세계에서 약 90 미터 인 수평 해상도에 관한 것이며, 수직 오류는 급증 및 누락 된 데이터 영역으로 인해 상당히 클 수 있습니다.

ASTER GDEM 데이터 세트는 ~ 30m 수평 해상도에서 가장 최근의 고해상도 조사이지만 품질은 종종 해당 SRTM 데이터보다 낮습니다.

Google 고도 데이터의 해상도를 모르지만 SRTM을 기반으로 한 경우 놀라지 않을 것이므로 Google API를 사용하면 로컬 프로세스를 사용하는 것과 비슷한 결과를 얻을 수 있습니다.

@underdark의 답변에 이어 간단한 웹 기반 시스템이라면 GRASS GIS 가 아마도 길입니다. 나는 약간의 성공으로 간단한 intervisibility plot을 수행하기 위해 r.profile 을 사용 했지만 어떤 보간 방법을 사용하는지 잘 모르겠습니다. 아마도 가장 가까운 이웃 일 것입니다. 편집 : 상기 찾고 소스 코드 , r.profile당신은 몇 계단 스테핑 유물을 얻을 수 있도록, 이웃 가장 가까운 사용한다.

또 다른 옵션은 GDALNumPy를 사용하여 Python 스크립트를 작성하는 것입니다. 조금 더 작업이 가능하지만 멋진 사용자 정의 솔루션을 만들 수 있습니다.


3

먼저 어떤 종류의 수평 / 수직 정밀도를 만족해야하는지 지정해야합니다.

그러나 실용적인 관점에서 이것을 보자.

  • 각 SRTM3 타일에는 1200x1200 개의 셀이 있으며 각 셀은 높이를 미터 단위로 나타내는 2 바이트 정수 값입니다. 압축되지 않은 원시 데이터는 약 2.75MB 입니다.
  • 14042 SRTM3 타일이 있습니다. 그게 cca입니다. 38GB 의 원시 데이터
  • 당신은 정말로 전 세계를 커버해야합니까? 사하라, 고비 사막 또는 시베리아의 한가운데에 GPS 트랙의 고도 프로파일을 표시하는 데 관심이 많지 않으므로 현금으로 묶을 경우 경제적으로 적용 할 수 없습니다 (BTW : SRTM3은 다루지 않습니다) 전 세계 이므로 그린란드 및 남극 대륙과 같은 장소에 대해 걱정할 필요가 없습니다.;)).
  • 영리한 압축 및 데이터 인코딩을 사용하면 데이터 세트 크기를 크게 줄일 수 있습니다. 고도 값은 0 ~ 8848이므로 나머지 두 비트는 사용되지 않습니다. 델타 압축을 통해 고도를 인코딩하여 더 줄일 수 있습니다. 또한 수직 정밀도 (예 : 2m)를 포기하여 각 셀에 대해 하나의 추가 비트를 절약 할 수도 있습니다.
  • 어떤 종류의 GPS 트랙 (걷기, 자전거 타기, 운전 등)에 사용되는지에 따라 데이터베이스 테이블의 디스크 나 행에 파일로 작은 타일 (예 : 0.25x0.25도)에 데이터를 저장해야합니다.
  • 타일에 영리한 메모리 캐시를 사용하면 자주 사용하는 타일을 다시로드 할 필요가 없습니다.
  • 세포에서 표고를 계산하는 것은이 전체 사업의 쉬운 부분입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.