osg根据经纬度计算两点之间的距离
时间: 2023-08-31 14:09:53 浏览: 168
在OpenSceneGraph中,可以使用osg::Vec3d类来表示经纬度坐标,然后使用osg::Vec3d::distance方法来计算两点之间的距离。
示例代码如下:
```cpp
#include <osg/Vec3d>
// 计算两个经纬度坐标之间的距离(单位:米)
double calcDistance(const osg::Vec3d& pos1, const osg::Vec3d& pos2)
{
// 将经纬度坐标转换为三维坐标
osg::Vec3d xyz1, xyz2;
osg::EllipsoidModel ellipsoid;
ellipsoid.convertLatLongHeightToXYZ(pos1.y(), pos1.x(), 0.0, xyz1.x(), xyz1.y(), xyz1.z());
ellipsoid.convertLatLongHeightToXYZ(pos2.y(), pos2.x(), 0.0, xyz2.x(), xyz2.y(), xyz2.z());
// 计算两点之间的距离
return osg::Vec3d::distance(xyz1, xyz2);
}
int main()
{
// 经纬度坐标
osg::Vec3d pos1(116.3975, 39.9085, 0.0);
osg::Vec3d pos2(121.4737, 31.2304, 0.0);
// 计算距离
double distance = calcDistance(pos1, pos2);
// 输出结果
std::cout << "Distance: " << distance << " meters" << std::endl;
return 0;
}
```
其中,osg::EllipsoidModel类用于将经纬度坐标转换为三维坐标,可以根据需要选择不同的椭球模型。在本例中,使用默认的WGS84模型。
阅读全文