第一章   OSGEarth介绍

第二章   OSGEarth编译环境配置

OSGEarth的编译环境配置随着版本的不同、运行平台的不同,也有很大的差异。本章主要以Windows XP SP3(x86)为平台,Visual Studio 2010 为编译环境来介绍OSGEarth2.0的变异环境配置。

第一节  OSGEarth V2.0相关资源

OSGEarth的相关资源可以通过其官方网站(http://www.osgearth.org/wiki/Downloads)获取(所有资源文件均在关盘的source文件夹中)主要资源说明和网址如下表:

资源名称

版本要求

推荐下载

OpenSceneGraph

V2.8.0以上

http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.0/source/OpenSceneGraph-3.0.0.zip

GDAL

V1.6以上

http://download.osgeo.org/gdal/gdal181.zip

http://download.osgeo.org/gdal/gdal-1.8.1.tar.gz

CURL

V7.21以上

http://curl.haxx.se/download/curl-7.22.0.zip

GEOS

V3.2以上

http://download.osgeo.org/geos/geos-3.3.1.tar.bz2

SQLite

V3.2以上

源文件:http://www.sqlite.org/sqlite-amalgamation-3070900.zip

Dll:http://www.sqlite.org/sqlite-dll-win32-x86-3070900.zip

MiniZip

V1.0以上

头文件:http://www.winimage.com/zLibDll/unzip101h.zip

源代码:http://www.winimage.com/zLibDll/zlib125.zip

Dll文件:http://www.winimage.com/zLibDll/zlib125dll.zip

Expat

V2.0.1以上

code:http://sourceforge.net/projects/expat/

exe:http://files.cnblogs.com/eaglezhao/expat-win32bin-2.0.1.rar

OSGEarth

V2.0

git://github.com/gwaldron/osgearth.git

OSGEarth源代码使用tortoisegit软件存放,因此需要下载并安装:1.安装Git-1.7.0.2-preview20100309.exe

(http://msysgit.googlecode.com/files/Git-1.7.0.2-preview20100309.exe)

 2.安装ortoiseGit-1.7.4.0-32bit.msi

(http://tortoisegit.googlecode.com/files/TortoiseGit-1.7.4.0-32bit.msi)

安装过程中可能还需要其他的资源或者程序支持,具体在安装过程进行说明。

第二节  Open Scene Graph安装与配置

为了提高OSGEarth在编译过程中执行速度,降低计算机硬件要求,因此选用windows XP SP3作为测试系统平台,vs2010作为windows平台下最新的编译软件,具有windows平台的兼容性考虑,编译出来的EXE文件可以顺利的部署在vista,win7上。

2.1  CMake介绍与安装

CMake 是个跨平台的自动化建构系统,它用组态档控制建构过程(build process)的方式和 Unix 的 Make 相似,只是 CMake 的组态档取名为 CmakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是CMake 和 SCons 等其他类似系统的区别之处。CMake 可以编译源代码、制作程式库、产生适配器(wrapper)、还可以用任意的顺序建构执行档。CMake 支援 in-place 建构(二进档和源代码在同一个目录树中)和 out-of-place 建构(二进档在别的目录里),因此可以很容易从同一个源代码目录树中建构出多个二进档。CMake 也支援静态与动态程式库的建构。

支持VS2010的CMake版本为v2.8以上,本书选择V2.8.4。下载地址:

http://ishare.iask.sina.com.cn/f/14399926.html或者http://www.cmake.org/

关于的cmake的具体用法请参看

http://techbase.kde.org/Development/Tutorials/CMake_(zh_CN)

或者

http://www.cmake.org/Wiki/CMake。

下载完成后安装,在安装选项的位置选择:

其他可选择默认安装。

2.2  Open Scene Graph介绍

Open Scene Graph(简称OSG)使用OpenGL技术开发,是一套基于C++平台的应用程序接口(API),它让程序员能够更加快速、便捷地创建高性能、跨平台的交互式图形程序。它作为中间件(middleware)为应用软件提供了各种高级渲染特性,IO,以及空间结构组织函数;而更低层次的OpenGL硬件抽象层(HAL)实现了底层硬件显示的驱动。

2.2.1优势

OpenGL技术为图形元素(多边形、线、点……)和状态(光照、材质、阴影……)的编程提供了标准化的接口。而OSG开发的主要意义在于,将3D场景定义为空间中一系列连续的对象,以进行三维世界的管理。正是由于场景及其参数定义的特点,通过状态转化、绘图管道和自定制等操作,OSG还可以用于优化渲染性能。

从系统开发人员的角度看,相比工业标准OpenGL 或其它的图形库,OSG的优点显而易见。除了开源和平台无关性以外,它封装并提供了数量众多的提升程序运行时性能的算法、针对包括分页数据库在内的几乎所有主流数据格式的直接数据接口、以及对脚本语言系统Python 和Tcl 的支持,特别的,支持脚本语言系统的意义不仅限于用户可以使用除C++语言以外的工具进行图形系统的开发,事实上,对弱类型计算机语言的支持将突破现有交互式图形系统在人-机交互性能方面的最终限制。 OSG采用以下思想和工具进行构建:

1.      ANSI标准C++;

2.      C++标准模板库(STL);

3.      设计模式(Designpatterns)。 

这些工具使得OSG的开发者可以在自己喜好的平台上进行开发,并且依据用户所要求的平台进行配置。

2.2.2硬件需求

如今的OSG 已经可以在多种硬件平台和操作系统上运行,并且能够在大部分计算机系统上正常使用。   处理器:OSG 可以在大部分的CPU 上编译通过。OSG 具备线程安全性,并且可以有效利用多处理器和双核结构的特性。OSG 可以在32 位或者64 位处理器上运行通过。 

图形:你的计算机系统需要配置一块AGP 或者PCI 总线的图形显示卡。OSG可以在大部分用于建模,仿真和游戏的专业级或大众级图形设备上运行。可以运行OSG 的图形设备必须高效地支持OpenGL,因此你应当从设备商处获得最新的OpenGL 设备驱动程序。OSG 对显卡RAM 的需求因用户的使用而异,但是256MB 应当足够了。OSG 可以在多管(multi-pipe)显示系统上运行,并且可以利用多显卡来提升渲染速度。 

RAM:最小的系统RAM 内存需求是由显示数据的数量和类型决定的。推荐配置为1GB,大型数据集的开发可能需要更多的内存支持。 

磁盘:和RAM 一样,磁盘空间的需求大小由数据量决定。对于任何程序来说,更高速和更大容量的磁盘无疑可以减少数据读取的时间。

2.2.3软件需求

可以运行OSG的平台需要具备OpenGL的支持能力,以及C++的编译环境,支持OSG的系统包括Solaris,IRIX,Windows,Mac OSX,HP-UX,Sony Platystation等等,不过XBox除外。 和OpenGL类似,OSG的核心并没有提供窗口系统的功能。因此用户可以自由选择所需的图形开发接口,如GLUT,X11/Motif,Win32,MacOS X,Qt,wxWindows,Fox等。

2.3  Open Scene Graph 安装

Open Scene Graph安装与编译还需要下载两个资源:

1.      Osg第三方库(3rdParty_VC10_x86_x64.zip),网址:

http://members.iinet.net.au/~bchrist/3rdParty_VC10_x86_x64.zip

2.      数据包(OpenSceneGraph-Data-3.0.0.zip),网址:

http://www.openscenegraph.org/downloads/stable_releases/OpenSceneGraph-3.0/data/OpenSceneGraph-Data-3.0.0.zip

 

2.3.1建立文件地址与资源解压

第一步:选择一个磁盘(X),保证磁盘具有30G左右的可用空间,并创建文件夹,X:/OSG/;(作者使用了E盘,后续如果出现E盘表示选择磁盘)。

第二步:将OpenSceneGraph-3.0.0.zip到X:/OSG/OpenSceneGraph文件夹中;3rdParty_VC10_x86_x64.zip解压到X:/OSG/3rdParty文件夹中;OpenSceneGraph-Data-3.0.0.zip解压到X:/OSG/OpenSceneGraph-Data文件夹中。

X:/OSG/OpenSceneGraph文件夹截图:

X:/OSG/3rdParty文件夹截图:

X:/OSG/OpenSceneGraph-Data文件夹截图:

2.3.2 安装源代码

第一步:启动CMake -gui.exe并设置文件地址,将编译地址设置为E:/osg/OpenSceneGraph/vs2010。

第二步:点击“configure”:

以此出现以下过程:

 

点击“YES”:

选择“visual studio 2010”,点击“Finish”:

2.3.3   配置CMAKE相关设置

第一步:配置环境变量

第一步:设置基本参数

ACTUAL_3RDPARTY_DIR值:E:/OSG/3rdParty;

BUILD_OSG_EXAMPLES值:ON

CMAKE_INSTALL_PREFIX值:E:/osg/OpenSceneGraph/vs2010

 

第二部:点击Configure;

(红色标记为需要修改或设置不清楚的地方)。

第三步:将Advanced打勾,将BUILD_MFC_ EXAMPLE设置为on,然后进行最后一次的Configure配置。

第四步:点击Generate,自此建构完成。

(只有出现了Generating done”才表示生成完成,否则需要根据提示修改CMAKE的相关设置)

打开文件夹E:\osg\OpenSceneGraph\vs2010,可以看见:

2.3.4   编译Open Scene Graph

第一步:用VS2010打开OpenSceneGraph.sln(此文件在E:\OSG\OpenSceneGraph\VS2010下),过程可能需要较长时间,请耐心等待。

第二步:配置VS2010的相关设置。

点击“生成”,估计需要3-6个小时。

第三步:验证生成的文件

在E盘新建E:\osgearth\OpenSceneGraph文件夹。(说明:E:\osgearth文件夹是用来编译osgearth的文件夹)将E:\osg\OpenSceneGraph\vs2010下的bin,include,lib文件夹拷贝到E:\osgearth\OpenSceneGraph下(可以删除vs2010生成的临时文件,即bin中保留dll和exe文件,include不用处理,lib中保留lib文件),将E:\osg\OpenSceneGraph-Data下的数据拷贝到E:\ osgearth\OpenSceneGraph\data下;这几个文件是OSG需要的。

         测试文件:

1.      打开E:\ osgearth\OpenSceneGraph\bin\osgviewerMFC.exe

2.      打开E:\ osgearth\OpenSceneGraph\data文件中的.osg或者.osgt文件,使用鼠标拖动观察程序运行情况。

如果运行正常,表明编译已经成功,否则需要查看编译过程中是否错误。在退出程序是出现下面对话框是正常现象。

 

 

第三节  CURL安装与配置

3.1  CURL介绍

curl是利用URL语法在命令行方式下工作的文件传输工具。它支持很多协议:FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP。curl同样支持HTTPS认证,HTTP POST方法, HTTP PUT方法, FTP上传, kerberos认证, HTTP上传, 代理服务器, cookies, 用户名/密码认证, 下载文件断点续传, 上载文件断点续传, http代理服务器管道( proxy tunneling), 甚至它还支持IPv6, socks5代理服务器,通过http代理服务器上传文件到FTP服务器等等,功能十分强大。Windows操作系统下的网络蚂蚁,网际快车(FlashGet)的功能它都可以做到。准确的说,curl支持文件的上传和下载,所以是一个综合传输工具,但是按照传统,用户习惯称curl为下载工具。

curl是瑞典curl组织开发的,您可以访问 http://curl.haxx.se/获取它的源代码和相关说明。curl的最新版本是7.22.0。在http://curl.haxx.se/docs/您可以下载到UNIX格式的man帮助,里面有详细的curl工具的使用说明。

3.2  CURL编译

首先解压curl-7.22.0.zip到当前文件夹。

第二步:使用vs2010打开vc6curl.dsw,出现的提示全部选择“是”。

第三步:设置生成

编译完成的界面显示:

第四步:文件转移。在E盘新建E:\osgearth\curl文件夹。(本书编译文件夹:D:\数字地球\curl-7.22.0)将D:\数字地球\curl-7.22.0\include\curl文件夹中.h文件复制到E:\osgearth\curl\include和E:\osgearth\3rdparty\include\curl文件夹中;将D:\数字地球\curl-7.22.0\lib文件夹中(包含子文件夹)的dll和lib文件复制到E:\osgearth\curl\lib和E:\osgearth\3rdparty\lib文件夹中。

第四节  GDAL安装与配置

4.1  GDAL介绍

GDAL(GeospatialData Abstraction Library)是一个在X/MIT许可协议下的开源栅格空间数据转换库。它利用抽象数据模型来表达所支持的各种文件格式。它还有一系列命令行工具来进行数据转换和处理。    OGR是GDAL项目的一个分支,功能与GDAL类似,只不过它提供对矢量数据的支持。有很多著名的GIS类产品都使用了GDAL/OGR库,包括ESRI的ArgGIS 9.2,Google Earth和跨平台的GRASS GIS系统。利用GDAL/OGR库,可以使基于Linux的地理空间数据管理系统提供对矢量和栅格文件数据的支持。

4.1.1 GDAL

GDAL提供对多种栅格数据的支持,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff),Erdas ImagineImages(img),ASCII DEM(dem) 等格式。 

1)  GDAL抽象数据模型   

GDAL使用抽象数据模型(abstract datamodel)来解析它所支持的数据格式,抽象数据模型包括数据集(dataset),坐标系统,仿射地理坐标转换(AffineGeoTransform), 大地控制点(GCPs),元数据(Metadata),栅格波段(Raster Band),颜色表(ColorTable),子数据集域(Subdatasets Domain),图像结构域(Image_StructureDomain),XML域(XML:Domains)。

2)  GDAL基础类   

GDALMajorObject类:带有元数据的对象。GDALDdataset类:通常是从一个栅格文件中提取的相关联的栅格波段集合和这些波段的元数据;GDALDdataset也负责所有栅格波段的地理坐标转换(georeferencingtransform)和坐标系定义。   

GDALDriver类:文件格式驱动类,GDAL会为每一个所支持的文件格式创建一个该类的实体,来管理该文件格式。GDALDriverManager类:文件格式驱动管理类,用来管理GDALDriver类。  

4.1.2 OGR   

OGR提供对矢量数据格式的读写支持,它所支持的文件格式包括:ESRI Shapefiles, S-57, SDTS, PostGIS,Oracle Spatial, Mapinfomid/mif , Mapinfo TAB。OGR包括如下几部分:

Geometry:类Geometry(包括OGRGeometry等类)封装了OpenGIS的矢量数据模型,并提供了一些几何操作,WKB(Well KnowsBinary)和WKT(Well KnownText)格式之间的相互转换,以及空间参考系统(投影)。

SpatialReference:类OGRSpatialReference封装了投影和基准面的定义。

Feature:类OGRFeature封装了一个完整feature的定义,一个完整的feature包括一个geometry和geometry的一系列属性。   

FeatureDefinition:类OGRFeatureDefn里面封装了feature的属性,类型、名称及其默认的空间参考系统等。一个OGRFeatureDefn对象通常与一个层(layer)对应。  

Layer:类OGRLayer是一个抽象基类,表示数据源类OGRDataSource里面的一层要素(feature)。   

Data Source:类OGRDataSource是一个抽象基类,表示含有OGRLayer对象的一个文件或一个数据库。

Drivers:类OGRSFDriver对应于每一个所支持的矢量文件格式。类OGRSFDriver由类OGRSFDriverRegistrar来注册和管理。

4.2  GDAL编译

第一步:将文件解压并打开makegdal10.sln。(本书解压文件夹为D:\数字地球\gdal-1.8.1\gdal-1.8.1)

第二步:文件转移。

GDAL编译完成后的文件存放于C:\warmerda\bld,包含文件bin,data,html三个子文件夹。

 

新建文件夹:E:\osgearth\gdal;将C:\warmerda\bld\bin和C:\warmerda\bld\data拷贝到E:\osgearth\gdal文件夹下;将D:\数字地球\gdal-1.8.1\gdal-1.8.1下得子文件夹alg,gcore,ogr和port中所有的.h文件拷贝到E:\osgearth\gdal\include下; 将D:\数字地球\gdal-1.8.1\gdal-1.8.1中所有的lib和dll文件复制到E:\osgearth\gdal\lib文件夹下。

第五节  GEOS安装与配置

5.1  GEOS介绍

GEOS(几何引擎——开源)是一个Java拓扑套件(JTS)的C++移植。因此,它的目的是在C++中包含完整的JTS移植。这包括了所有的OpenGIS“简单SQL特征”:空间预测函数和空间操作员,以及具体的JTS拓扑功能

5.2  GEOS编译

第一步:将文件解压到D:\geos-3.3.1文件夹;

第二步:启动CMake -gui.exe并设置文件地址,将编译地址设置为D:/geos-3.3.1/vs2010。

第三步:点击“configure”:

第三步:修改参数。Cmake_install_PREFIX值为D:/geos-3.3.1/vs2010.并在此点击“configure”。

第四步:点击“Generate”

D:/geos-3.3.1/vs2010文件夹截图:

第五步:打开D:/geos-3.3.1/vs2010/geos.sln

设置相关参数(主要为了debug和release生成的文件名不一致)

工程名称

Debug目标文件名

Release目标文件名

Geos

Geosd

Geos

geos-static

libgeosd

libgeos

geos_c

geosd_c

geos_c

 

点击“生成”->“批生成”

开始编译,编译结果截图:

第六步:文件转移。

在D:/geos-3.3.1/vs2010文件夹中搜索lib和dll文件,并将搜索到的文件复制到E:\osgearth\geos\lib文件夹中;

将D:\geos-3.3.1\include中文件复制到E:\osgearth\geos\include文件夹中。

第六节  Expat安装与配置

6.1  Expat介绍

Expat 是一个用C语言开发的、用来解析XML文档的开发库,它最初是开源的、Mozilla 项目下的一个XML解析器。Expat是一个面向流的解析器。您注册的解析器回调(或handler)功能,然后开始搜索它的文档。当解析器识别该文件的指定的位置,它会调用该部分相应的处理程序(如果您已经注册的一个)。该文件被输送到解析器,会被分割成多个片断,并分段装到内存中。因此expat可以解析那些巨大的文件。

6.2  Expat配置

第一步:直接下载expat-win32bin-2.0.1.rar文件,解压后安装。

第二步:文件转移

将C:\Program Files\Expat2.0.1\Source\lib文件夹中的h文件复制到E:\osgearth\expat\INCLUDE文件夹中;

将C:\Program Files\Expat2.0.1\Bin文件复制到E:\osgearth\expat\lib文件夹中。

第七节  SQLite安装与配置

7.1  SQLite介绍

SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月.至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

7.2  SQLite编译与配置

第一步:解压文件。

1.将sqlite-amalgamation-3070900.zip文件中的文件复制到E:\osgearth\sqlite\include中;

2.将sqlite-dll-win32-x86-3070900.zip中文件复制到E:\osgearth\sqlite\lib中;

3.从VS2010的安装文件夹中的Visual Studio10/VC/bin中找到LIB.exe和Link.exe复制到E:\osgearth\sqlite\lib;

4.将 C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\mspdb100.dll复制到E:\osgearth\sqlite\lib;

第二步:编译lib文件。

1.      打开cmd窗口,进入E:\osgearth\sqlite\lib;

2.      输入命令:LIB/DEF:sqlite3.def。生成lib文件

 

编译后E:\osgearth\sqlite\lib文件夹截图:

第八节  Minizip安装与配置

8.1  MiniZip介绍

ZIP,是一个计算机文件的压缩的算法,原名Deflate(真空),发明者为菲尔·卡茨(PhilKatz)),他于1989年1月公布了该格式的资料。ZIP通常使用后缀名“.zip”,它的MIME格式为 application/zip 。目前,ZIP格式属于几种主流的压缩格式之一,其竞争者包括RAR格式以及开放源码的7-Zip格式。从性能上比较,RAR格式较ZIP格式压缩率较高,而7-Zip由于提供了免费的压缩工具而逐渐在更多的领域得到应用。 WinMount可以把ZIP挂载到虚拟盘,无需解压,随机读取,这又是另一大创新。

ZIP是一种相当简单的分别压缩每个文件的存档格式。分别压缩文件允许不必读取另外的数据而检索独立的文件;理论上,这种格式允许对不同的文件使用不同的算法。不管用何种方法,对这种格式的一个告诫是对于包含很多小文件的时候,存档会明显的比压缩成一个独立的文件(在类Unix系统中一个经典的例子是普通的tar.gz存档是由一个使用gzip压缩的TAR存档组成)要大。 ZIP的规约指出文件可以不经压缩或者使用不同的压缩算法来存储。然而,在实际上,ZIP几乎差不多总是在使用卡茨(Katz)的DEFLATE算法。   

ZIP支持基于对称加密系统的一个简单的密码,现在已知有严重的缺陷,已知明文攻击,字典攻击和暴力攻击。ZIP也支持分卷压缩。在近来一段时间,ZIP加入了包括新的压缩和加密方法的新特征,不过这些新特征并没有被许多工具所支持并且没有得到广泛应用。

8.2  MiniZip的编译与配置

将unzip101h.zip中的文件复制到E:\osgearth\minizip\include;将zlib125dll.zip中文件夹dll32和static32中的lib文件和dll文件复制到E:\osgearth\minizip\lib中。Osgearth编译需要的minizip文件已经处理完成

如果想对源代码进行编译的话,可以按照以下步骤进行:

第一步:启动CMake -gui.exe并设置文件地址,将编译地址设置为D:\zlib125\zlib-1.2.5\vs2010,然后“configure”

第二步:删除文件D:\zlib125\zlib-1.2.5\zcongf.h;

设置Cmake_install_PREFIX值为D:\zlib125\zlib-1.2.5\vs2010;然后再次“configure”

“Generate”

D:\zlib125\zlib-1.2.5\vs2010截图

第三步:打开并编译zlib.Sln。

第九节Virtual Planet Builder安装与配置

9.1 Virtual Planet Builder介绍

VirtualPlanetBuilder是一种地形数据库创作工具,是能够阅读各种地理图象和高程数据并建立小面积地形数据库,乃至大规模如整个地球的庞大数据库。这些数据库可以上传到互联网,并能够提供象在线googleearth一样的风格漫游整个地球的数据库,或保持对本地磁盘高速接入等所需的专业飞行模拟器。前面所讲的VirtualPlanetBuilder建立的数据库,如果要运行该数据库产生一个可视化的场景,那么你将需要一个基于openscenegraph的应用程序。其实,VirtualPlanetBuilder本身是一个基于openscenegraph实时图形工具箱,它可以创建基于openscenegraph的二进制的最高效率的数据库。如果你的应用程序不是基于openscenegraph,而你要使用OSG中的数据库的话,那么你需要写一个后处理的工具来把该数据库从openscenegraph的格式转换为你自己的格式。VirtualPlanetBuilder已经从原来的传最初的数据叶生成工具逐渐的完善了,现在它只是其中的一个部分而已!现在官方计划进一步的对它进行扩展和完善,以便有可能创建几十千兆的数据页,并通过网上电脑间的传输来创建他们,让每台参与的工作的电脑一起来创造完整的数据库。我们也将提供对数据库的支持,以便优化低带宽限制,实现基于web数据库的三维可视化。对未来的发展详情请看:

 

http://www.openscenegraph.org/projects/VirtualPlanetBuilder/wiki/DevelopmentPlans

相关信息配置:

http://www.openscenegraph.org/projects/osg/wiki/Support/UserGuides/osgdem

 

9.2 Virtual Planet Builder编译

第一步:需要编译完成OSG和GDAL,见osg和gdal编译安装部分。

第二步:下载相关的地图文件

http://www.cc.gatech.edu/projects/large_models/ps.html

第三步:Vpb安装需要插件下载

http://www.openscenegraph.org/projects/VirtualPlanetBuilder/wiki/Dependencies

squish-1.11.zip,80k

第四步:设置环境变量

第一步:下载并检查相关的版本

1.使用SVN下载VirtualPlanetBuilder

http://www.openscenegraph.org/svn/VirtualPlanetBuilder/trunk

下载(或者更新)完成后,打开文件夹中的news.Txt:

这里的就是版本号,文件夹的标注可能有误。

2.下载VirtualPlanetBuilder对应osg的版本。

下载相关的版本:http://www.openscenegraph.org/projects/osg/wiki/Downloads/PreviousReleases

这里需要注意,osg的相关版本可能是临时版本,需要使用release版本。如果是使用http://www.openscenegraph.org/svn/VirtualPlanetBuilder/trunk进行下载的,可以使用最新的版本。

下载已经编译好了的osg生成文件,注意编译器版本和操作系统

http://openscenegraph.alphapixel.com/osg/downloads/free-openscenegraph-binary-downloads

下载debug和release两个版本。

OpenSceneGraph-3.0.1-VS10.0.30319-x86-release-12741.7z

OpenSceneGraph-3.0.1-VS10.0.30319-x86-debug-12741.7z

重命名debug\bin文件夹中gdalxx.dll为gdalxxd.dll,libexpat.dll为libexpatd.dll。将release和debug中的bin,lib,include,share,data文件夹合并,如果出现重名,将debug中的文件名在扩展名之前加d,(123.dll=123d.dll)

查看gdal的版本,查看OpenSceneGraph-3.0.1\bin\gdalxx.dll,XX就是gdal的版本。

3.下载VirtualPlanetBuilder对应的gdal

下载编译好的文件:

http://trac.osgeo.org/gdal/wiki/DownloadingGdalBinaries

下载源文件:

http://trac.osgeo.org/gdal/wiki/DownloadSource

处理的方法参看gdal编译。

4.设置相关的环境变量

OSG_DIR值:E:\osg\OpenSceneGraph-x.x.x;(E:\osg\OpenSceneGraph\vs2010,在2010编辑中获取)

GDAL_DIR值:E:\osg\gdal-1.x.x;

PATH值中添加:%GDAL_DIR%\LIB;%GDAL_DIR%\BIN;%OSG_DIR%\INCLUDE;

%OSG_DIR%\LIB;%OSG_DIR%\BIN; %OSG_DIR%\include;%OSG_DIR%\share;%OSG_DIR%\data;

注意:有些编译环境可能需要:squish-1.11.zip,下载地址如下:

http://www.openscenegraph.org/projects/VirtualPlanetBuilder/wiki/Dependencies

5.编译处理,CMAKE

编辑configure和generate,生成文件*.sln

打开:VIRTUALPLANETBUILDER.sln,修改下面文件:vpb项目下SpatialProperties.cpp文件

使用release编译,debug模式编译有错误。

Release编译结果:

将VirtualPlanetBuilder-0.9.12\vs2010\lib\Relase中的vpb.dll,vpb.lib

复制到VirtualPlanetBuilder-0.9.12\vs2010\bin\Relase中。

测试编译结果:

Cmd;

Cd x:\osg\VirtualPlanetBuilder-0.9.12\vs2010\bin\Release

Osgdem –help

出现下面的界面表明编译成功

6. 测试地形数据

下载相关的地图文件:

http://www.cc.gatech.edu/projects/large_models/ps.html

ps_height_16k.png,ps_texture_16k.png

使用的命令行是:

 

gdal_translate ps_height_16k.pngps_height_16k.tif

gdaladdo -r average ps_height_16k.tif 2 4 816 32

gdal_translate ps_texture_16k.pngps_texture_16k.tif

gdaladdo -r average ps_texture_16k.tif 2 48 16 32

osgdem --xx 10 --yy 10 -tps_texture_16k.tif --xx 10 --yy 10 -d ps_height_16k.tif -l 6 -v 0.1 -o test.ive-a test.osga

osgviewer test.ive

 

最后  其他资源的配置

X.1  Open Scene Graph 第三方支持库

从http://openscenegraph.alphapixel.com/osg/downloads/openscenegraph-third-party-library-downloads

下载windows-VS10.0.30319-x86-release.7z和windows-VS10.0.30319-x86-debug.7z两个针对VS2010的压缩包。将两个压缩包的内容复制到E:\osgearth\3rdparty。

也可以下载http://members.iinet.net.au/~bchrist/3rdParty_VC10_x86_x64.zip,将x86文件中的文件复制到E:\osgearth\3rdparty。(这个压缩包的资源相对较全)

X.2  libzip库

Libzip 的功能与minizip相同,但由于使用的位置不同,为了后续配置osgearth,在此进行说明:

从http://files.cnblogs.com/eaglezhao/libzip(vs10).rar下载libzip(vs10).rar,将libzip(vs10).rar中的文件复制到E:\osgearth\libzip文件夹。

X.3  Osgearth资源下载

第一步:安装Git-1.7.6-preview20110708.exe,默认安装。

第二步:安装TortoiseGit-1.7.4.0-32bit.msi,默认安装。

第三步:创建一个文件夹E:\osgearth\data。

第四步:下载资源

在url中输入:git://github.com/gwaldron/osgearth.git

点击“ok”,下载过程可能需要较长时间。

下载完成后,将D:\osgearth文件中所有文件复制到E:\osgearth\osgearth文件夹中。同时将D:\osgearth进行压缩备份。D:\osgearth文件将可以接收osgearth文件的更新。

从此为止,我们的osgearth环境就算搭建完成。


 

第三章    OSGEarth编译

上一章我们做的所有工作都是为了配置OSGEarth,

第一节  sln生成

VS2010的sln文件生成是OSGEarth的关键。作者在配置出现很多错误,从而导致了使用VS2010编译出现很多问题。

1.1  CMAKE配置

第一步:启动CMake -gui.exe并设置文件地址,将编译地址设置为E:\OSGEARTH\OSGEARTH\vs2010,然后“configure”

第二步:添加参数

参数名称

类型

DYNAMIC_OSGEARTH

Bool

On

OSG_DIR

Path

E:/OSGearth/OpenSceneGraph

添加方法:点击“Add Entry”,弹出 Add CacheEntry对话框(如下图所示)

完成后cmake参数列表顶端出现添加的两个参数:

第二步:设置相关参数

主要针对“*-NOTFOUND”参数值的参数。

参数名称

CMAKE_INSTALL_PREFIX

E:/osgearth/osgearth/vs2010

CMAKE_LINKER

(清空)

CURL_INCLUDE_DIR

E:/osgearth/3rdparty/include

CURL_LIBRARY

E:/osgearth/3rdparty/lib/libcurl.lib

CURL_LIBRARY_DEBUG

E:/osgearth/3rdparty/lib/libcurld.lib

GDAL_INCLUDE_DIR

E:/osgearth/gdal/include

GDAL _LIBRARY

E:/osgearth/gdal/lib/gdal_i.lib

GEOS_INCLUDE_DIR

E:/osgearth/geos/include

GEOS _LIBRARY

E:/osgearth/geos/lib/geos.lib

GEOS _LIBRARY_DEBUG

E:/osgearth/geos/lib/geosd.lib

LIBZIP_INCLUDE_DIR

E:/osgearth/libzip/include

LIBZIP _LIBRARY

E:/osgearth/libzip/lib/zip.lib

OPENTHREADS_LIBRARY

E:/osgearth/OpenSceneGraph/lib/OpenThreads.lib

OPENTHREADS _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/OpenThreadsD.lib

OSGDB_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgDB.lib

OSGDB_LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgDBD.lib

OSGFX_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgFX.lib

OSGFX _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgFXD.lib

OSGGA_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgGA.lib

OSGGA _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgGAD.lib

OSGMANIPULATOR_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgManipulator.lib

OSGMANIPULATOR _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgManipulatorD.lib

OSGSHADOW_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgShadow.lib

OSGSHADOW _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgShadowD.lib

OSGSIM_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgSim.lib

OSGSIM _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgSimD.lib

OSGTERRAIN_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgTerrain.lib

OSGTERRAIN _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgTerrainD.lib

OSGTEXT_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgText.lib

OSGTEXT _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgTextD.lib

OSGUTIL_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgUtil.lib

OSGUTIL _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgUtilD.lib

OSGVIEWER_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgViewer.lib

OSGVIEWER _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgViewerD.lib

OSGWIDGET_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osgWidget.lib

OSGWIDGET _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgWidgetD.lib

OSG_GEN_INCLUDE_DIR

E:/osgearth/OpenSceneGraph/include

OSG_INCLUDE_DIR

E:/osgearth/OpenSceneGraph/include

OSG_LIBRARY

E:/osgearth/OpenSceneGraph/lib/osg.lib

OSG _LIBRARY_DEBUG

E:/osgearth/OpenSceneGraph/lib/osgd.lib

OSG_VERSION_EXE

(清空)

SQLITE3_INCLUDE_DIR

E:/osgearth/sqlite/include

SQLITE3_LIBRARY

E:/osgearth/sqlite/lib/sqlite3.lib

ZLIB_INCLUDE_DIR

E:/osgearth/minizip/include

ZLIB_LIBRARY

E:/osgearth/minizip/LIB/zlibstat.lib

MINIZIP_INCLUDE_DIR

E:/osgearth/minizip/include

MINIZIP _LIBRARY

E:/osgearth/minizip/LIB/zlibstat.lib

如下图:

设置完成后再次“configure”

第三步:生成vs2010文件。

点击“Generate”,结果如下:

E:\osgearth\osgearth\vs2010文件夹截图:

1.2  VS2010配置

第一步:使用vs2010打开E:\osgearth\osgearth\vs2010\OSGEARTH.sln文件。

第二步:打开all_build工程属性,设置库目录和包含目录。

包含目录:

库目录:

保存所有文件,这样SLN文件就可以使用了。

第二节  OSGEarth编译与测试

2.1  OSGEarth编译

第一步:配置系统环境变量。

新设置OSG_FILE_PATH变量,值为E:\OSGearth\OSGEARTH\data;E:\OSGearth\GDAL\data;

向PATH添加值:

E:\OSGearth\3rdParty\bin;

E:\OSGearth\OSGEARTH\bin\Debug;

E:\OSGearth\OSGEARTH\bin\Release;

第二步:使用“生成”->“批生产”,选择all_build(debug|win32和release|win32)进行生成。

在生成的过程中会提示出现以下错误:

错误提示

处理方法

无法打开包括文件:“geos/platform.h”

将D:\geos-3.3.1\vs2010\include\geos文件夹中的文件复制到E:\osgearth\geos\include\geos中

无法打开包括文件:“zlib.h”

将D:\zlib125\zlib-1.2.5\中zlib.H文件复制到E:\osgearth\libzip\include文件夹中

在编译过程中存在4个文件无法编译成功,但是不影响正常的测试。

第三步:修改这些错误。

上述错误的问题主要出现在E:\osgearth\osgearth\src\applications\osgearth_imageoverlay\osgearth_imageoverlay.cpp文件的36-39行。

原因是OSG_MIN_VERSION_REQUIRED(2,9,6)限制了osg的版本。本文使用了v3.0.1版,因此需要添加需要添加ImageOverlayEditor文件。

(目前还没有解决)

 

 

2.2  OSGEarth测试

测试release版本:

1.打开cmd窗口,进入E:\osgearth\osgearth\vs2010\bin\Release;

2.输入命令: osgearth_viewer.exe E:\osgearth\osgearth\tests\gdal_tiff.earth;会出现一个提示

3.复制所需的dll到E:\osgearth\osgearth\vs2010\bin\Release文件夹中。可能需要重复好多次。

4.测试成功会出现下面界面:


 

第四章   OSGEarth学习

 

这是个人在学习osgEarth时根据体会或从别的地方看到的做的一个简单整理,有些东东就是官方文档翻译过来的,都是根据自己的需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。对个人在初期使用osgEarth时有很多帮助,所以特发上来,希望对大家也有帮助

osgEarth学习笔记

1.        通过earth文件创建图层时,可以指定多个影像数据源和多个高程数据源,数据源的顺序决定渲染顺序,在earth文件中处于最前的在渲染时处于最底层渲染;所以如果有高低精度不同的影响数据或者高程数据,在创建earth文件时要将粗精度的数据放在上方xml节点,高精度的放在其下面的节点;

2.        osgEarth自带多种驱动器,不同的驱动器驱动不同的数据源,自己也可以扩展驱动器读取相应的数据;

3.        可以通过profile属性指定数据的投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创建数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一个地形数据能否正常工作要看创建它的驱动器是否能够创建和对应profile兼容的数据瓦片;比如,如果要生成地球数据,就需要指定global-geodetic 或者global-mercatorprofile,相应的数据源要能够在这种profile下生成相应的地形数据;

4.        通过earth文件,最基本的也是最主要的功能是我们可以指定生成地形的坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以轻易生成我们想要的地形;

5.        osgEarth只能使用16或32位的高程数据源;

6.        如果直接使用原始的影像、高程以及矢量数据,可以用GDAL驱动器,在这种情况下需要注意几个性能的问题。第一,将数据源预先进行坐标变换,变换为目标地形坐标,否则osgEarth会对源数据进行坐标投影变换,这将降低数据的加载及处理速度。如果预先已经将数据源进行正确的坐标变换,osgEarth就可以省略这个步骤,从而提高其实时处理速度;第二,预先对影像数据进行瓦片处理,比如tiff格式的影像数据,它是逐行扫描存储的,而osgEarth是每次读取一个瓦片数据,如果预先对影像数据进行瓦片处理,在动态过程中osgEarth就不需要每次读取整个大块影像数据然后提取其需要的瓦片数据,而可以直接读取相应的瓦片数据即可,这样就大大提高了瓦片数据的读取速度。可以通过gdal_translate工具对影像数据进行瓦片处理;第三,创建金字塔数据集可以使osgEarth读取数据更加高效,可以用gdaladdo工具创建金字塔数据集;总之,要想提高osgEarth的处理效率,就要预先创建高效的数据瓦片结构,除了用gdal、vpb等工具外,也可以通过osgEarth的数据缓冲机制创建预处理的瓦片数据集。比如我们可以创建一个如下的earth文件将数据缓冲到指定的目录:

<mapname="bluemarble" type="geocentric"version="2">

 

    <!--Add a reference to the image -->

   <image name="bluemarble"driver="gdal">

       <url>c:/data/bluemarble.tif</url>

    </image>

 

    <options>

       <!--Tell osgEarth to cache the tilesin a TMS format-->

     <cache type="tms">

          <path>c:/osgearth_cache</path>

            <!--Tell osgEarth to cache the tilesto JPG to save disk space-->

          <format>jpg</format>

       </cache>

  </options>

</map>

这种缓冲方式只能缓冲在执行该文件时浏览过的地形数据,而不能自动缓冲所有的数据,要想自动缓冲所有的数据,就需要用到osgEarth自带的一个工具,osgearth_seed,通过osgearth_seed --max-level 7 bluemarble.earth将数据全部缓冲到指定位置,通过这种方式缓冲后,我们就拥有了一个完整的TMS数据源,我们可以直接通过文件目录的方式访问该数据源,也可以将该数据源拷贝到我们自己的本地web服务目录下。详情见http://osgearth.org/wiki/DataPreparation。除此之外还可以用MapTiler以及TileCache工具创建瓦片数据源,用它创建的瓦片数据源也可以直接在osgEarth下使用;

7.        可以通过两种方式将osgEarth集成到我们自己的osg应用程序中,第一种就是直接通过earth文件的方式,直接将earth文件读入作为一个osg节点加入场景即可,另外一种方式就是通过osgEarth的API。通过API的方式大体需要以下几个步骤:创建map对象——创建影像数据层——创建高程数据层——将影像数据层以及高程数据层加入到map对象——根据前面创建的map对象创建mapNode节点——将mapNode节点加入到场景;示例见http://osgearth.org/wiki/DevelopersGuide。无论是通过earth文件创建的地形还是通过API创建的地形,我们都可以在运行时对其进行修改,如果是用earth文件创建的地形,需要先找到该earth文件对应的mapNode,通过以上两种方式创建的mapNode,我们可以对地形进行修改操作,如添加新的影像、高程数据,移除特定的影像、高程数据,重新制定影像、高程数据的顺序等;

8.        如果我们的地形用的是地心坐标系,可以会碰到当相机距离地面非常近的时候地形被裁减掉的问题,要解决这个问题我们可以通过设置相机的远近裁剪比率或者创建AutoClipPlaneHandler来解决。AutoClipPlaneHandler可以动态监视相机,当相机距离地面很近时动态调整相机的近裁减面;

9.        在地形上放置模型对象时可以使用ObjectPlacer类,通过该类可以直接通过经纬度坐标进行模型的放置操作;

10.        osgEarth的目标是能够在osg中开发基于地理信息的应用,能够方便地浏览地理模型数据,能够与开放标准的地理数据兼容;osgEarth渲染地形的模式分为两种:实时在线模式(直接使用原始数据渲染生成)以及离线模式(数据预处理成瓦片数据或地形数据库);

11.        osgEarth使用于以下几种情况的应用:快速方便地运行地形地图数据;使用开放标准的地形地图数据,如WMS、TMS、WCS等;通过Web服务的方式集成本地存储的地形地图数据;系统要求以瘦客户端的方式运行;经常处理随着时间改变的数据;集成商业数据;

12.        在使用osgEarth自带的漫游器EarthManipulator时,如果给漫游器设置一个矩阵或者给漫游器设置一个TetherNode然后再解除,然后再移动相机位置,这时计算出的Center会有一个跳跃,然后才正常,造成这个问题的原因是给漫游器设置了参考节点(通过SetNode函数)造成的,设置了参考节点后漫游器要根据参考节点重新计算Center和相机姿态等参数,在以上两种情况发生时,在重新计算Center时出现了偏差,要想避免以上两种情况下造成的移动异常,可以不让相机结合参考节点重新计算Center,即将Pan函数中的recalculateCenter注释掉即可;

13.        Map的类型分为geocentric和projected两种类型,即地心方式和投影方式,要建立圆形地球就用geocentric类型,用这种类型如果要制定profile,只有geodetic(WGS84投影)和mercator(墨卡托投影)两种模式;

14.        Earth文件详解:

<!—type 属性可以是geocentric和projected两种模式,分别对应地心坐标系和平面投影坐标系,默认是地心坐标模式。Version是osgEarth的主版本号,必须有版本号-->

<map  name=”myMap” type=”geocentric”/”projected” version=”2”>

 

<!—定义地图各图层的运行时显示属性-->

<options>

 

<!—定义数据缓冲机制,缓冲类型有三种,tms、sqlite3以及tile cache,默认是tms,如果将cache_only设为true,osgEarth将只加载缓冲的数据,不加载任何非缓冲的数据,默认是false-->

<cachetype=”tms”/”sqlite3”/”tilecache” cache_only=”false”>

 

<!—缓冲数据存放目标目录,适用于tms以及tilecache 两种类型,直接指定缓冲目录-->

<path>C:/myCache</path>

 

<!—缓冲数据存放目标文件,适用于sqlite3,指定数据库文件名-->

<path>C:/myCache.db</path>

 

<!—缓冲目标文件类型,适用于tms以及tilecache两种类型,如果没有指定类型,将默认用影像数据或高程数据的类型-->

<format>jpg</format>

 

<!—tms类型,仅适用于tms类型,注意如果该类型是google,索引就是反的-->

<tms_type>google</tms_type>

 

<!—缓冲文件最大值,单位是MB,不知道该属性是否只是适用于sqlite3,有待确定-->

<max_size>300</max_size>

</cache>

 

<!—坐标投影属性,该属性相当于渲染数据的地理空间上下文,它决定了系统以哪种方式将世界坐标数据投影到屏幕像素。为了正确渲染影像数据以及高程数据,osgEarth需要知道数据源的profile以及渲染时的profile以进行必要的转换。-->

<profilename=”myProfile”>

 

<!—空间参考系统初始化字符串,该字符串的值可以参考PROJ4或WKT,下面是用PROJ4定义的WGS84投影 profile,srs以及作用范围的定义同样适用于平面投影模式-->

<srs>prog=latlong+ellps=WGS84 +datum=WGS84</srs>

 

<!—如果只想让该profile作用在某个区域,可以给其指定范围-->

<xmin>-10.2</xmin>

<xmax>-10</xmax>

<ymin>20</ymin>

<ymax>30</ymax>

 

<!—由于WGS84比较著名,所以可以用下面的简化方式代替上面的定义-->

<profile>global-geodetic</profile>

 

<!—另外一个著名的球体投影就是墨卡托投影(yahoo、google、微软、openstreetmap都是用的这种投影方式),这种投影方式的优点是可以在任何纬度或者预留区域正确地显示文本信息,可以用下面的简化方式定义-->

<profile>global-mercator</profile>

 

<!—也可以不用简化方式,简化方式使用默认的椭球体,也可以通过定义srs自己定义椭球体-->

<srs>+proj=latlong+a=6800000 +b=6800000</srs>

 

<!—定义垂直空间参考系统,相当于垂直高程大地基准-->

<vsrs>egm96-meters</vsrs>

</profile>

 

<!—定义地形引擎如何渲染影像数据和高程数据-->

<terrain>

 

<!—定义如何从上层高程数据采集当前层需要的高程数据,比如如果影像数据可以分割到17层,而高程数据到7层,那么8-17层的高程数据就需要从第7层去采集,下面的属性就指定了以何种方式去采集相应的高程值,一共有四种采集方式,分别是nearest(采集最近相邻点)、bilinear(双线插值)、average(平均值插值)、triangulate(根据相邻的四个点插值)-->

<elevation_interpolation>nearest/bilinear/average/triangulate</elevation_interpolation>

 

<!—定义是否开启地形表面的光照,默认是开启-->

<lighting>true</lighting>

 

<!—定义如何加载地形数据(数据加载策略),可以定义加载模式mode,分为standard(标准加载模式)、sequential(顺序加载模式)以及preemptive(优先级加载模式),默认是标准加载模式,preemptive加载模式不同于顺序加载模式,当需要加载最高级瓦片时需要从最低级开始逐层加载,而preemptive模式可以直接跳过中间级直接加载最高级,同时还可以设定不同数据的加载优先级,比如可以设定优先加载影像数据而后加载高程数据等,这样可以在视觉上得到优化处理。此外还可以指定加载数据时每个CPU创建的线程数量(loading_threads_per_core)或者加载数据使用的总的线程数量(loading_threads),以及编译地形数据即构建地形瓦片所使用的线程数量(compile_threads),注意,加载数据时每个CPU创建的线程数量和加载数据使用的总的线程数量不能同时指定,只能指定其中一种-->

<loading_policymode=”preemptive” loading_threads_per_core=”3” compile_threads=”2”></loading_policy>

 

<!—定义多个影像数据叠加时如何集成最终的影像数据,一共有四种方式,分别是auto(自动)、multitexture(多重纹理)、texture_array(纹理数组)、multipass(多通道),默认是auto方式,这种方式是系统自动选择一种纹理组合方法,它首先检测硬件所支持的各种方法然后选择第一种。Multitexture方式会为每个影像层指定它自己的影响纹理单元然后通过GPU进行组合,允许的最大纹理层的数量要受GPU的限制,texture_array是使用一个二维纹理数组通过GPU进行组合,multipass方式是通过创建多个渲染通道进行纹理的组合,这种方式没有纹理层数量的限制,但会影像系统的性能,因为它要给每个纹理层创建一个渲染通道-->

<compositor>auto/multitexture/texture_array/multipass</compositor>

 

<!—定义地形瓦片分割的最大层数-->

<max_lod>10</max_lod>

 

<!—定义瓦片范围系数,也就是瓦片Lod范围的最大值系数,系统默认是根据瓦片的宽度与该系数相乘作为范围最大值,该值默认是4,通过该系数可以对不同的地形图层的lod可见范围进行控制以提高效率,特别是对于带有文本的图层或者测绘标记图层,可以将该系数设小以大大提高系统的渲染性能-->

<min_tile_range_factor>4.5</min_tile_range_factor>

 

<!—定义瓦片数据的采样率,通过设定不同的采样率以得到不同精细程度的地形瓦片,默认是1.0,详情可参考osgTerrain-->

<sample_ratio>1.2</sample_ratio>

 

<!—定义地形瓦片边缘率,osgTerrain会在不同的瓦片之间绘制边缘以防止不同的瓦片之间出现缝隙,该值默认是0.02,如果该值太小,在不同瓦片之间就可能会出现缝隙,如果太大,可能会造成不必要的渲染而影响系统的渲染性能,对于高度变化比较大的地形或者是做了高程夸张的地形可以尽量将该值设的大一些,以免出现缝隙-->

<skirt_ratio>0.05</skirt_ratio>

 

<!—定义高程夸张系数,默认是1.0,也就是正常渲染高程的真实高度-->

<vertical_scale>2.0</vertical_scale>

 

<!—定义边缘缓冲率,就是地形瓦片的延展率,比如将地形做镶嵌或者重投影时为了能够准确覆盖到所有的瓦片数据需要将瓦片范围进行适当的放宽,如果设定0.2,放宽的倍数就是1.02-->

<edge_buffer_ratio>0.02</edge_buffer_ratio>

</terrain>

 

<!—指定是否对整个map启用光照-->

<lighting>true</lighting>

</options>

 

<!—指定影像数据,在同一个map中image的name必需是唯一的;在image下的子要素,有些是公共的,有些是针对特定的driver的。我们可以给影像数据指定driver(驱动器),不同的驱动器用于驱动不同的影像数据源;可以指定cacheid(影像数据缓冲标识),一个影像缓冲标示对应特定的缓冲目录或缓冲数据库文件,如果不指定,系统会根据驱动器创建默认的缓冲标识;可以指定影像数据细分的最小层数min_level以及最大层数max_level;可以指定可见范围min_range以及max_range,该值是影像数据块距离相机的距离(单位是米),当影像图层数据块不在该范围内时图层将不显示,等同于lod节点的可见范围;可以指定该影像数据的加载权重loading_weight,详情可见loading_policy,权重越大,加载的优先级越高;可以指定影像瓦片数据黑名单文件名blacklist_filename,当系统请求影像数据瓦片时,如果包含该瓦片的影响文件不存在,系统就会把该请求的数据瓦片放入到一个黑名单中,这样可以避免再次请求该无效数据,从而提高数据请求的效率。如果黑名单中没有任何记录,该黑名单就处于被禁用状态,也不会影像系统性能。-->

<imagename=”myImage”>

 

<!—指定该影像数据使用的profile,给该数据源指定profile后将覆盖map的全局profile,默认情况下,影像驱动器会自动判断数据源应该使用的profile,如果我们觉得驱动器无法自动判断得到数据源的profile时就要手动指定profile;-->

<profile>global_geodetic</profile>

 

<!—指定无数据页nodata_image,某些影像数据服务器,如果客户端请求的某些层上没有请求的相应影像数据,就会显示无数据提示,通过设定该属性可以让系统也显示无数据的状态提示图片信息-->

<nodata_image>someURL</nodata_image>

 

<!—指定无数据信息图片的透明背景色-->

<transparent_color>00 255 200</transparent_color>

 

<!—指定该图层是否启用数据缓冲,默认是启用的-->

<cache_enabled>true</cache_enabled>

 

<!—指定缓冲数据文件格式,为该数据源指定缓冲格式后将覆盖该map的全局缓冲格式,如果不指定,系统将默认使用源数据的文件格式-->

<cache_format>png</cache_format>

 

<!—指定影像数据的不透明度,默认是1.0,完全不透明,值越小越透明-->

<opacity>0.5</opacity>

 

<!—指定是否启用该图层,默认是启用-->

<enabled>true</enabled>

 

<!—指定该影像数据被分割时单个瓦片的大小(像素的宽、高)-->

<tile_size>40</tile_size>

 

<!—指定最大瓦片缓冲个数,指定该值是为了提高瓦片拼接的效率,默认值是16-->

<l2_cache_size>20</l2_cache_size>

</image>

 

//特定驱动器属性设置,驱动器分为影像/高程驱动器、模型驱动器、特征驱动器、缓冲驱动器以及地形引擎驱动器5大类;

//影像/高程驱动器

<!—agglite驱动器,该驱动器将矢量数据栅格化为位图然后然后将其转换为地形瓦片纹理层-->

<imagename=”myAggliteImage” driver=”agglite”>

 

<!—定义矢量特征(features)数据,矢量数据的属性定义都要通过特征节点features来定义,矢量特征数据也要指定自己的驱动器,它不直接创建矢量数据几何体,只是用来读取矢量数据,目前矢量数据驱动器主要是ogr及GDAL,支持的矢量数据文件格式就是驱动器支持的所有文件格式 -->

<featuresname=”myWorld” driver=”ogr”>

 

<!—指定矢量数据源的位置-->

<url>../data/world.shp</url>

 

<!—指定读取数据源的某一层,只有数据源包含多个层时才可用-->

<layer></layer>

 

<!—指定预处理几何体缓冲,所有的矢量几何体都将作为面对象进行缓冲,相当于后台缓冲,通过预先在后台多处理一部分矢量数据,从而在显示区域发生变化时载入数据比较快,从而降低给视觉造成的数据显示延迟-->

<bufferdistance=”0.02”/>

 

<!—指定驱动器要驱动的文件类型-->

<ogr_driver>ESRIShapefile</ogr_driver>

 

</features>

 

<!—指定数据绘制的风格,如颜色、透明度、纹理贴图等等,这种风格的设置一般是用于矢量数据的绘制,osgEarth可以通过两种方式定义风格,一种是CSS(重叠样式表),一种是SLD(通过xml指定样式,还在开发中),当给数据指定风格时,可以各整个数据层指定通过的风格,也可以将数据分解成多个类class,然后给每个类指定不同的风格(数据源需要能够分解成不同的类)-->

<!—指定线的风格,颜色、宽度、透明度-->

<styletype="text/css">

        element {

            stroke: #FF0000;

            stroke-width: 2.0;

            stroke-opacity: 0.5;

        }

    </style>

<!—指定面的风格-->

<styletype="text/css">

        element {

            fill: #FF0000;

            fill-opacity: 0.5;

        }

    </style><!—分解成不同的类分别设置不同的风格,下面是根据frence变量进行类的划分并设置不同的风格-->

<featuresname="world" driver="ogr">

          <url>data/world.shp</url>

           <ogr_driver>ESRIShapefile</ogr_driver>

       </features>

 

       <class name="french-speaking">

           <query>

               <expr>french="true" </expr>

           </query>

           <styletype="text/css">

               world {

                   fill: #FFFF00;

                   fill-opacity: 0.5;

               }

           </style>

      </class>

 

       <classname="non-french-speaking">

           <query>

               <expr>french="false" </expr>

           </query>

           <styletype="text/css">

               world {

                   fill: #FF0000;

                   fill-opacity: 0.5;

               }

           </style>

       </class>

<!—指定绘制的几何体类型,点、线、面-->

<geometry_type>line</geometry_type>

 

//ArcGIS驱动器,是从ESRI的服务器读取影像数据

 

//复合驱动器,可以将多个影像数据源(可以使用各自不同的驱动器)复合成一个逻辑图层,其实是一个伪装的驱动器,不是真实的驱动器

<imagename="grouped layer" driver="composite">

 

    <image name="component 1"driver="tms">

        ...

    </image>

 

    <image name="component 2"driver="wms">

        ...

    </image>

 

    ...

 

</image>

//GDAL驱动器,使用该驱动器,指定源数据url时可以指定文件也可以指定某个目录(不必将所有的文件都打包成一个文件),如果指定了目录,还可以指定要加载该目录下某些类型的文件(通过指定扩展名),此外,如果指定的是目录,系统递归遍历该目录下的所有文件将要加载的文件生成一个逻辑图层,需要注意的是,该目录下所有的数据必须是统一的坐标系统以及同样的波段和波段插值;基于性能的考虑,最好对源数据预先进行分块分级处理以及坐标重投影预处理,这样可以大大提高系统在运行时的性能。如果系统读取到的源数据与运行时要求的投影方式不匹配,系统就会在运行时对数据进行重投影,这样就会降低系统性能,如果想在这种情况下提高系统性能,可以让系统缓存重投影后的数据:

<cachereproject_before_caching="true">

       <path>/files/my_cache_folder</path>

    </cache>

 

<imagename="boston_inset" driver="gdal">

       <url>../data/boston-inset.tif</url>

        <tile_size>256</tile_size>

    </image>

 

//通过指定目录的方式加载高程数据示例:

<heightfieldname="terrain" driver = "gdal">

 

      <!--To load the files in a directory,just point the URL to a directory instead of a file-->

      <url>..\data\terrain</url>

    

      <!--Tell the GDAL driver to just lookfor tifs.  Other files types will beignored.-->

      <extensions>tif</extensions> 

 

      <!—对于高程数据,最好将tile_size设置为32或者64,默认情况下tile_size的值是256-->

      <tile_size>32</tile_size>

 

    </heightfield>

 

<!—指定数据分层的最大层数,如果不指定,系统将自动计算最大层数,这种方式特别适用于缓存自动计算的瓦片数据时-->

<max_data_level>10</max_data_level>

 

//osg驱动器,直接通过osg的文件读写插件读取相应类型的影响数据或高程数据

 

//tilecache驱动器,读取tilecache磁盘缓存数据,通过tilecache工具可以从WMS服务器创建或缓存地图数据到磁盘,然后通过该驱动器进行离线读取。

<imagename="world" driver="tilecache">

   <url>F:/data/tilecache/mapdata</url>

    <layer>world</layer>

    <format>jpeg</format>

  </image>

 

//tileservice驱动器,从NASA服务器读取数据

 

//tms驱动器,通过tms服务的方式读取数据

 

//wms驱动器,通过wms服务的方式读取数据

 

//VPB驱动器,从vpb生成的地形数据库读取相应的影像和高程数据,注意,osgEarth只能读取适用VPB使用—terrain选项创建的地形数据库。这样一来我们就可以同时使用vpb的地形数据库以及原始的影像、高程数据,可以在不改变现有vpb地形数据的基础上在已有的vpb地形上叠加另外的影像数据。

<!—指定在用vpb生成地形数据库时(--splits选项)使用的主分割层-->

<primary_split_level>5</primary_split_level>

 

<!—指定在用vpb生成地形数据库时使用的次分割层-->

<secondary_split_level>11</secondary_split_level>

 

<!—指定vpb地形数据使用的profile-->

<profile>global-geodetic</profile>

 

<!—指定vpb地形数据库使用的目录结构,分为nested,task, 以及 flat三种类型. 默认是 flat类型 -->

 

<!—指定使用vpb中影像数据层layer,默认是第0层-->

<layer>0</layer>

 

//模型驱动器

//feature_geom驱动器,该驱动器就是将矢量数据创建成几何对象进行渲染

<!—定义特征数据-->

<features></features>

<!—定义风格-->

<style></style>

<!—定义分类(为不同分类指定不同的风格)-->

<class></class>

 

<!—定义高度偏移,生成几何体前将数据相对海平面偏移特定高度主要是为了解决z-fighting的问题-->

<height_offset>10000</height_offset>

 

<!—指定生成的最大三角形的大小(三角形边的最大长度,单位是度,仅用于地心坐标地形上),通过控制三角形大小能够很好的将非凸多边形构成的三角形映射成椭球体,默认值是5.0-->

 

//feature_overlay驱动器,该驱动器采用osgSim::OverlayNode将矢量数据作为投影纹理覆盖到地形上。这种覆盖节点的方式对于平面投影坐标模式是很适合的,但对于球体地心坐标来说有一定限制,通过覆盖节点的方式将矢量数据投影成纹理只能覆盖不到一半地球大小,而且在背面会显示穿透效果。

<features></features>

<!—定义风格-->

<style></style>

<!—定义分类(为不同分类指定不同的风格)-->

<class></class>

 

<!—指定纹理单元,默认是auto-->

<texture_unit>1</texture_unit>

 

<!—指定覆盖纹理的大小,默认是1024-->

<texture_size>2048</texture_size>

 

<!—指定覆盖节点的基准高度,默认是0-->

<base_height>100</base_height>

 

//feature_stencil驱动器,该驱动器采用模板缓冲技术将矢量数据覆盖到地形上

<features></features>

<!—定义风格-->

<style></style>

<!—定义分类(为不同分类指定不同的风格)-->

<class></class>

 

<!—指定挤压距离,即在模板体的各个方向对其进行挤压,这是为了防止对于那些覆盖范围比较大的几何体容易造成z-fighting问题而做的处理,如果存在单个特征数据几何体覆盖的区域范围特别大,就要增加该值,默认值是300000-->

<extrusion_distance>400000</extrusion_distance>

 

<!—定义高程数据,高程数据的定义属性以及子要素基本与影像数据相同,特别需要注意的是,在定义瓦片大小时,默认值是256,这个值对于影像数据是合适的,但对于高程数据来说太大,应该将其设为比较小的值,比如32,否则会降低系统性能-->

<elevationname="srtm" driver="wms">

   <url>http://localhost/cgi-bin/mapserv.exe?map=srtm30_plus.map</url>

<layers>srtm30plus</layers>

<format>tiff</format>

<tile_size>32</tile_size>

</elevation>

 

<!—定义模型数据,属性包括名称、驱动器driver、最小可视范围值min_range(层次节点LOD范围)、最大可视范围值max_range、是否以覆盖方式覆盖到地形上overlay,对于指定的可视范围值,如果指定了gridding,该范围将作用于被分割的一个个的网格而不是模型几何体本身-->

<modelname="roads" driver="feature_stencil">

<featuresname="roads" driver="ogr">

<url>../data/roads-utm.shp</url>

</features>

 

<!—指定网格划分,模型数据源允许我们将非地形数据图层添加到地形地形图上,某些驱动器可以将矢量数据或者特征数据转换为几何体或者覆盖层,对于海量特征数据或者覆盖区域范围特别大的数据如果不对其进行优化处理,将严重影响系统性能,其中方式之一就是对其进行网格划分,对于不同的驱动器,网格划分实现的方式也不一样,自带的模型特征数据驱动器,比如feature_stencil和feature_geom驱动器就可以将几何体数据划分为一个个的小网格-->

<!—指定一个单元格的最大值cell_size,包括宽和高;指定裁切技术,即如何决定某些数据属于哪个单元格,共有两种方式:crop切割方式以及centroid形心方式,crop切割方式是将几何体根据格网进行切割,不同的部分分别属于不同的网格即可,centroid形心方式是判断几何体的形心,形心落在哪个网格,就认为该几何体属于哪个网格-->

<griddingcell_size="1000" culling_technique="crop"/>

<styletype="text/css">

roads {

        stroke: #ffff00;

        stroke-width: 10;

     }

</style>

 

<!—指定几何体类型-->

<geometry_type>line</geometry_type>

</model>

 

<!—指定overlay覆盖数据层,该层就是model的一个别名,等同于将model的overlay属性设为true-->

 

 

<!—指定地形数据的边缘标准化,指定该属性是为了让不同高程的瓦片数据之间的高程能够准确的融合,默认是启用的-->

<normalize_edges>true</normalize_edges>

 

<!—指定代理服务器地址和端口,如果想让osgEarth通过代理服务器访问某数据服务器,可以设定相应的代理服务器地址以及端口-->

<proxy_host>80.80.12.123</proxy_host>

<proxy_port>80</proxy_port>

 

</map>

 

Earth文件的完整示例见earthFile-template.earth文件

15.        注意,earth文件名不能有”-”横线

 

 

 

 

OSGearth,贴近球面时鼠标无法准确的控制视点位置 (2010-11-09 21:58:15)转载 分类: OSG 

http://bbs.osgchina.org/viewthread.php?tid=2793&highlight=�ӵ�+��

 

osg::ArgumentParserarguments(&argc,argv);

osgViewer::Viewerviewer(arguments);

viewer.setUpViewOnSingleScreen(0);     

viewer.setCameraManipulator(newosgGA::TrackballManipulator());

std::stringmodelPath =

  "F:\\google.earth";

 

{

  osg::ref_ptr<osg::Node> node =osgDB::readNodeFile(modelPath);

  viewer.setSceneData(node.get());

}

 

//render a frame

viewer.realize();

while(!viewer.done())

{

  viewer.frame();

}

 

使用的googleearth的图层信息,拉近了发现鼠标操作的高度似乎要低于实际图层所高度,低视角转动地球时无法准确控制找到自己所需的位置。

哪位大侠帮忙告诉一下,在哪里设置鼠标控制点跟球面视角高度保持一致啊?

 

 

 

Trackball不太适合用来浏览地球,可以考虑用TerrainManipulator或者osgEarth自带的EarthManipulator

 

 

 

用EarthManipulator解决了鼠标和滚轮的问题!

是这样解决的:

        std::string modelPath =

         "F:\\word_wind.earth";

        {

         // create an osgEarth node. Add it tothe scene graph and let the ref pointer go out of scope.

         osg::ref_ptr<osg::Node> node =osgDB::readNodeFile(modelPath);

         viewer.setSceneData(node.get());

        }

 

   manip->getSettings()->bindMouseDoubleClick(

        osgEarthUtil::EarthManipulator::ACTION_GOTO,

        osgGA::GUIEventAdapter:EFT_MOUSE_BUTTON);

 

    // add our fly-to handler

    viewer.addEventHandler(newFlyToViewpointHandler( manip ));

 

    // add some stock OSG handlers:

    viewer.addEventHandler(newosgViewer::StatsHandler());

    viewer.addEventHandler(newosgViewer::WindowSizeHandler());

    viewer.addEventHandler(newosgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));

 

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. JavaScript 设计模式之命令模式

    什么是命令模式? 假设有一个快餐店,而我是该餐厅的点餐服务员,那么我一天的工作应该是这样的:当某位客人点餐或者打来订餐电话后,我会把他的需求都写在清单上,然后交给厨房,客人不用关心是哪些厨师帮他炒菜。我们餐厅还可以满足客人需要的定时服务,比如客人可能当前正在…...

    2024/4/20 23:46:23
  2. VB中使用报表控件(一)

    在做机房收费系统时,有两个功能日结账单和周结账单中用到了报表控件,下面介绍一下如何使用报表控件。 首先,需要下载一个报表控件并安装,安装完成后在VB--工程--引用中选择Grid++Report Engine5.0TypeLibrary添加。这两个控件添加进了工具箱。下面添加代码就能使用此控件了…...

    2024/4/20 12:35:54
  3. JavaScript 设计模式之发布-订阅模式(下)

    发布-订阅模式的通用实现 现在我们在上一篇文章中已经看到了如何让售楼处拥有接受订阅和发布事件的功能。假设现在小明又去另一个售楼处买房子,那么这段代码是否必须在另一个售楼处对象上重写一次呢,有没有办法可以让所有对象都拥有发布—订阅功能呢? 答案是肯定的! 如何构…...

    2024/4/20 23:46:22
  4. ubuntu上面安装eclipse android到adt下载方法

    如果自动安装有问题的话,就需要手动安装,其实是差不多的,唯一不同的就是手动下载ADT插件包,http://dl.google.com/android/ADT-0.9.6.zip ,可以下载到。 版本号自己可以改改,我试过啦,改成20.0.0.zip可以用到,哈哈。。。 在Eclipse中选择Help > Install New Softwar…...

    2024/4/20 23:46:21
  5. ADT Plugin for eclipse 最新下载地址

    安卓及谷歌官网不容易上,在此整理好下载地址,这样就可以直接用迅雷下载了。Eclipse最新 Mars 版 Eclipse(暂时还没被墙)Mac 版:http://www.eclipse.org/downloads/download.php?file=/oomph/epp/mars/R1a/eclipse-inst-mac64.tar.gzWIN32 版:http://www.eclipse.org/dow…...

    2024/4/20 23:46:19
  6. JavaScript 设计模式之js中的单例模式

    javascript是一门无类语言,也正是因为如此,生搬硬套单例模式的概念毫无意义。在Javascript中创建对象的方法非常简单,既然我们只需要一个唯一的“对象”,为什么要为它先创建一个“类呢”? 单例模式的核心是:确保只有一个实例,并且提供全局访问 全局模式不是单例模式,但…...

    2024/4/20 23:46:20
  7. 问题 A: 二路归并排序(mergesort)递归法 [2*+]

    问题 A: 二路归并排序(mergesort)递归法 [2*+]时间限制: 1 Sec 内存限制: 128 MB 提交: 174 解决: 0 [提交][状态][讨论版][命题人:外部导入]题目描述二路归并排序(mergesort)递归法 用递归法进行二路归并排序 输入:第一行一个数据n,表示有n个数要排序。接下来n行每行一个&…...

    2024/4/20 21:14:29
  8. .Net控件Telerik全套下载:Telerik Controls 2010 Q2 (附加DLL文件+源码)

    Telerik专注于微软.Net平台的表示层与内容管理控件。Telerik Controls 2010 Q2控件组包括如下组件:Telerik RadControls for ASP.NET AJAXRadControls for ASP.NET是一套强大的用户界面控件套装,它可以帮助您创建拥有桌面应用程序华丽外表和高速性能的Web应用程序。18种可靠的…...

    2024/4/20 21:14:27
  9. eclipse安卓插件ADT下载地址

    http://tools.android-studio.org/index.php/adt-bundle-plugin...

    2024/4/20 21:14:27
  10. 浅谈JavaScript设计模式——单例模式

    单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是一种常用的模式,有些对象只需要一个,如线程池、全局缓存、浏览器中的window对象等,这时候可以用到单例模式。 单例模式典型的应用场景:单击按钮时,页面中会出现一个登陆浮窗,而该登录…...

    2024/4/20 21:14:25
  11. Java加密技术(一)——BASE64与单向加密算法MD5&SHA&MAC

    加密解密,曾经是我一个毕业设计的重要组件。在工作了多年以后回想当时那个加密、解密算法,实在是太单纯了。 言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书。 如基本的单向加密算法: BASE64 严格地说,属于编码格式,而非加密算法MD…...

    2024/5/1 20:34:27
  12. eclipse adt 插件离线安装

    从http://developer.android.com/sdk/installing/installing-adt.html下载adt离线安装插件包。 有两种安装方式: 1. 将下载下的安装包解压至eclipse安装目录的dropins目录下。 2. 打开eclipse, help-install new sorftwar 选择下载的zip包。一路next并accept即可。...

    2024/4/20 23:46:17
  13. 怎样再次修改Excel中的条码控件

    iamlaosong文1、在Excel中增加条码控件,方法是点击开发工具下面的“插入”下拉小三角,点击“其它控件”。2、再选择Microsoft BarCode 14.0(版本可能不同),光标变成“+”号,在需要条码的地方拉出矩形框,条码就出来了。3、右击条码,点击“属性”菜单(VBA工程不可见时弹…...

    2024/4/20 23:46:16
  14. eclipse 安装adt失败

    失败原因是插件已经安装但未找到,在谷歌下载一个adt,http://developer.android.com/sdk/eclipse-adt.html#downloading不要解压然后把目录指向压缩文件,如果这样不行,直接解压adt,在进入ADT目录,删除web目录、site.xml和index.html, 然后将ADT文件夹copy到eclipse/dropin…...

    2024/4/20 23:46:14
  15. JavaScript 设计模式之模板方法模式

    引 在JavaScript开发中用到继承的场景其实并不是很多,很多时候我们都喜欢用mix-in的方式给对象扩展属性。但这不代表继承在JavaScript里没有用武之地,虽然没有真正的类和继承机制,但我们可以通过原型prototype来变相地实现继承。 模板方法模式是一种只需使用继承就可以实现的…...

    2024/4/20 23:46:13
  16. Church's Coupon Performance Test Script

    2015年6月针对churchs coupon app做了并发压力测试,HP LR在11.5版本第一次支持在移动设备的录制对Server压力测试。也是本人第一次在移动设备上压力测试实践。工具使用的是 HP LoadRunner 12.02 Community Edition。(社区版可以免费支持50个虚拟用户并发,此版本工具当时是最…...

    2024/4/20 23:46:13
  17. eclipse安装Android ADT教程超简单!

    一、下载好eclipse配置好JDK环境之后,可以去官网下载ADT压缩包,当然博主把百度云连接放在下面,小伙伴自取 链接:https://pan.baidu.com/s/12vJgK4R1vuJxsbMuKdqU6Q 密码:amuc 二、把SDK,SDK manager.exe,eclipse放在同级目录下,以上jdk可以不放在此处,可忽略…...

    2024/4/20 23:46:11
  18. JavaScript设计模式----装饰者模式

    声明:这个系列为阅读《JavaScript设计模式与开发实践》 —-曾探@著一书的读书笔记装饰者模式的定义:装饰者(decorator)模式能够在不改变对象自身的基础上,在程序运行期间给对像动态的添加职责。与继承相比,装饰者是一种更轻便灵活的做法。装饰者模式的特点:可以动态的给某…...

    2024/4/20 23:46:11
  19. 功能强大的pdf控件,用户无需安装任何软件即可使用

    如果开发一个软件,需要用到PDF功能,您的选择是基于Adobe PDF吗? 如果是基于Adobe PDF,需要用户安装一个几十M的Adobe的安装包,这显然是不友好的。 即使目前也有了一些其它的阅读器,大小也还好。但是,这些阅读器或者是对很多PDF文件的兼容性很差,无法真正广泛可靠使用;…...

    2024/4/20 23:46:09
  20. 浅析JavaScript设计模式——装饰者模式

    【本文源址:http://blog.csdn.net/q1056843325/article/details/54974156 转载请添加该地址】装饰者模式 在不改变对象自身的基础上,在程序运行期间给对象动态地添加一些额外职责在传统面向对象语言中,为对象添加功能常使用继承 但是继承有很多缺点:超类子类强耦合,超类改…...

    2024/4/20 23:46:09

最新文章

  1. android天气实战

    页面绘制 问题1、下拉框需要背景为透明 我懒得写全部省份就写了5个所以不需要往下 图标准备 iconfont-阿里巴巴矢量图标库几坤年没来这了好怀念啊&#xff0c;图标库选择下雨的图标等 准备网络请求 0、API接口准备 api免费七日天气接口API 未来一周天气预报api (tianqiap…...

    2024/5/3 3:43:11
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. 三防笔记本丨工业笔记本电脑丨车辆检修的应用以及优势

    伴随着汽车技术的不断更新迭代以及车辆复杂性的增加&#xff0c;现代车辆检修工作需要更高效、更精确的方法来确保车辆的安全和性能。在这过程中&#xff0c;工业笔记本电脑作为一种强大的工具&#xff0c;为车辆检修提供了诊断、记录、分析和解决问题的核心功能 故障诊断与维修…...

    2024/5/2 15:10:07
  4. 【蓝桥杯】省模拟赛

    题目 1.奇数次数2.最小步数3.最大极小值和最小极大值 1.奇数次数 问题描述 给定一个仅包含数字字符的字符串&#xff0c;统计一下这个字符串中出现了多少个值为奇数的数位。 输入格式 输入一行包含一个字符串&#xff0c;仅由数字字符组成。 输出格式 输出一行包含一个整数&am…...

    2024/5/1 19:23:28
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/2 9:28:15
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57