我更新了这篇文章,因为如果有人感兴趣,我从来没有回复过=>
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();
});
});
});
});
}
}
这将使用 Cesium World Terrain 获得地图上某个点的高度。这将是 WSG84 点 long/lat 的高度值
然后我将值传递给 GOLang 中的服务器,该服务器使用 this package 来获取给定经度/纬度的 geoID 高度
// 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)
}