当前位置:文档之家› OpenLayers心得

OpenLayers心得

OpenLayers心得
OpenLayers心得

OpenLays学习笔记

目录

(一)项目介绍 (2)

(二)源代码总体结构分析 (5)

(三)BaseTypes :定义底层类与定制JS内置类 (9)

(四)BaseTypes: OpenLayers中定制JavaScript内置类 (14)

(五)空间数据的组织与实现 (19)

(六)OpenLayers 数据解析—以GML为例 (22)

(七)数据渲染分析 (26)

(八)地图表现 (29)

(九)地图表现 (34)

(十)OpenLayers中的控件 (37)

(十一)OpenLayers事件机制分析 (42)

(十二)体系结构 (45)

OpenLayers项目分析

(一)项目介绍

OpenLayers 是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript 包,目前的最高版本是2.5 V,通过BSD License 发行。它实现访问地理空间数据的方法都符合行业标准,比如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:

先到它的官方网站https://www.doczj.com/doc/8e286841.html,下载他的压缩包,解压后可以看到其中的一些目录和文件,拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。然后,创建一个index.html作为查看地图的页面,导入OpenLayers.js和你将要创建的js。

我们以加载WMS和GML文件为例。

(5)写js代码,主要是init() 第一个地图窗口就完成了 注1.js中defer的作用是页面加载完成后,执行脚本。

注2.222 2.2控制地图与div的占据区域 目标:让地图默认占满展现区 方法: 设置map的options,由其中两个因素决定:maxExtent-最大地图边界;maxResolution-最大解析度。 当maxExtent设置为地图的最大边界后,maxResolution设置为auto,那地图就占满DIV。 var options = { controls: [], maxExtent: bounds, maxResolution: "auto", projection: "EPSG:4326", numZoomLevels: 7, units: 'degrees' }; map = new OpenLayers.Map('map',options); 2.3地图控制-尺度缩放 目标:填加尺度缩放控件 步骤: (1)map初始化赋参数 var options = { controls: [], //scales: [50000000, 30000000, 10000000, 5000000], maxExtent: bounds, maxResolution: "auto", projection: "EPSG:4326", numZoomLevels: 7, (表示有几个缩放级别) units: 'degrees' }; map = new OpenLayers.Map('map',options); (2)填加控件,代码 map.addControl(new OpenLayers.Control.PanZoomBar({ position: new OpenLayers.Pixel(2, 15)(右边距,上边距) })); 思考:级别的计算,个人推测由(maxResolution- minResolution)/ numZoomLevels,但是默认值是书面日后再细究。

geoserver

●利用具有地理空间位置信息的数据制作地图。其中将地图定义为地理数据可视的表现。 这个规范定义了三个操作: ?GetCapabitities 返回服务级元数据,它是对服务信息内容和要求参数的一种描述; ?GetMap 返回一个地图影像,其地理空间参考和大小参数是明确定义了的; ?GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息 WFS: Web Feature Service(Web要素服务) ●Web 地图服务返回的是图层级的地图影像, ●Web要素服务(WFS)返回的是要素级的GML编码,并提供对要素的增加、修改、删 除等事务操作,是对Web地图服务的进一步深入。OGC Web要素服务允许客户端从多个Web要素服务中取得使用地理标记语言(GML)编码的地理空间数据,定义了五个操作: ?GetCapabilites 返回Web要素服务性能描述文档(用XML描述); ?DescribeFeatureType 返回描述可以提供服务的任何要素结构的XML文档; ?GetFeature 一个获取要素实例的请求提供服务; ?Transaction 为事务请求提供服务; ?LockFeature 处理在一个事务期间对一个或多个要素类型实例上锁的请求。 WFS-T: Web Map Service-Transactional. 允许用户以可传输的块编辑地理数据。 WCS:Web Coverage Service(Web覆盖服务) Web 覆盖服务(WCS)面向空间影像数据,它将包含地理位置值的地理空间数据作为“覆盖(Coverage)”在网上相互交换。 ●网络覆盖服务由三种操作组成:GetCapabilities,GetCoverage和DescribeCoverageType: ?GetCapabilities 操作返回描述服务和数据集的XML文档。 ?GetCoverage操作是在GetCapabilities确定什么样的查询可以执行、什么样的数据能 够获取之后执行的,它使用通用的覆盖格式返回地理位置的值或属性。 ?DescribeCoverageType 操作允许客户端请求由具体的WCS服务器提供的任一覆盖层 的完全描述。 GML: Geography Markup Language. 一种用于描述地理数据的XML。OGC——Open Geospatial Consortium——开放地理信息联盟 总之,GeoServer 是您需要显示地图在网页的那些工具的当中一个,用户可以缩放并且移动。可以与一些客户端联合使用,比如:MapBuilder (for web pages), UDig, GVSig,等等。对标准的使用允许信息从GeoServer 到其它地理信息可以很容易地被结合。

FLUENT基础知识总结

======== FLUENT基础知识总结 仅仅就我接触过得谈谈对fluent的认识,并说说哪些用户适合用,哪些不适合fluent对我来说最麻烦的不在里面的设置,因为我本身解决的就是高速流动可压缩N-S方程,而且本人也是学力学的,诸如边界条件设置等概念还是非常清楚的同时我接触的流场模拟,都不会有很特别的介质,所以设置起来很简单。 对我来说,颇费周折的是gambit做图和生成网格,并不是我不会,而是gambit 对作图要求的条件很苛刻,也就是说,稍有不甚,就前功尽弃,当然对于计算流场很简单的用户,这不是问题。有时候好几天生成不了的图形,突然就搞定了,逐渐我也总结了一点经验,就是要注意一些小的拐角地方的图形,有时候做布尔运算在图形吻合的地方,容易产生一些小的面最终将导致无法在此生成网格,fluent里面的计算方法是有限体积法,而且我觉得它在计算过程中为了加快收敛速度,采取了交错网格,这样,计算精度就不会很高。同时由于非结构网格,肯定会导致计算精度的下降,所以我一贯来认为在fluent里面选取复杂的粘性模型和高精度的格式没有任何意义,除非你的网格做的非常好。 而且fluent5.5以前的版本(包括5。5),其物理模型,(比如粘性流体的几个模型)都是预先设定的,所以,对于那些做探索性或者检验新方法而进行的模拟,就不适合用。 同时gambit做网格,对于粘性流体,特别是计算湍流尺度,或者做热流计算来说其网格精度一般是不可能满足的,除非是很小的计算区域。所以,用fluent 做的比较复杂一点的流场(除了经典的几个基本流场)其计算所得热流,湍流,以及用雷诺应力模拟的粘性都不可能是准确的,这在物理上和计算方法已经给fluent判了死刑,有时候看到很多这样讨论的文章,觉得大家应该从物理和力学的本质上考虑问题。 但是,fluent往往能计算出量级差不多的结果,我曾经做了一个复杂的飞行器热流计算,高超音速流场,得到的壁面热流,居然在量级上是吻合的,但是,从计算热流需要的壁面网格精度来判断,gambit所做的网格比起壁面网格所满足的尺寸的要大了至少2个数量级,我到现在还不明白fluent是怎么搞的。 综上,我觉得,如果对付老板的一些工程项目,可以用fluent对付过去,但是如果真的做论文,或者需要发表文章,除非是做一些技术性工作,比如优化计算一般用fluent是不适合的。 我感觉fluent做力的计算是很不错的,做流场结构的计算,即使得出一些涡,也不是流场本身性质的反应,做低速流场计算,fluent的优势在于收敛速度快,但是低速流场计算,其大多数的着眼点在于对流场结构的探索,所以计算得到的

fluent全攻略(探索阶段)

GAMBIT使用说明 GAMBIT是使用FLUENT进行计算的第一个步骤。在GAMBIT 中我们将完成对计算模型的基本定义和初始化,并输出初始化结果供FLUENT的计算需要。以下是使用GAMBIT的基本步骤。 1.1定义模型的基本几何形状 如左图所示的按钮就是用于构造模型的基本几何形状的。当按下这个按钮时,将出现 如下5个按钮,它们分别是用以定义点、线、面、体的几何形状的。 值得注意的是我们定义这些基本的几何元素的一般是依照以下的顺序: 点——线(两点确定一线)——面(3线以上确定一面)——体(3面以上确定体)对各种几何元素的操作基本方式是:首先选中所要进行的操作,再定义完成操作所要的其他元素,作后点“APPL Y”按钮完成操作。以下不一一重复。 下面我们分别介绍各个几何元素的确定方法: 1.1.1点的操作 对点的操作在按下点操作按钮后进行(其他几何元素的操作也是这样)。点有以下几种主要操作 定义点的位置按钮,按下后出现下面对话框 Coordinate Sys.:用以选择已有坐标系中进行当前操 作的坐标系 Type:可以选择3种相对坐标系为当前坐标系:笛卡 儿坐标、柱坐标、球坐标。 以下通过在Global 中直接输入点的x、y、z值定义点, 注意这里的坐标值是绝对坐标值,而Local中输入的是相 对坐标值,一般我们使用绝对坐标值。 Label:为所定义的点命名。 在完成以上定义后就可以通过进行这个点 的定义,同时屏幕左半部的绘图区中将出现被定义的点。 用关闭此对话框。 查看所有点的几何参数按钮(在以后的操作中也可以查看其他元素的几何参数) 在Vertices栏中选择被查询的点,有两种选择方式(其他几 何元素的选择与此类似): ①按住shift键的同时用鼠标左键取点

Openlayers3加载国家天地图WMTS服务示例

Openlayers3加载国家天地图WMTS服务示例。 1.部分代码: var projection = ol.proj.get('EPSG:4326'); var projectionExtent = projection.getExtent(); var size = ol.extent.getWidth(projectionExtent) / 256; var resolutions = new Array(14); var matrixIds = new Array(14); for (var z = 0; z <=14; ++z) { resolutions[z] = size / Math.pow(2, z); matrixIds[z] = z; } var map = new ol.Map({ logo:false, layers: [ new https://www.doczj.com/doc/8e286841.html,yer.Tile({ name:"baseVec", source: new ol.source.WMTS({ url: 'http://t{0-6}https://www.doczj.com/doc/8e286841.html,/vec_c/wmts', layer: 'vec', format: 'tiles', tileGrid: new ol.tilegrid.WMTS({ origin: ol.extent.getTopLeft(projectionExtent),

resolutions: resolutions, matrixIds: matrixIds, }), matrixSet:"c", style: 'default' }) }) ], target: 'map', controls: ol.control.defaults({ attributionOptions: /** @type {olx.control.AttributionOptions} */ ({ collapsible: false }) }), view: new ol.View({ center:[121.00228,29.14696] , projection:ol.proj.get("EPSG:4326"), zoom: 14 }) }); 2.效果图

Fluent经典问题及答疑2

Fluent经典问题及答疑2 51 对于出口有回流的问题,在出口应该选用什么样的边界条件(压力出口边界条件、质量出口边界条件等)计算效果会更好?(#42) 52 对于不同求解器,离散格式的选择应注意哪些细节?实际计算中一阶迎风差分与二阶迎风差分有什么异同?(#69) 53 对于FLUENT的耦合解算器,对时间步进格式的主要控制是Courant数(CFL),那么Courant 数对计算结果有何影响?(#43) 54 在分离求解器中,FLUENT提供了压力速度耦和的三种方法:SIMPLE,SIMPLEC及PISO,它们的应用有什么不同?(#44) 55 对于大多数情况,在选择选择压力插值格式时,标准格式已经足够了,但是对于特定的某些模型使用其它格式有什么特别的要求? (#60) 56 计算流体力学中在设定初始条件和边界条件的时候总是要先选择一组湍流参数,并给出其初值。如何选择并给出这些初值呢?有什么经验公式或者别的好的办法吗?(#73) 57 讨论在数值模拟过程中采用四面体网格计算效果好,还是采用六面体网格更妙呢?(#70) 58 如何将自己用C语言编辑的程序导入到FLUENT中?在利用UDF编写程序时需注意哪些问题?(#157) 59 在UDF中compiled型的执行方式和interpreted型的执行方式有什么不同?(#72) 60 在用gambit的时候,导入pro/e的stp文件后,在消去最短边的时候,有些最短边不能消去,其是空间线段,用面merge的方法和连接点的方法都不行,请问该怎么消去这类短边?(#144) 61 FLUENT help和GAMBIT help能教会我们(特别是刚入门的新手)学习什么基本知识?(#126) 62 FLUENT如何做汽车外流场计算的模拟?并且怎么可以得到汽车的阻力系数和升力系数?(#170) 63 FLUENT模拟飞行器外部流场,最高MA多少时就不准确了?MA达到一定的程度做模拟需注意哪些问题?(#125) 64 在用gambit建模,保存成*.msh文件时总是出现No entity的错误:Continuum Entity fluid does not contain any valid entity and is not written! Boundary Entity wall does not contain any validentity and is not written! 不知道是什么问题?产生的原因是什么?如何解决?(#150) 65 在做燃烧模拟的时候,入口燃料温度定义为蒸发/离解开始时的温度(也就是,为离散相材料指定的蒸发温度“Vaporization Temperature”),这是指水分蒸发温度吗?一般是多少?(#196) 66 在计算煤粉燃烧时遇到这样的问题: Warning: volatile + combustible fraction for lignite is greater than 1.0shell conduction zones 如何解决? 67 FLUENT控制方程是无因次的还是有因次的?如果是无因次的,怎么无因次的? 68 做飞机设计时,经常计算一些翼型,可是经常出现计算出来的阻力是负值,出现负值究竟是什么原因,是网格的问题还是计算参数设置的问题?(#71) 69 FLUENT中的Turbulent intensify是如何定义的?该值应该是小于等于100%,可是我的计算中该值达到400%,不知为何? 70 边界条件中湍流强度怎么设置:入口边界条件中的湍流强度和出口边界条件中的回流湍流强度怎么设置?是取默认值10%吗?(#135) 71 关于Injection中的Total Flow rate:injection 选surface,此时选了好几个面(面积不一定完全相同,但颗粒的入口速度相同),那Total Flow Rate 是指几个面的总流量还是某一个面的啊?只能处理完全相同的面吗?(#160) 72 FLUENT中能不能做插值:在ansys中的模型节点坐标和FLUENT中模型的节点坐标不一致,能

FLUENT菜鸟入门-不可不知的50个经典问题

Fluent必知的一些基本概念! 连续性方程不收敛是怎么回事? 在计算过程中其它指数都收敛了,就continuity不收敛是怎么回事 这和Fluent程序的求解方法SIMPLE有关。SIMPLE根据连续方程推导出压力修正方法求解压力。由于连续方程中流场耦合项被过渡简化,使得压力修正方程不能准确反映流场的变化,从而导致该方程收敛缓慢。 你可以试验SIMPLEC方法,应该会收敛快些。 湍流与黏性有什么关系? 湍流和粘性都是客观存在的流动性质。 湍流的形成需要一定的条件,粘性是一切流动都具有的。 流体流动方程本身就是具非线性的。 NS方程中的粘性项就是非线性项,当然无粘的欧拉方程也是非线性的。 粘性是分子无规则运动引起的,湍流相对于层流的特性是由涡体混掺运动引起的。 湍流粘性是基于湍流体的parcel湍流混掺是类比于层流体中的分子无规则运动,只是分子无规则运动遥远弱些吧了。不过,这只是类比于,要注意他们可是具有不同的属性。粘性是耗散的根源,实际流体总是有耗散的。 而粘性是制约湍流的。 LANDAU说,粘性的存在制约了湍流的自由度。 湍流粘性系数和层流的是不一样的,层流的粘性系数基本可认为是常数,可湍流中层流底层中粘性系数很小,远小于层流时的粘性系数;而在过渡区,与之相当,在一个数量级;在充分发展的湍流区,又远大于层流时的粘性系数.这是鮑辛内斯克1987年提出的。 1 FLUENT的初始化面板中有一项是设置从哪个地方开始计算(compute from),选择从不同的边界开始计算有很大的区别吗?该怎样根据具体问题选择从哪里计算呢?比如有两个速度入口A和B,还有压力出口等等,是选速度入口还是压力出口?如果选速度入口,有两个,该选哪个呀?有没有什么原则标准之类的东西? 一般是选取ALL ZONE,即所有区域的平均处理,通常也可选择有代表性的进口(如多个进口时)进行初始化。对于一般流动问题,初始值的设定并不重要,因为计算容易收敛。但当几何条件复杂,而且流动速度高变化快(如音速流动),初始条件要仔细选择。如果不收敛,还应试验不同的初始条件,甚至逐次改变边界条件最后达到所要求的条件。 2 要判断自己模拟的结果是否是正确的,似乎解的收敛性要比那些初始条件和边界条件更重要,可以这样理解吗?也就是说,对于一个具体的问题,初始条件和边界条件的设定并不是唯一的,为了使解收敛,需要不断调整初始条件和边界条件直到解收敛为止,是吗?如果解收敛了,是不是就可以基本确定模拟的结果是正确的呢? 对于一个具体的问题,边界条件的设定当然是唯一的,只不过初始化时可以选择不同的初始条件(指定常流),为了使解的收敛比较好,我一般是逐渐的调节边界条件到额定值("额定值"是指你题目中要求的入口或出口条件,例如计算一个管内流动,要求入口压力和温度为10MPa和3000K,那么我开始叠代时选择入口压力和温度为1MPa和500K(假设,这看你自己问题了),等流场计算的初具规模、收敛的较好了,再逐渐调高压力和温度,经过好几次调节后最终到达额定值10MPa和3000K,这样比一开始就设为10MPa和3000K收敛的要好些)这样每次叠代可以比较容易收敛,每次调节后不用再初始化即自动调用上次的解为这次的初始解,然后继续叠代。即使解收敛了,这并

Openlayers使用地图数据

Openlayers使用地图数据 [摘要]针对小型应用程序使用地图数据量小的问题,采用基础图层并对影像数据进行数字化。 [关键词] 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等。也可以用简单的图片作为源。在做gis项目时一个地图能使得应用程序变得更漂亮,对于一些小型的应用程序就不必

Ansys Workbench Fluid Flow(FLUENT)经典问题

1 对于刚接触到FLUENT新手来说,面对铺天盖地的学习资料和令人难读的FLUENT help,如何学习才能在最短的时间内入门并掌握基本学习方法呢? 学习任何一个软件,对于每一个人来说,都存在入门的时期。认真勤学是必须的,什么是最好的学习方法,我也不能妄加定论,在此,我愿意将我三年前入门FLUENT心得介绍一下,希望能给学习FLUENT的新手一点帮助。 由于当时我需要学习FLUENT来做毕业设计,老师给了我一本书,韩占忠的《FLUENT流体工程仿真计算实例与应用》,当然,学这本书之前必须要有两个条件,第一,具有流体力学的基础,第二,有FLUENT 安装软件可以应用。然后就照着书上二维的计算例子,一个例子,一个步骤地去学习,然后学习三维,再针对具体你所遇到的项目进行针对性的计算。不能急于求成,从前处理器GAMBIT,到通过FLUENT进行仿真,再到后处理,如TECPLOT,进行循序渐进的学习,坚持,效果是非常显著的。如果身边有懂得FLUENT 的老师,那么遇到问题向老师请教是最有效的方法,碰到不懂的问题也可以上网或者查找相关书籍来得到答案。另外我还有本《计算流体动力学分析》王福军的,两者结合起来学习效果更好。 2 CFD计算中涉及到的流体及流动的基本概念和术语:理想流体和粘性流体;牛顿流体和非牛顿流体;可压缩流体和不可压缩流体;层流和湍流;定常流动和非定常流动;亚音速与超音速流动;热传导和扩散等。 https://www.doczj.com/doc/8e286841.html,/dvbbs/viewFile.asp?BoardID=61&ID=1411 A.理想流体(Ideal Fluid)和粘性流体(Viscous Fluid): 流体在静止时虽不能承受切应力,但在运动时,对相邻的两层流体间的相对运动,即相对滑动速度却是有抵抗的,这种抵抗力称为粘性应力。流体所具备的这种抵抗两层流体相对滑动速度,或普遍说来抵抗变形的性质称为粘性。粘性的大小依赖于流体的性质,并显著地随温度变化。实验表明,粘性应力的大小与粘性及相对速度成正比。当流体的粘性较小(实际上最重要的流体如空气、水等的粘性都是很小的),运动的相对速度也不大时,所产生的粘性应力比起其他类型的力如惯性力可忽略不计。此时我们可以近似地把流体看成无粘性的,这样的流体称为理想流体。十分明显,理想流体对于切向变形没有任何抗拒能力。这样对于粘性而言,我们可以将流体分为理想流体和粘性流体两大类。应该强调指出,真正的理想流体在客观实际中是不存在的,它只是实际流体在某些条件下的一种近似模型。 B.牛顿流体(Newtonian Fluid)和非牛顿流体(non-Newtonian Fluid): 日常生活和工程实践中最常遇到的流体其切应力与剪切变形速率符合下式的线性关系,称为牛顿流体。而切应力与变形速率不成线性关系者称为非牛顿流体。图2-1(a)中绘出了切应力与变形速率的关系曲线。其中符合上式的线性关系者为牛顿流体。其他为非牛顿流体,非牛顿流体中又因其切应力与变形速率关系特点分为膨胀性流体(Dilalant),拟塑性流体(Pseudoplastic),具有屈服应力的理想宾厄流体(Ideal Bingham Fluid)和塑性流体(Plastic Fluid)等。通常油脂、油漆、牛奶、牙膏、血液、泥浆等均为非牛顿流体。非牛顿流体的研究在化纤、塑料、石油、化工、食品及很多轻工业中有着广泛的应用。图2-1(b)还显示出对于有些非牛顿流体,其粘滞特性具有时间效应,即剪切应力不仅与变形速率有关而且与作用时间有关。当变形速率保持常量,切应力随时间增大,这种非牛顿流体称为震凝性流体(Rheopectic Fluid)。当变形速率保持常量而切应力随时间减小的非牛顿流体则称为触变性流体(Thixotropic Fluid)。 C.可压缩流体(Compressible Fluid)和不可压缩流体(Incompressible Fluid):

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