├── AboutOsgEarth.md ├── BuildingOsgEarth.md ├── DeveloperTopics.md ├── DeveloperTopics ├── CoordinateSystems.md ├── ShaderComposition.md ├── UtilitiesSDK.md └── WorkingwithMaps.md ├── README.md ├── ReferenceGuides.md ├── ReferenceGuides ├── ColorFilterReference.md ├── DriverReference.md ├── DriverReference │ ├── CacheDrivers.md │ ├── CacheDrivers │ │ ├── FileSystemCache.md │ │ └── LevelDBCache.md │ ├── EffectsDrivers.md │ ├── EffectsDrivers │ │ ├── GLSky.md │ │ ├── SilverLiningSky.md │ │ └── SimpleSky.md │ ├── FeatureDrivers.md │ ├── FeatureDrivers │ │ ├── MapnikVectorTiles.md │ │ ├── OGR.md │ │ ├── TFS.md │ │ └── WFS.md │ ├── ModelSourceDrivers.md │ ├── ModelSourceDrivers │ │ ├── FeatureGeometry.md │ │ └── SimpleModel.md │ ├── TerrainEngineDrivers.md │ ├── TerrainEngineDrivers │ │ └── MP.md │ ├── TileSourceDrivers.md │ └── TileSourceDrivers │ │ ├── AGGLiteRasterizer.md │ │ ├── ArcGISServer.md │ │ ├── CesiumIon.md │ │ ├── ColorRamp.md │ │ ├── DebugDisplay.md │ │ ├── GDAL.md │ │ ├── MBTiles.md │ │ ├── Noise.md │ │ ├── OSG.md │ │ ├── QuadKey.md │ │ ├── TMS.md │ │ ├── TileCache.md │ │ ├── VPB.md │ │ ├── WCS.md │ │ ├── WMS.md │ │ ├── WorldWindTileService.md │ │ └── XYZ.md ├── EarthFileReference.md ├── EnvironmentVariables.md └── SymbologyReference.md ├── UserGuide.md ├── UserGuide ├── Caching.md ├── FeaturesandSymbology.md ├── SpatialReferences.md ├── Tools.md └── UsingEarthFiles.md ├── WorkingwithData.md ├── tests.md ├── tests ├── annotation_dateline.md ├── annotation_dateline_projected.md └── layer_opacity.md ├── toc.md └── vcpkg.md /AboutOsgEarth.md: -------------------------------------------------------------------------------- 1 | 2 | # 关于 osgEarth 3 | 4 | ## 介绍(Introduction) 5 | osgEarth是一个用于OSG应用程序的地理空间SDK和地形引擎。 6 | 7 | osgEarth的任务是: 8 | - 支持在OSG上开发三维地理空间程序。 9 | - 使得地形模型及直接从源数据中获得的影像的可视化变得容易。 10 | - 与开放映射标准、技术和数据的交互操作。 11 | 12 | **它是否适合我呢?** 13 | 14 | 那么,osgEarth是否替代了离线地形数据库创建工具? 15 | 16 | 在很多情况下是这样的。 17 | 18 | osgEarth可以满足你的这些需求: 19 | - 获得一个地形基础地图并且快速简便地运行它 20 | - 访问开放标准地图数据服务,如WMS或TMS 21 | - 将本地存储的数据与基于网络服务的影像进行整合 22 | - 在运行时合并新的地理空间数据图层 23 | - 处理可能随时间变化的数据 24 | - 与商业数据厂家进行整合 25 | 26 | 27 | ## 社会资源(Community Resources) 28 | 由于osgEarth是一个免费开源SDK,任何人都可以获取源代码,同时我们欢迎并鼓励大家参与到测试、添加特性和修复BUG中。 29 | 30 | ### 公共论坛(Public Forum) 31 | 与osgEarth团队和用户进行交互的第一种方式是通过提供支持的论坛。 32 | **请阅读**并遵守这些使用论坛的指南。 33 | 遵循这些指南可以便于得到其他人的回应与帮助: 34 | - 用你的真实姓名注册一个账号。你可以匿名注册,但使用真实姓名更便于你进行社交。也要在你的帖子上签名! 35 | - 每篇帖子仅限*一个主题*。在一篇帖子中询问多个问题难以对回应进行持续追踪。 36 | - 尽可能多地提供支持信息。 37 | 发布*地球文件*(earth file)或*短代码片段*(short code snippet)。 38 | 将输出发布到`osgearth_version --caps`。 39 | 如果你在GeoTIFF或其它数据文件中遇到困难,将输出发布到`gdalinfo`。 40 | 列出到目前为止你尝试过的所有东西。 41 | - 要有耐心! 42 | 43 | ### 优先服务(Priority Support) 44 | 如果你有一些问题,或需要更深入的帮助,包括代码审查、设计等, 45 | 请考虑直接从Pelican Mapping(osgEarth的维护者)购买优先服务。优先服务为您提供基于电子邮件的跟踪、及时、个性化的帮助! 46 | 47 | ### OSG论坛(OSG Forum) 48 | 由于osgEarth是基于OSG的,我们留言板上的许多问题都是关于OSG的。 49 | 我们仍将尽力提供帮助。但是,也可以加入OSG邮件列表或定期阅读OSG论坛。 50 | 51 | ### 社交媒体(Social Media) 52 | - 在Twitter上关注@pelicanmapping以获取更新。 53 | - 将我们的Google+Page添加到您的圈子中以获取素材库。 54 | 55 | ### 专业业的服务(Professional Services) 56 | 57 | osgEarth团队通过专业的服务来对其成果进行维护。 58 | 在Pelican Mapping,我们进行涉及osgEarth(以及一般地理空间技术)的定制软件开发和集成工作。 59 | 我们的总部设在美国,但与世界各地的客户合作。 60 | 如果您需要帮助,请联系我们! 61 | 62 | ## 授权(License) 63 | osgEarth根据LGPL免费开源许可证授权。 64 | 65 | 这意味着: 66 | 67 | 1. 您可以在任何商业或非商业应用程序中免费链接到osgEarth SDK。 68 | 69 | 2. 如果您对osgEarth*本身*进行了任何更改, 70 | 必须根据LGPL许可证将这些更改作为免费的开源软件提供。 71 | (通常这意味着将您的更改反馈给项目,但在公共GitHub克隆中托管它们就足够了。) 72 | 73 | 3. 如果以任何形式重新分发osgEarth*源代码*, 74 | 必须包含未经更改且完整的相关版权声明和许可证信息。 75 | 76 | 4. iOS/*静态链接异常*(static linking exception):LGPL要求在LGPL下发布与LGPL库(如osgEarth)静态链接的任何内容。 77 | 在这种情况下,我们给LGPL一个例外。 78 | 如果您静态地将osgEarth与您的专有代码链接在一起,则不需要在LGPL下发布您自己的代码。 79 | 80 | ## 维护者(Maintainers) 81 | 82 | Pelican Mapping维护osgEarth。 83 | -------------------------------------------------------------------------------- /BuildingOsgEarth.md: -------------------------------------------------------------------------------- 1 | 2 | # 建立osgEarth (Building osgEarth) 3 | osgEarth是一个跨平台的库,使用CMake构建系统。您需要2.8或更高版本。(与OSG使用的构建系统相同。) 4 | 5 | **平台特性指引** 6 | - [使用vcpkg构建适用于Windows的osgEarth](.\vcpkg.md) 7 | - [构使用于iOS的osgEarth(和OSG)](.\ios.md) 8 | 9 | ## 获取源代码 (Get the Source Code) 10 | ### 选项1:使用GIT 11 | osgEarth托管在GitHub上,你需要一个git客户端来访问它。我们向Windows用户推荐TortoiseGit。 12 | 13 | 使用客户端来复制存储器: 14 | http://github.com/gwaldron/osgearth.git 15 | 16 | ### 选项2:下载标记的版本 17 | 要下载源代码的tarball或ZIP文件,请访问osgEarth标签并选择所需的文件。官方的最新发布在顶部。 18 | 19 | ## 获取依赖项(Get the Dependencies) 20 | **必需的依赖项** 21 | - OpenSceneGraph 3.4或更高版本 22 | - GDAL 2.0或更高版本——地理空间数据抽象层 23 | - CURL——HTTP传输库(OpenSceneGraph第三方库发行版附带) 24 | 25 | **推荐的预构建依赖项** 26 | - AlphaPixel为各种架构预先构建了OSG和第三方依赖关系。 27 | - 针对各种体系结构的预构建GDAL二进制文件。 28 | - 使用vcpkg安装所需的依赖项。 29 | 30 | **可选的依赖项:** osgEarth将在没有它们的情况下编译。看看并决定你需要什么: 31 | * GEOS 3.2.0或更高版本——用于拓扑操作的C++库。osgEarth使用GEOS执行各种几何操作,如缓冲和交叉。如果您打算在osgEarth中使用矢量要素数据,您可能需要这样做。 32 | * SQLite——自包含,无服务器,零配置,事务性SQL数据库引擎。用于访问sqlite/mbtiles数据集。您可能需要这些提示来从Windows二进制文件中包含的.def和.dll文件创建必要的.lib文件:http://eli.thegreenplace.net/2009/09/23/compiling-sqlite-on-windows 33 | * QT_ 5.4或更高版本——跨平台UI框架。用于构建osgEarth的Qt支持库,这对于构建我们osgEarth的Qt应用程序很有用(尽管不是必需的)。将`QT_QMAKE_EXECUTABLE CMake`变量指向要使用的`qmake.exe`,CMake将填充所有其他QT变量。 34 | 35 | ## 建立(Build it) 36 | 确保首先构建OSG和所有依赖项。 37 | 38 | osgEarth使用CMake,2.8或更高版本。由于OSG也使用CMake,因此若构建过OSG,该过程应该是熟悉的。 39 | 40 | 这里有一些提示。 41 | - 始终使用CMake进行“源外”(out-of-source)构建。也就是使用与源代码分开的构建目录。这样可以更轻松地维护单独的版本并保持GIT更新整洁。 42 | - 对于可选的依赖项(如GEOS),如果不使用它,只需将CMake字段留空。 43 | - 对于OSG依赖项,只需输入OSG_DIR变量,生成CMake时将自动查找所有其他OSG目录。 44 | - 与往常一样,如果遇到问题,请查看论坛! 45 | 46 | 祝你好运! 47 | -------------------------------------------------------------------------------- /DeveloperTopics.md: -------------------------------------------------------------------------------- 1 | # 开发者主题 2 | * [使用地图](./DeveloperTopics/WorkingwithMaps.md) 3 | * [从地球文件中载入地图](./DeveloperTopics/WorkingwithMaps.md#从地球文件中载入地图) 4 | * [程序化创建地图](./DeveloperTopics/WorkingwithMaps.md#程序化创建地图) 5 | * [在运行时使用地图节点(MapNode)](./DeveloperTopics/WorkingwithMaps.md#在运行时使用地图节点(MapNode)) 6 | * [使用图层](./DeveloperTopics/WorkingwithMaps.md#使用图层) 7 | * [使用SDK](./DeveloperTopics/UtilitiesSDK.md) 8 | * [数据扫描装置DataScanner](./DeveloperTopics/UtilitiesSDK.md#数据扫描装置DataScanner) 9 | * [细节纹理DetailTexture](./DeveloperTopics/UtilitiesSDK.md#细节纹理DetailTexture) 10 | * [对数深度缓冲区LogarithmicDepthBuffer](./DeveloperTopics/UtilitiesSDK.md#对数深度缓冲区LogarithmicDepthBuffer) 11 | * [格式器Formatters](./DeveloperTopics/UtilitiesSDK.md#格式器Formatters) 12 | * [鼠标坐标工具MouseCoordsTool](./DeveloperTopics/UtilitiesSDK.md#鼠标坐标工具MouseCoordsTool) 13 | * [着色器组成](./DeveloperTopics/ShaderComposition.md) 14 | * [框架基础](./DeveloperTopics/ShaderComposition.md#框架基础) 15 | * [虚拟程序VirtualProgram](./DeveloperTopics/ShaderComposition.md#虚拟程序VirtualProgram) 16 | * [着色器封装ShaderPackages](./DeveloperTopics/ShaderComposition.md#着色器封装ShaderPackages) 17 | * [特定于osgEarth的概念](./DeveloperTopics/ShaderComposition.md#特定于osgEarth的概念) 18 | * [坐标系统](./DeveloperTopics/CoordinateSystems.md) 19 | * [OpenSceneGraph/OpenGL坐标空间](./DeveloperTopics/CoordinateSystems.md#OpenSceneGraph//OpenGL坐标空间) 20 | -------------------------------------------------------------------------------- /DeveloperTopics/CoordinateSystems.md: -------------------------------------------------------------------------------- 1 | # 坐标系统 2 | OpenGL、OSG和osgEarth中使用了几种不同的坐标系统和参考体系,有时会很困惑哪个是哪个。 3 | 4 | ## OpenSceneGraph/OpenGL坐标空间 5 | 这里对OpenGL和OSG中使用的各种坐标系统有一个简要的说明。如果需要更多详细的说明(附图),可以直接阅读有关该主题的优秀教程: 6 | [OpenGL转换](http://www.songho.ca/opengl/gl_transform.html) 7 | 8 | ### 模型坐标(Model Coordinates) 9 | 模型(或对象)空间指的是几何体(如地形贴片、飞机模型等)的实际坐标。在OSG中,模型坐标可能是绝对的或者它们可能经过一个OSG`Transform`转换。 10 | 11 | 我们经常使用两种类型的模型坐标:*世界(world)*和*本地(Local)*。 12 | 13 | *世界坐标*表示为绝对位置,它们没有经过转换。*本地坐标*经过了转换而相对于某些参考点(在世界坐标中)。 14 | 15 | 为什么使用本地坐标?因为OpenGL硬件只能为顶点位置处理32位的数值,但是在一些如osgEarth的系统中,我们需要使用大数值来表示位置,无法在不超出32位精度限制的情况下完成。解决方法就是使用本地坐标。OSG使用一个双精度`MatrixTransform`来创建一个本地原点(0,0,0),然后我们可以相对于它表示我们的数据。 16 | 17 | ### 视图坐标(View Coordinates) 18 | 视图空间(有时称为相机或眼空间)表示了几何体相对于相机本身的位置。相机位于原点(0,0,0),坐标轴是: 19 | ```XML 20 | +X : Right 21 | +Y : Up 22 | -Z : Forward (direction the camera is looking) 23 | ``` 24 | 在osgEarth中,视图空间在顶点着色器(vertex shaders)中使用得很多——它们在限制于32位精度的GPU上操作,视图空间在相机处有一个本地原点。 25 | 26 | ### 裁剪坐标(Clip Coordinates) 27 | *裁剪坐标*是在应用视景体(view volume,也称相机视锥体(camera frustum))后所得到的。视锥体确定了的视点所能看到的范围,得到的坐标在这个系统中: 28 | ```XML 29 | +X : Right 30 | +Y : Up 31 | +Z : Forward 32 | ``` 33 | 裁剪空间使用四维齐次坐标,数值范围包含相机视锥体,可表示为: 34 | ```XML 35 | X : [-w..w] (-w = left, +w = right) 36 | Y : [-w..w] (-w = bottom, +w = top) 37 | Z : [-w..w] (-w = near, +w = far) 38 | W : perspective divisor 39 | ``` 40 | 注意,表示深度的Z值是非线性的,靠近近平面的精度要高得多。 41 | 42 | 当你需要在场景中采样或操纵深度信息时,着色器中的裁剪空间非常有用。 43 | -------------------------------------------------------------------------------- /DeveloperTopics/ShaderComposition.md: -------------------------------------------------------------------------------- 1 | # 着色器组成 2 | osgEarth其几种渲染模式中使用GLSL着色器。默认情况下,osgEarth将监测你的图形硬件性能来自动选择适当的模式来使用。 3 | 4 | 由于osgEarth依赖于着色器,你作为一个开发者可能会希望自定义或者在GLSL肿添加自己的效果和特征。任何使用着色器的人都遇到了相同的问题: 5 | * 着色器程序是整天的,添加新的着色器代码需要复制、修改或替换已存在的代码以免丢失其功能。 6 | * 使更改的内容与原始代码着色器的更改保持同步是一项维护噩梦。 7 | * 维护着色器main()的多个版本是麻烦且复杂的。 8 | * 随着GLSL代码库的复杂性增加并且添加了更多功能,维护可怕的“超级着色器”变得难以管理。 9 | 着色器组合通过*模块化*着色器管线解决了这些问题。您可以在程序中的任何位置添加和删除功能,而无需复制,粘贴或黑客攻击其他人的GLSL代码。 10 | 11 | 接下来我们将讨论osgEarth的着色器组合框架的结构。 12 | 13 | ## 框架基础 14 | 着色器组成框架自动提供main()函数,你不需要把它们写出来,只需写出模块函数并且告诉框架什么时候、在哪儿执行它们。 15 | 16 | 接下来你将看到osgEath创建的main()函数,`LOCATION_*`指示符允许你在着色器执行管线上各点处插入函数。 17 | 18 | 这是osgEarth内置着色器main的伪代码: 19 | ```C++ 20 | // VERTEX SHADER: 21 | 22 | void main(void) 23 | { 24 | vec4 vertex = gl_Vertex; 25 | 26 | // "LOCATION_VERTEX_MODEL" user functions are called here: 27 | model_func_1(vertex); 28 | model_func_2(vertex); 29 | ... 30 | 31 | vertex = gl_ModelViewMatrix * vertex; 32 | 33 | // "LOCATION_VERTEX_VIEW" user functions are called here: 34 | view_func_1(vertex); 35 | ... 36 | 37 | vertex = gl_ProjectionMatrix * vertex; 38 | 39 | // "LOCATION_VERTEX_CLIP" user functions are called last: 40 | clip_func_1(vertex); 41 | ... 42 | 43 | gl_Position = vertex; 44 | } 45 | 46 | 47 | // FRAGMENT SHADER: 48 | 49 | void main(void) 50 | { 51 | vec4 color = gl_Color; 52 | ... 53 | 54 | // "LOCATION_FRAGMENT_COLORING" user functions are called here: 55 | coloring_func_1(color); 56 | ... 57 | 58 | // "LOCATION_FRAGMENT_LIGHTING" user functions are called here: 59 | lighting_func_1(color); 60 | ... 61 | 62 | gl_FragColor = color; 63 | } 64 | ``` 65 | 如你所示,我们已决定了对大部分应用程序有意义的函数插入点,这不是说它们在所有情况下都是最好的,而是我们认为这种方法使框架便于使用并且不会太“低级”。 66 | 67 | *重要:*着色器组成框架这时仅支持VERTEX(顶点)和FRAGMENT(碎片)着色器,目前并不支持GEOMETRY(几何体)或者TESSELLATION(曲面细分)着色器,我们计划在以后添加他们。 68 | 69 | ## 虚拟程序VirtualProgram 70 | osgEarth引入了一种名为`VirtalProgram`的新的OSG状态属性来执行运行时的着色器组成。由于`VirtualProgram`是一种`osg::StateAttribute`,你可以将其添加到场景图形中的任一节点。属于`VirtualProgram`的着色器可以覆盖场景图形中较高的着色器。用这种方法你可以添加、合并以及覆盖osgEarth中独立的着色器函数。 71 | 72 | 在运行时,一个`VirtualProgram`将查看当前状态并组装一个完整的`osg::Program`,它使用内置的main()并调用通过`VirtualProgram`插入的所有函数。 73 | 74 | ### 添加函数 75 | 从生成的main函数中不难发现osgEarth调用了用户函数,它们并不存在于osgEarth生成的默认着色器中,而是代表你作为开发者可以“插入”着色器管线各个位置的代码。 76 | 77 | 例如,让我们使用用户函数来创建一个简单的“模糊”效果: 78 | ```C++ 79 | // haze_vertex: 80 | out vec3 v_pos; 81 | void setup_haze(inout vec4 vertexView) 82 | { 83 | v_pos = vertexView.xyz; 84 | } 85 | 86 | // haze_fragment: 87 | in vec3 v_pos; 88 | void apply_haze(inout vec4 color) 89 | { 90 | float dist = clamp( length(v_pos)/10000000.0, 0, 0.75 ); 91 | color = mix(color, vec4(0.5, 0.5, 0.5, 1.0), dist); 92 | } 93 | 94 | // C++: 95 | VirtualProgram* vp = VirtualProgram::getOrCreate( stateSet ); 96 | 97 | vp->setFunction( "setup_haze", haze_vertex, ShaderComp::LOCATION_VERTEX_VIEW); 98 | vp->setFunction( "apply_haze", haze_fragment, ShaderComp::LOCATION_FRAGMENT_LIGHTING); 99 | ``` 100 | 在这个例子中,`setup_haze`函数在内置顶点函数后被内置顶点着色器main()函数调用,`apply_haze`函数在内置碎片函数之后被核心碎片着色器main()函数调用。 101 | 102 | 以下是六个插入点: 103 | 104 | |位置|着色器类型|说明| 105 | |----|---------|---| 106 | |ShaderComp::LOCATION_VERTEX_MODEL|VERTEX|void func(inout vec4 vertex)| 107 | |ShaderComp::LOCATION_VERTEX_VIEW|VERTEX|void func(inout vec4 vertex)| 108 | |ShaderComp::LOCATION_VERTEX_CLIP|VERTEX|void func(inout vec4 vertex)| 109 | |ShaderComp::LOCATION_FRAGMENT_COLORING|FRAGMENT|void func(inout vec4 color)| 110 | |ShaderComp::LOCATION_FRAGMENT_LIGHTING|FRAGMENT|void func(inout vec4 color)| 111 | |ShaderComp::LOCATION_FRAGMENT_OUTPUT|FRAGMENT|void func(inout vec4 color| 112 | 113 | 每个顶点位置都允许你在指定坐标空间中对顶点进行操作。你可以更改顶点,但是必须将其置于同一空间中。 114 | 115 | **模型(MODEL):** 顶点是几何体中得到的原始未转换数值。 116 | 117 | **视图(VIEW):** 顶点与视点相关,位于原点(0,0,0)并指向-Z轴。在视图空间,原始顶点已经过`gl_ModelViewMatrix`转换。 118 | 119 | **剪裁(CLIP):** 投影后的裁剪空间。裁剪空间位于三个坐标轴的[-W,W]范围内,是原始视点经`gl_ModelViewProjectionMatrix`转换的结果。 120 | 121 | 以下是碎片位置: 122 | 123 | **着色(COLORING):** 这里的函数在应用光照前解析碎片颜色时被调用。纹理或颜色调整通常在这一阶段进行。 124 | 125 | **光照(LIGHTING):** 这里的函数影响着应用于碎片颜色的光照,通常是如太阳光照、凹凸投影或发现投影等进行的地方。 126 | 127 | **输出(OUTPUT):** 这里是设置gl_FragColor的地方。默认情况下,内置碎片main()函数将为你设置,但是你可以设置一个输出着色器来进行替代。通常做这个的原因是实现MRT渲染(参考osgearth_mrt示例)、 128 | 129 | ## 着色器封装ShaderPackages 130 | 前面我们给你展示了如何使用`VirtualProgram`来插入函数,着色器组成框架还提供了`ShaderPackage`的概念支持更多的着色器管理方法。我们现在来介绍它们。 131 | 132 | ### 虚拟程序元数据(VirtualProgram Metadata) 133 | 如刚才所见,当你使用`VirtualProgram`往管线中添加一个着色器函数时你需要告诉osgEarth要调用的GLSL函数的名字,以及管线中所调用的位置,如: 134 | ```C++ 135 | VirtualProgram* vp; 136 | .... 137 | vp->setFunction( "color_it_red", shaderSource, ShaderComp::LOCATION_FRAGMENT_COLORING ); 138 | ``` 139 | 这是有效的,但是如果函数名或者插入位置变化了,你需要用`setFunction()`参数使GLSL代码保持同步。 140 | 141 | 一次性指定这些更加便捷,`ShaderPackage`帮你来做这个。这是一个例子: 142 | ```C++ 143 | #version 110 144 | 145 | #pragma vp_entryPoint color_it_red 146 | #pragma vp_location fragment_coloring 147 | #pragma vp_order 1.0 148 | 149 | void color_it_red(inout vec4 color) 150 | { 151 | color.r = 1.0; 152 | } 153 | ``` 154 | 这时你不用调用`VirtualProgram::setFunction()`,只需要创建一个`ShaderPackage`,添加你的代码并且在`VirtualProgram`中载入创建函数: 155 | ```C++ 156 | ShaderPackage package; 157 | package.add( shaderFileName, shaderSource ); 158 | package.load( virtualProgram, shaderFileName ); 159 | ``` 160 | 它用到了“文件名”因为着色器可以再外部文件中,但不是必需的。继续阅读更多细节。 161 | 162 | `vp_location`的数值基于代码的数值,如下所示: 163 | ```C++ 164 | vertex_model 165 | vertex_view 166 | vertex_clip 167 | fragment_coloring 168 | fragment_lighting 169 | fragment_output 170 | ``` 171 | 172 | ### 外部GLSL文件 173 | `ShaderPackage`允许您从文件或字符串加载GLSL代码。如上所示调用`add`方法时会告诉封装(a)首先按该名称查找文件并从该文件加载;(b)如果文件不存在,请使用源字符串中的代码。 174 | 175 | 那么让我们来看看这个例子: 176 | ```C++ 177 | ShaderPackage package; 178 | package.add( "myshader.frag.glsl", backupSourceCode ); 179 | ... 180 | package.load( virtualProgram, "myshader.frag.glsl" ); 181 | ``` 182 | 该封装将尝试从GLSL文件加载着色器,它将在`OSG_FILE_PATH`中搜索它。如果找不到该文件,它将从与封装中的着色器关联的备份源代码加载着色器。 183 | 184 | osgEarth在内部使用这种技术来“内联”其着色器代码,这使您可以选择使用您的应用程序部署GLSL文件或保持它们内联——不管怎样应用程序仍将运行。 185 | 186 | ## 包含文件(Include Files) 187 | 188 | `ShaderPackage`支持包含文件的概念。您的GLSL代码可以通过引用其文件名包含同一封装中的任何其他着色器。使用自定义`#pragma`包含另一个文件: 189 | ```C++ 190 | #pragma include myCode.vertex.glsl 191 | ``` 192 | 就像在C++中一样,include将直接内联加载其他文件(或源代码)。因此,您所包含的文件必须结构化,就好像您已将其放在包含文件中一样。(例如这意味着它不能拥有自己的`#version`字符串。) 193 | 194 | 同样:包含者和被包含者必须使用相同的`ShaderPackage`注册。 195 | 196 | ## 特定于osgEarth的概念 197 | 尽管虚拟程序框架包含在osgEarth SDK中,但它实际上与地图渲染无关。在本节中,我们将介绍osgEarth使用着色器组合执行的一些操作。 198 | 199 | ### 地形变量 200 | osgEarth地形引擎使用了一些内置的着色器`uniforms`和`variables`,开发人员可以使用这些变量。 201 | 202 | *重要提示:以前缀“oe_”或“osgearth_”开头的着色器变量保留给osgEarth内部使用。* 203 | 204 | Uniforms: 205 | 206 | **oe_tile_key:** (vec4)元素0-2保存x,y和LOD(细节级别)贴片键值; 元素3保存贴片的边界球半径(以米为单位) 207 | 208 | **oe_layer_tex:** (sampler2D)纹理应用于当前贴片的当前图层 209 | 210 | **oe_layer_texc:** (vec4)当前贴片的纹理坐标 211 | 212 | **oe_layer_tilec:** (vec4)当前贴片的单位坐标(x和y中0..1) 213 | 214 | **oe_layer_uid:** (int)活动图层的唯一ID 215 | 216 | **oe_layer_order:** (int)渲染活动图层的顺序 217 | 218 | **oe_layer_opacity:** (浮点)活动层的不透明度[0..1] 219 | 220 | 221 | 顶点属性: 222 | 223 | **oe_terrain_attr:** (vec4)元素0-2保存地形顶点的单位高度向量,元素3保存原始地形高程值 224 | 225 | **oe_terrain_attr2:** (vec4)元素0保存父贴片的高程值; 元素1-3目前尚未使用。 226 | 227 | ### 共享影像图层 228 | 有时你想要同时访问多个影像图层,如,你可能有一个表示陆地或水源的掩蔽层(masking layer),您可能实际上不想绘制此图层,但您希望使用它来调整另一个可见图层。 229 | 230 | 您可以使用共享影像图层执行此操作,在`Map`中,将影像图层标记为共享(使用ImageLayerOptions::shared()),渲染器将使其可用于辅助采样器中的所有其他图层。 231 | 232 | 有关用法示例,请参阅`osgearth_sharedlayer.cpp`! 233 | -------------------------------------------------------------------------------- /DeveloperTopics/UtilitiesSDK.md: -------------------------------------------------------------------------------- 1 | # 使用SDK 2 | osgEarth *Utils*命名空间包含多种多样有用的类来与地图进行交互。这些都不是osgEarth所必需的,但是它们确实使执行一些常见操作变得容易。 3 | 4 | ## 数据扫描装置DataScanner 5 | `DataScanner`对本地文件系统的目录进行递归搜索来寻找可以加载`ImageLayer`对象的文件,是加载影像图层完整目录快速又简单的方法。 6 | 7 | **注意** 只有*MP地形引擎(MP Terrain Engine)*支持无线数量的影像图层,所以最好将这个引擎与DataScanner一同使用。 8 | 9 | 像这样使用DataScanner: 10 | ```C++ 11 | DataScanner scanner; 12 | ImageLayerVector imageLayers; 13 | scanner.findImageLayers( rootFolder, extensions, imageLayers ); 14 | ``` 15 | 接下来捏可以在`Map`对象在添加影像图层。 16 | 17 | `extensions`参数允许您按拓展名筛选文件。例如,输入“tif,ecw”仅关注这些拓展名的文件,用逗号分隔多个拓展名。 18 | 19 | ## 细节纹理DetailTexture 20 | `DetailTexture`是一种地形控制器,在地形中应用一种非地理纹理。这是一种可以用来生成“噪声”得到低分辨率地形显示的传统方法: 21 | ```C++ 22 | DetailTexture* detail = new DetailTexture(); 23 | detail->setImage( osgDB::readImageFile("mytexture.jpg") ); 24 | detail->setIntensity( 0.5f ); 25 | detail->setImageUnit( 4 ); 26 | mapnode->getTerrainEngine()->addEffect( detail ); 27 | ``` 28 | 试试这个例子,放大到接近地形来查看效果: 29 | ```C++ 30 | osgearth_detailtex readymap.earth 31 | ``` 32 | ## 对数深度缓冲区Logarithmic Depth Buffer 33 | 在全地球应用程序中,您通常希望近距离观察某些物体(如高空飞行器),同时在远处看到地球及其地平线。这给现代图形硬件带来了问题,因为标准深度缓冲精度非常有利于靠近相机的物体,并且观看这样大范围的目标会导致“深度冲突(z-fighting)”问题。 34 | 35 | `LogarithmicDepthBuffer`是解决此问题的一种方法,它使用着色器重新投影GPU的深度缓冲区数值,以便在此类场景中更好地使用它们。 36 | 37 | 它设置起来很简单: 38 | ```C++ 39 | LogarithmicDepthBuffer logdepth; 40 | logdepth->install( view->getCamera() ); 41 | ``` 42 | 你也可以从`osgearth_viewer`或其它例子中启动它: 43 | ```C++ 44 | osgearth_viewer --logdepth ... 45 | ``` 46 | 由于它确实会在绘制时改变几何体的投影空间坐标,因此需要注意,在自定义着色器中的剪辑空间中没有做任何与此冲突的其它事。 47 | 48 | (2014年7月10日:一些osgEarth功能与日志深度缓冲区不兼容,即GPU置入和阴影。虽然深度偏差(Depth Offset)很正常。) 49 | 50 | ## 格式器Formatters 51 | 使用*Formatters*将地理空间坐标格式化为字符串。有两种格式器`LatLongFormatter`和`MGRSFormatter`。格式器使用一个`GeoPoint`并返回一个`std::string`,如下所示: 52 | ```C++ 53 | LatLongFormatter formatter; 54 | GeoPoint point; 55 | .... 56 | std::string = formatter.format( point ); 57 | ``` 58 | ### 经纬度格式器(LatLongFormatter) 59 | `LatLongFormatter`将坐标转换为一个字符串。它支持以下格式: 60 | 61 | **FORMAT_DECIMAL_DEGREES:** 62 | 63 | 34.04582 64 | 65 | **FORMAT_DEGREES_DECIMAL_MINUTES:** 66 | 67 | 34.20:30 68 | 69 | **FORMAT_DEGREES_MINUTES_SECONDS:** 70 | 71 | 34:14:30 72 | 73 | 您还可以为输出字符串指定选项: 74 | 75 | **USE_SYMBOLS:** 使用度分秒符号 76 | 77 | **USE_COLONS:** 在各部分间使用冒号 78 | 79 | **USE_SPACES:** 在各部分间使用空格 80 | 81 | ### 军事网格参考系统格式器(MGRSFormatter) 82 | `MGRSFormatter`根据[军事网格参考系统](https://en.wikipedia.org/wiki/Military_Grid_Reference_System)构造字符串。从技术上讲,MGRS坐标表示一个区域而不是一个精确的点,因此必须指定一个精度限定符来控制所表示区域的大小。例如: 83 | ```C++ 84 | MGRSFormatter mgrs( MGRFormatter::PRECISION_1000M ); 85 | std::string str = mgrs.format( geopoint ); 86 | ``` 87 | ## 鼠标坐标工具MouseCoordsTool 88 | `MouseCoordsTool`记录鼠标下的地图坐标(或其它指向设备),设置一个回调来响应记录。`MouseCoordsTool`是一个`osgGA::GUIEventHandler`,可以在一个`Viewer`或任意`Node`中设置,如: 89 | ```C++ 90 | MouseCoordsTool* tool = new MouseCoordsTool(); 91 | tool->addCallback( new MyCallback() ); 92 | viewer.addEventHandler( tool ); 93 | ``` 94 | 创建自己的回调来响应记录。这是一个在Qt状态栏显示鼠标下X,Y例子: 95 | ```C++ 96 | struct PrintCoordsToStatusBar : public MouseCoordsTool::Callback 97 | { 98 | public: 99 | PrintCoordsToStatusBar(QStatusBar* sb) : _sb(sb) { } 100 | 101 | void set(const GeoPoint& p, osg::View* view, MapNode* mapNode) 102 | { 103 | std::string str = osgEarth::Stringify() << p.y() << ", " << p.x(); 104 | _sb->showMessage( QString(str.c_str()) ); 105 | } 106 | 107 | void reset(osg::View* view, MapNode* mapNode) 108 | { 109 | _sb->showMessage( QString("out of range") ); 110 | } 111 | 112 | QStatusBar* _sb; 113 | }; 114 | ``` 115 | 为方便起见,`MouseCoordsTool`还附带了一个回调函数,可以将坐标显示到`osgEarthUtil::Controls::LabelControl`。您甚至可以将`LabelControl`传递给构造函数,以使其更容易。 116 | 117 | 118 | -------------------------------------------------------------------------------- /DeveloperTopics/WorkingwithMaps.md: -------------------------------------------------------------------------------- 1 | # 使用地图 2 | **地图**是osgEarth的中心数据模型,是影像、高程和特征图层的存储器。 3 | ## 从地球文件中载入地图 4 | 渲染一张地图最简单的方法是从一个地球文件(earth file)中载入。由于osgEarth使用OpenSceneGraph插件,你可以使用这行代码: 5 | ```C++ 6 | osg::Node* globe = osgDB::readNodeFile("myglobe.earth"); 7 | ``` 8 | 现在你有一个可以添加到场景图形中显示的`osg::Node`,这真的很简单。 9 | 10 | 这种载入地图的方法通常是一个应用程序需要做的所有事情,如果你想使用API创建地图,请往下读。 11 | 12 | ## 程序化创建地图 13 | osgEarth提供一个在运行时创建地图的API。 14 | 15 | 使用API创建一幅地图的基本步骤有: 16 | 17 | 1. 创建一个地图对象 18 | 19 | 2. 根据你的需要在地图中添加影像和高程图层 20 | 21 | 3. 创建一个`MapNode`(地图节点)来渲染地图对象 22 | 23 | 4. 在场景图形中添加你的`MapNode` 24 | 25 | 你可以随时在地图中添加图层: 26 | ```C++ 27 | using namespace osgEarth; 28 | using namespace osgEarth::Drivers; 29 | 30 | #include 31 | #include 32 | #include 33 | #include 34 | 35 | using namespace osgEarth; 36 | using namespace osgEarth::Drivers; 37 | ... 38 | 39 | // Create a Map and set it to Geocentric to display a globe 40 | // 创建一幅地图并将其设置为以地球为中心来显示一个球形 41 | Map* map = new Map(); 42 | 43 | // Add an imagery layer (blue marble from a TMS source) 44 | // 添加一个影像图层(TMS源中的蓝色纹理) 45 | { 46 | TMSOptions tms; 47 | tms.url() = "http://labs.metacarta.com/wms-c/Basic.py/1.0.0/satellite/"; 48 | ImageLayer* layer = new ImageLayer( "NASA", tms ); 49 | map->addImageLayer( layer ); 50 | } 51 | 52 | // Add an elevationlayer (SRTM from a local GeoTiff file) 53 | // 添加高程图层(本地GeoTiff文件中的SRTM) 54 | { 55 | GDALOptions gdal; 56 | gdal.url() = "c:/data/srtm.tif"; 57 | ElevationLayer* layer = new ElevationLayer( "SRTM", gdal ); 58 | map->addElevationLayer( layer ); 59 | } 60 | 61 | // Create a MapNode to render this map: 62 | //创建一个地图节点来渲染这个地图 63 | MapNode* mapNode = new MapNode( map ); 64 | ... 65 | 66 | viewer->setSceneData( mapNode ); 67 | 68 | ``` 69 | ## 在运行时使用地图节点(MapNode) 70 | `MapNode`是用来渲染`Map`的场景图形节点。不论你是从地球文件中载入地图或是使用API创建,你都可以在运行时得到地图以及它的`MapNode`来做一些改变。如果你没有准确地使用API来创建`MapNode`,你首先需要对`MapNode`进行引用才能使用。使用静态函数`get`: 71 | ```C++ 72 | // Load the map 73 | // 载入地图 74 | osg::Node* loadedModel = osgDB::readNodeFile("mymap.earth"); 75 | 76 | // Find the MapNode 77 | // 寻找地图节点 78 | osgEarth::MapNode* mapNode = MapNode::get( loadedModel ); 79 | ``` 80 | 一旦对`MapNode`有了一个引用,就可以得到地图: 81 | ```C++ 82 | // Add an OpenStreetMap image source 83 | // 添加一个开放街景影像源 84 | TMSOptions driverOpt; 85 | driverOpt.url() = "http://tile.openstreetmap.org/"; 86 | driverOpt.tmsType() = "google"; 87 | 88 | ImageLayerOptions layerOpt( "OSM", driverOpt ); 89 | layerOpt.profile() = ProfileOptions( "global-mercator" ); 90 | 91 | ImageLayer* osmLayer = new ImageLayer( layerOpt ); 92 | mapNode->getMap()->addImageLayer( osmLayer ); 93 | ``` 94 | 你也可以移除或重新排列图层: 95 | ```C++ 96 | // Remove a layer from the map. All other layers are repositioned accordingly 97 | // 从地图中移除一个图层。其它所有图层将重新定位 98 | mapNode->getMap()->removeImageLayer( layer ); 99 | 100 | // Move a layer to position 1 in the image stack 101 | // 将图层移动到影像堆栈中的位置1 102 | mapNode->getMap()->moveImageLayer( layer, 1 ); 103 | ``` 104 | ## 使用图层 105 | `Map`存储了`ImageLayer`(影像图层)和`ElevationLayer`(高程图层)对象,它们有一些特性可以在运行时进行调整。例如,你可以使用API来开启或关闭一个图层或者调整`ImageLayer`的不透明度: 106 | ```C++ 107 | ImageLayer* layer; 108 | ... 109 | layer->setOpacity( 0.5 ); // makes the layer partially transparent使图层部分透明 110 | ``` 111 | 112 | 113 | 114 | 115 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # osgEarth中文文档 2 | 3 | 4 | -------------------------------------------------------------------------------- /ReferenceGuides.md: -------------------------------------------------------------------------------- 1 | # 参考指南 2 | * [地球文件参考](./ReferenceGuides/EarthFileReference.md) 3 | * [驱动器参考](./ReferenceGuides/DriverReference.md) 4 | * [符号系统参考](./ReferenceGuides/SymbologyReference.md) 5 | * [滤色器参考](./ReferenceGuides/ColorFilterReference.md) 6 | * [环境变量](./ReferenceGuides/EnvironmentVariables.md) 7 | -------------------------------------------------------------------------------- /ReferenceGuides/ColorFilterReference.md: -------------------------------------------------------------------------------- 1 | # 滤色器参考(Color Filter Reference) 2 | *滤色器*是图像图层的内联GLSL处理器。osgEarth地形引擎在GPU上渲染时,通过其图层的滤色器运行每个图像瓦片。您可以将滤色器连接在一起以形成图像处理管道。 3 | 4 | osgEarth附带几个已有过滤器; 您可以通过实现`osgEarth::ColorFilter`接口来创建自己的。 5 | 6 | 这里是如何在一个地球文件中使用滤色器: 7 | ```XML 8 | 9 | 10 | 11 | 12 | 13 | ``` 14 | 已有滤色器: 15 | * [BrightnessContrast](./ColorFilterReference.md#BrightnessContrast) 16 | * [ChromaKey](./ColorFilterReference.md#ChromaKey) 17 | * [CMYK](./ColorFilterReference.md#CMYK) 18 | * [Gamma](./ColorFilterReference.md#Gamma) 19 | * [GLSL](./ColorFilterReference.md#GLSL) 20 | * [HSL](./ColorFilterReference.md#HSL) 21 | * [RGB](./ColorFilterReference.md#RGB) 22 | 23 | ## BrightnessContrast 24 | 这个滤色器调整图像的亮度和对比度: 25 | ```XML 26 | 27 | ``` 28 | `b`和`c`属性是传入值的*百分比*。例如,`c =“1.2”`表示将对比度增加20%。 29 | 30 | ## ChromaKey 31 | 这个过滤器匹配颜色值以将片段透明,提供一种“绿屏”效果: 32 | ```XML 33 | 34 | ``` 35 | 在此示例中,我们找到所有红色像素并将它们变为透明。`distance`属性搜索接近指定颜色的颜色,设置为0仅精确匹配。 36 | 37 | ## CMYK 38 | 这个滤色器可以偏移CMYK(青色,品红色,黄色,黑色)颜色级别: 39 | ```XML 40 | 41 | ``` 42 | 在这里,我们将碎片的“黄度”降低0.1。`c`,`m`,`y`和`k`中的每一个的有效范围是[-1..1]。 43 | 44 | ## Gamma 45 | 这个滤色器执行伽玛校正。您可以为`r`,`g`或`b`中的每一个指定gamma值,也可以将它们全部调整: 46 | ```XML 47 | 48 | ``` 49 | 50 | ## GLSL 51 | GLSL滤波器允许您嵌入自定义GLSL代码,以便您可以以任何方式调整颜色值。只需编写一个GLSL代码块,该代码块对`inout vec4 color`的RGBA颜色变量进行操作: 52 | ```XML 53 | 54 | color.rgb *= pow(color.rgb, 1.0/vec3(1.3)); 55 | 56 | ``` 57 | 此示例与Gamma过滤器完全相同,但直接使用GLSL代码。 58 | 59 | ## HSL 60 | 这个滤色器可以偏移HSL(色调,饱和度,亮度)级别: 61 | ```XML 62 | 63 | ``` 64 | 这个例子增加了一点色彩饱和度并且稍微提亮了片段。对于`h`,`s`和`l`中的每一个,有效范围是[-1..1]。 65 | 66 | ## RGB 67 | 这个滤色器可偏移RGB(红色,绿色,蓝色)色彩级别: 68 | ```XML 69 | 70 | ``` 71 | 此示例添加一点红色并减少蓝色通道。对于`r`,`g`和`b`中的每一个,有效范围是[-1..1]。 72 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference.md: -------------------------------------------------------------------------------- 1 | # 驱动器参考 2 | 这个文档是osgEarth中所有*驱动器*的参考指南,驱动器是实现了osgEarth支持一些外部资源的插件模块。 3 | 4 | * [瓦片源驱动器](./DriverReference/TileSourceDrivers.md) 5 | * [AGGLite Rasterizer](./DriverReference/TileSourceDrivers/AGGLiteRasterizer.md) 6 | * [ArcGIS Server](./DriverReference/TileSourceDrivers/ArcGISServer.md) 7 | * [Cesium Ion](./DriverReference/TileSourceDrivers/CesiumIon.md) 8 | * [Color Ramp](./DriverReference/TileSourceDrivers/ColorRamp.md) 9 | * [Debug Display](./DriverReference/TileSourceDrivers/DebugDisplay.md) 10 | * [GDAL(Geospatial Data Abstraction Library)](./DriverReference/TileSourceDrivers/GDAL.md) 11 | * [MBTiles](./DriverReference/TileSourceDrivers/MBTiles.md) 12 | * [Noise](./DriverReference/TileSourceDrivers/Noise.md) 13 | * [OSG(OpenSceneGraph Loader)](./DriverReference/TileSourceDrivers/OSG.md) 14 | * [QuadKey](./DriverReference/TileSourceDrivers/QuadKey.md) 15 | * [TileCache](./DriverReference/TileSourceDrivers/TileCache.md) 16 | * [WorldWind TileService](./DriverReference/TileSourceDrivers/WorldWindTileService.md) 17 | * [TMS(Tile Map Service)](./DriverReference/TileSourceDrivers/TMS.md) 18 | * [VPB(VirtualPlanerBuilder)](./DriverReference/TileSourceDrivers/VPB.md) 19 | * [WCS(OGC Web Coverage Service)](./DriverReference/TileSourceDrivers/WCS.md) 20 | * [WMS(OGC Web Map Service)](./DriverReference/TileSourceDrivers/WMS.md) 21 | * [XYZ](./DriverReference/TileSourceDrivers/XYZ.md) 22 | * [模型源驱动器](./DriverReference/ModelSourceDrivers.md) 23 | * [特征几何体(Feature Geometry)](./DriverReference/ModelSourceDrivers/FeatureGeometry.md) 24 | * [简单模型(Simple Model)](./DriverReference/ModelSourceDrivers/SimpleModel.md) 25 | * [特征驱动器](./DriverReference/FeatureDrivers.md) 26 | * [OGR](./DriverReference/FeatureDrivers/OGR.md) 27 | * [TFS(Tiled Feature Service)](./DriverReference/FeatureDrivers/TFS.md) 28 | * [WFS(OGC Web Feature Service)](./DriverReference/FeatureDrivers/WFS.md) 29 | * [Mapnik Vector Tiles](./DriverReference/FeatureDrivers/MapnikVectorTiles.md) 30 | * [地形驱动器](./DriverReference/TerrainEngineDrivers.md) 31 | * [MP](./DriverReference/TerrainEngineDrivers/MP.md) 32 | * [效果驱动器](./DriverReference/EffectsDrivers.md) 33 | * [GL Sky](./DriverReference/EffectsDrivers/GLSky.md) 34 | * [Simple Sky](./DriverReference/EffectsDrivers/SimpleSky.md) 35 | * [SilverLining Sky](./DriverReference/EffectsDrivers/SilverLiningSky.md) 36 | * [缓存驱动器](./DriverReference/CacheDrivers.md) 37 | * [FileSystem Cache](./DriverReference/CacheDrivers/FileSystemCache.md) 38 | * [LevelDB Cache](./DriverReference/CacheDrivers/LevelDBCache.md) 39 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/CacheDrivers.md: -------------------------------------------------------------------------------- 1 | # 缓存驱动器 2 | *缓存驱动器*是为本地磁盘提供地形瓦片和特征数据缓存的插件。 3 | * [FileSystem Cache](./CacheDrivers/FileSystemCache.md) 4 | * [LevelDB Cache](./CacheDrivers/LevelDBCache.md) 5 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/CacheDrivers/FileSystemCache.md: -------------------------------------------------------------------------------- 1 | # 文件系统缓存(FileSystem Cache) 2 | 这个插件缓存地形瓦片、特征矢量和其它数据到层次结构文件夹的本地文件系统。每个缓存数据要素处于不同文件,可能包含相关的元数据文件。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | 9 | c:/osgearth_cache 10 | 11 | ... 12 | ``` 13 | 14 | 注意: 15 | ``` 16 | ``filesystem``缓存将每个类的数据存储在它自己的``bin``中。 17 | 18 | 每个``bin``在根路径下都有一个单独的目录。osgEarth控制这些bin的命名,但你可以使用``cache_id``地图图层上的属性可在一定程度上自定义命名。 19 | 20 | 此缓存支持到期,但不支持大小限制——没有办法限制缓存的大小。 21 | 22 | 由于我们正在读写,因此缓存访问是序列化的磁盘上的单个文件。 23 | 24 | 一次从多个进程访问缓存可能会导致崩溃。 25 | 26 | 缓存数据文件的实际格式是“黑盒子”,可能会更改不知不觉中。我们不打算直接使用缓存文件或用于其他目的。 27 | ``` 28 | 29 | 属性: 30 | 31 | **path:** 存储所有缓存bins和文件的根目录位置 32 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/CacheDrivers/LevelDBCache.md: -------------------------------------------------------------------------------- 1 | # LevelDB Cache 2 | 这个插件使用Google [leveldb](https://github.com/pelicanmapping/leveldb)嵌入式键/值存储库将地形贴片、特征矢量和其它数据缓存到本地文件系统。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | 11 | 12 | ... 13 | ``` 14 | `leveldb`缓存将每类数据存储在自己的bin中。所有bin都存储在同一目录中,位于同一数据库中。这样做可以对整个数据库施加大小限制。每条记录都有时间戳;当缓存达到最大大小时,它首先开始删除最旧的记录以腾出空间。 15 | 16 | 高速缓存访问是异步和多线程的,但您一次只能从一个进程访问高速缓存。 17 | 18 | 缓存数据文件的实际格式为“黑匣子”,如有更改,恕不另行通知。我们不打算将缓存文件直接用于其他目的。 19 | 20 | 21 | 属性: 22 | 23 | **path:** 存储所用缓存bins和数据的根目录位置 24 | 25 | **max_size_mb:** 缓存的最大大小(以兆字节为单位)。大小被视为目标;无法保证缓存的大小始终小于此值,但驱动器将尽力遵守。 26 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/EffectsDrivers.md: -------------------------------------------------------------------------------- 1 | # 效果驱动器 2 | 插入特别效果的插件。 3 | * [GL Sky](./EffectsDrivers/GLSky.md) 4 | * [Simple Sky](./EffectsDrivers/SimpleSky.md) 5 | * [SilverLining Sky](./EffectsDrivers/SilverLiningSky.md) 6 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/EffectsDrivers/GLSky.md: -------------------------------------------------------------------------------- 1 | # GL Sky 2 | 实现OpenGL Phong着色的天空模型。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | 11 | ``` 12 | 13 | 常用属性: 14 | 15 | **hours:** 一天中的时间;UTC时钟[0..24] 16 | 17 | **ambient:** 用于地形中黑暗区域的最小环境照明等级[0..1] 18 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/EffectsDrivers/SilverLiningSky.md: -------------------------------------------------------------------------------- 1 | # SilverLining Sky 2 | 使用SunDog Software的SilverLining SDK的天空模型。 3 | 4 | SilverLining SDK需要有效的许可证代码。如果没有用户名和许可证代码,SDK将以“演示模式”运行,并且每五分钟会显示一个对话框。 5 | 6 | 用法示例: 7 | ```XML 8 | 9 | 10 | 13 | ``` 14 | 15 | 属性: 16 | 17 | **atmospheric_lighting:** 是否将大气散射模型应用于Sky节点下的场景,如果将它设置为false,就会得到基本的Phong照明代替。 18 | 19 | **exposure:** 应用于散射模型的曝光水平,模拟通过大气观察地形的冲刷效果。 20 | 21 | 常用属性: 22 | 23 | **hours:** 一天中的时间;UTC时钟[0..24] 24 | 25 | **ambient:** 用于地形中黑暗区域的最小环境照明等级[0..1] 26 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/FeatureDrivers.md: -------------------------------------------------------------------------------- 1 | # 特征驱动器 2 | *特征驱动器*是读取分布矢量数据的插件,也称为*特征数据*。 3 | 4 | * [OGR](./FeatureDrivers/ORG.md) 5 | * [TFS(Tiled Feature Service)](./FeatureDrivers/TFS.md) 6 | * [WFS(OGC Web Feature Service)](./FeatureDrivers/WFS.md) 7 | * [Mapnik Vector Tiles](./FeatureDrivers/MapnikVectorTiles.md) 8 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/FeatureDrivers/MapnikVectorTiles.md: -------------------------------------------------------------------------------- 1 | # Mapnik Vector Tiles 2 | 这个插件从一个包含`vector tiles`_的[MBTiles](https://www.mapbox.com/developers/mbtiles/)文件读取矢量数据。 3 | 4 | 注意:这个驱动器目前不支持多级别mbtiles瓦片,仅加载数据库中最大级别。在osgEarth可以更好地支持非附加特征数据时将会改变。 5 | 6 | 这个驱动器需要你在SQLite3或Protobuf的支持下构建osgEarth。 7 | 8 | 用法示例: 9 | ```XML 10 | 11 | 12 | ../data/osm.mbtiles 13 | 14 | ... 15 | ``` 16 | 17 | 属性: 18 | 19 | **url:** mbtiles文件的位置。 20 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/FeatureDrivers/OGR.md: -------------------------------------------------------------------------------- 1 | # OGR 2 | 这个插件从OGR简单特征库([OGR Simple Feature Library](https://www.gdal.org/))支持(有相当多的)的任意格式中读取矢量数据。其中最常见的包括ESRI形状文件、GML和PostGIS。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | data/world_boundaries.shp 9 | 10 | ... 11 | ``` 12 | 属性: 13 | 14 | **url:** 加载特征数据的位置 15 | 16 | **connection:** 如果特征数据在一个数据库中,使用这个来指定DB连接字符串来取代使用`url`。 17 | 18 | **geometry:** 在\`OGC WKT format\`_中指定*内联* 几何体来取代`url`或`connection`。 19 | 20 | **geometry_url:** 同`geometry`除了WKT字符串在一个文件中。 21 | 22 | **ogr_driver:** 使用的``OGR driver``_。(默认=“ERSI形状文件”) 23 | 24 | **build_spatial_index:** 设为true来为特征数据创建一个空间索引,将大大加快对大数据集的访问速度。 25 | 26 | **layer:** 一些数据集需要子数据集的附加图层标识符,在这里设置(整数)。 27 | 28 | 29 | *PostGIS使用中的特别提示:* 30 | 31 | PostGIS使用一个`connection`字符串而不是`url`来创建它的数据库连接。通常包括表格参考,例如`table = something`。然而,在这个驱动器中,这会导致问题,因此在`layer`属性中指定您的表格。例如: 32 | ```XML 33 | 34 | PG:dbname=mydb host=127.0.0.1 ... 35 | myTableName 36 | 37 | ``` 38 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/FeatureDrivers/TFS.md: -------------------------------------------------------------------------------- 1 | # TFS(Tiled Feature Service) 2 | 这个插件从一个*瓦片特征服务(Tiled Feature Service)* 存储器中读取矢量数据。TFS是一个瓦片化布局,与[TMS(Tile Map Service)](osgearth-docs-cn/ReferenceGuides/DriverReference/TileSourceDrivers/TMS.md)相似,但是是针对获取的特征数据。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | http://readymap.org/features/1/tfs/ 9 | json 10 | 11 | ... 12 | ``` 13 | 14 | 属性: 15 | 16 | **url:** 加载特征数据的位置 17 | 18 | **format:** TFS数据的格式;选项有`json`(默认)或`gml` 19 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/FeatureDrivers/WFS.md: -------------------------------------------------------------------------------- 1 | # WFS(OGC Web Feature Service) 2 | 这个插件从一个OGC网络特征服务([Web Feature Service](https://en.wikipedia.org/wiki/Web_Feature_Service))资源中读取矢量数据。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | http://demo.opengeo.org/geoserver/wfs 9 | states 10 | json 11 | 12 | ... 13 | ``` 14 | 15 | 属性: 16 | 17 | **url:** 加载特征数据的位置 18 | 19 | **typename:** 获取的WFS类型名称(如图层) 20 | 21 | **outputformat:** 从服务中返回的类型;`json`或`gml` 22 | 23 | **maxfeatures:** 请求中返回的特征最大数量 24 | 25 | **request_buffer:** 用于缓冲边框请求以保证返回足够数据的地图单元的数量。在使用AGGLite驱动器渲染缓冲线时很有用。 26 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/ModelSourceDrivers.md: -------------------------------------------------------------------------------- 1 | # 模型源驱动器 2 | *模型源驱动器*是提供OSG节点的一种驱动器。osgEarth利用模型源来显示矢量特征数据以及加载显示外部三维模型。 3 | 4 | * [特征几何体(Feature Geometry)](./ModelSourceDrivers/FeatureGeometry.md) 5 | * [简单模型(Simple Model)](./ModelSourceDrivers/SimpleModel.md) 6 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/ModelSourceDrivers/FeatureGeometry.md: -------------------------------------------------------------------------------- 1 | # 特征几何体(Feature Geometry) 2 | 这个插件使用样式表在OSG几何体中渲染矢量特征数据。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | world.shp 9 | 10 | 11 | 17 | 18 | 19 | 20 | ``` 21 | 属性: 22 | 23 | **geo_interolation:** 如何插入地理线;选项是`great_circle`或`rumb_line` 24 | 25 | **instancing:** 对于点模型代替,是否使用GL拖曳(draw-instanced)(默认是`flase`) 26 | 27 | 共享属性: 28 | 29 | 所有特征渲染驱动器共享下列属性(上述的附加): 30 | 31 | **styles:** 渲染特征时使用的样式表(参阅[符号系统参考](osgearth-docs-cn/ReferenceGuides/SymbologyReference.md)) 32 | 33 | **layout:** 页面数据的布局(参阅[特征和符号](osgearth-docs-cn/UserGuide/FeaturesandSymbology.md)) 34 | 35 | **cache_policy:** 缓存策略(参阅[缓存](/UserGuide/Caching.md)) 36 | 37 | **fading:** 褪色行为(参阅[褪色](./FeatureGeometry.md#褪色)) 38 | 39 | **feature_name:** 用于评估包含特征名称的属性名称的表达 40 | 41 | **feature_indexing:** 是否为查询开通索引功能(默认为`false`) 42 | 43 | **lighting:** 是否在这个图层上覆盖并设置光照模式(t/f) 44 | 45 | **max_granularity:** 用于细分地球上的线的角度阈值(度) 46 | 47 | **shader_policy:** 着色器产生的选项(参阅[着色器策略](./FeatureGeometry.md#着色器策略)) 48 | 49 | **use_texture_arrays:** 若你的显卡支持,对于墙和屋顶外观是否使用纹理数组(默认为true) 50 | 51 | 52 | 也可以参阅: 53 | 54 | `feature_rasterize.earth`示例 55 | 56 | 57 | ## 褪色 58 | 若一个模型图层支持褪色,你可以像这样控制它: 59 | ```XML 60 | 64 | ``` 65 | 属性: 66 | 67 | **duration:** 淡入的时间(秒) 68 | 69 | **max_range:** 开始淡入的距离 70 | 71 | **attenuation_distance:** 淡入的距离 72 | 73 | 74 | ## 着色器策略 75 | 76 | 一些驱动器支持*着色器策略(shader policy)* 允许你控制如何(或是否)为外部几何体创建着色器。例如,如果你想要从一个样式表中加载一个外部模型但是不想osgEarth为它创建着色器: 77 | ```XML 78 | disable 80 | ``` 81 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/ModelSourceDrivers/SimpleModel.md: -------------------------------------------------------------------------------- 1 | # 简单模型(Simple Model) 2 | 这个插件简单地加载一个外部三维模型并且可选地在地图坐标系中放置它。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | ../data/red_flag.osg.100,100,100.scale 8 | -74.018 40.717 10 9 | 10 | ``` 11 | 12 | 属性: 13 | 14 | **url:** 所加载的外部模型 15 | 16 | **location:** 放置模型的地图坐标系。SRS是包含地图的其中之一。 17 | 18 | **paged:** 若为true,则当摄像机位于该位置的最大范围内时,将对该模型进行分页;若为false,则立即加载模型。 19 | 20 | 也可以参阅: 21 | 22 | `simple_model.earth`示例。 23 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TerrainEngineDrivers.md: -------------------------------------------------------------------------------- 1 | # 地形引擎驱动器 2 | *地形引擎驱动器*是一种渲染osgEarth地形的插件。在大多数情况下,你可以使用默认选项——但遗留地形引擎插件支持临时使用,仍需转换到最新版osgEarth。 3 | * [MP](./TerrainEngineDrivers/MP.md) 4 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TerrainEngineDrivers/MP.md: -------------------------------------------------------------------------------- 1 | # MP 2 | osgEarth的默认地形引擎使用瓦片级别多通道混合技术来渲染无限数量的图像图层。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | 16 | ``` 17 | 18 | 属性: 19 | 20 | **skirt_ratio:** “边缘”(skirt)是一个隐藏了相邻不同细节级别瓦片间缝隙的垂直几何体。这个属性设置了边缘高度与瓦片宽度之间的比例。 21 | 22 | **color:** HTML格式的底层地形(无图像)的颜色。默认=“ffffffff”(不透明的白色)。你可以调整alpha来改变透明度。 23 | 24 | **normalize_edges:** 瓦片边界上法线矢量的后处理,使得它们在瓦片上平滑,不使用图像时使得瓦片边界变得不可见。 25 | 26 | **incremental_update:** 启用时,当地图模型改变后(如图层添加或移除)仅可见的瓦片更新。不可见地形瓦片(如那些处于低LOD的)不会更新,直到它们可见。 27 | 28 | **quick_release_gl_objects:** 如果为true,安装一个模块,该模块会在瓦片输出时立即释放GL资源。这可以防止在高速穿越平铺地形时的内存启动。禁用快速释放可能有助于实现更一致的帧速率。 29 | 30 | 通用属性: 31 | 32 | **min_tile_range_factor:** 所有瓦片的“最大可见距离”比例。最大可见距离=瓦片半径*这个数值(默认7.0) 33 | 34 | **cluster_culling:** 默认情况下,聚集筛选(cluster culling)会丢弃后向切片。您可以将其设置为`false`来禁用它,如您想要进入地下并查看表面。 35 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers.md: -------------------------------------------------------------------------------- 1 | # 瓦片源驱动器 2 | *瓦片源驱动器*是一个为osgEarth地形引擎提供栅格数据的驱动器,可以提供图像瓦片和高程格网瓦片。 3 | 4 | * [AGGLite Rasterizer](./TileSourceDrivers/AGGLiteRasterizer.md) 5 | * [ArcGIS Server](./TileSourceDrivers/ArcGISServer.md) 6 | * [Cesium Ion](./TileSourceDrivers/CesiumIon.md) 7 | * [Color Ramp](./TileSourceDrivers/ColorRamp.md) 8 | * [Debug Display](./TileSourceDrivers/DebugDisplay.md) 9 | * [GDAL(Geospatial Data Abstraction Library)](./TileSourceDrivers/GDAL.md) 10 | * [MBTiles](./TileSourceDrivers/MBTiles.md) 11 | * [Noise](./TileSourceDrivers/Noise.md) 12 | * [OSG(OpenSceneGraph Loader)](./TileSourceDrivers/OSG.md) 13 | * [QuadKey](./TileSourceDrivers/QuadKey.md) 14 | * [TileCache](./TileSourceDrivers/TileCache.md) 15 | * [WorldWind TileService](./TileSourceDrivers/WorldWindTileService.md) 16 | * [TMS(Tile Map Service)](./TileSourceDrivers/TMS.md) 17 | * [VPB(VirtualPlanerBuilder)](./TileSourceDrivers/VPB.md) 18 | * [WCS(OGC Web Coverage Service)](./TileSourceDrivers/WCS.md) 19 | * [WMS(OGC Web Map Service)](./TileSourceDrivers/WMS.md) 20 | * [XYZ](./TileSourceDrivers/XYZ.md) 21 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/AGGLiteRasterizer.md: -------------------------------------------------------------------------------- 1 | # AGGLite Rasterizer 2 | 这个插件使用*agglite*函数库对图像瓦片的特征数据进行栅格化,是现有的一种在地图上渲染矢量几何体的简单且有效方法。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | world.shp 9 | 10 | 11 | 17 | 18 | 19 | ``` 20 | 属性: 21 | 22 | **optimize_line_sampling(优化线采样):** 23 | 24 | 对线数据进行下采样,使其分辨率不高于我们打算对其进行栅格化的图像。如果不这样做,则存在缓冲操作在非常高分辨率的输入数据上永远存在的风险。(可选) 25 | 26 | 也可以参考: 27 | `feature_rasterize.earth`示例 28 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/ArcGISServer.md: -------------------------------------------------------------------------------- 1 | # ArcGIS Server 2 | 这个插件从ESRI ArcGIS server REST API中读取图像瓦片。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://services.arcgisonline.com/ArcGIS/rest/services/World_Imagery/MapServer 8 | 9 | ``` 10 | 属性: 11 | 12 | **url:** URL或地图服务的ArcGIS Server REST API接口点 13 | 14 | **token:** ArcGIS服务器安全令牌(可选) 15 | 16 | 也可以参考: 17 | 18 | `test`文件夹中的`arcgisonline.earth` 19 | 20 | *ArcGIS是ESRI的注册版权。* 21 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/CesiumIon.md: -------------------------------------------------------------------------------- 1 | # Cesium Ion 2 | Cesium Ion插件从[Cesium Ion](https://cesium.com/)服务器中读取图像瓦片,通过提供您自己的access_token,获得对图层的访问权限。 3 | 4 | Cesium Ion需要被SSL解译的CURL函数库来支持https链接。 5 | 6 | 用法示例: 7 | ```XML 8 | 9 | 3845 10 | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI0NDViM2NkNi0xYTE2LTRlZTUtODBlNy05M2Q4ODg4M2NmMTQiLCJpZCI6MjU5LCJpYXQiOjE1MTgxOTc4MDh9.sld5jPORDf_lWavMEsugh6vHPnjR6j3qd1aBkQTswNM 11 | 12 | ``` 13 | 属性: 14 | 15 | **server:** 要访问的Cesium Ion服务器。默认为https://api.cesium.com/ 16 | 17 | **asset_id:** 要访问的资产的ID,目前仅支持图像图层。 18 | 19 | **token:** 您对Cesium Ion服务的访问令牌。 20 | 21 | **format:** 图层格式,默认为png。 22 | 23 | 也可以参考: 24 | 25 | `tests`文件夹中的`cesium_ion.earth`。 26 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/ColorRamp.md: -------------------------------------------------------------------------------- 1 | # Color Ramp 2 | Color Ramp插件除了使用颜色灰阶文件外,还是用基础高程场从单波段数据集(如高程或温度)中生成RGBA图像。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | http://readymap.org/readymap/tiles/1.0.0/9/ 9 | 10 | ..\data\colorramps\elevation.clr 11 | 12 | ``` 13 | 14 | 灰阶文件(Ramp files): 15 | 16 | 定义数值如何对应于颜色的文件,每条线上都存储了一个数值和对应的RGB颜色,其值在0-255范围内。 17 | 18 | 示例: 19 | ```XML 20 | 0 255 0 0 21 | 1000 255 255 0 22 | 5000 0 0 255 23 | ``` 24 | 属性 25 | 26 | **elevation:** 所采样的高程图层的定义。 27 | 28 | **ramp:** 对图层着色时使用的灰阶文件路径。 29 | 30 | 也可以参考: 31 | `tests`文件夹中的`colorramp.earth`示例。 32 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/DebugDisplay.md: -------------------------------------------------------------------------------- 1 | # Debug Display 2 | 这个插件渲染一个覆盖图,显示每个瓦片的轮廓及其分层键(x,y和LOD)。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | 8 | ``` 9 | 属性:没有。 10 | 11 | 注意:此驱动器的数据不可缓存。 12 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/GDAL.md: -------------------------------------------------------------------------------- 1 | # GDAL(地理空间数据抽象函数库,Geospatial Data Abstraction Library) 2 | GDAL插件可以读取大部分地理空间文件类型,是你在本地文件系统中读取数据时将使用到的最常见的驱动器。 3 | 4 | [GDAL](https://www.gdal.org/)函数库支持大量的[格式](https://www.gdal.org/formats_list.html),包括最常见的GeoTIFF、JPEG和ECW,如果配置正确,也可以从数据库和网络服务器中读取数据。 5 | 6 | 用法示例: 7 | ```XML 8 | 9 | data/world.tif 10 | 11 | ``` 12 | 从文件夹中加载不同的文件(必须有相同的投影): 13 | ```XML 14 | 15 | data 16 | tif 17 | 18 | ``` 19 | 属性: 20 | 21 | **url:** 加载的文件位置,或是需要加载的处于相同投影的多个文件的文件夹位置。 22 | 23 | **connection:** 如果数据源是一个数据库(如PostGIS),连接字符串(connection string)用来打开数据库表。 24 | 25 | **extensions:** 一个或多个文件扩展名,用分号分隔,在`url`指向一个文件夹并且你尝试加载多个文件时使用。 26 | 27 | **black_extensions:** 所忽视的文件扩展名集合(与`extensions`相反)。 28 | 29 | **interpolation:** 在重采样源数据时使用的插值方法,可选项为`nearest`、`average`和`bilinear`。仅作用于高程数据,除非interp_imagery也设为true。 30 | 31 | **max_data_level:** 可用数据的最大细节级别。 32 | 33 | **subdataset:** 一些GDAL所支持的格式支持子数据集,使用这个属性来指定数据源。 34 | 35 | **interp_imagery:** 设置为true以使用“插值”指定的方法对图像进行采样。默认情况下,使用nearest方法对图像进行采样。它利用在源文件中的概视图或小波压缩所构建的任何内容,但是会导致相邻瓦片上的伪像。内插图像可以使其看起来更好但是速度更慢。 36 | 37 | **warp_profile:** “warp_profile”是告诉GDAL驱动器保存原始SRS及源数据地理转换,但使用Warped VRT使得数据看起来符合给定配置文件的方法。对于合并可能使用复合驱动器在不同投影中的多个文件非常有用。 38 | 39 | 也可以参考: 40 | 41 | `tests`文件夹中的`gdal_tiff.earth`示例。 42 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/MBTiles.md: -------------------------------------------------------------------------------- 1 | # MBTiles 2 | 这个插件从[MBTiles](https://www.mapbox.com/help/how-mapbox-works/)文件中读取数据,是一种在单表中保存所有瓦片数据的SQLite3数据库。这个驱动器需要在SQLite3的支持下构建osgEarth。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | ../data/haiti-terrain-grey.mbtiles 8 | jpg 9 | 10 | ``` 11 | 属性: 12 | 13 | **filename:** MBTiles文件的文件名 14 | 15 | **format:** MBTiles文件(如jpeg,png等)中的图像格式 16 | 17 | **compute_levels:** 是否自动计算MBTiles文件的有效级别。默认为true并且会扫描表格确定最小河最大值。在第一次加载文件时会耗费一些时间,所以如果你事先知道你的文件的级别,可以将其设为false然后使用瓦片源的min_level和max_level设置。 18 | 19 | 也可以参考: 20 | 21 | `tests`文件夹中的`mb_tiles.earth`示例。 22 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/Noise.md: -------------------------------------------------------------------------------- 1 | # Noise 2 | noise插件基于一个名为[libnoise](http://libnoise.sourceforge.net/)的Perlin噪声发生器在程序上生成分形地形。我们将解释它在这里如何工作,但你也可以参考libniose文档来获取有关下列属性的含义和应用。 3 | 4 | 有许多方法来使用`noise`驱动器,在属性表后面有一些示例。 5 | 6 | 基本属性: 7 | 8 | **resolution(分辨率):** 生成噪声数据一个周期的线性距离(通常以米为单位)。 9 | 10 | **scale(尺度):** 一个周期内作用于噪声值的偏移量。默认为1.0,即你讲得到\[-1...1]范围内的噪声数据。 11 | 12 | **octaves** 通过添加细节级别来改善噪声数据的次数,即噪声发生器在分辨率范围内递归的深度。较高的数值将在你放大时产生出更多细节,默认值为4。 13 | 14 | **offset(偏移):** 对于高程场,将其设为true来生成偏移量而不是绝对高程,它们将从另一个绝对高程图层中添加高程值。 15 | 16 | 17 | 高级属性: 18 | 19 | **frequency(频率):** 上述*分辨率(resolution)*的倒数。(由于osgEarth是一个投影SDK,因此通常更直观地指定分辨率并将其留空。) 20 | 21 | **persistence(持久度):** 当噪声函数遍历每个较高octave时*尺度(scale)*降低的速率。Scale(octave N + 1)=Scale(octave N)* Persistence。 22 | 23 | **lacunarity(空隙率)** 当噪声函数遍历每一个较高细节octave时*频率(frequency)*增长的速率。Freq(octave N+1)=Freq(octave N)* Lacunarity。 24 | 25 | **seed:** 随机数生成器,噪声驱动器是“连贯的”,即(除其他外)在给定相同随机种子的情况下生成相同的值。通过改变这个来改变模式。 26 | 27 | **min_elevation:** 在构建高程场时所生成的最小高程值,使用高程数据来创造一个“楼层(floor)”。 28 | 29 | **max_elevation:** 在构建高程场时所生成的最大高程值,使用高程数据来创造一个“楼顶(ceiling)”。 30 | 31 | **normal_map:** 将此设为true(对于一个图像图层)来创建一个`NormalMap`地形效果一起使用的凹凸贴图法线纹理。 32 | 33 | 34 | 也可以参考: 35 | 36 | `tests`文件夹中的`noise.earth`、`fractal_detail.earth`和`normalmap.earth`示例。 37 | 38 | ## 示例 39 | 创建一个世界范围程序高程图层: 40 | ```XML 41 | 42 | 3185500 43 | 5000 44 | 12 45 | 46 | ``` 47 | 通过调整递归属性使其更有趣: 48 | ```XML 49 | 50 | 3185500 51 | 5000 52 | 12 53 | 0.49 54 | 3.0 55 | 56 | ``` 57 | 通过创建图像层来查看噪声本身。看起来像云: 58 | ```XML 59 | 60 | 3185500 61 | 12 62 | 63 | ``` 64 | 使用`noise`创建一个偏移图层来向真实高程数据中添加细节: 65 | ```XML 66 | 67 | 68 | http://readymap.org/readymap/tiles/1.0.0/9/ 69 | 70 | 71 | 72 | true 73 | 31 74 | 250 75 | 20 76 | 4 77 | 78 | ``` 79 | 对于创建偏移高程数据,我们可以使用*法线地图(normal map)* 来伪装它。法线地图是一种不可见纹理,它模拟了使用真实高程数据时得到的法线向量: 80 | ```XML 81 | 82 | true 83 | false 84 | true 85 | 128 86 | 250 87 | 20 88 | 4 89 | 90 | 91 | ... 92 | 93 | 94 | 95 | 96 | ``` 97 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/OSG.md: -------------------------------------------------------------------------------- 1 | # OSG (OpenSceneGraph Loader) 2 | 这个加载器将使用一个OSG图像插件来加载图像,然后基于这幅图像来返回瓦片。由于图像没有它自己的SRS信息,你需要指定地理空间配置。 3 | 4 | 这个插件不是很常用,GDAL驱动器包含了大部分文件类型。 5 | 6 | 用法示例: 7 | ```XML 8 | 9 | images/world.png 10 | global-geodetic 11 | 12 | ``` 13 | 属性: 14 | 15 | **url:** 加载文件的位置。 16 | 17 | **profile:** 图像的地理空间配置。 18 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/QuadKey.md: -------------------------------------------------------------------------------- 1 | # QuadKey 2 | QuadKey插件是读取网络地图瓦片存储的有效方法,遵从于[Bing](https://msdn.microsoft.com/en-us/library/bb259689.aspx)地图瓦片系统。它假定数据库处于球面墨卡托投影,与Bing一样在根处有2X2瓦片。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://[1234].server.com/tiles/{key}.png 8 | 9 | ``` 10 | 创建URL模板(URL template): 11 | 12 | 方括号[]表示osgEarth应该“遍历”其中的字符,从而产生循环服务器请求。有些服务要求这样做。 13 | 14 | 你需要在URL中提供{key}模板,URL是osgEarth为所需要的瓦片插入quadkey的地方。 15 | 16 | 属性: 17 | 18 | **url:** 存储器的位置(URL模板——参阅前文) 19 | 20 | **profile:** 存储器的空间配置 21 | 22 | **format:** 如果format不是URL的一部分,你可以在这里指定。 23 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/TMS.md: -------------------------------------------------------------------------------- 1 | # TMS (Tile Map Service) 2 | 这个插件读取根据广泛使用的OSGeo瓦片地图服务([Tile Map Service](http://wiki.osgeo.org/wiki/Tile_Map_Service_Specification))规格存储的数据。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://readymap.org:8080/readymap/tiles/1.0.0/79/ 8 | 9 | ``` 10 | 属性: 11 | 12 | **url:** TMS存储器的根URL(或路径名称) 13 | 14 | **tms_type:** 设置为`google`来反转瓦片索引的Y轴 15 | 16 | **format:** 覆盖服务反馈的格式(如jpg,png) 17 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/TileCache.md: -------------------------------------------------------------------------------- 1 | # TileCache 2 | [TileCache](http://tilecache.org/)(MetaCarta Labs)是一个网络地图瓦片缓存系统,它对于瓦片层次结构的编码有自己的布局。这个插件将从这个文件布局中读取瓦片。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://server/tiles/root 8 | landuse 9 | jpg 10 | 11 | ``` 12 | 属性: 13 | 14 | **url:** 瓦片缓存(tilecache)存储器的根URL(或者路径名称) 15 | 16 | **layer:** 所使用的TileCache图层 17 | 18 | **format:** 独立瓦片的格式(如jpg,png) 19 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/VPB.md: -------------------------------------------------------------------------------- 1 | # VPB (VirtualPlanerBuilder) 2 | [VirtualPlanetBuilder](http://www.openscenegraph.com/index.php/documentation/tools/virtual-planet-builder)(VPB)是一个用于生成页面地形模型的OSG应用。这个应用尝试从VPB模型中“刮出”图像和高程格网瓦片,并为osgEarth引擎渲染提供这个数据。 3 | 4 | **注意:** 我们把这个驱动器作为一个临时方案来解决那些有遗留VPB模型但是无法访问源数据的情况。由于VPB模型格式不会传达模型建立时所使用的所有参数,所以配置这个驱动会很棘手。 5 | 6 | 用法示例: 7 | ```XML 8 | 9 | http://www.openscenegraph.org/data/earth_bayarea/earth.ive 10 | global-geodetic 11 | 5 12 | 11 13 | nested 14 | 15 | ``` 16 | 属性: 17 | 18 | **url:** VPB模型的根文件 19 | 20 | **primary_split_level:** VPB运行时所设置的,详见VPB文档 21 | 22 | **secondary_split_level:** VPB运行时所设置的,详见VPB文档 23 | 24 | **directory_structure:** 默认是`nested`;选项是`nested`,`flat`和`task` 25 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/WCS.md: -------------------------------------------------------------------------------- 1 | # WCS (OGC Web Coverage Service) 2 | 这个插件基于OGC网络覆盖数据服务([Web Converage Service](https://en.wikipedia.org/wiki/Web_Coverage_Service))规格以有限的方式读取栅格覆盖数据。在osgEarth中它仅对于获取高程格网数据瓦片有用。我们支持WCS 1.1中的一个子集。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://server 8 | elevation 9 | image/GeoTIFF 10 | 11 | ``` 12 | 属性: 13 | 14 | **url:** WCS资源的位置 15 | 16 | **identifier:** WCS标识符(如所读取的图层) 17 | 18 | **format:** 返回的数据的格式(通常是`tif`) 19 | 20 | **elevation_unit:** 解译高程格网高程值时使用的单位(默认为米) 21 | 22 | **range_subset:** WCS范围子集字符串(参阅WCS文档) 23 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/WMS.md: -------------------------------------------------------------------------------- 1 | # WMS (OGC Web Map Service) 2 | 这个插件从一个OGC网络地图服务([Web Map Service](https://en.wikipedia.org/wiki/Web_Map_Service))资源中读取图像数据。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://onearth.jpl.nasa.gov/wms.cgi 8 | EPSG:4326 9 | 512 10 | global_mosaic 11 | visual 12 | jpeg 13 | 14 | ``` 15 | 属性: 16 | 17 | **url:** WMS资源的位置 18 | 19 | **srs:** 返回瓦片的空间参考 20 | 21 | **tile_size:** 覆盖默认瓦片尺寸(默认=256) 22 | 23 | **layers:** 要合并并返回的WMS图层列表 24 | 25 | **styles:** 要渲染的WMS样式 26 | 27 | **format:** 返回的图像格式 28 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/WorldWindTileService.md: -------------------------------------------------------------------------------- 1 | # WorldWind TileService 2 | 这个插件读取存储于NASA WorldWind [TileService](https://www.worldwindcentral.com/wiki/index.php?title=TileService)布局中的瓦片。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://server/tileservice/tiles 8 | weather 9 | png 10 | 11 | ``` 12 | 属性: 13 | 14 | **url:** 瓦片服务存储器(TileService repository)的根URL(或路径名称) 15 | 16 | **dataset:** 所使用的WW数据库(图层) 17 | 18 | **format:** 独立瓦片的格式(如jpg,png) 19 | -------------------------------------------------------------------------------- /ReferenceGuides/DriverReference/TileSourceDrivers/XYZ.md: -------------------------------------------------------------------------------- 1 | # XYZ 2 | XYZ插件对于读取带有标准X/Y/LOD设置但不会明确显示任何元数据的网络地图瓦片存储器很有用。很多常用网络地图服务(如[MapQuest](https://business.mapquest.com/products/))都属于这一类。在使用这个驱动器时你需要提供带有`profile`的osgEarth。 3 | 4 | 用法示例: 5 | ```XML 6 | 7 | http://oatile[1234].mqcdn.com/tiles/1.0.0/sat/{z}/{x}/{y}.jpg 8 | spherical-mercator 9 | 10 | ``` 11 | 创建URL模板: 12 | 13 | 方括号[]表示osgEarth应该“遍历”其中的字符,从而产生循环服务器请求。有些服务要求这样做。 14 | 15 | 花括号{}是osgEarth为所需要的瓦片插入正确x,y和z值的模板。 16 | 17 | 属性: 18 | 19 | **url:** 瓦片存储器的位置(URL模板——详见上述) 20 | 21 | **profile:** 存储器的空间配置 22 | 23 | **invert_y:** 设置为true以反转Y轴进行瓦片索引 24 | 25 | **format:** 如果格式不是URL本身的一部分,你可以在这里指定 26 | 27 | 也可以参阅: 28 | 29 | `tests`文件夹中的`mapquest_open_aerial.earth`和`openstreetmap.earth`示例。 30 | -------------------------------------------------------------------------------- /ReferenceGuides/EarthFileReference.md: -------------------------------------------------------------------------------- 1 | # 地球文件参考 2 | ## 地图 3 | *地图*是地球文件中最高级别要素。 4 | ```XML 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | ``` 16 | |属性|描述| 17 | |----|-----| 18 | |名称(name)|可读的名称,对于渲染没有影响。| 19 | |类型(type)|坐标系统类型。| 20 | ||**地心(geocentric):** 渲染一个椭球体。| 21 | ||**投影(projected):** 渲染一个“平面”(flat),投影地图。| 22 | |版本(version|地球文件版本。默认=“2”,设置为较旧版本地球文件格式。| 23 | ## 地图选项(Map Options) 24 | 这些选项控制地图模型(Map Model)和与整幅地图相关联的渲染属性。 25 | ```xml 26 | 27 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | ``` 39 | |属性|描述| 40 | |---|----| 41 | |光照(lighting)|是否允许光照着色器影响地图| 42 | |高程内插(elevation_interpolation)|重采样高程源数据使用的方法| 43 | ||**最近值(nearest:)** 最临近值| 44 | ||**平均值(average:)** 相邻值的平均值| 45 | ||**双线性(bilinear:)** 两个轴上线性内插| 46 | ||**三角形(triangulate):** 内插遵循三角斜率| 47 | |覆盖纹理尺寸(overlay_texture_size)|设置拼贴的纹理尺寸(投影纹理)| 48 | |覆盖拉伸(overlay_blending)|在拼贴时覆盖几何体是否随着地形拉伸(投影纹理)| 49 | |覆盖分辨率比例(overlay_resolution_ratio)|对于拼贴的几何体,相机附近投影纹理的分辨率与远离相机的分辨率之比。增加该值以改善靠近相机的外观,同时牺牲更远的几何体的外观。 注意:如果您使用的是支持滚动的相机操纵器,则可能需要将其设置为1.0; 否则你会得到悬垂的文物! 这是一个已知的问题。| 50 | ## 地形选项 51 | 这些选项控制地形表面的渲染 52 | ```XML 53 | 54 | 55 | 65 | ``` 66 | |属性|描述| 67 | |---|----| 68 | |驱动器(driver)|加载地形的引擎插件。默认=“mp”。有关每个插件的特定属性,请参阅驱动器参考指南。| 69 | |光照(lighting)|是否在地形上启用GL_LIGHTING。默认情况下,这是未设置的,这意味着它将继承场景的照明模式。| 70 | |最小瓦片范围(min_tile_range_factor)|确定显示瓦片时需要的最接近的距离。该值是瓦片的范围与其的比率。例如,如果瓦片具有10km半径,并且MTRF = 7,则瓦片将在约70km的范围内可见。| 71 | |最低细节级别(first_lod)|地形将显示瓦片的最低细节级别。即地形将永远不会显示比此更低的LOD。| 72 | |拉伸(blending)|将此设置为`true`以在地形的基础几何体上启用GL混合。这使您可以使地球部分透明。这对于看到地下物体很方便。| 73 | |瓦片尺寸(tile_size)|每个地形瓦片的尺寸。每个地形图块都将具有`tile_size` X `tile_size`顶点。| 74 | |正则化化边缘(normalize_edges)|沿着地形瓦片的边缘计算法线向量,使得从一个瓦片到下一个瓦片的光照看起来更平滑。| 75 | |高程平滑(elevation_smoothing)|是否对高程数据插入时的变化进行平滑。这样做可以使不同的高度场数据更加平滑,但是高程不会那么准确。默认= false| 76 | |法线贴图(normal_maps)|是否生成和使用法线贴图代替几何法线。法线贴图与光照一起使用,以创建比单独用三角形表示的更高分辨率地形的外观。默认值取决于引擎。| 77 | |压缩法线贴图(compress_normal_maps)|是否在将法线贴图发送到GPU之前压缩它们。您必须在OpenSceneGraph构建中内置nvidia纹理工具图像处理器插件。默认值为false| 78 | |最小过期帧数(min_expiry_frames)|在到期之前尚未看到地形瓦片的帧数。默认= 0| 79 | |最小过期时间(min_expiry_time)|地形瓦片在到期之前未被剔除的秒数。默认= 0| 80 | ## 图像图层 81 | *图像图层*是一个叠加在地图几何体上的栅格化图像。 82 | ```XML 83 | 84 | 106 | 107 | 108 | 109 | 110 | ``` 111 | |属性|描述| 112 | |---|----| 113 | |名称(name)|可读图层名称,在引擎中不可用。| 114 | |驱动器(driver)|用于为此图层创建瓦片的插件。有关每个插件的特定属性,请参阅驱动器参考指南。| 115 | |无数据图像(nodata_image)|源代码中表示“无数据”的图像的URI。如果osgEarth将瓦片与此图像匹配,则表明它在该位置找不到任何数据,并且不会渲染瓦片。| 116 | |透明度(opacity)|图层的不透明度,\[0..1]。| 117 | |最小范围(min_range)|最小可见范围,相对于相机,以米为单位。相机更接近时,瓦片将不可见。| 118 | |最大范围(max_range)|最大可见范围,相对于相机,以米为单位。瓦片不会超出此范围。| 119 | |衰减范围(attenuation_range)|与min_range或max_range拉伸的距离。(不支持文本或图标,仅支持几何)| 120 | |最低级别(min_level)|最小可见细节级别。| 121 | |最高级别(max_level)|最大可见细节级别。| 122 | |最低分辨率(min_resolution)|绘制瓦片的最小源数据分辨率。以像素为单位,在源数据的原始单位表示。| 123 | |最高分辨率(max_resolution)|绘制瓦片的最大源数据分辨率。以像素为单位,以源数据的原始单位表示。| 124 | |最大数据级别(max_data_level)|此图像图层可用的新源数据的最大细节级别。通常,驱动器将报告此信息。但您可能希望自己限制它。对于某些没有分辨率限制的驱动器尤其如此,例如光栅化驱动器(agglite)。| 125 | |可用(enabled)|是否在地图中包含此图层。你只能在加载时设置它,它只是一种在地球文件中“注释掉”图层的简单方法。| 126 | |可见(vision)|是否绘制图层。| 127 | |共享(shared)|为此层生成辅助专用采样器,以便可以通过自定义着色器全局访问它。| 128 | |共享图层采样器(shared_sampler)|共享图层在GLSL代码中可用的采样器的统一名称。| 129 | |共享图层矩阵(shared_matrix)|共享图层在GLSL代码中可用的纹理矩阵的统一名称,您可以使用该名称访问上面的`shared_sampler`的正确纹理坐标。| 130 | |覆盖范围(converage)|表示这是一个覆盖层,即传递具有特定语义的离散值的图层。一个例子是“土地利用”层,其中每个像素保持一个值,该值指示该区域是草地,沙漠等。将图层标记为覆盖禁用任何插值、过滤或压缩,因为这些将破坏采样数据GPU上的值。| 131 | |缩小滤波器(min_filter)|用于此层的OpenGL纹理缩小过滤器。选项是NEAREST,LINEAR,NEAREST_MIPMAP_NEAREST,NEAREST_MIPMIP_LINEAR,LINEAR_MIPMAP_NEAREST,LINEAR_MIPMAP_LINEAR| 132 | |放大滤波器(mag_filter)|用于此图层的OpenGL纹理放大滤镜。选项与上面的`min_filter`相同。| 133 | |纹理压缩(texure_compression)|“auto”压缩GPU上的纹理,“none”禁用,“fastdxt”使用FastDXT实时DXT压缩器。| 134 | |拉伸(blend)|“modulate(调制)”将像素与帧缓冲相乘,“interpolate(内插)”基于alpha(def)的帧缓冲区拉伸。| 135 | 136 | ## 高程图层 137 | *高程图层*为地形引擎提供高程地图格网,osgEarth引擎将所用高程数据合成为一个高程地图,并使用它构建地形瓦片。 138 | ```XML 139 | 140 | 152 | ``` 153 | |属性|描述| 154 | |---|----| 155 | |名称(name)|可读图层名称,未在引擎中使用。| 156 | |驱动器(driver)|用于为此图层创建瓦片的插件。有关每个插件的特定属性,请参阅驱动器参考指南。| 157 | |最低级别(min_level)|最小可见细节级别。| 158 | |最高级别(max_level)|最大可见细节级别。| 159 | |最低分辨率(min_resolution)|绘制瓦片的最小源数据分辨率。以像素为单位,在源数据的原始单位表示。| 160 | |最高分辨率(max_resolution)|绘制瓦片的最大源数据分辨率。以像素为单位,以源数据的原始单位表示。| 161 | |可用(enabled)|是否在地图中包含此图层。你只能在加载时设置它,它只是一种在地球文件中“注释掉”图层的简单方法。| 162 | |偏移(offset)|指示此图层中的高程值是相对偏移而不是真实的地形高程样本。| 163 | |无数据政策(nodata_policy)|如何处理“无数据”值。默认为“interpolate(插值)”,它将插入相邻值来填充。将其设置为“msl”,将“无数据”样本替换为当前海平面值。| 164 | |无数据值(nodata_value)|将此值视为“无数据”。| 165 | |最小可用数据(min_valid_value)|将小于此值的任何内容视为“无数据”。| 166 | |最大可用数据(max_valid_value)|将大于此值的任何内容视为“无数据”。| 167 | 168 | ## 模型图层 169 | *模型图层*渲染无地形数据,如矢量特征或外部三维模型。 170 | ```XML 171 | 172 | 176 | ``` 177 | |属性|描述| 178 | |---|----| 179 | |名称(name)|可读图层名称,未在引擎中使用。| 180 | |驱动器(driver)|用于为此图层创建瓦片的插件。有关每个插件的特定属性,请参阅驱动器参考指南。| 181 | |可用(enabled)|是否在地图中包含此图层。你只能在加载时设置它,它只是一种在地球文件中“注释掉”图层的简单方法。| 182 | |可见(vision)|是否绘制图层。| 183 | 184 | 模型图层还允许你定义一个剪切蒙板(cut-out mask)。地形引擎将在地形表面剪切一个与你提供的*边界几何体*(boundary geometry)匹配的洞,你可以使用*osgearth_boundarygen*工具来创建这样的几何体。 185 | 186 | 如果你有一个外部地形模型并且想将它插入osgEarth地形中,这很实用。模型必须与地形在同一坐标系统中。 187 | ```XML 188 | 189 | 190 | 191 | 192 | ... 193 | ``` 194 | 蒙板(Mask)可以使用任意面特征作为输入,你可以使用内部几何体指定蒙板几何体: 195 | ```XML 196 | 197 | POLYGON((120 42 0, 121 41 0, 121 40 0)) 198 | ``` 199 | 或者你可以使用一个形状文件或者其它特征源,这时osgEarth将使用*第一个*源中的特征。 200 | 201 | 有关示例,请参阅mask.earth。 202 | 203 | ## 配置文件(Profile) 204 | 配置文件告诉osgEarth空间参考系统、地理空间范围以及它应该用于渲染地图瓦片的平铺方案。 205 | ```XML 206 | 214 | ``` 215 | |属性|描述| 216 | |---|----| 217 | |srs|地图的空间参照系,可以是WKT字符串、EPSG代码、PROJ4初始化字符串或配置文件名称。有关详细信息,请参阅[空间参考](osgearth-docs-cn/UserGuide/SpatialReferences.md)。| 218 | |vdatum|配置文件的垂直基准,描述如何处理Z值。有关详细信息,请参阅[空间参考](osgearth-docs-cn/UserGuide/SpatialReferences.md)。| 219 | |xmin, xmax, ymin, ymax|地图的地理空间范围。单位是由上面的SRS定义的单位(通常投影地图是米数,地心地图是度数)。| 220 | |num_tiles_\*_at_lod_0|切片层次结构的最高级别的大小。两个方向的默认值均为“1”。(可选)| 221 | 222 | ## 缓存 223 | 为瓦片数据配置缓存。 224 | ```XML 225 | 227 | ``` 228 | |属性|描述| 229 | |---|----| 230 | |驱动器(driver)|缓存中使用的插件,`filesystem`或`leveldb`。| 231 | |路径(path)|路径(相对和绝对)或缓存文件夹或文件。| 232 | 233 | ## 缓存策略 234 | 决定所给的要素如何使用配置好的缓存进行插入的策略。 235 | ```XML 236 | 237 | ``` 238 | |属性|描述| 239 | |---|----| 240 | |使用方法(usage)|针对缓存的策略。| 241 | ||**read_write:** 使用一个已经配置好的缓存,默认。| 242 | ||**cache_only:** 仅从缓存中读取数据,忽略实际数据源,对于离线渲染很有用。| 243 | ||**no_cache:** 忽略缓存,始终从源数据中读取。| 244 | |max_age|将早于此值的缓存(以秒为单位)视为已过期。| 245 | 246 | ## 代理设置(Proxy Settings) 247 | *Proxy settings*帮你为远程数据源设置一个网络代理。 248 | ```XML 249 | 253 | ``` 254 | 这些属性是容易理解的。 255 | 256 | ## 滤色器(Color Filters) 257 | *滤色器*可以在osgEarth将彩色图层中的颜色数据插入地形前改变其外观的一种可插入着色器。 258 | ```XML 259 | 260 | 261 | 262 | ... 263 | ``` 264 | 您可以将多个滤色器链接在一起。 有关滤色器的详细信息,请参阅[滤色器参考](/ReferenceGuides/ColorFilterReference.md)。 265 | 266 | ## 函数库(Libraries) 267 | 预加载任意函数库。 268 | ```XML 269 | a 270 | ``` 271 | 使用“;”作为分隔符列出多个函数库名称。 272 | 273 | a;b;c;d;e 274 | 275 | 函数库在osg函数库路径中被搜素,函数库名称需要遵循osg节点(nodekit)库名称协议(后缀为osg函数库版本)。 276 | -------------------------------------------------------------------------------- /ReferenceGuides/EnvironmentVariables.md: -------------------------------------------------------------------------------- 1 | # 环境变量(Environment Variables) 2 | 这是osgEarth支持的环境变量列表。 3 | 4 | 5 | 缓存: 6 | 7 | **OSGEARTH_CACHE_PATH:** 在指定的文件夹(路径)设置缓存 8 | 9 | **OSGEARTH_CACHE_ONLY:** 指示osgEarth仅使用缓存而没有数据源(设置为1) 10 | 11 | **OSGEARTH_NO_CACHE:** 指示osgEarth永远不要使用缓存(设置为1) 12 | 13 | **OSGEARTH_CACHE_DRIVER:** 设置用于缓存的插件的名称(默认为“filesystem”) 14 | 15 | 16 | 线程/性能: 17 | 18 | **OSG_NUM_DATABASE_THREADS:** 设置OSG DatabasePager用于加载地形瓦片和特征数据瓦片的线程总数。 19 | 20 | **OSG_NUM_HTTP_DATABASE_THREADS:** 设置Pager的线程池(见上文)中应该用于“高延迟”操作的线程数。(通常这意味着不从缓存中读取数据的操作,或预计需要比平均时间更长的操作。 21 | 22 | 23 | 调试: 24 | 25 | **OSGEARTH_NOTIFY_LEVEL:** 与`OSG_NOTIFY_LEVEL`类似,设置控制台输出的详细程度。值为`DEBUG`,`INFO`,`NOTICE`和`WARN`。默认为`NOTICE`。(这与OSG的通知级别不同。) 26 | 27 | **OSGEARTH_MP_PROFILE:** 将关于地形引擎的瓦片生成器的详细分析和定时数据转储到控制台。设置为1以获得详细的每瓦时间;设置为2以进行平均瓦片加载时间计算 28 | 29 | **OSGEARTH_MP_DEBUG:* *在地图上绘制瓦片边界框和瓦片键(tilekey)标签 30 | 31 | **OSGEARTH_MERGE_SHADERS:** 在单个着色器程序中合并所有着色器;这是GLES(移动设备)所必需的,因此可用于测试。(设为1) 32 | 33 | **OSGEARTH_DUMP_SHADERS:** 组合着色器程序打显示控制台(设置为1)。 34 | 35 | 36 | 渲染: 37 | 38 | **OSGEARTH_DEFAULT_FONT:** 用于文本符号系统的默认字体的名称 39 | 40 | **OSGEARTH_MIN_STAR_MAGNITUDE:** 在SkyNode中使用的最小星数 41 | 42 | 43 | 联网: 44 | 45 | **OSGEARTH_HTTP_DEBUG:** 显示HTTP调试消息(设置为1) 46 | 47 | **OSGEARTH_HTTP_TIMEOUT:** 设置HTTP超时(秒) 48 | 49 | **OSG_CURL_PROXY:** 为HTTP请求设置代理服务器(字符串) 50 | 51 | **OSG_CURL_PROXYPORT:** 设置HTTP代理服务器的代理端口(整数) 52 | 53 | **OSGEARTH_CURL_PROXYAUTH:** 设置代理验证信息(用户名:密码) 54 | 55 | **OSGEARTH_SIMULATE_HTTP_RESPONSE_CODE:** 模拟HTTP错误(用于调试;设置为HTTP响应代码) 56 | 57 | 58 | 其他: 59 | 60 | **OSGEARTH_USE_PBUFFER_TEST:** 指示osgEarth平台功能分析器创建基于PBUFFER的瓦片内容,以收集GL支持信息。(设为1) 61 | -------------------------------------------------------------------------------- /ReferenceGuides/SymbologyReference.md: -------------------------------------------------------------------------------- 1 | # 符号系统参考(Symbology Reference) 2 | osgEarth使用*样式表(Stylesheets)* 渲染*特征(features)* 和*注解(annotations)* 。这个文档列出了样式表中可使用的所有符号属性。不是所有的符号都适用于所有情况,这只是一个主要列表。 3 | 4 | 跳转到符号: 5 | * [几何体](./SymbologyReference.md#几何体) 6 | * [海拔](./SymbologyReference.md#海拔) 7 | * [拉伸](./SymbologyReference.md#拉伸) 8 | * [图标](./SymbologyReference.md#图标) 9 | * [模型](./SymbologyReference.md#模型) 10 | * [渲染](./SymbologyReference.md#渲染) 11 | * [表面](./SymbologyReference.md#表面) 12 | * [文本](./SymbologyReference.md#文本) 13 | * [覆盖](./SymbologyReference.md#覆盖) 14 | 15 | **开发者提示:** 16 | 17 | 在SDK中,符号系统处于`osgEarth::Symbology`命名空间中,例如,任意符号类的格式都是`AltitudeSymbol`。下述属性与在地球文件中显示的相同;在SDK中,属性可通过访问者以LineSymbol::strokeWidth()等形式获得。 18 | 19 | 20 | ## 数值类型 21 | 这些事基本数值类型(value types)。在本页的符号系统列表中,每个属性在其描述中的括号内包含数值类型。 22 | 23 | ||| 24 | |---|---| 25 | |**float** |浮点数| 26 | |**float with units** |带有单位指示符的浮点数,例如20px(20像素)或10m(10米)| 27 | |**HTML_Color** |十六进制格式的颜色字符串,用于HTML;格式为#RRGGBB或#RRGGBBAA。(例如:#FFCC007F)| 28 | |**integer** |整数| 29 | |**numeric_expr** |数字表达式(简单或JavaScript)| 30 | |**string** |简单文本字符串| 31 | |**boolean** |true或false| 32 | |**string_expr** |文本字符串表达式(简单或JavaScript)| 33 | |**uri_string** |表示资源位置的字符串(如URL或文件路径)。URI可以是绝对的或相对的;相对URI始终相对于引用者的位置,即请求资源的实体。(例如,地球文件中的相对URI将相对于地球文件本身的位置。)| 34 | 35 | 36 | ## 几何体 37 | 基本*几何体符号(geometry symbols)* (SDK:`LineSYMBOL`,`PolygonSymbol`,`PointSymbol`)控制矢量数据的颜色和样式。 38 | 39 | 40 | ## 海拔 41 | *海拔符号(altitude symbols)* (SDK:`AltitudeSymbol`)控制特征与其所在位置地形的交互。 42 | 43 | |**属性** |**描述** | 44 | |---|----| 45 | |altitude-clamping|控制地形跟随行为| 46 | ||**none:** 无固定(clamping)| 47 | ||**terrain:** 固定地形并丢弃Z值| 48 | ||**relative:** 固定地形并保留Z值| 49 | ||**absolute:** 特征的Z值包含其绝对Z值| 50 | |altitude-technique|当`altitude-clamping`设置为`terrain`,选择一种地形跟随方式| 51 | ||**map:** 将几何体固定于地图的高程数据瓦片中| 52 | ||**drape:** 使用投影纹理固定几何体| 53 | ||**gpu:** 将几何体固定在GPU上的地形上| 54 | ||**scene:** 将几何体重新固定到新的平铺瓦片(仅限注释)| 55 | |altitude-bindling|当`altitude-technique`是`map`时地图采样的间隔尺寸| 56 | ||**vertex:** 固定每个定点| 57 | ||**centroid:** 对每个特征仅固定质心| 58 | |altitude-resolution|当`altitude-technique`是`map`(浮点数)时,地形高度采样的高程数据分辨率| 59 | |altitude-offset|应用于几何体Z值的垂直偏移| 60 | |altitude-scale|应用于几何体Z值的尺度因子| 61 | 62 | 提示:你也可以使用快捷方式激活覆盖或GPU固定,将`altitude-clamping`设置为`terrain-drape`或`terrain-gpu`。 63 | 64 | 65 | ## 拉伸 66 | *拉伸符号(extrusion symbol)* (SDK:`ExtrusionSymbol`)指示osgEarth从源矢量数据创建拉伸几何体;拉伸将2D矢量转换为3D形状。注意:拉伸属性的简单存在将启用拉伸。 67 | 68 | |**属性** |**描述** | 69 | |---|----| 70 | |extrusion-height|拉伸矢量数据的距离(numeric-expr)| 71 | |extrusion-flatten|是否将所有拉伸顶点强制为相同的Z值(bool)。例如,如果要拉伸多边形来制作三维建筑物,将此设置为true将强制屋顶平坦,即使底层地形不是(boolean)| 72 | |extrusion-wall-gradient|在三维形状基础上乘以拉伸几何体的填充颜色的因子。这导致三维形状在底部比在顶部更暗,效果很好(float [0..1];尝试0.75)| 73 | |extrusion-wall-style|osgEarth应该应用于拉伸形状的墙的同一样式表中的另一个样式的名称(string)| 74 | |extrusion-roof-style|osgEarth应该应用于拉伸形状屋顶的同一样式表中的另一个样式的名称(string)| 75 | 76 | ## 表面 77 | 在适用的情况下,*表面符号(skin symbol)* (SDK:`SkinSymbol`)将纹理地图应用于几何体。(目前这只适用于拉伸几何体。) 78 | 79 | |**属性** |**描述** | 80 | |---|----| 81 | |skin-library|包含表面资源库的名称| 82 | |skin-tags|字符串集(由空格分隔,包含一个或多个资源标记。当选择要应用的纹理表面时,osgEarth将选择限制为使用其中一个标记的表面。如果省略此属性,则会考虑所有外观。例如,如果要拉伸建筑物,则可能只考虑使用`建筑物`标签纹理(string)| 83 | |skin-tiled|当设置为`true`时,osgEarth将仅考虑选择有`tiled`属性的表面设置为`true`。`tiled`属性表示表面可以用作重复纹理(boolean)| 84 | |skin-object-height|特征真实世界高度的数字表达式(以米为单位)。osgEarth使用此值将选择范围缩小到适合该高度的表面(即,值落在表面的最小/最大对象高度范围之间的表面。(numeric-expr)| 85 | |skin-min-object-height|告诉osgEarth仅考虑最小对象高度大于或等于此值的表面(数字表达式)| 86 | |skin-max-object-height|告诉osgEarth仅考虑最大对象高度小于或等于此值的表面(数字表达式)| 87 | |skin-random-seed|一旦完成滤波(根据上面的属性,osgEarth确定从中选择的最小合适表面集合并随机选择一个。通过设置此种子值,您可以确保相同的“随机”选择每次运行应用程序时都会发生。(整数)| 88 | 89 | ## 图标 90 | *图标符号(icon symbol)*(SDK:`IconSymbol`)描述了二维图标的外观。 图标用于不同的事物,最常见的是: 91 | * 代替点模型——用图标代替几何体 92 | * 放置注释 93 | 94 | |**属性** |**描述** | 95 | |---|----| 96 | |icon|图标图像的URI(uri-string)| 97 | |icon-library|包含图标的资源库名称(可选)| 98 | |icon-placement|对于模型替换,描述了osgEarth如何用图标代替几何体:| 99 | ||**vertex:** 用图标替换几何体中的每个顶点| 100 | ||**interval:** 根据`icon-density`属性,沿几何体以固定间隔放置图标| 101 | ||**random:** 根据图`icon-density`属性,在几何体中随机放置图标| 102 | ||**centroid:** 在几何体的质心处放置一个图标| 103 | |icon-density|对于`interval(间隔)`或`random(随机)`的`icon-placement`设置,此属性提示osgEarth应放置多少个实体。该单位约为“每公里的单位”(对于线性数据),或对于多边形数据为“每平方公里单位”。(浮点数)| 104 | |icon-scale|按此数量缩放图标(浮点数)| 105 | |icon-heading|沿中心轴旋转图标(浮点数,度)| 106 | |icon-declutter|激活此图标的清理(decluttering)。osgEarth将尝试自动显示或隐藏事物,以便它们不会在屏幕上重叠。(bool)| 107 | |icon-align|设置图标相对于其锚点的位置。有效值的格式为“水平-垂直”,包括:| 108 | ||* `left-top`| 109 | ||* `left-center`| 110 | ||* `left-bottom`| 111 | ||* `center-top`| 112 | ||* `center-center`| 113 | ||* `center-bottom`| 114 | ||* `right-top`| 115 | ||* `right-center`| 116 | ||* `right-bottom`| 117 | |icon-random-seed|对于随机放置操作,设置此种子,以便每次运行应用程序时可以重复随机化(整数)| 118 | |icon-occlusion-cull|是否剔除遮挡文本,以便在视线受到地形阻挡时不显示| 119 | |icon-occlusion-cull-altitude|当视线被地形阻挡时,观察者高度(MSL)开始剔除遮挡| 120 | 121 | ## 模型 122 | *模型符号(model symbol)*(SDK:`ModelSymbol`)描述了外部三维模型。与图标一样,模型通常用于: 123 | * 代替点模型——用三维模型代替几何体 124 | * 模型注释 125 | 126 | |**属性** |**描述** | 127 | |---|----| 128 | |model|三维模型的URI(uri-string)。使用这个**或** `model-library`属性,但不能同时使用两者。| 129 | |model-library|包含模型的资源库名称。使用此**或** `model`属性,但不能同时使用两者。| 130 | |model-placement|对于模型替换,描述osgEarth应如何用模型代替几何体:| 131 | ||**vertex:** 用模型替换几何体中的每个顶点| 132 | ||**interval:** 根据`icon-density`属性,沿几何体以固定间隔放置模型| 133 | ||**random:** 根据图`icon-density`属性,在几何体中随机放置模型| 134 | ||**centroid:** 在几何体的质心处放置一个模型| 135 | |model-density|对于`interval(间隔)`或`random(随机)`的`model-placement`设置,此属性提示osgEarth应放置多少个实体。该单位约为“每公里的单位”(对于线性数据),或对于多边形数据为“每平方公里单位”。(浮点数)| 136 | |model-scale|沿所有轴按此数量缩放图标(浮点数)| 137 | |model-heading|旋转其+Z轴(浮点数,度)| 138 | |icon-random-seed|对于随机放置操作,设置此种子,以便每次运行应用程序时可以重复随机化(整数)| 139 | 140 | ## 渲染 141 | *渲染符号(render symbol)*(SDK:`RenderSymbol`)应用常规OpenGL渲染设置以及一些特定于osgEarth的设置,这些设置并非特定于任何其他符号类型。 142 | 143 | |**属性** |**描述** | 144 | |---|----| 145 | |render-depth-test|启用或禁用GL深度测试(boolean)| 146 | |render-lighting|启用或禁用GL照明(boolean)| 147 | |render-transparent|透明度(深度排序)bin中渲染的提示(boolean)| 148 | |render-bin|渲染bin用于排序(字符串)| 149 | |render-depth-offset|启用或禁用深度偏移。深度偏移是一种GPU技术,它修改片段的深度值,模拟该对象的渲染距离观察者比实际更近或更远。这是一种减轻深度冲突(z-fighting)的机制(boolean)| 150 | |render-depth-offset-min-bias|设置深度偏移的最小偏差(距观察者偏移)。如果此属性通常设置得充足,其他的所有将自动设置(浮点数,米)| 151 | |render-depth-offset-max-bias|设置深度偏移的最小偏差(距离观察者偏移)| 152 | |render-depth-offset-min-range|设置应用最小深度偏移偏差的范围(距观察者的距离)。偏差在指定范围内的最小值和最大值之间逐渐变化| 153 | |render-depth-offset-max-range|设置应用最大深度偏移偏差的范围(距观察者的距离)。偏差在指定范围内的最小值和最大值之间逐渐变化| 154 | 155 | ## 文本 156 | *文本符号(text symbol)* (SDK:`TextSymbol`)控制文本标签的存在和显示。 157 | 158 | |**属性** |**描述** | 159 | |---|----| 160 | |text-fill|文本的前景色(HTML颜色)| 161 | |text-size|文本大小(浮点数,像素)| 162 | |text-font|要使用的字体的名称(取决于系统)。例如,对于Arial Bold在Windows上使用“arialbd”| 163 | |text-halo|文本的轮廓颜色;没有轮廓时完全忽略这个属性(HTML颜色)| 164 | |text-halo-offset|轮廓粗细(浮点数,字形宽度的百分比,默认值0.0625)| 165 | |text-offset-x|文本的x偏移量,以字形宽度的百分比表示,默认为0.0625| 166 | |text-offset-y|文本的y偏移量,以字形宽度的百分比表示,默认为0.0625| 167 | |text-align|文本字符串相对于其中心点(anchor point)的对齐方式| 168 | ||* `left-top`| 169 | ||* `left-center`| 170 | ||* `left-bottom`| 171 | ||* `left-base-line`| 172 | ||* `left-bottom-base-line`| 173 | ||* `center-top`| 174 | ||* `center-center`| 175 | ||* `center-bottom`| 176 | ||* `center-base-line`| 177 | ||* `center-bottom-base-line`| 178 | ||* `right-top`| 179 | ||* `right-center`| 180 | ||* `right-bottom`| 181 | ||* `right-base-line`| 182 | ||* `right-bottom-base-line`| 183 | ||* `base-line`| 184 | |text-layout|文本布局| 185 | ||* `ltr`| 186 | ||* `rtl`| 187 | ||* `vertical`| 188 | |text-content|要显示的实际文本字符串(string-expr)| 189 | |text-encoding|文本内容的字符编码:| 190 | ||* `utf-8`| 191 | ||* `utf-16`| 192 | ||* `utf-32`| 193 | ||* `ascii`| 194 | |text-declutter|激活此图标的清理(decluttering)。osgEarth将尝试自动显示或隐藏事物,以便它们不会在屏幕上重叠。(bool)| 195 | |text-occlusion-cull|是否剔除遮挡文本,以便在视线被地形阻挡时不显示| 196 | |text-occlusion-cull-altitude|当视线被地形阻挡时,观察者高度(MSL)开始剔除遮挡| 197 | 198 | 199 | ## 覆盖 200 | *覆盖符号(coverage symbol)* (SDK:`CoverageSymbol`)控制如何使用离散值将要素栅格化为覆盖数据。 201 | 202 | |**属性** |**描述** | 203 | |----|----| 204 | |coverage-value|要编码的浮点值表达式| 205 | -------------------------------------------------------------------------------- /UserGuide.md: -------------------------------------------------------------------------------- 1 | # 用户指南 2 | * [工具](./UserGuide/Tools.md) 3 | * [osgearth_viewer](./UserGuide/Tools.md#osgearth_viewer) 4 | * [osgearth_version](./UserGuide/Tools.md#osgearth_version) 5 | * [osgearth_cache](./UserGuide/Tools.md#osgearth_cache) 6 | * [osgearth_conv](./UserGuide/Tools.md#osgearth_conv) 7 | * [osgearth_package](./UserGuide/Tools.md#osgearth_package) 8 | * [osgearth_tfs](./UserGuide/Tools.md#osgearth_package) 9 | * [osgearth_backfill](./UserGuide/Tools.md#osgearth_backfill) 10 | * [osgearth_boundarygen](./UserGuide/Tools.md#osgearth_boundarygen) 11 | * [osgearth_overlayviewer](./UserGuide/Tools.md#osgearth_overlayviewer) 12 | * [使用地球文件](./UserGuide/UsingEarthFiles.md) 13 | * [地球文件内容](./UserGuide/UsingEarthFiles.md#地球文件内容) 14 | * [一个简单的地球文件](./UserGuide/UsingEarthFiles.md#一个简单的地球文件) 15 | * [多个图像层](./UserGuide/UsingEarthFiles.md#多个图像层) 16 | * [添加高程数据](./UserGuide/UsingEarthFiles.md#添加高程数据) 17 | * [缓存](./UserGuide/UsingEarthFiles.md#缓存) 18 | * [缓存](./UserGuide/Caching.md) 19 | * [设置缓存](./UserGuide/Caching.md#设置缓存) 20 | * [缓存策略](./UserGuide/Caching.md#缓存策略) 21 | * [环境变量](./UserGuide/Caching.md#环境变量) 22 | * [缓存策略设置中的优先级](./UserGuide/Caching.md#缓存策略设置中的优先级) 23 | * [填充缓存](./UserGuide/Caching.md#填充缓存) 24 | * [空间参考](./UserGuide/SpatialReferences.md) 25 | * [SRS的组成](./UserGuide/SpatialReferences.md#SRS的组成) 26 | * [SRS的表示](./UserGuide/SpatialReferences.md#SRS的表示) 27 | * [在osgEarth中使用空间参考](./UserGuide/SpatialReferences.md#在osgEarth中使用空间参考) 28 | * [特征和符号](./UserGuide/FeaturesandSymbology.md) 29 | * [了解特征](./UserGuide/FeaturesandSymbology.md#了解特征) 30 | * [创建特征图层](./UserGuide/FeaturesandSymbology.md#创建特征图层) 31 | * [样式](./UserGuide/FeaturesandSymbology.md#样式) 32 | * [地形跟踪](./UserGuide/FeaturesandSymbology.md#地形跟踪) 33 | * [渲染大数据集](./UserGuide/FeaturesandSymbology.md#渲染大数据集) 34 | -------------------------------------------------------------------------------- /UserGuide/Caching.md: -------------------------------------------------------------------------------- 1 | # 缓存 2 | 由于源数据的性质,osgEarth在它成为地形图之前不得不对其进行一些处理,包括下载、二次投影、裁剪,修复以及合成等等。这些操作成本较高。通过设置缓存,您可以指示osgEarth存储处理结果,以便下次需要相同的贴片时不需要重复执行。 3 | 4 | 注意!osgEarth的缓存使用的是内部数据存储表示,不应通过任何公共API访问。它仅用作瞬态缓存而不是数据发布格式,结构可随时更改。如果要发布数据存储库,请考虑使用osgearth_package! 5 | 6 | ## 设置缓存 7 | 您可以在地球文件中设置缓存。以下设置将自动激活所有图像和高程图层上的缓存: 8 | ```C++ 9 | 10 | 11 | 12 | folder_name 13 | 14 | ``` 15 | 在代码中,这将是这样的: 16 | ```c++ 17 | FileSystemCacheOptions cacheOptions; 18 | cacheOptions.path() = ...; 19 | 20 | MapOptions mapOptions; 21 | mapOptions.cache() = cacheOptions; 22 | ``` 23 | 或者,您可以使用适用于所有地球文件的环境变量。请记住,这将覆盖地球文件中的缓存设置: 24 | ```C++ 25 | set OSGEARTH_CACHE_DRIVER=leveldb 26 | set OSGEARTH_CACHE_PATH=folder_name 27 | ``` 28 | 在代码中,您可以在osgEarth注册表中设置全局缓存: 29 | ```C++ 30 | osgEarth::Registry::instance()->setCache(...); 31 | osgEarth::Registry::instance()->setDefaultCachePolicy(...); 32 | ``` 33 | ## 缓存策略 34 | 一旦设置了缓存,osgEarth将默认使用它来处理所有图像和高程图层。如果要覆盖此行为,可以使用缓存策略。缓存策略告诉osgEarth某个对象是否可以以及如何使用缓存。 35 | 36 | 在地球文件中,您可以使用`cache_policy`块执行此操作。这里我们将它应用于整幅地图: 37 | ```C++ 38 | 39 | 40 | 41 | ``` 42 | 也可以在单个图层中应用策略: 43 | ```C++ 44 | 45 | 46 | ... 47 | ``` 48 | 缓存策略使用的值为: 49 | 50 | **read_write:** 默认值。如果配置了缓存,则使用缓存。 51 | 52 | **no_cache:** 即使有缓存,也不使用。只能直接从数据源读取。 53 | 54 | **cache_only:** 如果设置了缓存,则只使用缓存中的数据; 永远不使用数据源。 55 | 56 | 您还可以将缓存使对象设为过期。默认情况下,缓存数据永不过期,但您可以使用`max_age`属性设置对象的有效时间: 57 | ```C++ 58 | 59 | ``` 60 | 指定最大年龄(以秒为单位)。上面的示例将使超过一个小时的对象失效。 61 | 62 | ## 环境变量 63 | 有时在环境中控制缓存更方便,尤其在开发中。 64 | 65 | 这些变量将覆盖缓存的策略属性: 66 | 67 | **OSGEARTH_NO_CACHE:** 在任意osgEarth地图中应用`no_cache`策略。(设为1) 68 | 69 | **OSGEARTH_CACHE_ONLY:** 在任意osgEarth地图中应用`cache_only`策略。(设为1) 70 | 71 | **OSGEARTH_CACHE_MAX_AGE:** 将缓存设置为使用对象的时间超过此秒数。 72 | 73 | 以下不包含于缓存策略,而是控制特定的缓存实现。 74 | 75 | **OSGEARTH_CACHE_PATH:** 缓存的根目录。设置此选项将为任何使用中的缓存驱动器用缓存。 76 | 77 | **OSGEARTH_CACHE_DRIVER:** 设置要使用的缓存驱器的名称,例如`filesystem`或`leveldb`。 78 | 79 | **注意:** 环境变量会覆盖*地球文件*中的缓存设置!见下文。 80 | 81 | ## 缓存策略设置中的优先级 82 | 由于您可以在各个地方设置缓存策略,因此我们需要建立优先级。以下为规则: 83 | 84 | - **地图设置** 这是在地球文件的`` ``块中`Map`对象中设置的缓存策略,将为地图中的每个图层设置默认缓存策略。这是最低级的政策设置;它可以被以下任何设置覆盖。 85 | 86 | - **图层设置** 这是在`ImageLayer`(图像图层)或`ElevationLayer`(高程图层)对象(或地球文件中的` `或` `块)中设置的缓存策略。这将覆盖`Map`中的顶级设置,但不会覆盖环境设置的缓存策略(参见下文)。(这也是覆盖驱动器策略提示的唯一方法(见下文),但您很少需要这样做。) 87 | 88 | - **环境变量** 它们被读取并存储在Registry的overrideCachePolicy(覆盖缓存策略)中,它们将覆盖地图或图层中的设置。但是,它们不会覆盖驱动器策略提示。 89 | 90 | - **驱动器策略提示** 有时驱动器会告诉osgEarth永远不缓存它提供的数据,并且osgEarth将服从。覆盖它的唯一方法是在层本身上明确设置缓存策略。(你很少会担心这个。) 91 | 92 | ## 填充缓存 93 | 有时,为特定感兴趣的区域预先设置缓存是很有用的。osgEarth提供了一个名为`osgearth_cache`的功能来完成此任务。`osgearth_cache`将获取一个Earth文件并填充它找到的任何缓存。 94 | 95 | 在命令行上键入`osgearth_cache --help`以获取使用信息。 96 | 97 | **注意:** 缓存是一个瞬态的“黑匣子”,旨在提高某些情况下的性能。它不是一个可分发的数据存储库。在许多情况下,您可以将缓存文件夹从一个环境移动到另一个环境,它可以工作,但osgEarth不保证这样的行为。 98 | -------------------------------------------------------------------------------- /UserGuide/FeaturesandSymbology.md: -------------------------------------------------------------------------------- 1 | # 特征和符号(Features & Symbology) 2 | ## 了解特征(Understanding Features) 3 | **特征**是向量几何。与图像和高程数据(光栅)不同,功能没有离散显示的分辨率。osgEarth可以在任何细节级别渲染特征。 4 | 5 | **特征**是三个组件的组合: 6 | 7 | - 向量几何(点、线或多边形的集合) 8 | - 属性(对应的名称/值的集合) 9 | - 空间参考(描述几何坐标) 10 | 11 | ## 创建特征图层(Creating a Feature Layer) 12 | osgEarth有两种方法渲染特征: 13 | - 作为*图像图层*栅格化 14 | - 作为*模型图层*进行细化 15 | 16 | ### 栅格化(Rasterization) 17 | 栅格化特征是最简单的方法——osgEarth将在图像贴片上“画出”向量然后在普通图像图层中使用这个图像贴片。 18 | 19 | osgEarth有一个特征栅格化驱动器:`agglite`驱动器。以下是将一个ESRI形状文件渲染成图像图层的例子: 20 | ```XML 21 | 22 | 23 | states.shp 24 | 25 | 26 | 32 | 33 | 34 | ``` 35 | ### 细化(Tessellation) 36 | 特征细化通过一系列处理将输入的向量转换为OSG几何(点、线、三角形或替代三维模型)。主要的特征细分插件为`feature_geom`驱动器——你会发现在大多数展示特征数据用法的osgEarth地球文件中都用到了它。 37 | 38 | 以下是用一些黄线将一个ESRI形状文件渲染的一个模型图层,将其渲染为OSG线几何。 39 | ```XML 40 | 41 | 42 | states.shp 43 | 44 | 45 | 51 | 52 | 53 | ``` 54 | 你也可以将特征数据作为单独的图层引用。在有多个使用相同数据集的特征图层时非常有用。 55 | ```XML 56 | 57 | states.shp 58 | 59 | 60 | 61 | 62 | 68 | 69 | 70 | ``` 71 | ### 特征图层的组成(Components of a Feature Layer) 72 | 从上述例子中可以看出,对于任意特征图层有一些必要的组成部分。 73 | - ``模块描述实际特征源,比如osgEarth在哪里获取输入数据。另外,``引用另一个指定特征数据的图层。 74 | - ``模块描述osgEarth如何渲染特征,比如他们在屏幕上的形态,我们称其为*样式表*或*符号*。样式表的构成可以从根本上改变特征数据的外观。 75 | 这两个要素都是必选的。 76 | 77 | ## 样式(Styling) 78 | 对于地球文件,你可能会看到类似如下的 ``模块: 79 | ```XML 80 | 81 | 89 | 90 | ``` 91 | 这是一个样式表模块。你可以在正在渲染特征数据的``图层发现它,对应于``模块。(``模块确定了实际内容的来源。) 92 | 93 | 在这种情况下,` 127 | 128 | 129 | ``` 130 | 样式表包含一个称为`default`(默认)的样式。由于只有一种样式,osgEarth将其用于所有输入特征。(若要将不同样式应用于不同特征,要使用*选择器*——以下列出更多信息) 131 | 132 | 样式包含一系列符号来描述osgEarth应如何渲染特征几何体。在这种情况下: 133 | 134 | **fill:** 用指定的HTML样式颜色填充多边形(此处用到橘色)。 135 | 136 | **stroke:** 用白色对多边形描边。 137 | 138 | **stroke-width:** 用2像素宽描边。 139 | 140 | **altitude-clamping:** 将多边形置于地形。 141 | 142 | **altitude-technique:** 使用“覆盖(draping)”技术放置多边形(投影纹理)。 143 | 144 | **render-lighting:** 禁用多边形中的OpenGL光照。 145 | 146 | 这只是可用符号的一小部分示例。可以在[符号系统参考](osgearth-docs-cn/ReferenceGuides/SymbologyReference.md)获取完整表格。 147 | 148 | ### 表达式(Expressions) 149 | 有些符号特性支持*表达式*。一个表达式是一个简单的内联计算,它使用特征属性值来动态地计算特性 。 150 | 151 | 在一个表达式中,可以通过将其名称括在方括号中来访问特征属性值,如下所示:`\[name]` 152 | 153 | 示例: 154 | ```XML 155 | mystyle { 156 | extrusion-height: [hgt]*0.3048; - 读取“hgt”属性,将其单位从英尺转换为米 157 | altitude-offset: max([base_offset], 1); - 使用“base_offset”中较大的数值和1.0 158 | text-content: "Name: [name]"; - 将文本标签设置为文字和属性值的串联 159 | } 160 | ``` 161 | 数值表达式计算器支持基本算术(+,-,\*,/%)一些使用函数(min,max)和括号分组。它也适用于字符串值,没有运算符仍然可以嵌入属性。 162 | 163 | 如果简单表达式不够,可以使用Javascript: 164 | ```Javascript 165 | 166 | 171 | 172 | 178 | 179 | ``` 180 | 181 | ## 地形跟踪(Terrain Following) 182 | 特征以某种方式与地形交互是相当常见的。对此的要求包括: 183 | - 沿着地形轮廓的街道 184 | - 种植在地面上的树木 185 | - 专题制图,例如根据人口对国家/地区进行着色 186 | 187 | osgEarth提供各种地形跟踪方法,因为没有一种方法最适合所有情况。 188 | 189 | ### Map Clamping 190 | Map Clamping是最简单的方法。在编译要显示的特征时,osgEarth将对地图中的高程图层进行采样,找到图像的高度,并将其应用于生成的特征几何图形。它将对几何体上的每个点进行测试。 191 | 192 | Map Clamping可实现高质量渲染。 193 | - 根据选择的分辨率,可以对地图中的高程数据进行慢速采样。对于大量功能,它可能是CPU密集型且耗时的。 194 | - 采样是准确的,并且对几何中的每个点都进行了采样。可以选择在每个功能的质心处进行采样,以提高编译速度。 195 | - 根据特征几何的分辨率,可能需要对数据进行细分以获得更好的质量。 196 | - 与其他方法相比,渲染质量良好。 197 | 198 | 您可以在样式表中激活map clamping,如下所示: 199 | ```XML 200 | altitude-clamping: terrain; // 开启地形跟踪 201 | altitude-technique: map; // 将特征置于地图数据 202 | altitude-resolution: 0.005; // [可选]所放置的地图数据的分辨率 203 | ``` 204 | 205 | ### 覆盖(Draping) 206 | *覆盖*是在地形表面上覆盖编译几何体的过程,就像在不平坦表面上“覆盖”毯子一样。 osgEarth将特征渲染到纹理(RTT),然后将该纹理投射到地形上。 207 | 208 | 覆盖有其优点和缺点: 209 | - 覆盖将完美地适应地形;不用担心分辨率或细分。 210 | - 渲染线条或多边形边缘时,可能会出现锯齿状。投影纹理的大小有限,并且必须覆盖的区域越大,投影图像的分辨率越低。这意味着在实践中,覆盖对多边形比对线条更有用。 211 | - 意料之外的混色可能是由于在彼此顶部覆盖许多透明几何图形而导致的。 212 | 213 | 您可以像这样激活覆盖: 214 | ```XML 215 | altitude-clamping: terrain; // 开启地形追踪 216 | altitude-technique: drape; // 用投影纹理覆盖特征 217 | ``` 218 | 219 | ### GPU Clamping 220 | *GPU Clamping*使用GPU着色器来实现近似地形跟踪。分为两个阶段:首先利用其深度场采样将每个顶点置于顶点着色器中的地形表面;然后在碎片着色器中应用深度偏移算法以缓和深度冲突(z-fighting)。 221 | 222 | GPU clamping也有其优缺点: 223 | - 它非常适合于线条(甚至是三角形线条),但对于多边形则不太适合,因为它需要对多边形的内部进行细分以便进行良好的近似放置。 224 | - 速度快,完全在运行时进行,并利用GPU的并行处理。 225 | - 在覆盖中没有锯齿状边缘影响。 226 | 227 | 这样设置GPU clamping: 228 | ```XML 229 | altitude-clamping: terrain; // 开启地形追踪 230 | altitude-technique: gpu; // 在GPU上放置、补偿特征数据 231 | ``` 232 | 233 | ## 渲染大数据集(Rendering Large Datasets) 234 | 以下是在osgEarth中加载特征数据最简单的方法: 235 | ```XML 236 | 237 | 238 | data.shp 239 | 240 | 241 | data { 242 | fill: #ffff00; 243 | } 244 | 245 | 246 | ``` 247 | 我们刚刚加载了形状文件中的每个功能,并将它们全部涂成黄色。 248 | 249 | 这在某种程度上可以正常工作——osgEarth(和OSG)因过多的几何体而过载。 即使使用osgEarth的几何编译器所采用的优化,足够大的数据集也会耗尽系统资源。 250 | 251 | 解决方案是特征的平铺和分页。以下是配置方法。 252 | 253 | ### 特征显示布局(Feature display layouts) 254 | 特征显示布局激活特征数据的分页和切片。修改一下前面的例子: 255 | ```XML 256 | 257 | 258 | data.shp 259 | 260 | 261 | 262 | 250000 263 | 264 | 265 | 266 | 267 | data { 268 | fill: #ffff00; 269 | } 270 | 271 | 272 | ``` 273 | 仅仅存在``要素就会激活分页。 这意味着,一旦应用程序启动,特征数据将在后台加载和编译,而不是在加载时加载和编译。在特征数据出现在场景中之前可能存在延迟,具体取决于其复杂性。 274 | 275 | 布局中``要素的存在激活了平铺和细节层次。如果您的遗漏级别,数据仍将在后台加载,但它将立即加载。通过一个或多个级别,osgEarth会将特征数据分解为一个或多个细节级别的切片,并单独分页。以下是更多信息。 276 | 277 | 分页将数据分割为贴片。`tile_size`是每个分页贴片的宽度(以米为单位)。 278 | 279 | ### 裁剪特征(Cropping features) 280 | 默认情况下,如果特征与贴片相交,即使它延伸到贴片的范围之外,也会包含该贴片。这对于像拉伸建筑物这样的很有用,因为你不想看到半个建筑物页面,所以试图将它们切割成恰好适合于贴片是没有意义的。建筑物通常很小,所以它们延伸到贴片之外的距离相对也很小。 281 | 282 | 对于具有线性特征的道路或国家边界,裁剪它们来准确地贴片更有意义。视觉上来说,如果只看到一部分线条不会觉得不适应。您可以通过在布局上将`crop_features`特性设置为`true`来在布局上启用特征裁剪。 283 | 284 | 示例: 285 | ```XML 286 | 287 | 288 | roads.shp 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 301 | 302 | 303 | ``` 304 | ### 级别(Levels) 305 | 每个级别都描述了细节程度,是在这个级别上每个被渲染的贴片上的镜头范围(介于`min_range`和`max_range`之间)。但是每个贴片有多大呢?这是基于*贴片范围要素*(tile range factor)计算的。 306 | 307 | `tiel_size`设置了贴片的尺寸(以米为单位)。 308 | 309 | 为什么你要关心贴片尺寸呢?因为数据的密集程度将影响每个贴片中有多少个几何体。同时由于OSG(OpenGL)可以从向显卡发送大批量相似几何体中获益,因此调整贴片大小有助于提高性能和吞吐量。不幸的是,osgEarth无法准确得知“最佳”尺寸,因此你有机会使用此设置来调整。 310 | 311 | ### 布局设置(Layout Settings) 312 | **tile_size:** 布局中每个特征贴片在最大范围内的大小(在一个维度上)。必须设置最大范围才能生效。 313 | 314 | **max_range:** 预先平铺的特征源(如TFS)的所需最大范围。 315 | 316 | **min_range:** 布局中所有贴片的最小可见范围。 317 | 318 | **crop_features:** 在将特征级别切割为网格单元格时是否裁剪几何体以适合单元格范围。默认情况下是false,即将包含其质心落在单元格内的特征。将此设置为true意味着如果要素的任何部分包含于工作单元格,则会将其裁剪为单元格范围并使用。 319 | 320 | **priority_offset:** 设置将应用于此布局中计算的贴片分页优先级的偏移量。调整此值可能会影响此数据相对于场景中其他分页数据(如地形或其他特征图层)的优先级。默认值=0.0。 321 | 322 | **priority_scale:** 设置要应用于此布局中计算的贴片分页优先级的比例因子。调整此值可能会影响此数据相对于场景中其他分页数据(如地形或其他要素图层)的优先级。默认值= 1.0。 323 | 324 | **min_expiry_time:** 在特征贴片有资格进行分页之前的最短时间(秒)。将其设置为负数以完全禁用(即,铁盘将永远不会分页)。 325 | -------------------------------------------------------------------------------- /UserGuide/SpatialReferences.md: -------------------------------------------------------------------------------- 1 | # 空间参考 2 | 我们使用坐标在地球上确定位置,即以某种精度精确定位地图上特定位置的一组数字。但是只知道坐标是不够的;你需要知道如何理解它们。 3 | 4 | **空间参考**(SRS)将一组坐标映射到地球上的相应实际位置。 5 | 例如,给定地球上某个位置的坐标: 6 | ```C++ 7 | (-121.5, 36.8, 2000.0) 8 | ``` 9 | 若你不知道如何使用它们,这些数字是没有意义的。因此需要使用一些参考信息与之结合: 10 | ```C++ 11 | Coordinate System Type: Geographic 12 | Units: Degrees 13 | Horizontal datum: WGS84 14 | Vertical datum: EGM96 15 | ``` 16 | 现在就可以在地球上精确确定点的位置、它与其它点的关系,以及如何转换为其它表现形式。 17 | 18 | ## SRS的组成 19 | 一个*空间参考*,即SRS,包含: 20 | * [坐标系类型](./SpatialReferences.md#坐标系类型) 21 | * [水平基准面](./SpatialReferences.md#水平基准面) 22 | * [垂直基准面](./SpatialReferences.md#垂直基准面) 23 | * [投影](./SpatialReferences.md#投影) 24 | 25 | ### 坐标系类型 26 | osgEarth支持三种基本坐标系类型: 27 | - **地理**——一种全地球椭球模型。坐标是以度为单位的球面角度(经度和纬度),包括WGS84和NAD83。([了解更多](https://en.wikipedia.org/wiki/Geographic_coordinate_system)) 28 | - **投影**——一种在地球有限区域内的局部坐标系,并将其“投影”到二位笛卡尔(X,Y)平面,包括UTM、US State Plane和Mercator。 ([了解更多](https://en.wikipedia.org/wiki/Map_projection)) 29 | - **ECEF**——一种在整个地球的笛卡尔系统。ECEF=Earth Centered Earth Fixed(以地球为中心的地球固定),是一个三维笛卡尔系统(X,Y,Z),地球中心的原点(0,0,0);X轴与纬度/经度(0,0)相交,Y轴与纬度/经度(0,-90)相交,Z轴与北极相交。 ECEF是osgEarth呈现图形的原生系统。([了解更多](https://en.wikipedia.org/wiki/ECEF)) 30 | 31 | ### 水平基准面 32 | 基准是用于进行地理空间测量的一个参考点(或一组点)。地球上相同位置可以根据使用的数据而具有不同的坐标,有两类基准: 33 | 34 | **水平基准**测量地球上的位置。由于地球不是一个完美的球体,甚至不是一个完美的椭圆体,因此指定的基准面通常设计成接近于指定区域的地球形状。常见基准包括北美的**WGS84**和**NAD83**,以及欧洲的**ETR89**。 35 | 36 | ### 垂直基准面 37 | **垂直基准**测量高程。有几类垂直基准;osgEarth支持大地测量(基于椭圆体)和大地水准面(基于行星周围的一组高程点)。 38 | 39 | osgEarth内置了以下垂直基准: 40 | - 大地坐标系——默认; osgEarth使用水平基准椭球作为参考 41 | - EGM84大地水准面 42 | - EGM96大地水准面——通常称为MSL;用于DTED和KML 43 | - EGM2008大地水准面 44 | 45 | 默认情况下,osgEarth中的SRS使用大地垂直基准,即高度被测量为“基于椭圆体(HAE)的高度”。 46 | 47 | ### 投影 48 | SRS也具有投影,即将椭圆体上的点转换为二维平面(和背面)的数学公式。 49 | 50 | osgEarth支持数千个已知投影(通过GDAL/OGR工具包)。主要包括: 51 | - UTM(通用横轴墨卡托) 52 | - 球极平面 53 | - LCC(兰伯特等角圆锥) 54 | 55 | 每个都具有特定的特征,使其适用于某些类型的应用。请参阅维基百科上的[地图投影](https://en.wikipedia.org/wiki/Map_projection)以了解更多信息。 56 | 57 | ## SRS的表示 58 | 有许多方法可以定义SRS。osgEarth支持以下内容。 59 | ### WKT(众所周知的文字) 60 | WKT是用于描述坐标系的OGC标准,通常保存于“.prj”文件中,并携带一些地理空间数据,如形状文件或图像。 61 | 62 | 以下是*UTM Zone 15N*投影的WKT表示: 63 | ```C++ 64 | PROJCS["NAD_1983_UTM_Zone_15N", 65 | GEOGCS["GCS_North_American_1983", 66 | DATUM["D_North_American_1983", 67 | SPHEROID["GRS_1980",6378137.0,298.257222101]], 68 | PRIMEM["Greenwich",0.0], 69 | UNIT["Degree",0.0174532925199433]], 70 | PROJECTION["Transverse_Mercator"], 71 | PARAMETER["False_Easting",500000.0], 72 | PARAMETER["False_Northing",0.0], 73 | PARAMETER["Central_Meridian",-93.0], 74 | PARAMETER["Scale_Factor",0.9996], 75 | PARAMETER["Latitude_Of_Origin",0.0], 76 | UNIT["Meter",1.0]] 77 | ``` 78 | ### PROJ4 79 | PROJ4是osgEarth和数百个其他地理空间应用程序和工具包使用的地图投影工具包,它有描述SRS的简易表示。以下是与上文SRS相同的PROJ4格式: 80 | ```C++ 81 | +proj=utm +zone=15 +ellps=GRS80 +units=m +no_defs 82 | ``` 83 | PROJ4对于所有常见组件(如UTM区域和基准)都有数据表,因此您不必像使用WKT那样明确定义所有内容。 84 | 85 | ### EPSG代码 86 | EPSG(现已解散的欧洲石油勘探组)建立了一个数字代码表,用于引用常用投影。你可以在[这里](http://spatialreference.org/ref/epsg)浏览其列表。 osgEarth接受EPSG代码;为上面的例子可以表示为: 87 | ```C++ 88 | epsg:26915 89 | ``` 90 | EPFG是一种非常简易的表达方法,osgEarth所需要的OGR/PROJ4包含大量EPSG代码的表格。 91 | 92 | ### 别名 93 | 最后一类是命名SRS。有一些SRS非常常见,因此我们给它们简易表达。包括: 94 | 95 | **WGS84:**世界地理测量1984地理系统 96 | 97 | **球形墨卡托:**球形墨卡托(常用于网络制图系统) 98 | 99 | **plate-carre:**WGS84投影平面(X=经度,Y=纬度) 100 | 101 | ## 在osgEarth中使用空间参考 102 | 有几种方法可以在osgEarth中使用SRS,最简单的方法是使用`GeoPoint`类。我们先看看如何创建一个SRS,然后再继续学习。 103 | 104 | ### 空间参考API 105 | `SpatialReference`类表示SRS。osgEarth中的许多类和函数都需要SRS。以下是在代码中创建的方式: 106 | ```C++ 107 | const SpatialReference* srs = SpatialReference::get("epsg:4326"); 108 | ``` 109 | 信这将会创建一个人SRS。`get()`函数可以接受我们上述所提到的任何一种SRS表达形式:WKT、PROJ4、EPSG或者Alases。 110 | 111 | 如果你需要一个垂直基准面的SRS,使用第二个参数来表达。osgEarth支持egm84、egm96以及egm2008。这样使用: 112 | ```C++ 113 | srs = SpatialReference::get("epsg:4326", "egm96"); 114 | ``` 115 | 能够访问SRS的组件类型有时也很有用。例如,每个投影的SRS都具有基于它的基础地理SRS。可以通过以下方式得到: 116 | ```C++ 117 | geoSRS = srs->getGeographicSRS(); 118 | ``` 119 | 如果你要将投影点转换为纬度/经度,将会输出你想要的SRS。 120 | 121 | 你也可以获取与任何SRS相对应的地心(ECEF)SRS,如下所示: 122 | ```C++ 123 | geocentricSRS = srs->getGeocentricSRS(); 124 | ``` 125 | `SpatialReference`有许多函数来实现转换等功能,可以查询它们的头文件来了解。但是在实际中最好直接使用`GeoPoint`等类而不是`SpatialRefence`。 126 | 127 | ### GeoPoint API 128 | `GeoPoint`是二维或三维点的地理参考。(“地理参考”意味着坐标值与SRS相对应——也就是在地图上绘制该点所需要的所有信息都是自包含的。)还有其它“Geo”类,包括`GeoExtent`(一个边界框)和`GeoCircle`(一个边界圆)。 129 | 130 | 创建一个二维GeoPoint的方法如下: 131 | ```C++ 132 | GeoPoint point(srs, x, y); 133 | ``` 134 | 也可以利用高程来创建一个三维GeoPoint: 135 | ```C++ 136 | GeoPoint point(srs, x, y, z, ALTMODE_ABSOLUTE); 137 | ``` 138 | `ALTMODE_ABSOLUTE`是*高程模式*,当你指定三维坐标时需要它: 139 | 140 | `ALTMODE_ABSOLUTE`: 141 | 142 | Z相对于SRS的垂直基准面,如基于椭球面的高度或基于大地水准面的高度。 143 | 144 | `ALTMODE_RELATIVE`: 145 | 146 | Z相对于点位之下地形的高度。 147 | 148 | 现在有了`GeoPoint`可以进行转换了。将其转换到其它SRS: 149 | ```C++ 150 | GeoPoint point(srs, x, y); 151 | GeoPoint newPoint = point.transform(newSRS); 152 | ``` 153 | 这里有更加具体的例子。将基于纬度/经度(WGS84)的点用UTM Zone 15N表示: 154 | ```C++ 155 | const SpatialReference* wgs84 = SpatialReference::get("wgs84"); 156 | const SpatialReference* utm15 = SpatialReference::get("+proj=utm +zone=15 +ellps=GRS80 +units=m"); 157 | ... 158 | GeoPoint wgsPoint( wgs84, -93.0, 34.0 ); 159 | GeoPoint utmPoint = wgsPoint.transform( utm15 ); 160 | 161 | if ( utmPoint.isValid() ) 162 | // do something 163 | ``` 164 | 由于并不是某一个SRS中的每一个点都可以转换到另一个SRS中,所以要经常检查`isvalid()`。例如,UTM Zone 15仅对经度的6度带有定义——数值超过这个范围太大可能会失败。 165 | 166 | 167 | 168 | -------------------------------------------------------------------------------- /UserGuide/Tools.md: -------------------------------------------------------------------------------- 1 | # 工具 2 | osgEarth附带了许多工具,可以帮助你处理地球文件和地理空间数据。 3 | ## osgearth_viewer 4 | osgearth_viewer可以从命令行加载并显示地图。 osgEarth EarthManipulator(地球控制器)用于控制摄像机,并对地理空间数据的显示进行了优化。 5 | 6 | **样例** 7 | 8 | `osgearth_viewer earthfile.earth [options]` 9 | 10 | |选项|描述| 11 | |--------------------|--------------------| 12 | |--sky|安置SkyNode(太阳,月亮,星星和大气......仅限球状物)| 13 | |--kml\[file.kml]|加载KML或KMZ文件| 14 | |--kmlui|显示用于切换KML地标和文件夹的有限用户界面| 15 | |--coords|显示鼠标位置的地图坐标| 16 | |--ortho|安置正交相机投影| 17 | |--logdepth|在高速模式下激活对数深度缓冲区。| 18 | |--logdepth2|在高精度模式下激活对数深度缓冲区。| 19 | |--uniform \[name]\[min]\[max]|安置统一变量并显示屏幕滑块来控制它的数值,便于调试。| 20 | |--ico|激活OSG的IncrementalCompileOperation(增量编译操作),它将在一系列帧上编译页面对象(减少帧中断)。这实际上是一个OpenSceneGraph选项,但对osgEarth很有用| 21 | 22 | ## osgearth_version 23 | osgearth_version显示osgEarth的当前版本。 24 | 25 | |参数|描述| 26 | |--------------------|--------------------| 27 | |--caps|显示系统功能| 28 | |--major-number|仅显示主要版本号| 29 | |--minor-number|仅显示次要版本号| 30 | |--patch-number|仅显示补丁版本号| 31 | |--so-number|仅显示共享对象版本号| 32 | |--version-number|仅显示版本号| 33 | 34 | ## osgearth_cache 35 | osgearth_cache可用于管理osgEarth的缓存。有关缓存的更多信息,请参阅[缓存](.\Caching.md)。osgearth_cache最常见的用法是使用--seed参数以非交互方式填充缓存。 36 | 37 | **样例** 38 | 39 | `osgearth_cache --seed file.earth` 40 | 41 | |参数|描述| 42 | |--------------------|--------------------| 43 | |--list|列出.earth文件中有关缓存的信息| 44 | |--seed|在.earth文件中填充缓存| 45 | |--estimate|显示对执行此填充操作所需的拼贴数量、磁盘空间和时间的估计| 46 | |--mp|使用多处理来处理贴片。由于可以避免全局GDAL锁定,因此对于GDAL源有用| 47 | |--mt|使用多线程处理贴片| 48 | |--concurrency|提供-mp或-mt时使用的线程或进程数| 49 | |--min-level level|填充的最低LOD级别(默认=0)| 50 | |- max-level level|填充的最高LOD级别(默认=最高可得)| 51 | |--bounds xmin ymin xmax ymax|填充的地理空间边界框(在地图坐标中;默认=整个地图)| 52 | |--index shapefile|加载形状文件(.shp)并使用功能扩展区设置缓存填充边界框。对于形状文件中的每个特征,添加一个边界框(类似于--bounds)来约束要缓存的区域| 53 | |--cache-path path|覆盖.earth文件中的缓存路径| 54 | |--cache-type type|覆盖.earth文件中的缓存类型| 55 | |--purge|清除.earth文件中的图层缓存| 56 | 57 | ## osgearth_conv 58 | 59 | osgearth_conv将一个贴片源的内容复制到另一个。所有参数都是配置名称/值对,因此需要查看每个驱动程序的选项结构头文件中的选项。 当然,驱动程序必须支持写入输出(通过实现ReadWriteTileSource接口)。 “输入”属性来自GDALOptions getConfig,“输出”属性来自MBTilesOptions getConfig。 60 | 61 | **样例** 62 | 63 | `osgearth_conv --in driver gdal --in url world.tif --out driver mbtiles ` 64 | 65 | |参数|描述| 66 | |--------------------|--------------------| 67 | |--in \[name]\[value]|设置输入属性的值| 68 | |--out \[name]\[value]|设置输出属性的值| 69 | |--elevation|转换为高程数据(而不是影像数据)| 70 | |--profile \[profile]|重新投影到目标配置文件,如WGS84| 71 | |--min-level \[int]|可复制的最小细节级别| 72 | |--max-level \[int]|可复制的最大细节级别| 73 | |--threads \[n]|使用的线程(注意可能会崩溃,对于GDAL输入无效)| 74 | |--extents \[minLat]\[minLong]\[maxLat]\[maxLong]|纬度/经度扩展| 75 | 76 | ## osgearth_package 77 | osgearth_package从地球文件中创建可再分发的基于TMS的包。 78 | 79 | **样例** 80 | 81 | `osgearth_package --tms file.earth --out package` 82 | 83 | |参数|描述| 84 | |--------------------|--------------------| 85 | |--tms|制作一个TMS报告| 86 | |--out path|TMS报告输出的根目录(必填)| 87 | |--bounds| xmin ymin xmax ymax|包的边界(在地图坐标系中;默认:整个地图)你可以提供多个边界| 88 | |--max-level level|贴片的最大LOD等级(所有图层;默认=5)。注意:你可以将其设置为较大的数字以获取所有可用数据(例如,99),适用于文件(如GeoTIFF)。但是一些数据源不报告(或具有)最大数据级别,因此最好指定特定的最大值| 89 | |--out-earth earthfile|导出引用新报告的地球文件| 90 | |--ext extension|覆盖图像文件扩展名(例如jpg)| 91 | |--overwrite|覆盖现有贴片| 92 | |--keep-empties|写出完全透明的图像贴片(通常是被废弃的)| 93 | |--continue-single-color|继续细分单色贴片,细分一般停留在单色图像上| 94 | |--db-options|db选项串以引用传递给图像写入器(例如,“JPEG_QUALITY 60”)| 95 | |--mp|使用多处理来处理贴片,这对GDAL源有用,因为可以避免全局GDAL锁定| 96 | |--mt|使用多线程处理贴片| 97 | |--concurrency|提供-mp或-mt时使用的线程或进程数| 98 | |--alpha-mask|屏蔽不在提供范围内的图像| 99 | |--verbose|显示操作的进度| 100 | 101 | ## osgearth_tfs 102 | 103 | osgearth_tfs从特征源(如形状文件)生成TFS数据集。将特征预处理为TFS提供的网格结构,可以显著提高大数据集的性能。此外,生成的TFS包可以由任何标准网络服务器提供,网络启用数据集。 104 | 105 | **样例** 106 | 107 | `osgearth_tfs filename` 108 | 109 | |参数|描述| 110 | |--------------------|--------------------| 111 | |filename|形状文件(或其它特征源数据文件)| 112 | |--first-level level|特征被添加到四分树的第一层| 113 | |--max-level level|特征四分树的最大层| 114 | |--max-features|每片贴片中特征的最大数目| 115 | |--grid|生成具有指定分辨率的单层网格。默认单位是米(如50,100km,200mi)| 116 | |--out|目标目录| 117 | |--layer|要写入元数据文档的图层的名称 118 | |--description|要写入元数据文档的图层的抽象/描述| 119 | |--expression|运行特征源所用的表达,具体到特征源| 120 | |--order-by|如果尚未包含于表达中,对特征进行排序。附带DESC按降序排列!| 121 | |--crop|裁剪特征,而不是进行中心检查。启用裁剪时可以用于多个贴片| 122 | |--dest-srs|osgEarth可以理解的任何格式的目标SRS串(wkt,proj4,epsg)。如果没有特定的,则将使用源数据SRS| 123 | 124 | ## osgearth_backfill 125 | osgearth_backfill是一种专用工具,用于后处理TMS数据集。一些网络地图服务在不同的缩放级别使用完全不同的数据集。例如,他们可能会使用NASA BlueMarble图像,达到4级后突然切换到LANDSAT数据。这适用于2D滑动地图可视化,但在3D中查看时可能会在视觉上分散注意力,因为不同LOD相邻贴片看起来完全不同。 126 | 127 | osgearth_backfill允许您像通常那样生成TMS数据集(使用osgearth_package或其他工具),然后从指定的更高级别的详细信息中“回填”较低级别的详细信息。例如,您可以指定最大级别10,并且将根据级别10中获得的数据重新生成0-9级。 128 | 129 | **样例** 130 | 131 | `osgearth_backfill tms.xml` 132 | 133 | |参数|描述| 134 | |--------------------|--------------------| 135 | |--bounds xmin ymin xmax ymax|回填的边界(在地图坐标中;默认=整个地图)| 136 | |--min-level level|停止回填的最低级别(默认=0)| 137 | |--max-level level|开始回填的级别(默认=inf)| 138 | |--db-options|db选项串以引用传递给图像写入器(例如,“JPEG_QUALITY 60”)| 139 | 140 | ## osgearth_boundarygen 141 | osgearth_boundarygen生成可以与osgEarth 图层一起使用的边界几何体,以便将外部模型固定到地形中。 142 | 143 | **样例** 144 | 145 | `osgearth_boundarygen model_file \[options]` 146 | 147 | |参数|描述| 148 | |--------------------|--------------------| 149 | |--out file_name|边界几何体的输出文件(默认为boundary.txt)| 150 | |--no-geocentric|跳过地心重投影(适用于平面数据库)| 151 | |--convex-hull|计算凸壳,而不是完整边界| 152 | |--verbose|在控制台显示进度| 153 | |--view|在3D窗口中查看结果| 154 | |- tolerance N|小于此距离的顶点将合并(0.005)| 155 | |--precision N|输出坐标将有这么多有效数字(12)| 156 | 157 | ## osgearth_overlayviewer 158 | osgearth_overlayviewer是一个用于调试osgEarth覆盖装饰器功能的实用程序。它显示了两个窗口,一个窗口是显示地图的普通视图,另一个窗口显示用于覆盖计算的边界视锥。 159 | -------------------------------------------------------------------------------- /UserGuide/UsingEarthFiles.md: -------------------------------------------------------------------------------- 1 | # 使用地球文件 2 | 地球文件是地图的XML描述。创建一个地球文件是配置一幅地图并快速启动和运行它最简单的方法。在osgEarth存储库中,您将在`tests`文件夹中找到许多地球文件样例,涵盖各种主题并演示各种功能。我们鼓励探索并试用它们! 3 | 4 | 也可以参阅:[地球文件参考](osgearth-docs-cn/ReferenceGuide/EarthFileReference.md) 5 | 6 | ## 地球文件内容 7 | osgEarth使用一种基于XML的称为地球文件的文件格式来指定源数据如何变成OSG场景图。地球文件有`.earth`的扩展名,但它是XML。 8 | 9 | 基本来说地球文件可以帮助您指定: 10 | - 创造的地图的类型(地心或投影) 11 | - 用到的影像、高程、矢量和模型源 12 | - 数据缓存的位置 13 | 14 | ## 一个简单的地球文件 15 | 这是一个非常简单的示例,它从本地文件系统上的GeoTIFF文件中读取数据,并将其呈现为地心圆形地球场景: 16 | ```C++ 17 | 18 | 19 | world.tif 20 | 21 | 22 | ``` 23 | 此地球文件使用名为`bluemarble`的单个GeoTIFF图像源创建名为`MyMap`的地心地图。`driver`属性告诉osgEarth用于加载图像的哪个插件。(osgEarth使用插件框架从不同的源加载不同类型的数据。) 24 | 25 | 某些子元素(在`图像`中)特定于所选择的驱动程序。要了解有关驱动程序以及如何配置驱动程序的更多信息,请参阅[驱动器参考](osgearth-docs-cn/ReferenceGuide/DriverReference.md)。 26 | 27 | ## 多个图像层 28 | osgEarth支持具有多个图像源的地图。这允许您创建带有交通覆盖的基础图层的地图,或为位于较低分辨率基础地图上的特定区域提供高分辨率区域。 29 | 30 | 要在地球文件中添加多幅图像,可简单地将多个“图像”块添加到地球文件中。 31 | `C++ 32 | 33 | 34 | 35 | 36 | c:/data/bluemarble.tif 37 | 38 | 39 | 40 | 41 | c:/data/dc_high_res.tif 42 | 43 | 44 | 45 | ` 46 | 上面的地图使用GDAL驱动程序从本地数据源提供两个图像。定义多个图像源时,顺序很重要:osgEarth按照它们在地球文件中出现的顺序显示它们。 47 | 48 | *提示:地球文件中的相对路径被理解为相对于地球文件本身。* 49 | 50 | ## 添加高程数据 51 | 在地球文件中添加高程数据(有时被称为“地形数据”)和添加图像很相似。使用一个如下`高程`块: 52 | ```C++ 53 | 54 | 55 | 56 | 57 | c:/data/bluemarble.tif 58 | 59 | 60 | 61 | 62 | c:/data/SRTM.tif 63 | 64 | 65 | 66 | ``` 67 | 此地球文件包含一个基本`bluemarble`图像以及从本地GeoTIFF文件中加载的高程网格。你可以根据需要添加多个高程图层;osgEarth将它们合成一个单目网格。 68 | 69 | 与图像一样,顺序很重要——例如,如果您有整个世界的低分辨率的基本高程数据源和一个高分辨率城市区域,则需要**先**指定基础数据,然后是高分辨率区域。 70 | 71 | *注意:对于高程图层,osgEarth仅支持单通道16位整数或32位浮点数据。* 72 | 73 | ## 缓存 74 | 由于osgEarth按需呈现数据,因此在准备用于显示的贴片时需要做一些工作。缓存功能使osgEarth可以在下一次保存这次工作的结果,而不是每次都重新处理贴片。这样可以提高性能并避免多次下载相同的数据。 75 | 76 | 缓存设置的示例: 77 | ```C++ 78 | 79 | 80 | 81 | http://readymap.org/readymap/tiles/1.0.0/7/ 82 | 83 | 84 | 85 | 86 | 87 | c:/osgearth_cache 88 | 89 | 90 | 91 | 92 | ``` 93 | 这是地球文件为osgEarth显示指定缓存的最基本方法。它告诉osgEarth启用缓存并缓存到文件夹`c:/osgearth_cache`。缓存路径可以是相对的或绝对的;相对路径相对于地球文件本身。 94 | 95 | 有许多方法可以配置缓存;更多详细信息请参阅[缓存](.\Caching.md)部分。 96 | -------------------------------------------------------------------------------- /WorkingwithData.md: -------------------------------------------------------------------------------- 1 | # 使用数据 2 | ## 在哪里找到数据 3 | 帮助我们在列表中添加有用的免费数据源。 4 | 5 | **栅格数据** 6 | * [ReadyMap.org](http://web.pelicanmapping.com/readymap-tiles/)——为osgEarth开发者提供免费15米影像、高程和街景瓦片 7 | * [USGS National Map](https://www.usgs.gov/core-science-systems/national-geospatial-program/national-map)——美国的高程、正射影像、海道测量、地理名称、边界、交通、建筑和土地覆盖产品 8 | * [NASA BlueMarble](https://visibleearth.nasa.gov/view_cat.php?categoryID=1484)——NASA的全球影像(包括地形和水深地图) 9 | * [Natural Earth](http://www.naturalearthdata.com/)—免费多尺度矢量和栅格地图数据 10 | * [Virtual Terrain Project](http://vterrain.org/Imagery/WholeEarth/)——多源全球影像 11 | * [Bing Maps](https://www.microsoft.com/en-us/maps/choose-your-bing-maps-api)——微软的全球影像和地图数据 12 | 13 | **高程数据** 14 | * [CGIAR](http://srtm.csi.cgiar.org/)——SRTM和ETOPO获取的全球90米高程数据([CGIAR European mirror](ftp://xftp.jrc.it/pub/srtmV4/)) 15 | * [SRTM30+](ftp://topex.ucsd.edu/pub/srtm30_plus/)——全球范围高程覆盖(包括水深) 16 | * [GLCF](http://glcf.umiacs.umd.edu/data/srtm/)——UMD的全球土地覆盖设施(Global Land Cover Facility),(镶嵌有LANDSAT数据) 17 | * [GEBCO](https://www.gebco.net/)——(一些海洋水深图表) 18 | 19 | **特征数据** 20 | * [OpenStreetMap](https://www.openstreetmap.org/#map=4/36.96/104.17)——全球范围社会来源的街道和土地使用数据(矢量和栅格瓦片) 21 | * [Natural Earth](http://www.naturalearthdata.com/)——免费多尺度矢量和栅格地图数据 22 | * [DIVA-GIS](http://www.diva-gis.org/gData)——任意国家的免费低分辨率矢量数据 23 | 24 | ## 准备你自己的数据时的一些提示 25 | ### 处理本地源数据 26 | 如果你有地理数据并且希望它在osgEarth中显示,一般可以使用GDAL驱动器。如果你准备这样做,先试着把它安装上。如果你觉得这样太慢了,有一些对瓦片接口(tiled access)数据进行优化的方法。 27 | 28 | **对你的数据进行重新投影** 29 | 如果没有必需的坐标系统,osgEarth将迅速对你的数据进行重新投影,比如如果你想在一个测量地球(epsg:4326)上显示一张UTM影像。然而,如果你的数据已经有了正确的坐标系统,osgEarth将更加迅速地完成这项工作。你可以使用任意工具来重新投影你的数据,如GDAL、全球地图(Global Mapper)或ArcGIS。 30 | 31 | 比如,使用gdal_warp来重新投影一张UTM影像到测量地球: 32 | ```C++ 33 | gdalwarp -t_srs epsg:4326 my_utm_image.tif my_gd_image.tif 34 | ``` 35 | **构建内部瓦片** 36 | 通常GeoTiff等格式将其数据保存在扫描行中,但是使用一个瓦片数据集对于osgEarth将会更高效因为它们在内部使用瓦片的方法。 37 | 38 | 要使用gdal_translate来构建一个瓦片GeoTiff,可以发出以下命令: 39 | ```C++ 40 | gdal_translate -of GTiff -co TILED=YES input.tif output.tif 41 | ``` 42 | Take是更进一步使用压缩来节省空间。如果数据不包含透明度,则可以使用内部JPEG压缩: 43 | ```C++ 44 | gdal_translate -of GTiff -co TILED=YES -co COMPRESS=JPG input.tif output.tif 45 | ``` 46 | **构建视图** 47 | 添加视图(也称为“金字塔”(pyramids)或“rsets”)有时可以提高osgEarth中大数据源的性能,你可以使用gdaladdo功能来向数据集中添加视图: 48 | ```C++ 49 | gdaladdo -r average myimage.tif 2 4 8 16 50 | ``` 51 | ### 使用osgearth_conv来构建瓦片集 52 | 预先平铺(pre-tiling)你的影像可以显著减少加载时间,尤其是在网络上。事实上,如果你想在网络上处理你的数据,这是唯一的方法。 53 | 54 | *osgearth_conv*是osgEarth中的一个低级转换工具,一个有用的应用是以瓦片格式平铺大量GeoTiff(或其它输入)。注意:这个方法仅对于支持写入的驱动器(MBTiles,TMS)有用。 55 | 56 | 构建一个便携MBTiles文件: 57 | ```C++ 58 | osgearth_conv --in driver gdal --in url myLargeFile.tif 59 | --out driver mbtiles --out filename myData.mbtiles 60 | --out format jpg 61 | ``` 62 | 如果你想从网络服务器提供瓦片,可使用TMS: 63 | ```C++ 64 | osgearth_conv --in driver gdal --in url myLargeData.tif 65 | --out driver tms --out url myLargeData/tms.xml 66 | --out format jpg 67 | ``` 68 | 这样将创建一个文件夹(这里叫做“myLargeData”),你可以在任何标准网络服务器中对它进行配置(如Apache)。 69 | 70 | **提示:** 如果你要平铺高程数据,需要添加`--elevation`选项。 71 | 72 | **提示:** `jpg`格式不支持透明度,若你的数据是alpha通道,请使用`png`。 73 | 74 | 只需要输入*osgearth_conv* 可获取选项的完整列表,`--in`和`--out`选项直接对应于地球文件中通常包含的一些属性。 75 | 76 | ### 使用包装程序(packager)来构建瓦片集 77 | 另一个加速在osgEarth中加载影像和高程的方法是构建瓦片集。 78 | 79 | 这个方法获取源数据并将其切割为离散瓦片的四叉树层次结构,osgEarth可以快速加载。通常来说,比如你加载一个GeoTiff,osgEarth需要在运行时创建瓦片来构建球形,事先这样做意味着在你运行程序时可以为osgEarth减少工作量。 80 | 81 | **osgearth_package** 82 | 83 | *osgearth_package*是一个用于为osgEarth准备需要用到的源数据的实用程序,时可选的——你可以针对原始数据来运行osgEarth并且它可以正常工作——但是你可以使用*osgearth_package*来构建更加优化的瓦片集,在大部分情况下能获得最优性能。使用方法: 84 | ```C++ 85 | osgearth_package file.earth --tms --out output_folder 86 | ``` 87 | 这样将加载地球文件(这里是file.earth)中每个数据源,并在`output_folder`文件夹下为每个数据源生成一个TMS存储库。你还可以指定选项: 88 | 89 | --out *path* :TMS存储库的根输出文件夹 90 | 91 | --ext *extension* :输出文件扩展名 92 | 93 | --max-level *level* :细节的最大级别 94 | 95 | -bounds xmin ymin xmax ymas:包装程序的边界(在地图坐标系中;默认-整幅地图) 96 | 97 | -out-earth:根据新存储器生成一个输出地图文件 98 | 99 | -overwrite:对现有文件强制覆盖 100 | 101 | -keep-empties:写入完全透明的影像瓦片(通常丢弃) 102 | 103 | -db-options:一个可选OSG选项字符串 104 | 105 | -verbos:显示操作进度 106 | 107 | ### 特征数据的空间索引 108 | 大矢量特征数据集(如形状文件)将从空间索引中收益。使用*ogrinfo*工具(包括在GDAL/OEG二进制分发中)可以为矢量数据创建一个空间索引,比如: 109 | ```C++ 110 | ogrinfo -sql "CREATE SPATIAL INDEX ON myfile" myfile.shp 111 | ``` 112 | 对于形状文件,这样将生成一个“.qix”文件存储空间索引信息。 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /tests.md: -------------------------------------------------------------------------------- 1 | * aeqd 2 | * annotation 3 | * [annotation_dateline](./tests/annotation_dateline.md) 4 | * [annotation_dateline_projected](./tests/annotation_dateline_projected.md) 5 | * annotation_flat 6 | * arcgisonline 7 | * bing 8 | * boston 9 | * boston_buildings 10 | * boston_projected 11 | * boston_viewpoints 12 | * boston-gpu 13 | * bumpmap 14 | * clouds 15 | * colorramp 16 | * contourmap 17 | * datum_override 18 | * day_night_mp 19 | * day_night_rex 20 | * detail_texture 21 | * errors 22 | * feature_clip_plane 23 | * feature_country_boundaries 24 | * feature_custom_filters 25 | * feature_draped_lines 26 | * feature_draped_polygons 27 | * feature_elevation 28 | * feature_extrude 29 | * feature_geom 30 | * feature_gpx 31 | * feature_inline_geometry 32 | * feature_labels 33 | * feature_labels_script 34 | * feature_levels_and_selectors 35 | * feature_mapnikvectortiles 36 | * feature_model_scatter 37 | * feature_models 38 | * feature_occlusion_culling 39 | * feature_offset_polygons 40 | * feature_poles 41 | * feature_population_cylinders 42 | * feature_raster 43 | * feature_rasterize 44 | * feature_rasterize_2 45 | * feature_scripted_styling 46 | * feature_scripted_styling_2 47 | * feature_style_selector 48 | * feature_tfs 49 | * feature_tfs_scripting 50 | * feature_wfs 51 | * fractal_elevation 52 | * gdal_multiple_files 53 | * geomshader 54 | * glsl 55 | * graticules 56 | * hires-inset 57 | * intersect_filter 58 | * land_cover_mixed 59 | * [layer_opacity](./tests/layer_opacity.md) 60 | * ldb 61 | * mapbox 62 | * mask 63 | * mb_tiles 64 | * mercator_to_plate_carre 65 | * min_max_level 66 | * min_max_range 67 | * min_max_range_rex 68 | * min_max_resolutions 69 | * multiple_heightfields 70 | * nodata 71 | * ocean 72 | * ocean_no_elevation 73 | * openstreetmap 74 | * openstreetmap_buildings 75 | * openstreetmap_flat 76 | * openstreetmap_full 77 | * openweathermap 78 | * photosphere1 79 | * photosphere2 80 | * readymap 81 | * readymap_flat 82 | * readymap_include 83 | * readymap_template 84 | * readymap-elevation-only 85 | * readymap-rex 86 | * roads 87 | * roads-flattened 88 | * roads-test 89 | * scene_clamping 90 | * silverlining 91 | * simple 92 | * simple_model 93 | * skyview1 94 | * skyview2 95 | * splat 96 | * splat-blended-with-imagery 97 | * splat-with-mask-layer 98 | * splat-with-multiple-zones 99 | * splat-with-rasterized-land-cover 100 | * stamen_toner 101 | * stamen_watercolor 102 | * state_plane 103 | * triton 104 | * triton_drop_shader 105 | * utm 106 | * vertical_datum 107 | * wms_nexrad 108 | * wms-t_nexrad_animated 109 | -------------------------------------------------------------------------------- /tests/annotation_dateline.md: -------------------------------------------------------------------------------- 1 | ```XML 2 | 6 | 7 | 8 | 9 | 13 | 14 | http://readymap.org/readymap/tiles/1.0.0/22/ 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | wgs84 23 | 26 | 27 | LINESTRING(140.385 35.765 0, 141.1 35.4917 3944.77, 142.163 35.1617 9645.92, 142.665 35.38 12496.8, 143.872 35.8933 12496.8, 145.667 37.1967 12496.8, 149.825 39.1533 12496.8, 155.668 42.9817 12496.8, 162.31 46.415 13716, 168.783 48.675 13716, 180 50 13716, 190 50 13716, 200 49 13716, 210 48 13716, 220 46 13716, 233 40.625 14935.2, 236.725 39.0533 14935.2, 238.828 37.8333 14935.2, 240.842 36.0417 14935.2, 240.98 35.9133 13819.4, 241.125 35.5133 11087.5, 241.245 35.1833 8832.26, 241.298 35.0317 7798.3, 241.423 34.6833 5419.12, 241.532 34.4967 4063.71, 241.583 34.41 3430.97, 241.73 34.1567 1591.04, 241.59 33.9433 0) 28 | 29 | 30 | 32 | 37 | 38 | 39 | 40 | 41 | ``` 42 | -------------------------------------------------------------------------------- /tests/annotation_dateline_projected.md: -------------------------------------------------------------------------------- 1 | ```XML 2 | 3 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | plate-carre 14 | 15 | 16 | 17 | 18 | http://readymap.org/readymap/tiles/1.0.0/22/ 19 | 20 | 21 | 22 | 23 | 24 | 29 | 30 | wgs84 31 | 32 | LINESTRING(140.385 35.765 0, 141.1 35.4917 3944.77, 142.163 35.1617 9645.92, 142.665 35.38 12496.8, 143.872 35.8933 12496.8, 145.667 37.1967 12496.8, 149.825 39.1533 12496.8, 155.668 42.9817 12496.8, 162.31 46.415 13716, 168.783 48.675 13716, 180 50 13716, 190 50 13716, 200 49 13716, 210 48 13716, 220 46 13716, 233 40.625 14935.2, 236.725 39.0533 14935.2, 238.828 37.8333 14935.2, 240.842 36.0417 14935.2, 240.98 35.9133 13819.4, 241.125 35.5133 11087.5, 241.245 35.1833 8832.26, 241.298 35.0317 7798.3, 241.423 34.6833 5419.12, 241.532 34.4967 4063.71, 241.583 34.41 3430.97, 241.73 34.1567 1591.04, 241.59 33.9433 0) 33 | 34 | 35 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | ../data/flag_us.png 47 | POLYGON((170 26, 190 26, 190 56, 170 56)) 48 | 49 | 50 | 51 | 52 | 53 | ../data/flag_us.png 54 | POLYGON((-81 26, -40.5 45, -40.5 75.5, -81 60)) 55 | 56 | 57 | 58 | 59 | 60 | 61 | ``` 62 | -------------------------------------------------------------------------------- /tests/layer_opacity.md: -------------------------------------------------------------------------------- 1 | 2 | ```XML 3 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | ../data/world.tif 15 | 16 | 17 | 18 | 19 | 20 | 21 | ../data/boston-inset-wgs84.tif 22 | 23 | 24 | 25 | ``` 26 | -------------------------------------------------------------------------------- /toc.md: -------------------------------------------------------------------------------- 1 | 2 | # osgEarth文档目录 3 | 4 | * [关于osgEarth](./AboutOsgEarth.md) 5 | * [介绍](./AboutOsgEarth.md#介绍) 6 | * [社会资源](./AboutOsgEarth.md#社会资源) 7 | * [授权](./AboutOsgEarth.md#授权) 8 | * [维护者](./AboutOsgEarth.md#维护者) 9 | * [建立osgEarth](./BuildingOsgEarth.md) 10 | * [获取源代码](./BuildingOsgEarth.md#获取源代码) 11 | * [获取依赖项](./BuildingOsgEarth.md#获取依赖项) 12 | * [建立](./BuildingOsgEarth.md#建立) 13 | * [用户指南](./UserGuide.md) 14 | * [工具](./UserGuide/Tools.md) 15 | * [使用地球文件](./UserGuide/UsingEarthFiles.md) 16 | * [缓存](./UserGuide/Caching.md) 17 | * [空间参考](./UserGuide/SpatialReferences.md) 18 | * [特征和符号](./UserGuide/FeaturesandSymbology.md) 19 | * [开发者主题](./DeveloperTopics.md) 20 | * [使用地图](./DeveloperTopics/WorkingwithMaps.md) 21 | * [使用SDK](./DeveloperTopics/UtilitiesSDK.md) 22 | * [着色器组成](./DeveloperTopics/ShaderComposition.md) 23 | * [坐标系统](./DeveloperTopics/CoordinateSystems.md) 24 | * [使用数据](./WorkingwithData.md) 25 | * [在哪里找到数据](./WorkingwithData.md#在哪里找到数据) 26 | * [准备你自己的数据时的一些提示](./WorkingwithData.md#准备你自己的数据时的一些提示) 27 | * [参考指南](./ReferenceGuides.md) 28 | * [地球文件参考](./ReferenceGuides/EarthFileReference.md) 29 | * [驱动器参考](./ReferenceGuides/DriverReference.md) 30 | * [符号系统参考](./ReferenceGuides/SymbologyReference.md) 31 | * [滤色器参考](./ReferenceGuides/ColorFilterReference.md) 32 | * [环境变量](./ReferenceGuides/EnvironmentVariables.md) 33 | * FAQ 34 | * Common Usage 35 | * Other Terrain Formats 36 | * Community and Support 37 | * Licensing 38 | 39 | * [使用vcpkg构建适用于Windows的osgEarth](./vcpkg.md) 40 | * [构建适用于iOS的osgEarth(和OSG)](./ios.md) 41 | * [tests 详解](./tests.md) 42 | -------------------------------------------------------------------------------- /vcpkg.md: -------------------------------------------------------------------------------- 1 | # 使用vcpkg构建适用于Windows的osgEarth 2 | vcpkg是一个非常有用的C++包管理器。它适用于Windows,Linux和MacOS,但对于本节,我们主要关注Windows。 3 | 4 | 首先,按照页面上的说明下载并安装vcpkg。 5 | 6 | 接下来安装构建功能齐全的osgearth所需的依赖项 7 | 8 | `vcpkg install osg:x64-windows sqlite3:x64-windows protobuf:x64-windows poco:x64-windows` 9 | 10 | 第一次运行它时会减少许多依赖项,将耗费一段时间,可以去喝一杯咖啡。 11 | 12 | 一旦构建了所有依赖项,就需要实际构建osgEarth。 13 | 14 | **获取源代码** 15 | 16 | `git clone https://github.com/gwaldron/osgearth.git` 17 | 18 | **为源代码构建创建一个目录** 19 | ``` 20 | cd osgearth 21 | mkdir build 22 | cd build 23 | ``` 24 | **配置Cmake** 25 | 26 | vcpkg提供了一个Cmake工具链文件,可帮助osgEarth找到所有依赖项。 27 | 您需要为Release和Debug指定不同的构建目录,并使用-DCMAKE_BUILD_TYPE指定构建类型, 28 | 这是因为osgEarth的某些依赖项在没有指定构建类型的情况下不会同时获取调试版本和发行版本。 29 | 这应该会将来的cmake版本中修复。这是一个release版本: 30 | ``` 31 | cmake .. -G "Visual Studio 15 2017 Win64" \ 32 | -DCMAKE_BUILD_TYPE=Release \ 33 | -DWIN32_USE_MP=ON \ 34 | -DCMAKE_TOOLCHAIN_FILE=[vcpkg root]\scripts\buildsystems\vcpkg.cmake 35 | ``` 36 | **构建并安装osgEarth** 37 | 38 | 您可以使用cmake在命令行上构建和安装osgEarth,也可以打开Visual Studio的解决方案并从那里构建它。 39 | 40 | `cmake --build . --target INSTALL --config Release` 41 | 42 | **设置运行时环境** 43 | 44 | 你需要确保vcpkg依赖项和osgEarth在您的路径中,然后: 45 | ```C++ 46 | set PATH=%PATH%;c:\vcpkg\installed\x64-windows\bin 47 | set PATH=%PATH%;c:\vcpkg\installed\x64-windows\tools\osg 48 | set PATH=%PATH%;c:\Program Files\osgEarth\bin 49 | ``` 50 | 注意:如果不想自己为应用程序构建osgEarth,也可以使用vcpkg实际安装它,只需要 51 | 52 | `vcpkg install osgearth:x64-windows` 53 | --------------------------------------------------------------------------------