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转换为球面坐标了,我又把他还原回去了,简直晕死

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

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

  • 相关阅读:
    深度学习(机器学习)tensorflow环境配置及安装
    深度学习(机器学习)tensorflow学习第一课——tensor数据载体中的基本数据类型
    学生选课小项目——麻雀虽小,五脏俱全(Templates)
    素数定理简史
    关于全栈岗位及其成员轮岗问题的思考
    Spring WebFlux 简单业务代码及其Swagger文档
    Spring 5 中函数式webmvc开发中的swagger文档
    创建基于kotlin开发环境的spring项目入门
    折射定律的来历简介
    朴素贝叶斯方法入门
  • 原文地址:https://www.cnblogs.com/mol1995/p/14923039.html
Copyright © 2011-2022 走看看