OpenLayers 3实践与原理探究4.2-ol3源码分析-Map,View

本文介绍了OpenLayers库中Map和View组件的使用方法。包括构造函数、常用方法及事件,展示了如何初始化地图、设置视图参数等操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.Map

ol/ol/map.js

1.1构造函数

ol.Map = function(options) {
  ol.Object.call(this);//@extends {ol.Object}
   var optionsInternal = ol.Map.createOptionsInternal(options); 
}

常量对象共享地图设置,并且将常量对象共享出去,作为公用变量

goog.provide('ol.MapProperty');
ol.MapProperty = {
  LAYERGROUP: 'layergroup',
  SIZE: 'size',
  TARGET: 'target',
  VIEW: 'view'
};

createOptionsInternal函数对map中的配置对象进行处理。

//分别处理layer、layerGroup、target、view、renderer、controls、interactions、overlays
 var layerGroup = (options.layers instanceof ol.layer.Group) ?
      options.layers : new ol.layer.Group({layers: options.layers});
  values[ol.MapProperty.LAYERGROUP] = layerGroup;

  values[ol.MapProperty.TARGET] = options.target;

  values[ol.MapProperty.VIEW] = options.view !== undefined ?
      options.view : new ol.View();

  //......
  return {
    controls: controls,
    interactions: interactions,
    keyboardEventTarget: keyboardEventTarget,
    logos: logos,
    overlays: overlays,
    rendererConstructor: rendererConstructor,
    values: values
  };

运用实例-初始化:

var map = new ol.Map({
    controls: ol.control.defaults().extend([
        new ol.control.ScaleLine(), //比例尺
    ]),
    layers: [bglayer, vector], //添加两个图层
    target: 'map', //div#id='map'
    view: view,
    interaction:interaction
});

1.2 方法 事件

方法 事件列表:

addControl
addInteraction
addLayer
addOverlay
beforeRender
changed
dispatchEvent
forEachFeatureAtPixel
forEachLayerAtPixel
get
getControls
getCoordinateFromPixel
getEventCoordinate
getEventPixel
getInteractions
getKeys
getLayerGroup
getLayers
getOverlayById
getOverlays
getPixelFromCoordinate
getProperties
getRevision
getSize
getTarget
getTargetElement
getView
getViewport
hasFeatureAtPixel
on
once
removeControl
removeInteraction
removeLayer
removeOverlay
render
renderSync
set
setLayerGroup
setProperties
setSize
setTarget
setView
un
unByKey
unset
updateSize

实现方式举几个例子:

ol.Map.prototype.addControl = function(control) {
  var controls = this.getControls();
  goog.asserts.assert(controls !== undefined, 'controls should be defined');
  controls.push(control);
};

ol.Map.prototype.addInteraction = function(interaction) {
  var interactions = this.getInteractions();
  goog.asserts.assert(interactions !== undefined,
      'interactions should be defined');
  interactions.push(interaction);
};

controls控件,控件添加到map上,对控件设置两个监听事件,增加、删除。

this.controls_ = optionsInternal.controls;
this.controls_.forEach( function(control) {
        control.setMap(this);
      }, this);

  ol.events.listen(this.controls_, ol.CollectionEventType.ADD, function(event) {
        event.element.setMap(this);
      }, this);

  ol.events.listen(this.controls_, ol.CollectionEventType.REMOVE, function(event) {
        event.element.setMap(null);
      }, this);

2.View

ol/ol/view.js

2.1构造函数

ol.View = function(opt_options) {
  ol.Object.call(this);
  var options = opt_options || {};
  this.projection_ = ol.proj.createProjection(options.projection, 'EPSG:3857');
  //... ...
 }

运用实例:

var map = new ol.Map({
    target: 'map',
    view: new ol.View({
            projection: 'EPSG:4326', //WGS 84
            center: [0, 0],
            zoom: 2,
            maxResolution: 0.703125
        }),

});
goog.provide('ol.View');
goog.provide('ol.ViewHint');
goog.provide('ol.ViewProperty');

提供不只是一个构造函数,还有两个常量对象,其中一个常量对象包含三个常量如下所示:

ol.ViewProperty = {
  CENTER: 'center',
  RESOLUTION: 'resolution',
  ROTATION: 'rotation'
};

其实,我们在对象属性中写出来的,如center,作用等同于用下面介绍的方法setCenter,其本质是写入常量中,共享出去作为公用。

2.2方法 事件

举例;

ol.View.prototype.setCenter = function(center) {
  this.set(ol.ViewProperty.CENTER, center);
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值