1、创建Map
this.map = new OpenLayers.Map(this.mapdiv, this.options);
问题一:option是用来设置Map的,理论上Map的所有属性都可以通过option对象进行设置,比如div、maxResolution、minResolution,等。
示例1:
map = new OpenLayers.Map('map',{ maxExtent: new OpenLayers.Bounds( -128 * 156543.0339, -128 * 156543.0339, 128 * 156543.0339, 128 * 156543.0339), maxResolution: 156543.0339, units: 'm', projection: new OpenLayers.Projection('EPSG:900913'), displayProjection: new OpenLayers.Projection("EPSG:4326") });示例2:
var mapOptions = { maxExtent: new OpenLayers.Bounds(-8242894.927728, 4965204.031195, -8227290.161511, 4994963.723637), maxResolution: 116.24879860156216, projection: "EPSG:900913" }; var map = new OpenLayers.Map('map', mapOptions);
map = new OpenLayers.Map(); layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: 'basic'} ); map.addLayer(layer); map.render("container_id");
2、创建瓦片图层Layer
问题一:Geoserver发布PostgreSQL/PostGIS中的地图数据。
首先,需要使用PostGIS的shp2pgsql工具将shapefile数据导入数据库中。
然后,在Geoserver中创建Workspaces、Stores和Layers,在Layers中发布数据库中的某个表时,坐标系(Native SRS,Declared SRS)部分需要注意。
Native SRS,本机SRS是指地图数据本身的坐标参考系统,这是由地图数据本身的属性决定的,也是不可修改的。GeoServer会自动从数据文件中读取这一信息。相对应的Native Bounding Box则是根据本机SRS自动计算出来的边框,我们点击从数据中计算就能计算出来边框范围。
Declared SRS,定义SRS是指我们自己想要定义显示地图数据的坐标参考系统,我们通过右边的查找按钮进行查找选择。对于国内用户来说,常用的坐标系统可以通过键入“beijing”、”xian”或者4326(WGS-84的编码序号)进行查找选择。选择确定后,通过点击“compute from nativ bounds”可以计算出在这个坐标系统下的边界。
最后,根据图层预览(Layer Preview)中WMS、WFS链接的信息,就可以在OpenLayers中调用该图层了。
问题二:图层Z-Index,参考Map.js中的描述:
Z_INDEX_BASE: { BaseLayer: 100, Overlay: 325, Feature: 725, Popup: 750, Control: 1000 },同时,还可以通过setZIndex()函数设置z-index。
问题三:图层的缩放级别、分辨率和范围设置。参考:http://www.shalilang.com/openlayers-map-scale-zoom-levels-methods/
OpenLayers.DOTS_PER_INCH = 72; var options = { // various ways of specifying similar things // 设置分辨率级别 resolutions: [1.40625, 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125, 0.02197265625, 0.010986328125, 0.0054931640625, 0.00274658203125, 0.00137329101], // 直接设置比例尺 scales: [50000000, 10000000], // 设置最大最小分辨率 maxResolution: 0.17578125, minResolution: 0.0439453125, // 设置最大最小比例尺 maxScale: 10000000, minScale: 50000000, // 设置缩放级别层数 numZoomLevels: 5, units: "dd", // 设置范围 minResolution: "auto", minExtent: new OpenLayers.Bounds(-1, -1, 1, 1), maxResolution: "auto", maxExtent: new OpenLayers.Bounds(-180, -90, 180, 90) }; map = new OpenLayers.Map( 'map' , options);
param是用来发送到地图服务器,用于地图瓦片的生成。option用于设置客户端如何显示地图瓦片。
示例:
var tiled = new OpenLayers.Layer.WMS( "Indoor", "http://localhost:8080/geoserver3D/wms", { // param参数对象,传去服务器配置地图的特点 LAYERS: 'gczxshpfloor', //请求的图层,本例是图层Group STYLES: '', // 样式 format: format, // 返回图片的格式 tiled: true, // tilesOrigin: bounds.left + ',' + bounds.bottom,// 瓦片起点 transparent: 'true' //透明图层 }, { buffer: 0, displayOutsideMaxExtent: true, // 最大范围以外的地图是否显示 maxExtent: bounds, // 最大范围 isBaseLayer: false, //是基础层,还是覆盖层 visibility: true // 默认是否可见 } );