当前位置:文档之家› world wind插件机制分析

world wind插件机制分析

world wind插件机制分析
world wind插件机制分析

插件机制总结

共分四个部分:

1. 插件机制概述:插件的运行特点

2. 插件书写格式:插件源文件和类的书写

3. PlugEngine相关类说明:插件链接和插件管理

4. PluginSDK相关类概述:插件应用类的开发平台

一、插件机制概述

1. 特点

插件机制支持多种语言和插件形式,并有较高的运行效率。添加插件有两种方式:

外部插件

在项目输出的Plugins文件夹中直接添加插件文件或编译好的程序集。程序初始化和运行中动态的编译执行由C#, https://www.doczj.com/doc/bd6712050.html,, https://www.doczj.com/doc/bd6712050.html,完成的源文件,在.NET框架内编译完成,不需要第三方的链接库。也可以从预编译好的.DLL文件加载插件。对脚本语言的快速编译,在加载

时编译运行,和内部代码有相同的运行效率。

内部插件

在项目中添加插件文件代码。在项目生成的时候直接编译到程序集当中。

插件机制也有一些缺点:

安全性,即外部脚本文件中的不安全或恶意的代码。但调试人员可以通过源文件查看。 缺少不同版本的插件开发平台。插件的书写要与主程序集的版本兼容。0插件机制借鉴WorldWind1.3版本中的插件机制,与WorldWind1.4版本中的插件不兼容。

2. 运行机制

主程序调用PluginCompiler搜索\Plugins目录及其子目录,将插件文件(包含.cs,.vb,.js,.dll格式)读入内存,如果需要编译则进行编译;然后查找已编译的程序集。每当确定插件类型,添加插件信息类列表,最后加载运行插件。在运行过程中可以用插件管理器来管理插件。

查找过程如下:

MainApplication.OpenStartupWorld() -> OpenWorld() -> InitializePluginCompiler();

//链接实现部分:

compiler = new PluginCompiler(this, pluginRoot);

//构造函数,创建实例

compiler.FindPlugins(Assembly.GetExecutingAssembly());

//查找程序集内部的的插件类

compiler.FindPlugins();

//查找外部插件类,在plugin文件夹中

compiler.LoadStartupPlugins();

//加载插件

插件相关类的关系图

二、插件代码的书写格式

1. 插件的信息头

在源文件开头以下格式书写插件信息,这些信息可以被PluginInfo类读取。

头信息是可选的,并推荐使用。例如:

//----------------------------------------------------------------------------

// NAME: On-Screen Clock

// VERSION: 1.1

// DESCRIPTION: Clock sample, adds itself in layer manager - demonstrates adding a renderable object, drawing on screen (C#)

// DEVELOPER: Bjorn Reppen aka "Mashi"

// WEBSITE: https://www.doczj.com/doc/bd6712050.html,

//----------------------------------------------------------------------------

// This file is in the Public Domain, and comes with no warranty.

2. 编写源文件

一般插件类的包含两个部分,即两个类:插件加载类(pluginLoader)和应用类(功能实现类)。第一个是插件加载类:继承Plugin 插件基类,相当于应用类的容器。主要从载了两个方法,public override void Load()

代码将在插件被加载的时候执行,并完成与主进程的传递参数, 或添加渲染目标,或启动监听(配合监听处理程序完成插件初始化)。

public override void Unload()

卸载插件。是加载的逆向过程。

第二个类是应用类,即具体实现功能的类,作为插件类的成员使用。

一般使用到主启动项目(0)、插件开发项目(PluginSDK)等项目中的类及参数。

对于比较复杂的插件可以包含更多的类型。

以On-Screen Clock 为例

此例中(WorldWind.MainApplication)Application 是从Plugin插件基类继承的成员参数,作为传递的参数;并添加Clock实例为渲染目标。

另外,应用类Clock继承于RenderableObject,实现渲染功能,由插件加载类ClockPlugin添加到渲染物列表。

public class ClockPlugin : WorldWind.PluginEngine.Plugin

{ Clock clock;

///

/// Plugin entry point - All plugins must implement this function

///

public override void Load()

{ // Add us to the list of renderable objects - this puts us in the render loop

clock = new Clock(Application);

Application.WorldWindow.CurrentWorld.RenderableObjects.Add(clock);

}

……

}

///

/// Clock Example : Display the current time

///

public class Clock : RenderableObject

{ ……

MainApplication ww;

public Clock(MainApplication app) : base("Clock", Vector3.Empty, Quaternion.Identity)

{ this.ww = app;

// We want to be drawn on top of everything else

this.RenderPriority = RenderPriority.Icons;

// true to make this layer active on startup

this.IsOn = true;

}

///

/// This is where we do our rendering

///

public override void Render(DrawArgs drawArgs)

{ // Draw the current time using default font in lower right corner

string text = "现在时间"+ DateTime.Now.ToString();

Rectangle bounds = drawArgs.defaultDrawingFont.MeasureString(null, text,

DrawTextFormat.None, 0);

drawArgs.defaultDrawingFont.DrawText(null, text,

drawArgs.screenWidth-bounds.Width-distanceFromCorner,

drawArgs.screenHeight-bounds.Height-distanceFromCorner,color );

}

……

}

三、插件机制相关类及说明

插件的运行机制主要有两个部分组成:

插件运行相关plugin, pluginInfo, pluginCompile

插件管理相关pluginDialog, pluginInstallDialog

1. 插件运行关键类

public abstract class Plugin

插件基类:抽象类,所有插件(加载)类的基类,由PluginCompiler链接

属性:

(WorldWind.MainApplication)Application和ParentApplication

指向主应用程序类的句柄:这两个属性一般作为参数传递给插件子类(插件加载类),传递的方式是虚继承的方式,这是主应用程序和插件类信息传递的纽带。Application和ParentApplication在使用上是等价的,但多使用后者以避免一些命名冲突。

方法:

public virtual void Load()

加载插件类的入口,子类必须重写该方法。程序运行中实际上是由插件基类(plugin)来调用Load (虚)方法,但具体的实现就由子类来完成。

public virtual void PluginLoad( MainApplication parent, string pluginDirectory )

加载插件的方法,这个方法不需要重写,可以由插件类直接调用(最终也将调用Load()方法)这个方法类似一个保护机制,

1. 子类可以直接使用PluginLoad (继承的方法)来加载插件,而且比较方便安全。

2. 在运行过程中(而不只是初始化时)插件加载和卸载。

public class PluginInfo

插件信息类:存储插件的信息及插件的实例,由pluginComplile直接创建实例。

它只表示插件的外部信息,与插件的功能和实现没有关系。

比如, Plugin插件的实例,插件ID(由读取文件名称得到),名称、描述、开发者、站点、相关说明(这些是由PluginInfo类读取源文件的头信息得到),初始化加载信息等。

使用PluginInfo,为任一头信息的属性进行赋值的时候均会将其他的属性同时赋值。

属性:

public bool IsLoadedAtStartup

获取和设置是否在程序初始化的时候加载插件。

public Plugin Plugin

插件的实例。表示插件子类。

public class PluginCompiler

插件链接类:加载插件脚本,链接,并执行,它是链接主应用程序和插件类链接的媒介。完成的功能主要有:添加(不同语言代码的)编译器,使支持不同语言编写的插件;使用CodeDomProvider 创建和检索代码生成器和代码编译器的实例,使用Assembly应用程序构造块完成源代码的生成;添加相关联的程序集,包括系统框架的程序集和程序生成的程序集。构造函数:

public PluginCompiler( MainApplication worldWind, string pluginDirectory )

初始化实例,完成参数传递。

属性和字段:

(ArrayList)m_plugins 和Plugins(), (PluginInfo)m_Plugin插件列表。

方法:

public void FindPlugins( Assembly assembly )

在以编译的内部程序集中(.dll程序集)查找插件; 通过特定类型(类的,公共的,插件类Plugin type)查找程序集插件类,并创建实例,添加入m_plugins列表。

public void FindPlugins()

查找plugin文件夹中的插件,并添加到m_plugins 列表; 使用扩展名来确定是否存在这种文件类型的编译器或者是不是已经编译好的dll 程序集。

注:支持3种文件类型的编译(.cs, .vb, .js)和一种文件的连接(.dll), 查找插件主要是为了添加插件列表(赋予插件信息),具体实现插件在Load中完成。

public void LoadStartupPlugins()

加载插件:加载列表中的插件,并调用Load(PluginInfo pi)完成插件的实现和功能。

注:

如果是外部插件类的源文件,查找插件列表后,初始化信息中的pluginfo.Plugin为空,则需要进行进一步的加载和编译(使用Assembly来进行),生成可执行的实例。

而内部使用的插件类和已编译的插件程序集,程序执行的时候已经编译,则不要再编译。 插件的加载过程中为每一个插件类创建实例,并最终都将使用Plugin基类的PluginLoad 方法进行。

当关闭程序的时候,分别执行每一个插件的卸载(UnLoad)操作。

2. 插件管理器

插件管理器pluginManager

public class PluginDialog : System.Windows.Forms.Form

插件管理器的对话框,由worldwind菜单项进行调用(当点击的时候初始化参数),传参:Worldwind. MainApplication.pluginManager =

new PluginDialog(Worldwind. https://www.doczj.com/doc/bd6712050.html,piler);

构造函数:

public PluginDialog(PluginCompiler compiler)

完成的功能:

对已添加插件的加载和卸载,程序运行中调用插件安装对话框;从插件管理器“安装”插件,

可以是插件文件(包括源文件和已编译好的文件),也可以是网络文件(通过一个URL进行

寻址下载)。

插件安装对话框

public class PluginInstallDialog : System.Windows.Forms.Form

从本地安装插件的实现过程为:将插件文件复制到plugin文件夹中,然后有PluginComplier类

重新寻找文件夹中的插件类,然后进行加载。

从网络安装插件(标识为以http://开头,表示协议),将插件下载到插件文件夹后进行加载。

四、PluginSDK

SDK 就是Software Development Kit 的缩写,中文意思就是“软件开发工具包”,即辅助开

发某一类软件的相关文档、范例和工具的集合。

在PluginSDK项目中,含有编写插件类必备的相关的类。

共有9个命名空间

下列出主要的成员(部分描述):

1. WorldWind

包含一些对象的计算、数据类型、属性配置等。

Icon Name Description

Angle A geometric angle 及其转换运算

Cache Maintains the cached data on disk (staying within limits)

CursorType Mouse cursor 枚举

DrawArgs渲染中的绘制参数

Frustum关于World中视见体的表述,用于Camera

GeographicBoundingBox关于地理图形有界体的描述

ImageHelper Various image manipulation functions. 图象处理

LayerDescriptor描述层的信息,无法继承此类

MathEngine Commonly used mathematical functions. 数学函数

MeasureMode Measure tool 的属性选择

OnScreenMessage屏幕的显示信息,使用drawArgs渲染

PerformanceTimer WW计时器

Shapefile_MultiPoint地形数据格式:多点

Shapefile_Null地形数据格式:空

Shapefile_Point地形数据格式:点

Shapefile_Polygon地形数据格式:多边形

Shapefile_PolyLine地形数据格式:折线

ShapeFileLayer地形数据加载层

ShapeFillStyle地形数据类型

ShapeTile地形数据瓦片

ShapeTileArgs地形数据瓦片参数

Splash The splash screen displayed while World Wind is loading.

SurfaceImage影像数据

SurfaceTile影响数据瓦片

World地球:渲染物

WorldSettings World user configurable settings 选项设置

WorldSurfaceRenderer影像渲染器

WorldWindSettings World Wind persisted settings. 配置设置

2. WorldWind.Camera

关于3D场景中的摄像机。常和drawArgs中的WorldCamera参数关联,部分内容要参照DirectX编程中有于摄像机类和渲染状态的说明。

Icon Name Description

CameraBase Camera base class (simple camera)

MomentumCamera Normal camera with MomentumCamera. (perhaps

merge with the normal camera)

WorldCamera The "normal" camera

3. WorldWind.Configuration

SettingBase WorldSettings和WorldWindSettings的基类

SettingBase.LocationType 位置枚举,多用于表示路径

4. WorldWind.Menu

菜单,在WorldWindows中渲染的“工具条”和“层管理器”

Icon Name Description

LayerManagerButton“层管理器”上的控制按钮

LayerManagerMenu“层管理器”

LayerMenuItem“层管理器”菜单中的项

LayerShortcutMenuButton快捷“工具条”按钮

LayerManagerItemInfo“层管理器”菜单项的右键信息:层管理信息

MenuAnchor菜单停靠方式

MenuBar“工具条”

MenuButton菜单按钮:基类

MenuUtils菜单的基本绘图函数

SideBarMenu“层管理器”边框绘制

5. https://www.doczj.com/doc/bd6712050.html,

关于网络链接和数据传输的类

Icon Name Description

GeoSpatialDownloadRequest Base class for geo-spatial download requests

地理空间数据下载的基类,wms下载类型

WorldWindUri worldwind:// URI class

6. https://www.doczj.com/doc/bd6712050.html,.Wms

Icon Name Description

WmsDescriptor Wms描述

WmsLayerAccessor Calculates URLs for WMS layers.

7. WorldWind.Renderable

各个图层的渲染物相关类

Icon Name Description

BoundaryLayer(RenderableObject)边界层

DownloadableImageFromIconSet(RenderableObject)Displays images on the

globe (used by Rapid Fire MODIS)

GeoSpatialDownloadRequest地形数据下载请求

Icon One icon in an icon layer

Icons Holds a collection of icons

IconTexture Contains one texture for our icon texture cache

ImageLayer Use this class to map a single image to the

planet at a desired altitude. Source image

must be in Plate Carree (geographic) map

projection.即包含全球影像的图层。

MeshLayer Mesh层绘制

LatLongGrid绘制经纬线和标号

PathLine PathMaker中绘制路径

PathList(RenderableObjectList) 路径列表

PolygonLayer ShapeLayer中绘制多边形

QuadTile四叉树的瓦片

QuadTileSet Main class for image tile rendering. Uses the

Terrain Manager to query height values for 3D

terrain rendering. Relies on an Update thread

to refresh the "tiles" based on lat/lon/view

range

RenderableObject The base class for objects to be rendered as

part of the scene.

RenderableObjectList Represents a parent node in the layer manager

tree. Contains a list of sub-nodes.

RenderPriority The render priority determines in what order

priority number are rendered over lower

priority objects. 渲染层次

ShapeLayer渲染层

TerrainPath Class used to create and render a terrain

following path. 地形路径

TiledPlacenameSet Placename Layer that uses a Directory of xml

files and extract place names based on current

lat/Lon/view range

WorldWindPlacename WW中的地形名称类

WorldWindPlacenameFile WW中的地形名称文件处理

WorldWindPlacenameList WW中的地形名称列表

8. WorldWind.T errain

地形数据应用

Icon Name Description

NltTerrainAccessor Reads NLT terrain/elevation data (BIL 文件).

TerrainAccessor Terrain (elevation) interface 地表高层数据

TerrainDownloadRequest Terrain tile download request 地形数据下载

TerrainTile地形瓦片

TerrainTileCacheEntry地形数据缓冲接口

TerrainTileService Provides elevation data (BIL format).

9. WorldWind.VisualControl

可视化控件

Icon Name Description

Colorbar An auto-sizing form that displays a bitmap 位图显示窗口

ProgressBar Render a progress bar. 进度条

PropertyBrowser Property browser/settings dialog to modify parameters

in the main class.

WorldWind系列四:功能分析 Show Planet Axis、Show Position、Show Cross Hairs功能

WorldWind系列四:功能分析——Show Planet Axis、Show Position、Show Cross Hairs功能 来源:博客园作者:无痕客 今天主要看了Show Planet Axis、Show Position 、Show Cross Hairs 功能,主要是它们在菜单调用方式上都是很类似。代码如下: 显示位置信息 private void menuItemShowPosition_Click(object sender, System.EventAr gs e) { World.Settings.ShowPosition = !World.Settings.ShowPositio n; this.toolBarButtonPosition.Pushed = World.Settings.ShowPo sition; this.menuItemShowPosition.Checked = World.Settings.ShowPo sition; this.worldWindow.Invalidate(); } //显示中心十字标 private void menuItemShowCrosshairs_Click(object sender, System.Even tArgs e) { //控制中心十字标显示与否 World.Settings.ShowCrosshairs = !World.Settings.ShowCross hairs; this.menuItemShowCrosshairs.Checked = World.Settings.Show Crosshairs; this.worldWindow.Invalidate(); } 从上面的代码看,我们只能惊叹代码封装的很好,同样都调用 this.worldWindow.Invalidate();难道Invalidate()函数万能?!请参考我的Invalidate()方法学习(资料收集),原来该方法是界面区域失效,发送了重绘事件,将会调用WorldWindow.cs中重载了的OnPaint()。OnPaint方法里主要是调用了 Render()方法。所以我们的关键是看Render()中如何实现上面三个功能。(其实Render()中实现的功能很多,主要是控制界面绘制方面的,以后还会提到它的) Render()实现上面三个功能也大量使用了DirectX和Direct 3D方面的知识,请网上搜索学习相关知识或参看我的Direct3D学习(资料收集)。 显示中心十字线功能

WorldWind开发

WorldWind WorldWind软件终极教程 2009年05月05日 1.新手上路篇 1.介绍: World Wind(以下简称“ WW ”)是一款可以让用户通过从太空视角全面观察地球表面的软件。WW以他优秀的卫星图库与地形资料,通过3D技术的应用,让用户拥有身临其境的感觉,这一切就象是真的一样。事实上你可以浏览世界上任何的角落,想象一下从高空观赏纵横交错的ANDES(安第斯山脉)山脉,进入美国大峡谷,从空中如飞机般的跃过ALPS(阿尔卑斯山 ) 以及走入非洲的撒哈拉沙漠 2.安装 2.1 下载 要想使用WW这款软件,首先肯定是要得到这款软件。目前WW通过几次版本的提升,已经由原来的共享变为了免费,如果你想要了解WW的最新信息以及下载WW,你可以方便的从本站或者官方网站中取得资料( 相比国外服务器的速度而言,当然是国内本土的下载速度更快一些了) 。 2.2 安装

相比较Google Earth来说NASA的安装方式并不是特别的友好,甚至是有些麻烦。 在你下载完其总共100多M的软件包后,先不要着急直接安装。因为你现在需要确认以下几件事情: 1. 电脑中是否安装了MS DX 9C( 要安装并顺利运行 NASA WW 电脑中首先需要具 备DX9) 2. 显卡驱动是否安装正确,没有任何错误 ( 这里并不要求你的显卡具备支持 DX9 的渲染特效的功能,但是至少是可以对 DX 渲染方式可以正确处理 ) 3. 操作系统可以是 Win9X、Win ME、 Win2000 、Winxp 其中的任何一个(暂时只 有兼容MS与MAC两种版本的WW) 4. 系统配置不低于 : 700 MHz 或更高主频的CPU 128 MB 以上内存 1 GB 以上的硬盘容量 显卡只要支持DX即可 确认了之后,便可以进行对WW的安装了。 初始过程中WW会首先要求用户( 强制 )安装一个DX的插件,使DX可以达到WW 的要求,其后一路下一步就可以搞定了。 3.配置文件

WorldWind学习记录

1. c#中字体显示????,怎么修改,求教,,, 长沙-GIS-唐胡子(32326910) 10:44:40 还在搞这个啊 长沙-GIS-唐胡子(32326910) 10:44:54 这个问题,肯定很多人解决过啊 成都-计算机-zero(287932929) 10:48:10 我将楼主提供的地名包放在add_on和config下,然后将\PluginSDK\TiledPlacenameSet.cs 的读取PlacenameFile的地方编码方式做了修改,将ASCII方式改为Default方式,编译后。 就能正确显示: using (BinaryReader dataFileReader = new BinaryReader(dataFileStream, System.Text.Encoding.ASCII)) 编码方式改为:Default using (BinaryReader dataFileReader = new BinaryReader(dataFileStream, System.Text.Encoding.Default)) 把省区划的xml的UTF-8修改为gb2312; 在shapefilelayer.cs中 private void loadShapeFile(string shapeFilePath) { FileInfo shapeFile = new FileInfo(shapeFilePath); FileInfo dbaseFile = new FileInfo(shapeFile.FullName.Replace(".shp", ".dbf")); System.Random random = new Random(https://www.doczj.com/doc/bd6712050.html,.GetHashCode()); ArrayList metaValues = new ArrayList(); if(m_ShapeTileArgs.DataKey != null && dbaseFile.Exists) { using (BinaryReader dbfReader = new BinaryReader(new BufferedStream(dbaseFile.OpenRead()), System.Text.Encoding.Default ))//修改为default时,name字段显示汉字,但存在乱码,用ASCII时name字段是“???” 1.从ARCGIS中导出的中国政区图shp文件,显示字段为汉字省名称,但是加载后总是以问号显示,把ShapeFileLayer.cs中的 using (BinaryReader dbfReader = new BinaryReader(new BufferedStream(dbaseFile.Op enRead()), System.Text.Encoding.Default )) 3.得到shp文件编码 public System.Text.Encoding GetFileEncoding(string fileFullName) { FileStream fs = new FileStream(fileFullName, FileMode.Open, FileAccess.Read); System.Text.Encoding r = GetType(fs); fs.Close(); return r; }

OpenLayers二维地图使用教程

OpenLayers 1 OpenLayers简介 OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包。它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范,OpenLayers 采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。采用OpenLayers作为客户端不存在浏览器依赖性。由于OpenLayers采用JavaScript语言实 现,而应用于Web浏览器中的DOM(文档对 象模型)由JavaScript实现,同时,Web浏览 器(比如IE,FF等)都支持DOM。OpenLayers APIs采用动态类型脚本语言JavaScript编写, 实现了类似与Ajax功能的无刷新更新页面, 能够带给用户丰富的桌面体验(它本身就有一 个Ajax类,用于实现Ajax功能)。 目前,OpenLayers所能够支持的Format有:XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-Known Text)。在OPenlayers.Format名称空间下的各个类里,实现了具体读/写这些Format的解析器。OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。当然,也可以用简单的图片作为源。 在操作方面,OpenLayers 除了可以在浏览器中帮助开发者实现地图浏览的基本效果,比如放大(Zoom In)、缩小(Zoom Out)、平移(Pan)等常用操作之外,还可以进行选取面、选取线、要素选择、图层叠加等不同的操作,甚至可以对已有的OpenLayers 操作和数据支持类型进行扩充,为其赋予更多的功能。例如,它可以为OpenLayers 添加网络处理服务WPS 的操作接口,从而利用已有的空间分析处理服务来对加载的地理空间数据进行计算。同时,在OpenLayers提供的类库当中,它还使用了类库Prototype.js 和Rico 中的部分组件,为地图浏览操作客户端增加Ajax效果。 2 Openlayers基本使用方法 Openlayers是使用Javascript编写的脚本,与网页设计技术密切相关,因此在使用之前需要掌握一定得相关知识,例如html、css、javascript等。编辑工具推荐使用:EditPlus。 1)下载并拷贝源代码即相关文件 到Openlayers官方网站https://www.doczj.com/doc/bd6712050.html,下载源代码压缩包,解压后可以看到其中的一些目录和文件。需要拷贝的文件和目录有:根目录下的【OpenLayer.js】文件、根目录下的【lib】目录、根目录下的【img】目录、根目录下的【theme】目录。将这4项内容拷贝到你网站的Scripts目录下(当然,这个只是例子,自己的网站程序目录结构自己说了算,只要保证OpenLayers.js,/lib,/img,/theme在同一目录中即可)。

NASA World Wind开源项目配置详解

NASA World Wind开源项目配置详解 NASA World Wind是C#开发的个人电脑上的开源的3D图形虚拟地球系统。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像,这些图像应用于Blue Marble,Landsat7,SRTM, MODIS以及其它更多的地方。 用户可以到这里下载.net源码https://www.doczj.com/doc/bd6712050.html,/ 下载后,打开解决方案,使用的是.net2.0,一共有16个项目组成。 编译整个项目,发现缺少几个程序集的引用。 PluginSDK项目需三个引用: Microsoft.DirectX,Microsoft.DirectX.Direct3D,Microsoft.DirectX.Direct3D X; WorldWind项目需四个引用: Microsoft.DirectX,Microsoft.DirectX.Direct3D,Microsoft.DirectX.Direct3D X,Microsoft.DirectX.DirectInput。 首先了解一下DirectX: 微软的DirectX上一系列技术的集成,用来提供Windows平台多媒体运行的 API,支持应用程序、多媒体软件和3D游戏极其声效。 我下载的是DirectX9.0c简体中文版,下载地址是:https://www.doczj.com/doc/bd6712050.html,/system/patch/download_17624.html 解压后,运行程序DXSETUP.exe。

完成后,打开目录C:\WINDOWS\https://www.doczj.com/doc/bd6712050.html,\DirectX for Managed Code 发现会有十个文件 将1.0.2902.0目录的四个dll文件copy到其他的目录中,引用到项目中,发现还是编译不通过,于是我将1.0.2911.0目录的Microsoft.DirectX.Direct3DX.dll进 行替换,编译成功! 设置WorldWind为启动项目,Ctrl+F5,启动后出现一个图片的界面,过了半分钟的样子,出现一个directX版本的错误,哦,这个还是有办法的,呵呵。运行命令"dxdiag",点击“display”,将所有的设置为"Enabled".

基于World Wind的二次开发概要设计

基于World Wind的二次开发概要设计说明书 [V1.0版本] 二零一一年十月

修订历史记录 日期版本作者审核人审核时间备注2011年10月22日V1.0版本刘美琳 石少华 赵昱昀

目录1.引言.... 1.1 编写目的... 1.2 背景... 1.3 定义... 1.4 参考资料... 2.总体设计.... 2.1 需求规定... 2.1.1系统功能... 2.1.2系统性能... 2.1.3输入输出要求... 2.1.4数据管理能力要求... 2.1.5故障处理要求... 2.1.6其他专门要求... 2.2 运行环境... 2.2.1设备... 2.2.2支持软件... 2.2.3接口... 2.2.4控制... 2.3 基本设计概念和处理流程... 2.4 结构... 2.5 功能需求与系统模块的关系... 2.6 人工处理过程... 2.7 尚未解决的问题... 3.接口设计.... 3.1用户接口... 3.2外部接口... 3.3内部接口... 4.运行设计.... 4.1运行模块组合... 4.2运行控制... 4.3运行时间... 5.系统数据结构设计.... 5.1逻辑结构设计要点... 5.2物理结构设计要点... 5.3数据结构与程序的关系... 6.系统出错处理设计... 6.1出错信息... 6.2补救措施... 6.3系统维护设计... 1引言

1.1编写目的 [说明编写这份概要设计说明书的目的,指出预期的读者。] 1.2背景 A.[待开发软件系统的名称;] B. [列出本项目的任务提出者、开发者、用户。] 1.3定义 [列出本文件中用到的专门术语的定义和外文首字母组词的原词组。] 1.4参考资料 [列出有关的参考资料。] 2总体设计 2.1需求规定 [说明对本系统的主要的输入输出项目、处理的功能性能要求。包括] 2.1.1 系统功能 2.1.2 系统性能 2.1.2.1精度 2.1.2.2时间特性要求 2.1.2.4可靠性 2.1.2.5灵活性 2.1.3 输入输出要求 2.1.4 数据管理能力要求

WorldWind 网络GIS 地图发布 空间信息服务实验报告

空间信息服务技术 实验报告 学院:资源与环境科学学院专业:地图学与地理信息系统组员:李庆君、信睿、陶桐桐教师:王明军 日期: 2015-1-8

目录 空间信息服务技术实验报告 (1) 1、实验目的 (1) 2、实验数据 (1) 3、实验内容 (1) 3.1 服务器配置 (1) 3.1.1 Apache服务器配置 (1) 3.1.2 Tomcat服务器配置 (2) 3.1.3编译和运行World Wind (3) 3.2 矢量数据加载服务 (3) 3.2.1 矢量数据预处理 (3) 3.2.2 本地shp数据加载 (3) 3.2.3 网络shp数据加载 (4) 3.3栅格数据的加载 (5) 3.3.1 WMS服务概述 (5) 3.3.2 World Wind多分辨率图层技术 (6) 3.3.3 利用FWTools对下载好的Landsat影像进行切割 (6) 3.3.4影像数据添加到WMS Server (7) 3.4本地高程数据服务 (8) 3.4.1 高程数据服务介绍 (8) 3.4.2 洪山区高程数据服务加载 (8) 3.5 World Wind 平台定位 (8) 3.5.1 直接定位 (9) 3.5.2 飞行定位 (9) 3.6 空间查询服务 (9) 3.6.1实体查询属性 (9) 3.6.2 属性查询实体 (11) 5、实验心得 (12)

空间信息服务技术实验报告 1、实验目的 随着电脑、手机以及互联网的普适,信息化时代已经到来,城市的数字化信息服务已经成为了其发展进步的必由之路。三维数字信息化城市系统是数字化、虚拟化、信息化、功能化、可视化、科技化特点的是通过对城市建筑空间位置、信息服务等进行数字化并存储在本地活服务器,对这些信息进行查询,分析已得到期望的结果。 本次实验旨在对武汉洪山区某区域的概况进行数字化,借助World Wind三维数字平台,加入该区域的主要建筑、主要道路等的shp 数据,并且加入高分辨率影像数据,实现洪山区的一些多媒体查询。有了数字化城市系统,有助于外来人口迅速的了解洪山区基础设施的分布情况,为其带来极大的便利。 2、实验数据 ①洪山区部分主要街道和主要建筑的矢量数据 ②在地理空间数据云上下载得到的包含洪山区的TM遥感图像 ③洪山区90米分辨率高程数据 3、实验内容 3.1 服务器配置 3.1.1 Apache服务器配置 Apache目前是被绝大部分用户使用的一中网页服务器软件。它可以和各式各样的计算机平台相容,由于其跨平台和安全性被广泛使用,Apache是目前使用最广泛的Web服务器端软件之一。操作简单、性能稳定、访问速度快,并可以作为代理服务器来使用等都是其优点。

WorldWind系列十五:如何切割影像和DEM数据及其在WW中的应用配置

WorldWind系列十五:如何切割影像和DEM数据及其在WW中的 应用配置 来源:博客园作者:无痕客 WorldWind学习系列十四中我从代码上分析如何加载DEM数据,里面涉及了算法,有学习和借鉴意义。但对于只求应用或者说是急于求成的网友来说,实用价值不是太大!我们分析代码是一种学习过程,不是目的,终究要落在如何应用自己的影像和DEM数据、如何基于自己的数据开发满足自己项目需求的新的WW插件。这是一过程,需要循序渐进,今天只跟大家分享一下如何切割自己的影像或DEM,及如何设置相应的XML配置。 我的学习和实践,主要是参考https://www.doczj.com/doc/bd6712050.html,/wiki/Dstile_howto,对于英语较好的网友,建议阅读原文,反正我英语不太好,结合实践,我差不多看了五六遍原文。我下面是翻译部分内容及自己的实践步骤和心得(将采用红色字部分)。 这是一篇教你如何一步步将你自己的具有地理参考系的影像数据添加到WorldWind中的文档。该帮助文档将告诉你如何将影像数据切割成瓦片,及怎样在WW中利用这些瓦片数据创建图层。至此,你可以将该图层作为一个Add-on插件来发布。这个图层可以完全放在你的电脑上。如果你想将瓦片数据作为发布服务提供给他人,该文档可能对你帮助不大。 WW的瓦片系统的组织如下图:

阅读下面的内容前,请确保你已经理解上图中WW瓦片的工作原理和XML的配置原理。(注:上图是WW的精华) 下面我将带你创建一个图层实例,里面的数据可以换做你自己的。(注:第一次实践的话,建议你使用同样的数据同样的步骤,将整个过程走一遍) 必备软件工具: FWTools:这是一个操作具有地理参考系影像的免费的工具包,是开源工具。dstile切图工具需要使用FWTools,最新版本V2.4.6。下载地址:https://www.doczj.com/doc/bd6712050.html,/安装FWTools时,你可以选择不安装开发文件,这样可以节省一些安装空间。dstile工具与2.X版本兼容,与1.X版FWTools不兼容。 Dstile:使用版本是2007年8月13日,下载地址: https://www.doczj.com/doc/bd6712050.html,:8080/tisham/dstile-0.2_win32_whatnickpatches.zip 这个程序按照Making Layers文章的处理过程。请将压缩文件解压后拷贝到FWTools的安装目录下(如:D:\Program Files\FWTools2.4.6) WorldWind(1.4版) 前期准备:

java版WorldWind源代码解析之一

Java版WorldWind源代码学习笔记该文档编写者系数学系毕业且未满一年工作经验的职场新人,java知识有限,对于新事物Worldwind刚接触不久,总结一下。不足之处,希望得到各位大师的指点。 刚开始,我看了一些WorldWind的相关简介,感觉从整体上给了WorldWind非常好的框架感,所以我将它拷贝了过来。之后,我们的研究就从大的框架转到细节去。毕竟,“研究”不只是看大的框架,还要将细节进行分析。我作为一个新手,对此也非常陌生,那么,就让我们一起来学习吧。不足之处请见谅。 首先,我们贴出官网上给出的WorldWind的源代码结构如下 ?gov.nasa.worldwind顶级包 ?gov.nasa.worldwind.awt 用于awt的组件 ?gov.nasa.worldwind.formats.gpx GPS轨道格式 ?gov.nasa.worldwind.formats.nmea GPS轨道格式 ?gov.nasa.worldwind.geom 几何与数学类 ?gov.nasa.worldwind.globes 地球、火星等星球的实现 ?https://www.doczj.com/doc/bd6712050.html,yers图层 ?https://www.doczj.com/doc/bd6712050.html,yers.Earth专用于地球的图层 WorldWindow和View接口 以下是WorldWindow接口: ?set/getModel(Model)

?set/getView(View) ?getSceneController(...) ?pick(java.awt.Point) ?set/getInputHandler(...) 以下监听器: ?PositionListener ?SelectListener ?RenderingListener ?repaint() View 接口: ?Fields ?Position, direction, field of view, altitude, heading, pitch, roll, ?Actions o apply() o goto(lat/lon/elev/altitude) o project(Point 3Dpoint) ?Compute

worldwind技术手册详解

写在前面
虽说是技术手册,但是没有源码的研究就算是一个教程吧。由于本人能力有限,文章中有很多不 当之处,请各位原谅。 Bigheader 联系:gdsqz2@https://www.doczj.com/doc/bd6712050.html,
1

worldwind 技术手册
目录:
1. WorldWind 软件架构 ――――――――――――――――02 WW 功能介绍 WW 与 XML Client 与 Server WW 使用链接 本地缓存路径 本地功能配置 http 请求与 asp WMS、WFS 2. WorldWind 金字塔体系 ―――――――――――――――――-03 瓦片金字塔详解及其对应公式 ――――――――――――――――――03 NASA World Wind Tile Structure ――――――――――――――――― 03 NASA World Wind Map Tile System ―――――――――――――――― 04 瓦片请求调度策略 ――――――――――――――――― 05 2.2.1 当前显示请求及其显示(客户端) ――――――――――――――――――05 2.2.2 目标瓦片快速搜索算法 ――――――――――――――――――08 2.2.3 瓦片数据的请求预测(服务器) ――――――――――――――――――08 2.3 可视化的地球空间数学模型 ――――――――――――――――――10 2.3.1 地球三维 LOD 模型 ――――――――――――――――――10 3. Geospatial image processing ――――――――――――――――――14 3.1 步骤: (准备知识:LOTD:0 层瓦片大小;TileSize: ) ―――――――――――14 3.2 NLT Landsat 处理技术范例 ―――――――――――――15 3.3 dstile howto ―――――――――――――15 4. Creat a new world ―――――――――――――17 4.1World Wind 本地文件说明 4.1.1. Worlds 4.1.2. 在安装目录下 4.2 创建新的世界模型 5. Making layer ―――― ――――――――――18 5.1 添加新图层(更详细可参考) 5.2 Point ―――――――――――――――20 5.3 Lines ―――――――――――――――20 5.4 Polygon ―――――――――――――――23 5.5 Model Feature ―――――――――――――――25 5.6 Effects and Multi-Texturing ―――――――――――――――27 5.7 Shapefile ―――――――――――――――32 5.8 KML/KMZ 6. ddons 与 plugins ―――――――――――――――32 addons 与 plugins 区别 插件总汇及其功能 7. script 脚本 ―――――――――――――――――33 8. 编译调试 ―――――――――――――――――――33 9. 读书籍和论文 ―――――――――――――――――――――34 10. 1.4.1 版本发展 ―――――――――――――――35
2

WorldWind学习系列七:LoadUnload Plugins——投石问路篇

WorldWind学习系列七:Load/Unload Plugins——投石问路篇 来源:博客园作者:无痕客 今天原计划把Load/Unload Plugins完全弄明白,可是分析该功能的过程时发现Load/Unload Plugins没有想象的简单,而且它的实现代码中有很多重点知识点值得深入学习。所以,将该部分分两次总结。这次主要是为明天的深入学习做些铺垫,准备分两部分:World Wind Plugin基础知识、展示插件DEMO帮大家坚定信心。 World Wind Plugin基础知识 WorldWind魅力不仅是因为它是开源的三维软件,而且在于它更是一个开源的三维框架。很多朋友都想基于WorldWind搞开发,我原来也是冲着这目的来学习WorldWind,因为它是三维而且是开源的(即:免费的)。但我现在给出原因是:WorldWind具有着让你耳目一新的良好设计框架,它最大的优点就是它的框架思想,支持无限扩展插件。(关于它的架构我会系列在最后总结的,因为这是WW的一大亮点,很值得我们学习!)扯远了,WorldWind支持动态加载插件,你需要做的只是写个插件,甚至只是一个简单的*.cs插件文件,就轻松地在三维环境下执行你的功能。 WW中主要应用了插件思想,其实现上可以分为两种:Add-on 和Plugin。 Add-on是什么意思?google翻译为“附加”。我们这样可以看待WorldWind:其核心的框架部分好比一副人的骨头架子;其所有各种功能好比“附加”到人骨头架子上的肉;其被各功能访问的数据好比人身体血管里的血液。没有血,人会成啥样?没有肉,人会成啥样??没有骨头,人又会成啥样???呵呵,想象一下,该理解什么是Add-on了吧!回到WW 现实上,Add-on就是Earth、Moon等(如下图1),就是Flags of the World、Landmark 等(如图2)。 图1:图2: “好像所有的功能都是Add-on了?”是的,Plugin可以被认为是一种Add-on,但是Plugins更强大,你可以简单地安装你所信任来源的插件,Plugins可是用C#,VB或J#写的代码,是被WorldWind在启动时加载和编译的,允许插件开发者在不修改源代码的情况

WorldWind系列六: 渲染过程解析篇

WorldWind系列六:渲染过程解析篇 来源:博客园作者:无痕客 今天主要是分析学习了Render问题,搞明白了WorldWind中整个Render绘制处理过程。其中关键类是: RenderableObject.cs ,RenderobjectList.cs. WW中所有需要绘制的对象都RenderableObject,WW的各功能的执行显示都是不断地调用相应的Render方法。 1.RenderableObject整个绘制对象继承图

WW绘制都是通过RenderableObject类,将所有的要绘制对象都看做是RenderableObject,从而统一了整个系统WW的绘制对象的绘制过程。 2.RenderableObjectList也继承自RenderableObject,先看看它的继承图 摘录内容: “实际的点线,平面纹理等渲染对象都是从RenderableObject继承,最终的渲染实现也是在从它继续下来的类中,RenderableObjectList的成员m_children (protected ArrayList m_children = new ArrayList();)包含WW中所有的渲染对象,绘制过程中按如下的优先级进行: public enum RenderPriority { SurfaceImages = 0, TerrainMappedImages = 100, AtmosphericImages = 200, LinePaths = 300, Icons = 400, Placenames = 500, Custom = 600 } 这里对WW调试过程中的m_children的成员做个截图,需要注意的是m_children的成员大部分还是RenderableObjectList对象,向下包含的层次很多,但只有最底层的从RenderableObject继续的对象才是渲染的最终实现。”摘自: https://www.doczj.com/doc/bd6712050.html,/s/blog_467b6cd601008mmd.html~type=v5 _one&label=rela_nextarticle RenderableObjectList可以简单看作RenderableObject对象的集合,但实质上存储RenderableObject对象集合的仅仅是其中的属性m_children,它有很多特有的针对m_children管理的方法,如:Add(RenderableObject ro)、Remove(RenderableObject layer)。RenderableObjectList里通过

WordWind(Java版)开发环境搭建

WordWind(Java版)开发环境搭建 操作平台Windows 7 64位操作系统,如果是32位的则在拷贝有些J ar包的时候注意对应32位的。 首先在官网下载最新的WordWind源码文件(我下载的是2.0版本的),解压缩,然后在Eclipse中新建Java Project。 如果想对WorldWind源码进行研究,开发环境搭建如下: 1.将下载的文件中的src文件夹下的所有目录文件拷贝到工程中的src 目录下。 2.在Java工程中新建lib文件夹,把gadl.jar、gluegen-rt.jar、gluegen -rt-natives-windows-amd64.jar、jogl-all.jar、jogl-all-natives-windows-amd64.jar、plugin.jar拷贝到礼拜目录下。 3.在工程中JRE System Library上右键Build Path→Configure Build Path,在Libraries选项卡下点击Add JARs,然后把lib文件夹下的所有Jar包添加进去,如下图。

大功告成,运行gov.nasa.worl dwindx.examples包下的任意Java文件,结果如下: 如果只想利用WorldWind进行二次开发,则开发环境只需要这样配置:1.在Java工程中新建lib文件夹,把worldwin.jar、worldwindx.jar、gl uegen-rt.jar、gluegen-rt-natives-windows-amd64.jar、jogl-all.jar、jogl -all-natives-windows-amd64.jar拷贝到lib目录下。

Using NASA’s World Wind virtual globe for interactive internet

D o w n l o a d e d B y : [U n i v e r s i t y O f M a r y l a n d ] A t : 16:18 20 M a y 2008 Using NASA’s World Wind virtual globe for interactive internet visualization of the global MODIS burned area product L.BOSCHETTI*{,D.P.ROY {and C.O.JUSTIC E {{Department of Geography,University of Maryland,2181LeFrak Hall,College Park,MD 20740,USA {Geographic Information Science Center of Excellence,South Dakota State University,Brookings,SD 57007,USA (Received 12February 2007;in final form 13July 2007)Three-dimensional virtual globes are radically changing the way geographic information is perceived by the public.This article describes how NASA World Wind,an open source virtual globe,is currently being used for visualization of the MODIS burned area product.The procedures adopted for converting the product into a format compatible with World Wind,as well as the spatial generalization of these data at different scales,are described.Directions to instructions on how to obtain the MODIS burned area product visualization imagery and use it in World Wind are included.This article highlights the potential benefits of integrating the visualization capability of virtual globes into the next generation of remotely sensed product internet analysis and distribution systems. 1.Introduction There has been an information revolution in remote sensing,in the capacity to generate products and to disseminate products to users.Before the 1990s,satellite sensor data were obtained primarily by installation of a satellite receiving station,or by data requests to such stations or the associated data distributors.Data were usually mailed to users on analogue tape media or as printed photographs or diapositives.Today,digital satellite data products can be obtained from dedicated centres that may be separated physically and institutionally from the place of product https://www.doczj.com/doc/bd6712050.html,ers can submit requests via the internet using personal computers,and can request that products be sent on media or over the internet using file transfer protocols.For example,National Aeronautics and Space Administration (NASA)Moderate Resolution Imaging Spectroradiometer (MODIS)land products are generated systematically on a global basis and distributed to the global user community via the internet from dedicated data active archive centres (Justice et al.2002).Visualization of satellite products greatly aids the product browse and ordering process and is also required to ensure the quality of products as part of the production process (Roy et al.2002). Commercial internet search engines and services have raised expectations and awareness for the delivery of geographic information and services over the internet (Jones and Ware,2005,Butler 2006).Virtual globes provide visualization of *Corresponding author.Email:luigi@https://www.doczj.com/doc/bd6712050.html, International Journal of Remote Sensing Vol.29,No.11,10June 2008, 3067–3072 International Journal of Remote Sensing ISSN 0143-1161print/ISSN 1366-5901online #2008Taylor &Francis https://www.doczj.com/doc/bd6712050.html,/journals DOI:10.1080/01431160701733023

三维电子沙盘国内外现状1

三维电子沙盘国内外现状 1、总体概况 近几年,在地形图基础上发展起来一些用于表示三维空间的图形模式。这些图形模式有三维电子沙盘、三维数字地图、三维电子地图、三维景观图等等。三维电子沙盘更加注重重大比例尺的地形表现。 网络三维地形图系统越来越受到研究者的关注,Google Earth免费公共服务系统的推出第一次将这个全球高分辨率影像及三维场景真实地展现在在用户面前,极大地促进了各个行业用户在三维可视化方面的需求。 Skyline, WorldWind, ArcGlobe等三维可视化平台的推出更是让用户的需求逐步转化为现实。 但是三维电子沙盘的效率目前依然是用户感到不满足的一个重要环节之一,也是众多学者研究和思考的热点。 数据的网络快速传输是影像网络三维可视化效率的核心环节之一,在网络三维可视化系统中,对于服务器频繁的数据请求及网络通信代价很大程度影响系统运行的效率;降低访问频率、尽可能减少数据网络传输量是需要重点考虑的问题。 成熟的客户端数据缓冲机制是衡量网络三维可视化系统是否成熟的重要标志。网络三维可视化系统通常有大量经常被访问的影像、模型、地形、矢量数据,为了避免频繁地与数据服务器进行交互,需要将经常被访问的数据保存在内存和外存缓冲中,可以大幅度地提高系统的性能。 2、三维可视化方面国内外的现状 目前,国内外关于Web缓存及优化算法的研究有很多。但是,针对网络三维可视化系统缓存研究公开发表的很少。Web缓存机制虽然能够在一定程度上改善系统性能,但对网络3维可视化系统的缓存管理明显缺少针对性。 当前三维可视化方法主要有计算机透视法、计算机影像编修法、计算机绘图及3D模型法、计算机模型及影像合成等,但它们大都是用栅格或影像表示空间地理信息的,类似于三维数字地形图的概念,但是又有很大不同。前者强调三维视图,重视空间认知的功能,后者侧重三维空间的可编辑、可操作性,方便工程规划和设计。以规则格网(Gird)为基础的三维地形可视化这方面的研究算法也比较多大致可分为以下几个阶段: 1997,Duchaineau在Lindstrom的算法基础上,提出了实时优化自适应网格(ROAM)算法,它使用二叉树而不是连通图来表示地形结构。Duchaineau和Lindstrom都是采用规则的简化模式,分别代表了当前的两大主流法则:基于四叉树的LOD(Level of Detail)地形分割和基于二叉树的LOD地形分割。 1998,Rottger提出基于规则格网的四叉树来表示地形,采用一种特别的误差计算方法消除块间裂缝,把结点变形融入算法框架,取得较好的可视化效果。 2001,陈刚提出一种基于RSG(参见《地形RSG模型的实时动态构网算法的设计与实现》解放军信息工程大学测绘学院,陈刚)通过定义模型中顶点间的约束关系,解决四叉树中裂缝问题,还利用误差继承的方法将顶点间的约束关系反应到顶点的误差值中,在构网的过程中只需要通过简单的误差判断就可以快速得到参与构网的顶点。 3、国内外三维建模现状

相关主题
文本预览
相关文档 最新文档