如何获取倾斜摄影模型上的高程

0 投票
使用函数 CacheProcessor3D.GeometryMatch,但是高程提取出来是 0。

代码片段如下:

string scpPath =“D:\\Data\\123.scp”;
List<Geometry> p2ds = new List<Geometry>();
p2ds.Add((new GeoPoint(e.X, e.Y)));
GeoPoint3D p3d = CacheProcessor3D.GeometryMatch(scpPath, p2ds, 0.01)[0] as GeoPoint3D;
7月 13, 2020 分类:  857次浏览 | 用户: hs1234 初出茅庐 (26 分)

2 个回答

0 投票
p2ds.Add((new GeoPoint(e.X, e.Y)));这句代码是传入的鼠标点的位置信息吗?

传入的二维点坐标应该是实际坐标,如果这里的e是鼠标位置,需要先进行转换,
Scene.PixelToGlobe先用这个方法将屏幕坐标转换为地理坐标,再去构建二维点坐标数据,再去查询高程
7月 13, 2020 用户: 程逸诗 名扬四海 (4,283 分)
这个位置是鼠标点在倾斜摄影模型上获得的,设断点调试得到结果为 x=520890.75603091, y=4324387.87209082,与工程实际坐标位置相符。这个 e 是Tracking3DEventArgs。
那你倾斜摄影数据是什么坐标系的,是投影的还是地理的,如果是地理坐标系,那你就需要将你的点投影转换到对应的坐标系下,才能进行获取高度,CoordSysTranslator.Inverse
倾斜摄影是投影坐标系,采用的平面场景。鼠标直接过去的XY从数量级上看起来应该是没错。但是对于倾斜摄影模型上的一个点,当我旋转模型从不同角度观察时,得到的位置会相差好多,几十甚至一百米,这一问题在超图9D2019桌面端也存在。在桌面端,只有采用“查询定位”功能时,才可以获取准确定位,通过直接把鼠标放到某一位置获取的坐标完全不能用。
但是对于倾斜摄影模型上的一个点,当我旋转模型从不同角度观察时,得到的位置会相差好多,几十甚至一百米?这个你是怎么去获取的坐标点?
就是加载完倾斜摄影后,把鼠标直接放在模型上的一个点上,下面的状态栏就会直接显示坐标。当我转了一下或平移一下模型后,再把鼠标放到那个点上,状态栏上的坐标就会相差很多。
这两个用的是不一样的接口,下面的状态栏显示的经纬度是鼠标直接获取对应位置的经纬度,没有考虑模型或者地形,上面菜单栏“查询坐标”是考虑了地形和模型高度的,所以获取出来的是不一样的,如果你需要提取高度,用的是“查询坐标”查询出来的坐标,
嗯,不过我目前关心的是CacheProcessor3D.GeometryMatch函数。我想通过它获取倾斜摄影上的准确坐标,但是一直转换不成功。
你将你的点写入到点数据集中,然后再idesktop中用桌面写好的功能去实现,看是否能够提取成功
这个很奇怪,我的倾斜摄影是平面工程坐标系,按照您说得,我将坐标点其写入二维点数据集,然后在倾斜摄影上提取高程,最后的到的新数据集却成了地理经纬度坐标,高程也是错的。另外我尝试了一下超图自带的那个倾斜摄影模型MaSai,这个模型本身就是地理坐标系,提取的高程就是正确的。
0 投票
9月 5, 2020 用户: hs1234 初出茅庐 (26 分)
...