osg根据经纬度计算两点之间的距离
时间: 2023-08-31 17:09:53 浏览: 44
在OSG中,可以使用osg::Vec3d类来表示一个点的经纬度坐标,并使用osg::Vec3d::distance方法来计算两点之间的距离。
示例代码:
```cpp
#include <osg/Vec3d>
// 计算两点之间的距离
double calcDistance(osg::Vec3d p1, osg::Vec3d p2)
{
double lat1 = osg::DegreesToRadians(p1.x());
double lon1 = osg::DegreesToRadians(p1.y());
double lat2 = osg::DegreesToRadians(p2.x());
double lon2 = osg::DegreesToRadians(p2.y());
double dlat = lat2 - lat1;
double dlon = lon2 - lon1;
double a = sin(dlat/2) * sin(dlat/2) + cos(lat1) * cos(lat2) * sin(dlon/2) * sin(dlon/2);
double c = 2 * atan2(sqrt(a), sqrt(1-a));
double distance = 6371000 * c; // 6371000为地球半径,单位为米
return distance;
}
int main()
{
osg::Vec3d p1(31.2304, 121.4737, 0); // 上海市经纬度
osg::Vec3d p2(39.9042, 116.4074, 0); // 北京市经纬度
double distance = calcDistance(p1, p2);
std::cout << "Distance between Shanghai and Beijing: " << distance << " meters" << std::endl;
return 0;
}
```
输出结果:
```
Distance between Shanghai and Beijing: 1068168 meters
```
注意,这里的经纬度都是以度为单位的,需要使用osg::DegreesToRadians方法将其转换为弧度。另外,计算过程中使用的地球半径是一个近似值,实际上地球的赤道半径和极半径略有不同。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)