zoukankan      html  css  js  c++  java
  • 将平面图形转换为球体图形的过程 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转换为球面坐标了,我又把他还原回去了,简直晕死

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

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

  • 相关阅读:
    Labshare 生物信息学在线软件集锦
    为什么要给单个细胞测序?
    两行代码解决Android9.0 CLEARTEXT communication not supported: [ConnectionSpec...
    Android 网络框架:Retrofit2一篇就够了(2020-4-23)
    Android通用流行框架大全
    base64图片裁剪空白区域
    常用的几款抓包工具
    Message: 'chromedriver' executable needs to be in PATH
    nginx+lua+redis做访问鉴权
    win10安装markdownpad2打开显示错误this view has crashed!
  • 原文地址:https://www.cnblogs.com/mol1995/p/14923039.html
Copyright © 2011-2022 走看看