osgb PIXEL_SIZE_ON_SCREEN的计算方法

mark下,以后研究
参考连接
OSG中距离转像素公式(PIXEL_SIZE_ON_SCREEN)
OpenGL三维空间中视距与屏幕像素换算公式
论LOD可见距离与可见像素数
分析一块倾斜摄影瓦片的数据

Deviation and size on screen
how to calculate pixel size
想研究下基于像素的lod算法,网上找到的算法都是讲的不够透彻,经过验证,发现基于像素,下级瓦片可以和上级瓦片分辨率一样,本身就是其所占屏幕大小,那每级看到相同分辨率也没错,但每级的物理尺寸是不同的,顶级是比次级的2倍。个人理解,倾斜摄影中每级采用不同的像素大小,而且逐级变大,其目的是呈现非线性变化,顶级显示像素小,次级显示像素大,而且呈曲线变化,越往底层加载,切换越慢,应该是为了平衡加载效率或者优化的目的。找到了一篇文章,讲的很棒:https://jackstins-question-list.readthedocs.io/en/latest/Q202011.html#plodrangelist
计算rangelist算法:d:为直径
r i = d ∗ 2.23 6 i − 1 r_i = d*2.236^{i-1} ri=d2.236i1

基于像素lod的倾斜摄影ranglist参数,引自:https://www.cnblogs.com/lyggqm/p/9186178.html

1
 RangeList 2 {
    0 26.1626
    26.1626 3.40282e+38
  }
  
  14
      RangeList 2 {
0 52.3253 
52.3253 3.40282e+38 
}
      15
      RangeList 2 {
0 104.651 
104.651 3.40282e+38 
}
      
      16 RangeList 2 {
0 209.301 
209.301 3.40282e+38 
}
      
      17
          RangeList 2 {
0 418.602 
418.602 3.40282e+38 
}
      
18
RangeList 2 {
0 496.896 
496.896 3.40282e+38 
}

      19 
      RangeList 2 {
0 500.398 
500.398 3.40282e+38 
}
      
      20
  RangeList 2 {
0 485.923 
485.923 3.40282e+38 
}
  
      21
          RangeList 2 {
0 486.847 
486.847 3.40282e+38 
}
  

对于基于像素的lod,像素大小,每级像素osgb倾斜摄影顶级和次级都不同,而且逐级增大,貌似每级相同也是可以的:
引自:https://blog.csdn.net/chunyexiyu/article/details/108570342

当相机距离物体越近时,越向下驱动显示层次;
不过可以看到,例子中后几个块可见像素是一致的,这样不会有问题吗?—这样设置也是没有问题的,可见像素一致,但是块是增加很多的,整体60个像素可见,下层合在一起是120*120,单一方向上表达的是120像素可见,已经是增加一倍了。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您可以使用 Proj4 库来进行 OSGb 坐标系和 WGS84 坐标系之间的转换。具体步骤如下: 1. 安装 Proj4 库,并在代码中引用。 2. 根据 OSGb 坐标系的定义,确定 OSGb 坐标系的投影参数。例如,对于 British National Grid 坐标系,投影参数为: ``` +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs ``` 3. 使用 Proj4 库中的函数将 OSGb 坐标系的坐标转换为 WGS84 坐标系的经纬度。示例代码如下: ```c++ #include <proj.h> // 定义 OSGb 坐标系的投影参数 const char* osgb_proj_params = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +datum=OSGB36 +units=m +no_defs"; // 将 OSGb 坐标系的坐标转换为 WGS84 坐标系的经纬度 void osgb_to_wgs84(double osgb_easting, double osgb_northing, double& wgs84_latitude, double& wgs84_longitude) { // 定义 OSGb 坐标系和 WGS84 坐标系之间的转换器 projPJ osgb_proj = pj_init_plus(osgb_proj_params); projPJ wgs84_proj = pj_latlong; // 定义 OSGb 坐标系的点 projXY osgb_point; osgb_point.u = osgb_easting; osgb_point.v = osgb_northing; // 将 OSGb 坐标系的点转换为 WGS84 坐标系的经纬度 projXY wgs84_point = pj_transform(osgb_proj, wgs84_proj, osgb_point); // 获取 WGS84 坐标系的经纬度 wgs84_latitude = wgs84_point.v * RAD_TO_DEG; wgs84_longitude = wgs84_point.u * RAD_TO_DEG; // 释放转换器 pj_free(osgb_proj); } ``` 其中,`osgb_easting` 和 `osgb_northing` 分别为 OSGb 坐标系中的横坐标和纵坐标,`wgs84_latitude` 和 `wgs84_longitude` 分别为转换后的 WGS84 坐标系中的纬度和经度。由于 Proj4 库中的投影计算使用的是弧度制,因此需要将转换后的经纬度乘以 `RAD_TO_DEG` 转换为度数制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值