首页 / 浏览问题 / 组件GIS / 问题详情
如何获取SceneControl左下角的经纬度坐标和相机高度
54EXP 2019年10月30日

场景中移动鼠标的时候,经纬度坐标和相机高度的值都会实时改变,请问超图组件开发如何直接取到这些值呢?

1个回答

您好,通过scenecontrol.mousemove事件获取到屏幕坐标点,再通过scene.pixeltoglobe获取点
2,432EXP 2019年10月30日

你好,请问使用CoordSysTranslator.Forward()将经纬度转成投影坐标会存在误差吗。下图是我转换后的结果,和真实的投影坐标值存在3米的误差

您好,首先这个是在同一个地理坐标系下的转换用到的,其次保证你的这个点和你桌面上的那个点要一致,结果肯定是正确的。
你好,这是同一个地理坐标系,点也是一致的。唯一有差异的就是场景的视角有点点不同,比如查看三维场景某个管点的经纬度,分别在正视和俯视的角度查看,经纬度就变了
我的需求是移动三维场景中的管点,只改变X和Y,不改变Z,但是发现移动的管点和鼠标点击的位置存在较大偏差
就是我昨天告诉你的那个呀,通过鼠标事件获取屏幕点,再转成场景里面的点呀
我是那样操作的呀,你看上面截图的代码
首先,你说的存在转换坐标的误差,你是在场景里面点的点,你怎么和桌面比较的呀;其次,你移动管点为什么要转换坐标系呢,移动过后直接把经纬度赋值就行了呀
我是这样操作的:生成两个一样的工作空间(只是名称不同,场景中的图层和要素都是一样的),数据集的坐标是投影坐标。然后在桌面端打开工作空间,程序打开另一个工作空间。接着,在程序中将一个点移动另一个指定点(这个点在桌面端可以查看投影坐标),结果操作后,被移动的点和指定点的位置,存在较大偏差。
数据集的坐标系是什么投影坐标系
因为数据集存在的X和Y的值都是投影坐标,是根据投影坐标进行矢量和符号化的,所以将屏幕坐标转成经纬度再转成投影,然后再更新数据集:

recordset3D.SetFieldValue(“X", point3D.X);
recordset3D.SetFieldValue("Y", point3D.Y);
recordset3D.Update();
GCS2000,38度带
首先你要弄清楚一点,那就是我们球是84的球,所以你这个坐标系并不是同一个地理坐标系下的点。所以这个肯定是有误差的。
你那边可以试试做一个wgs84地理坐标系下的投影数据,比如墨卡托投影坐标系的数据就知道了

<!--StartFragment -->

你好,这是我现在移动点的效果,上面的管点是被移动的点,下面是指定点,将上面的井移动到鼠标点击位置(也就是蓝色圈圈的位置)

结果是这样的,指定位置和移动后的位置偏差较大。是坐标系的原因吗,和场景视角有关系吗,因为不改变Z值,只改变X和Y,所以我操作用的是俯视角度

看我上面回复的,就是坐标系的原因
...