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 // 默认是否可见
}
);