# 2. 详论

## 2.1. 位置

SRS就是空间坐标参考的意思，ENU表示是东北天站心坐标系，站心点的经纬度坐标为(108.9594, 34.2196)。这个站心点对应的应该是倾斜摄影模型的中心点，那么思路就很简单了，只需要平移旋转这个倾斜摄影模型，使模型的中心点对应于站心点。这其实是个地心坐标系于站心坐标系转换的问题:

```std::string filePath = "D:/Data/scene/Dayanta/Data.osgb";

osg::ref_ptr<osgEarth::GeoTransform> xform = new osgEarth::GeoTransform();
xform->setTerrain(mapNode->getTerrain());
osgEarth::GeoPoint point(map->getSRS(), 108.9594, 34.2196, -410);                 //使用绝对高，正高
xform->setPosition(point);

osg::ref_ptr<osgEarth::ModelLayer> modelLayer = new osgEarth::ModelLayer("oblic", xform);

## 2.2. 着色

`osgEarth::Registry::shaderGenerator().run(node);`

# 3. 结果

```#include <Windows.h>
#include <iostream>
#include <string>

#include <osgViewer/Viewer>

#include <osgEarth/MapNode>

#include <osgEarthDrivers/gdal/GDALOptions>
#include <osgEarthDrivers/cache_filesystem/FileSystemCache>
#include <osgEarth/ImageLayer>
#include <osgEarth/Viewpoint>
#include <osgEarth/GeoTransform>
#include <osgEarth/ModelLayer>
#include <osgEarth/Registry>

#include <osgEarthUtil/EarthManipulator>

#include <gdal_priv.h>

using namespace std;

{
//
std::string filePath = "D:/Data/scene/Dayanta/Data.osgb";

osg::ref_ptr<osgEarth::GeoTransform> xform = new osgEarth::GeoTransform();
xform->setTerrain(mapNode->getTerrain());
osgEarth::GeoPoint point(map->getSRS(), 108.9594, 34.2196, -410);                 //使用绝对高，正高
xform->setPosition(point);

osg::ref_ptr<osgEarth::ModelLayer> modelLayer = new osgEarth::ModelLayer("oblic", xform);

}

int main()
{
CPLSetConfigOption("GDAL_DATA", "D:/Work/OSGNewBuild/OpenSceneGraph-3.6.4/3rdParty/x64/gdal-data");

//string wktString = "EPSG:3857";			//web墨卡托投影
//string wktString = "EPSG:4326";			//wgs84
osgEarth::ProfileOptions profileOpts;

//osgEarth::Bounds bs(535139, 3365107, 545139, 3375107);
//osgEarth::Bounds bs(73, 3, 135, 53);
//profileOpts.bounds() = bs;

//地图配置：设置缓存目录
osgEarth::Drivers::FileSystemCacheOptions cacheOpts;
string cacheDir =  "D:/Work/OSGNewBuild/tmp";
cacheOpts.rootPath() = cacheDir;

//
osgEarth::MapOptions mapOpts;
mapOpts.cache() = cacheOpts;
//mapOpts.coordSysType() = osgEarth::MapOptions::CSTYPE_PROJECTED;

mapOpts.profile() = profileOpts;

//创建地图节点
osg::ref_ptr<osgEarth::Map> map = new osgEarth::Map(mapOpts);
osg::ref_ptr<osgEarth::MapNode> mapNode = new osgEarth::MapNode(map);

osgEarth::Drivers::GDALOptions gdal;
//gdal.url() = "D:/Work/OSGNewBuild/osgearth-2.10.1/data/world.tif";
//gdal.url() = "D:/Work/SinianGIS/bin/Resource/BlueMarbleNASA.jpg";
gdal.url() = "D:/Work/SinianGIS/bin/Resource/baseMap.jpg";
osg::ref_ptr<osgEarth::ImageLayer> imgLayer = new osgEarth::ImageLayer("BlueMarble", gdal);

osgViewer::Viewer viewer;
viewer.getCamera()->setClearColor(osg::Vec4(0, 0, 0, 0));
viewer.setSceneData(mapNode);

osg::ref_ptr< osgEarth::Util::EarthManipulator> mainManipulator = new osgEarth::Util::EarthManipulator;
viewer.setCameraManipulator(mainManipulator);

osgEarth::Viewpoint vp;
osgEarth::GeoPoint newPoint(map->getSRS(), 108.9594, 34.2196, 0);
vp.focalPoint() = newPoint;
vp.pitch() = -90;
vp.range() = 1000;
mainManipulator->setViewpoint(vp);

viewer.setUpViewInWindow(100, 100, 800, 600);

return viewer.run();
}```

# 4. 参考

1. GNSS学习笔记-坐标转换

0 条评论

• ### osgEarth使用笔记1——显示一个数字地球

osgEarth支持.earth格式的文件，里面保存了数字地球相关信息的配置XML，只需要读取这个配置文件，就可以直接得到相应的数字地球相关效果。但实际使用中还...

• ### osgEarth使用笔记4——加载矢量数据

前面文章加载的底图数据是一种栅格数据，还有一种很重要的地理信息表现形式是矢量数据。在osgEarth中，这部分包含的内容还是很丰富的，这里就总结一二。

• ### WebGL简易教程(十四)：阴影

所谓阴影，就是物体在光照下向背光处投下影子的现象，使用阴影技术能提升图形渲染的真实感。实现阴影的思路很简单:

• ### osgEarth使用笔记1——显示一个数字地球

osgEarth支持.earth格式的文件，里面保存了数字地球相关信息的配置XML，只需要读取这个配置文件，就可以直接得到相应的数字地球相关效果。但实际使用中还...

• ### java中的Checked Exceptions和Unchecked Exceptions

在java世界中有两种异常，一种Checked Exceptions ，另一种叫Unchecked Exceptions. 1) Checked Except...

• ### 公司网站被百度网址安全中心 警告 该怎么取消拦截

今天早晨一上班，习惯性的打开我们公司的网站，发现公司网站竟然跳转到了赌博、彩票网站上去了，我还奇了怪了，于是去百度搜索我们公司网站，发现网站在百度搜索出现：“百...

• ### 使用Kustomize定制Helm Chart

如果你经常使用 Kubernetes，那么应该对 Helm 和 Kustomize 不陌生，这两个工具都是用来管理 Kubernetes 资源清单的，但是二者有...

• ### 使用 Kustomize 定制 Helm Chart

如果你经常使用 Kubernetes，那么应该对 Helm 和 Kustomize 不陌生，这两个工具都是用来管理 Kubernetes 资源清单的，但是二者有...

• ### 2019年CCF-腾讯犀牛鸟基金项目课题介绍（二）——计算机视觉及模式识别

? CCF-腾讯犀牛鸟基金由腾讯与中国计算机学会联合发起，旨在为全球范围内最具创新力的青年学者搭建产学研合作及学术交流的平台，提供了解产业真实问题，接触业务实...

• ### Sweetest框架学习

https://github.com/tonglei100/sweetest.git