openlayers学习.docx

上传人:b****5 文档编号:6787344 上传时间:2023-01-10 格式:DOCX 页数:45 大小:103.22KB
下载 相关 举报
openlayers学习.docx_第1页
第1页 / 共45页
openlayers学习.docx_第2页
第2页 / 共45页
openlayers学习.docx_第3页
第3页 / 共45页
openlayers学习.docx_第4页
第4页 / 共45页
openlayers学习.docx_第5页
第5页 / 共45页
点击查看更多>>
下载资源
资源描述

openlayers学习.docx

《openlayers学习.docx》由会员分享,可在线阅读,更多相关《openlayers学习.docx(45页珍藏版)》请在冰豆网上搜索。

openlayers学习.docx

openlayers学习

geoserver扫盲openlayers相关

WMS:

WebMapService(Web地图服务)

● 利用具有地理空间位置信息的数据制作地图。

其中将地图定义为地理数据可视的表现。

这个规范定义了三个操作:

⏹ GetCapabitities返回服务级元数据,它是对服务信息内容和要求参数的一种描述;

⏹ GetMap返回一个地图影像,其地理空间参考和大小参数是明确定义了的;

⏹ GetFeatureInfo(可选)返回显示在地图上的某些特殊要素的信息

 

WFS:

WebFeatureService(Web要素服务)

● Web地图服务返回的是图层级的地图影像,

● Web要素服务(WFS)返回的是要素级的GML编码,并提供对要素的增加、修改、删除等事务操作,是对Web地图服务的进一步深入。

OGCWeb要素服务允许客户端从多个Web要素服务中取得使用地理标记语言(GML)编码的地理空间数据,定义了五个操作:

⏹ GetCapabilites   返回Web要素服务性能描述文档(用XML描述);

⏹ DescribeFeatureType   返回描述可以提供服务的任何要素结构的XML文档;

⏹ GetFeature   一个获取要素实例的请求提供服务;

⏹ Transaction   为事务请求提供服务;

⏹ LockFeature   处理在一个事务期间对一个或多个要素类型实例上锁的请求。

 

WFS-T:

WebMapService-Transactional.允许用户以可传输的块编辑地理数据。

 

WCS:

WebCoverageService(Web覆盖服务)

Web覆盖服务(WCS)面向空间影像数据,它将包含地理位置值的地理空间数据作为“覆盖(Coverage)”在网上相互交换。

● 网络覆盖服务由三种操作组成:

GetCapabilities,GetCoverage和DescribeCoverageType:

⏹ GetCapabilities 操作返回描述服务和数据集的XML文档。

⏹ GetCoverage操作是在GetCapabilities确定什么样的查询可以执行、什么样的数据能够获取之后执行的,它使用通用的覆盖格式返回地理位置的值或属性。

⏹ DescribeCoverageType操作允许客户端请求由具体的WCS服务器提供的任一覆盖层的完全描述。

 

GML:

GeographyMarkupLanguage.一种用于描述地理数据的XML。

 

OGC——OpenGeospatialConsortium——开放地理信息联盟

 

总之,GeoServer是您需要显示地图在网页的那些工具的当中一个,用户可以缩放并且移动。

可以与一些客户端联合使用,比如:

MapBuilder(forwebpages),UDig,GVSig,等等。

对标准的使用允许信息从GeoServer到其它地理信息可以很容易地被结合。

如果你对GeoServer发出一个WMS请求,你就可能得到如下的一张图:

 

查看Demo

在welcome界面中单击demopage链接,进入页面后单击WFS-T链接就可以启动一个名叫MapBuilder的基于Javascript的地图地图编辑器。

启动MapBuilder后我们可以看到一张样图,那就就从它开始吧!

用其提供的工具对图进行修改。

自己练习。

 

关于geoserver开发

geoserver只能用j2ee开发

geoserver是符合ogc  wms/wfs/wcs标准的地图服务器,建设一套完整的webgis系统还需要客户端配合,mapbuilder和openlayers是非常好的两个选择。

对于较大的项目,空间数据库也是必不可少的,geoserver支持商业的oracle、db2,开源的postgis、mysql。

扯得更远一点,geoserver支持google  map和google  earth。

 

Geotools

外文官网http:

//geotools.codehaus.org/

 

Geotools是开源的Java代码库,在GIS中提供对地理空间数据的标准操作。

简单说,它就是一个中间件,提供的功能符合OGC规范,且与GeoAPI有密切的联系。

它支持的数据格式有Shapefile、GML、WFS、PostGIS、OracleSpatial、ArcSDE、MySQL、GeoMedia、MapInfo等。

利用Geotools能够实现:

● 格网覆盖Gridcoverages——栅格数据,

● 坐标系统转换CoordinateTransformation,

● 数据渲染Renderers,

● 格式化Styling——符号化数据集等功能。

 

WFS地址

把下面地址中的HighwayInterchange改成自己创建的featuretype的名字,在浏览器中查看,WFS的URL,

 

http:

//localhost:

8080/geoserver/wfs?

request=getfeature&service=wfs&version=1.0.0&typename=States

 

 

下面地址的youtian改成自己的FeatureType名字,就是自己的WFS地址

 

http:

//localhost:

8080/geoserver/wms/kml_reflect?

layers=youtian

 

 

Openlayersdom结构

 

OpenLayers项目分析——

(一)项目介绍

(OpenLayersJavaScriptMappingLibrary)

 

(一)项目介绍

网址:

http:

//www.openlayers.org/

 

  OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包,目前的最高版本是2.5V,通过BSDLicense发行。

它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范,OpenLayers采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。

 

  采用OpenLayers作为客户端不存在浏览器依赖性。

由于OpenLayers采用JavaScript语言实现,而应用于Web浏览器中的DOM(文档对象模型)由JavaScript实现,同时,Web浏览器(比如IE,FF等)都支持DOM。

 

  OpenLayersAPIs采用动态类型脚本语言JavaScript编写,实现了类似与Ajax功能的无刷新更新页面,能够带给用户丰富的桌面体验(它本身就有一个Ajax类,用于实现Ajax功能)。

 

  目前,OpenLayers所能够支持的Format有:

XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-KnownText)。

在OPenlayers.Format名称空间下的各个类里,实现了具体读/写这些Format的解析器。

 

  OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。

当然,也可以用简单的图片作为源。

 

第一次使用OpenLayers:

 

  先到它的官方网站http:

//www.openlayers.org下载他的压缩包,解压后可以看到其中的一些目录和文件,拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。

然后,创建一个index.html作为查看地图的页面,导入OpenLayers.js和你将要创建的js。

 

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

 

 

   

  

       varlon=5;   //x-axiscoodinateinmapunits

       varlat=40;  //y-axiscoordinateinmapunits

       varzoom=5;  //numberofzoomlevels

       varmap,layer;    //声明变量map、layer;等同于varmap=null;varlayer=null;

 

       map=newOpenLayers.Map('map');

       //实例化一个地图类OpenLayers.Map

 

       layer=newOpenLayers.Layer.WMS("OpenLayersWMS",

                   "{layers:

'basic'});

       //以WMS的格式实例化图层类OpenLayers.Layer

 

       map.addLayer(layer);

       map.zoomToExtent(newOpenLayers.Bounds(-3.922119,44.335327,

       4.866943,49.553833));

    //在Map对象上加载Layer对象,并用map.zoomToExtent函数使地图合适地显示

 

    map.addLayer(newOpenLayers.Layer.GML("GML","gml/polygon.xml"));

    //再在刚加载的WMS文件上,加载一GML文件

 

  剩下的工作就是,加上一些控件OpenLayers.Control之类的东西,比如LayerSwitcher等。

它们会在地图浏览的“窗口”上增加一些工具栏或是“按钮”,增加互动性和功能性。

 

  当然,Openlayers中的东西远不止这些,至于它的框架分析、APIs实现机制,会在后续文章中说出。

写这个的过程,也是一个学习的过程,其中难免有不妥之处,热烈欢迎大家批评指正,相互交流。

OpenLayers项目分析——

(一)项目介绍

(OpenLayersJavaScriptMappingLibrary)

 

(一)项目介绍

网址:

http:

//www.openlayers.org/

 

  OpenLayers是由MetaCarta公司开发的,用于WebGIS客户端的JavaScript包,目前的最高版本是2.5V,通过BSDLicense发行。

它实现访问地理空间数据的方法都符合行业标准,比如OpenGIS的WMS和WFS规范,OpenLayers采用纯面向对象的JavaScript方式开发,同时借用了Prototype框架和Rico库的一些组件。

 

  采用OpenLayers作为客户端不存在浏览器依赖性。

由于OpenLayers采用JavaScript语言实现,而应用于Web浏览器中的DOM(文档对象模型)由JavaScript实现,同时,Web浏览器(比如IE,FF等)都支持DOM。

 

  OpenLayersAPIs采用动态类型脚本语言JavaScript编写,实现了类似与Ajax功能的无刷新更新页面,能够带给用户丰富的桌面体验(它本身就有一个Ajax类,用于实现Ajax功能)。

 

  目前,OpenLayers所能够支持的Format有:

XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-KnownText)。

在OPenlayers.Format名称空间下的各个类里,实现了具体读/写这些Format的解析器。

 

  OpenLayers所能够利用的地图数据资源“丰富多彩”,在这方面提供给拥护较多的选择,比如WMS、WFS、GoogleMap、KaMap、MSVirtualEarth、WorldWind等等。

当然,也可以用简单的图片作为源。

 

第一次使用OpenLayers:

 

  先到它的官方网站http:

//www.openlayers.org下载他的压缩包,解压后可以看到其中的一些目录和文件,拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。

然后,创建一个index.html作为查看地图的页面,导入OpenLayers.js和你将要创建的js。

 

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

 

 

   

  

       varlon=5;   //x-axiscoodinateinmapunits

       varlat=40;  //y-axiscoordinateinmapunits

       varzoom=5;  //numberofzoomlevels

       varmap,layer;    //声明变量map、layer;等同于varmap=null;varlayer=null;

 

       map=newOpenLayers.Map('map');

       //实例化一个地图类OpenLayers.Map

 

       layer=newOpenLayers.Layer.WMS("OpenLayersWMS",

                   "{layers:

'basic'});

       //以WMS的格式实例化图层类OpenLayers.Layer

 

       map.addLayer(layer);

       map.zoomToExtent(newOpenLayers.Bounds(-3.922119,44.335327,

       4.866943,49.553833));

    //在Map对象上加载Layer对象,并用map.zoomToExtent函数使地图合适地显示

 

    map.addLayer(newOpenLayers.Layer.GML("GML","gml/polygon.xml"));

    //再在刚加载的WMS文件上,加载一GML文件

 

  剩下的工作就是,加上一些控件OpenLayers.Control之类的东西,比如LayerSwitcher等。

它们会在地图浏览的“窗口”上增加一些工具栏或是“按钮”,增加互动性和功能性。

 

  当然,Openlayers中的东西远不止这些,至于它的框架分析、APIs实现机制,会在后续文章中说出。

写这个的过程,也是一个学习的过程,其中难免有不妥之处,热烈欢迎大家批评指正,相互交流。

OpenLayers项目完整分析——

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

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

 

通过前面的项目介绍,我们大概已经知道Openlayers是什么,能够做什么,有什么意义。

接下来我们分析它怎么样,以及怎样实现的等问题。

这个图是从它的文档上截取的,旨在从感官上认识一下OpenLayers的类。

下面分别介绍(文档中的类是按字母顺序排列的,也按这个顺序说吧):

 

  我们看到在类的顶层“高高在上”的是OpenLayers,它为整个项目实现提供名称空间(JavaScript语言没有名称空间一说,但是它确实有自己的机制实现类似的功能,后面会说明),它直接拥有一常量VERSION_NUMBER,以标识版本。

 

  Ajax:

顾名思义,用于实现Ajax功能,只是OpenLayers的开发者们把它单独写到一个类里了,其中用到了Prototype.js框架里的一些东西。

同时,设计的时候也考虑了跨浏览器的问题。

 

  BaseTypes:

这里定制了OpenLayers中用到的string,number和function。

比如,OpenLayers.String.startsWith,用于测试一个字符串是否一以另一个字符串开头;OpenLayers.Number.limitSigDigs,用于限制整数的有效数位;OpenLayers.Function.bind,用于把某一函数绑定于对象等等。

 

  Console:

OpenLayers.Console,此名称空间用于调试和把错误等输出到“控制台”上,需要结合使用../Firebug/firebug.js。

 

  Control:

我们通常所说的控件类,它提供各种各样的控件,比如上节中说的图层开关LayerSwitcher,编辑工具条EditingToolbar等等。

加载控件的例子:

 

       class=newOpenLayers.Map('map',{controls:

[]});

    map.addControl(newOpenLayers.Control.PanZoomBar());

    map.addControl(newOpenLayers.Control.MouseToolbar());

 

  Events:

用于实现OpenLayers的事件机制。

具体来说,OpenLayers中的事件分为两种,一种是浏览器事件,例如mouseup,mousedown之类的;另外一种是自定义的,如addLayer之类的。

OpenLayers中的事件机制是非常值得我们学习的,后面将具体讨论。

 

  Feature:

我们知道:

Feature是geography和attributes的集合。

在OpenLayers中,特别地OpenLayers.Feature类由一个marker和一个lonla组成。

OpenLayers.Feature.WFS与OpenLayers.Feature.Vector继承于它。

 

  Format:

此类用于读/写各种格式的数据,它的子类都分别创建了各个格式的解析器。

这些格式有:

XML、GML、GeoJSON、GeoRSS、JSON、KML、WFS、WKT(Well-KnownText)。

 

  Geometry:

怎么翻译呢,几何?

是对地理对象的描述。

它的子类有Collection、Curve、LinearRing、LineString、MultiLineString、MultiPoint、MultiPolygon、Point、Polygon、Rectangle、Surface,正是这些类的实例,构成了我们看到的地图。

需要说明的是,Surface类暂时还没有实现。

 

  Handler:

这个类用于处理序列事件,可被激活和取消。

同时,它也有命名类似于浏览器事件的方法。

当一个handler被激活,处理事件的方法就会被注册到浏览器监听器listener,以响应相应的事件;当一个handler被取消,这些方法在事件监听器中也会相应的被取消注册。

Handler通过控件control被创建,而control通过icon表现。

 

  Icon:

在计算机屏幕上以图标的形式呈现,有url、尺寸size和位置position3个属性。

一般情况,它与OpenLayers.Marker结合应用,表现为一个Marker。

 

  Layer:

图层。

 

  Map:

网页中动态地图。

它就像容器,可向里面添加图层Layer和控件Control。

实际上,单个Map是毫无意义的,正是Layer和Control成就了它。

 

  Marker:

它的实例是OpenLayers.LonLat和OpenLayers.Icon的集合。

通俗一点儿说,Icon附上一定的经纬度就是Marker。

 

  Popup:

地图上一个小巧的层,实现地图“开关”功能。

使用例子:

 

      Class=newOpenLayers.Popup("chicken",

                  newOpenLayers.LonLat(5,40),

                  newOpenLayers.Size(200,200),

                  "examplepopup",

                  true);

      map.addPopup(popup);

 

  Renderer:

渲染类。

在OpenLayers中,渲染功能是作为矢量图层的一个属性存在的,我们称之为渲染器,矢量图层就是通过这个渲染器提供的方法将矢量数据显示出来。

以SVG和VML为例,继承关系是这样的:

    

至于OpenLayers.Renderer.Elements为什么要存在,以及它的渲染机制,后面会说。

 

  Tile:

设计这个类用于指明单个“瓦片”Tile,或者更小的分辨率。

Tiles存储它们自身的信息,比如url和size等。

它的类继承关系如下:

 

  Util:

“跑龙套”的类。

 

  写到这里,可以看到OpenLayers的类缠绕的挺麻烦的,接下来的文章将从代码部分分析更细部的东西。

OpenLayers项目分析——(三)BaseTypes

(三)BaseTypes:

定义底层类与定制JS内置类  

 

   先说基类型BaseTypes下,OpenLyers构建的“自己”的类。

它们分别是:

OpenLayers.LonLat、OpenLayers.Pixel、OpenLayers.Size、OpenLayers.Element、OpenLayers.Bounds和OpenLayers.Class。

下面分别介绍:

 

  OpenLayers.LonLat:

经纬度类,其实例为地图提供一经度、纬度对,即位置。

有两个属性lon(x-axiscoodinate)和lat(y-axiscoordinate)。

这里说明一下,怎么经纬度又与x轴坐标、y轴坐标纠缠在一起?

是这样:

当地图是在地理坐标投影下,它就是经纬度;不然就是地图上的x/y轴坐标。

除构造函数外,实现了五个函数:

 

toShortString:

function() 把坐标转换为字符串;

clone:

function()  复制一个LonLat对象;

 

Add:

function(lon,lat)  改变现有地图的位置;

  returnnewOpenLayers.LonL

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1