• 将平面图形转换为球体图形的过程 transformAndLocalize


    看视频教程第17讲,其中将world.shp平面图形显示成了球体图形,很是振奋,自己尝试的的过程却是一波三折。

    问题出在transformAndLocalize方法上,老师的版本的2.1,函数只要三个参数:原始点集、投影坐标系,结果点集,就能把原始点集转为球体图形。osgEarth::ECEF::transformAndLocalize(part->asVector(),srs, allPoints);

    但在2.9版本中,此方法需要4个参数,坐标系参数从1个坐标系变成2个坐标系,一开始我不知道开始或结束坐标系怎么设,也不会获取,就直接认为把老版本的一个坐标系同样写在输入和输出坐标系中,但是出来的图形却仍是平面的。

    于是,我没有仔细分析原因,就认为肯定是我坐标系参数传入不对,可怎样才能获得原始坐标系呢,查百度、Bing、Google对这个方法都介绍很少。

    后来看帮助文档,发现可以通过getSRS()方法获得坐标系,但用谁来调用这个getSRS()方法呢,结合源代码,第一行是源代码中的,我写了第二行也取出了每个feature的SRS,算是一个小小进步吧。

    const osgEarth::SpatialReference* srs = features->getFeatureProfile()->getSRS();

    const osgEarth::SpatialReference* srsw = feature->getSRS();

    但是,把这两个参数带入transformAndLocalize方法后,出来的结果仍是平面的,仔细debug发现srs 和srsw 是一模一样的,都是PROJ4,WGS84.

    终于明白,其实问题不在坐标系上,老版本只用一个坐标系其实足够了,新版本弄两个坐标系几乎没有必要,问题出在下面的代码上,视频中注释掉了下面这句,我没注意,这句一直留着。

    allPoints = part->createVec3Array();//获得shp中的原始顶点

    也就是transformAndLocalize明明已经将allPoints转换为球面坐标了,我又把他还原回去了,简直晕死

    把这句注释掉,球体图形立即出来了。

    看来不都是技术问题,仔细也是关键啊!

  • 相关阅读:
    angluar项目里用ant.design组件库做排序功能,可以接口排序,可以组件库做
    echarts箱线图例子分析
    echarts的盒须图问题自问自答自己改造例子
    把数组改成echarts中dataset所需的二维数组
    echarts的markline个性化
    echarts使用dataset实现双y轴效果
    echarts散点图例子scatter-weight折腾记之echarts参数修改
    echarts灵活利用dataset生成多个散点图的例子
    echarts用dataset实现之散点图例子Basic Scatter Chart
    随机字符串生成指定范围内的某个数值
  • 原文地址:https://www.cnblogs.com/mol1995/p/14923039.html
Copyright © 2020-2023  润新知