首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WGS84到MSL和对面

WGS84到MSL和对面
EN

Stack Overflow用户
提问于 2019-06-27 01:35:42
回答 1查看 1.6K关注 0票数 0

我使用在地图中创建点。然后用无人驾驶飞机飞行。

我有以下问题,

1)用户在二维平面图中将点高度设为20米。( 2)需要在现实世界的位置(长/拉)+ 20米(高度)创建点。( 3)点在三维地图上是可见的,所以在(长/拉)+ 20米(海拔)的位置。

例:

现在,据我所知,铯高度使用的是WSG84,而我的服务器(我无法控制)使用的是MSL。

根据我在互联网上看到的,我需要一个geoID来计算WSG84点和MSL之间的计算。

从GPS椭球高度h中减去插值大地水准面高度N是一种简单的方法,可以得到一个正测量高度或高于平均海平面的高度,H: h=h-N。

例如,我发现了这个库

关于这些程序=>,我有三个问题

我说的每句话都是对的吗?我走的路线对吗? 2)在这个应用程序中,有一种飞行跟踪模式,用户可以跟踪无人机的飞行,但坐标来自MSL的服务器,我每隔100 is就更新一次,通过所有这些额外的计算,这部分会不会成为一个问题? 2)铯当然不是100%的精确性,而且我也相信,我使用的geoID (日本地区)可能也不会那么精确。预期的平均误差是多少?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-29 02:32:10

我更新这篇文章是因为我从来没有回复过是否有人对=>感兴趣

代码语言:javascript
复制
import { Injectable, NgZone } from '@angular/core';
import { Cartographic } from 'src/app/shared/models/navigation.models';
import { Observable } from 'rxjs';

@Injectable({
  providedIn: 'root'
})
export class AltimeterService {
  terrainProvider = new Cesium.createWorldTerrain();

  constructor(private ngZone: NgZone) { }

  getElevation(pos: Cartographic): Observable<number> {
    return new Observable<number>(observer => {
      this.ngZone.run(() => {
        const promise = Cesium.sampleTerrainMostDetailed(this.terrainProvider, [new Cesium.Cartographic(pos.longitude, pos.latitude, 0)]);
        Cesium.when(promise, (updatedPositions) => {
          this.ngZone.run(() => {
            observer.next(updatedPositions[0].height);
            observer.complete();
          });
        });
      });
    });
  }

  getElevations(pos: Array<Cartographic>): Observable<Array<number>> {
    return new Observable<Array<number>>(observer => {
      this.ngZone.run(() => {
        const copy = new Array<Cartographic>();
        pos.forEach((p) => copy.push(new Cesium.Cartographic(p.longitude, p.latitude, 0)));

        const promise = Cesium.sampleTerrainMostDetailed(this.terrainProvider, copy);
        Cesium.when(promise, (updatedPositions) => {
          this.ngZone.run(() => {
            const elevations = new Array<number>();
            updatedPositions.forEach((p) => elevations.push(p.height));
            observer.next(elevations);
            observer.complete();
          });
        });
      });
    });
  }
}

这将获得一个点的高度在地图上使用铯世界地形。这将是长/拉特点高度的WSG84值。

然后,我将值传递给GOLang中的服务器,该服务器使用这个包裹获取给定的long/ lat的geoID高度。

代码语言:javascript
复制
// ConvertGPSElevationToMSL convert gps to msl elevation
// use geolocation package by garrettsickles to get the undulation or geoid from lat and lon
func ConvertGPSElevationToMSL(gpsElevation float32, lat, lon float64) float32 {
    return gpsElevation - getGeoID(lat, lon) // geoid - gps elevation
}

// ConvertMSLToGPSElevation convert msl to gps elevation
// use geolocation package by garrettsickles to get the undulation or geoid from lat and lon
func ConvertMSLToGPSElevation(msl float32, lat, lon float64) float32 {
    return getGeoID(lat, lon) + msl // should be geoID - the msl (mean sea level)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56782818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档