1          开始使用openlayers
1.1       设置
先到它的官方网站http://www.openlayers.org下载他的压缩包,解压。
拷贝目录下的OpenLayer.js、根目录下的lib目录、根目录下的img目录到你网站的Scripts目录下(当然,这个只是例子,您网站的目录结构您自己说得算,只要保证OpenLayers.js,/lib,/img在同一目录中即可)。 然后,创建一个****.html作为查看地图的页面。
2          试验openlayers
环境:geoserver1.7
Openlayers2.4
Dreamviever8
2.1       第一个地图窗口
目标:用openlayers加载geoserver wms。
步骤:
(1)       空白html文件
(2)       插入div-map
(3)       为div付风格
以上为未加载地图的静态页面
代码为:
效果为:
(4)       插入openlayers代码引用
(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,但是默认值是书面日后再细究。
2.4       地图控制-鼠标坐标拾取
目标:地图上鼠标移动拾取
步骤:
map.addControl(new OpenLayers.Control.MousePosition());
注1.      Control的构造函数可以带参数,var control = new OpenLayers.Control({div:
myDiv});
例
如
:
map.addControl(new
OpenLayers.Control.MousePosition({element: $('location')}));
就是制定在页面的location元素位置显示坐标。
注2.      2
注3.      2
2.5       地图控制-其他几个常用控件初次、初级使用
初次使用,就只写下代码与作用,至于参数以后用到进行研究。
(1)       鼠标拖动、滚轴放大缩小,自带一个拉框放大。
map.addControl(new OpenLayers.Control.MouseToolbar());
(2)       图层控制
map.addControl(new OpenLayers.Control.LayerSwitcher({'ascending':false}));
(3)       填加永久链接
map.addControl(new OpenLayers.Control.Permalink());
(4)       鹰眼窗口
map.addControl(new OpenLayers.Control.OverviewMap());
(5)       默认的键盘操作支持,比如pageup、等
map.addControl(new OpenLayers.Control.KeyboardDefaults());
1          Openlayers关于数据加载
1.1       GML
目标:加载GML图层
步骤:
gmlLayer=new \"gml/polygon.xml\
OpenLayers.Layer.GML(\"GML\                           //map.addLayers([untiled,gmlLayer]);                            map.addLayer(gmlLayer);
注1.      isBaseLayer属性确定该图层是否是基础图层。
1.2       其他类型数据加载
目前还不需要深究,暂不研究。
2          要素编辑
关于openlayers里的要素编辑,就是客户端的操作,因此分为操作和保存两个环节
研究。
2.1       关于矢量要素的填加
分为点、线、多边形
以一段例子来说明要素的填加。
……
OpenLayers Select Feature Example
Select a feature on hover or click with the Control.SelectFeature on a
vector layer.
- onclick=\"toggleControl(this);\" checked=\"checked\" /> 
- onclick=\"toggleControl(this);\" /> 
。。。。。。
总结:对于要素填加基本可以理解为以下几步。
①  定义 control:OpenLayers.Control. SelectFeature
②  Map.addControl
③  Control.active()
解释几个方法。
OpenLayers.Control.DrawFeature(layer{OpenLayers.Layer.Vector},handler {OpenLayers.Handler} ,options {Object})
为图层填加风格
var myStyles = new OpenLayers.StyleMap({             \"default\": new OpenLayers.Style({
pointRadius: \"${type}\                 fillColor: \"#000000\                 strokeColor: \"#ff9933\                 strokeWidth: 2             }),
\"select\": new OpenLayers.Style({                 fillColor: \"#66ccff\                 strokeColor: \"#3399ff\"             })         });
// Create a vector layer and give it your style map.
var points = new OpenLayers.Layer.Vector(             'Points', {styleMap: myStyles}         );
1.1       矢量要素选择
在4.1节的源码中已经涉及
对于要素选择基本可以理解为以下几步。
①  定义 control:OpenLayers.Control.DrawFeature
分为hover和非hover
select: new OpenLayers.Control.SelectFeature(                 vectors,                 {
clickout: false, toggle: false,                     multiple: false, hover: false,
toggleKey: \"ctrlKey\                     multipleKey: \"shiftKey\                     box: true                 }             ),
selecthover: new OpenLayers.Control.SelectFeature(                 vectors,                 {
multiple: false, hover: true,
toggleKey: \"ctrlKey\                     multipleKey: \"shiftKey\" // shift key adds to selection                 }             )
②  Map.addControl
③  Control.active()
1.2       矢量要素拖动
对于要素拖动基本可以理解为以下几步。
①  定义 control: OpenLayers.Control.DragFeature(图层名称)
②  Map.addControl
③  Control.active()
1.3       获取矢量要素信息
对于获取要素信息基本可以理解为以下几步。
①  选中要素,就获取了Feature对象。对于填加要素的同时,也是选中的一种情况。
②  应用Feature的有关属性获取几何或属性信息。
一个比较综合的例子,编辑要素、获取GML要素属性信息
注:feature.attributes.name:获取gml中要素的属性值。
 
Open Popup on Layer.Vector  
  
Open Popup on Layer.Vector
 Using a Control.SelectFeature, open a popup on click. 
 It is possible to use the onSelect/onUnselect hooks on the SelectFeature
to do fun things -- like open a popup. 
    1          研究GML命名空间
目前个人认为,gml命名空间中的有关内容是空间数据的定义标准,地位重要。
经过网上的学习与代码测试,有关GML的Schema应用,其实是通常XML中Schema的应用schema规则都是需要专门的代码检验的。
而在目前openlayers中的GML属性定义可以自己定义,故暂且不考虑schema的问题。
1          项目实例
开始用GeoServer+Openlayers做一个实例项目。需要说明的是由于本人是规划部门的信息化从业者,所以实例是规划管理方面的。
1.1       需求描述
(1)       项目名称:用地许可地图发布工具
(2)       简单描述:将用地许可基本信息与示意位置在定位图上发布出来,并提供查询功能。以下开始明确有关细节内容。
(3)       许可基本信息包括名称、建设单位、证号、发证日期、JPG证书。其他信息没必要,因为JPG证书其实已经比较够用。
(4)       查询首先提供属性的查询。
(5)       示意位置采用点位表示。
(6)       定位图首先采用区县图,在工具开发到位的情况下,填加道路、镇、村、街道等数据。
(7)       编辑功能、地图查询是以后的事情。
1.2       软件体系结构
(1)       B/S
(2)       地图Server采用Geoserver WMS,定位图采用shape文件,示意点与属性用GML文件,B端采用openlayers。
(3)       体系结构示意图
1.3       开发分解
(1)       定位图的实现
(2)       示意点与属性GML文件标准的制定
Openlayers展现的实现