在UWP MapControl中将点投影到3D地形表面上

问题描述 投票:1回答:1

我正在使用UWP Map控件(MapControl)创建Windows桌面应用程序,并基于this blog post着墨。

我掌握了基本知识。可以在画布上绘制墨水并将其转换为地图位置,但是我无法将这些点正确投影到地图3D曲面上。

我正在使用mapControl。GetLocationFromOffset将控制空间偏移量转换为地图位置,但是无论我使用什么AltitudeReferenceSystem,这些点都是在3D网格上方或下方偏移。我基本上是在尝试模拟内置Windows Maps应用程序中的上墨方式。但是由于在绘制每个笔划后会有一个停顿,所以我认为它正在对3D网格进行射线投射。纬度/经度是正确的,但高度有偏移。

Geopoint GeopointFromPoint(Point point)
{
   Geopoint geoPoint = null;
   this.map.GetLocationFromOffset(point, AltitudeReferenceSystem.Geoid, out geoPoint); // Tried all alt ref systems here
   return (geoPoint);
}
...
BasicGeoposition curP;
foreach (var segment in firstStroke.GetRenderingSegments())
{
   curP = GeopointFromPoint(segment.Position).Position;
   geoPoints.Add(curP);
}
...

这是我在地图应用程序中确定正确海拔的草丛中的墨迹:

enter image description here

和使用地图控件+ GetLocationFromOffset的同一区域,蓝色墨水是显示高度偏移的注释:

enter image description here

如何在UWP Map控件中将屏幕/控件空间坐标投影到3D网格上并获得正确的高度?

编辑:答案是我是个白痴,一直在距离地球中心几米的地方思考,即我以为海拔是地图位置海平面以上的高度,但事实并非如此,地图上方的点高度。因此,只需将高度设置为零即可。

c# uwp geolocation geospatial uwp-maps
1个回答
0
投票

答案是我是个白痴,一直在距地心几米的地方思考,即我以为海拔是地图位置海平面以上的高度,但不是,它是地图上方的点海拔。因此,只需将高度设置为零即可。

© www.soinside.com 2019 - 2024. All rights reserved.