センターマーカーを表示するコントロール
id:yellow_73:20120909 の続き。id:yellow_73:20130717 の通り、マウスホイールイベントが効かないのが解決されていましたので、あらためてセンターマーカーのコントロールを作ってみます。
OpenLayers 2.13以上でのみ有効です。
resizeイベントが取れない云々と言ってたことについては、 CSS でどうにかしちゃうことにして、resizeイベントを拾わなくて良いようにしました。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script src="http://openlayers.org/api/OpenLayers.js"></script> <script> function init() { // コントロールクラスを作成 // -------- ここまでクラス var CenterMarker = OpenLayers.Class(OpenLayers.Control, { // 画像ソース url: null, // 画像オフセット デフォルトでは画像左上隅がマップ中心に来る offset: null, // 初期化 initialize: function(options) { OpenLayers.Control.prototype.initialize.apply(this, arguments); this.url = options.url; this.offset = options.offset; }, // 廃棄 destroy: function() { OpenLayers.Control.prototype.destroy.apply(this, arguments); }, // 表示 draw: function() { OpenLayers.Control.prototype.draw.apply(this, arguments); var ox = 0, oy = 0; if( this.offset ) { ox = this.offset.x; oy = this.offset.y; } // コントロールの左上をマップ中心に持っていく this.div.style.position = "absolute"; this.div.style.left = "50%"; this.div.style.top = "50%"; // マーカ作成 // left, top はマップ中心からのオフセット var img = document.createElement("img"); img.src = this.url; img.style.position = "absolute"; img.style.left = ox + "px"; img.style.top = oy + "px"; img.className = "olScrollable"; // マーカをコントロールに追加 this.div.appendChild(img); return this.div; } }); // -------- ここまでクラス var centerMarkerControl = new CenterMarker({url: "cmark.png", offset: new OpenLayers.Pixel(-16,-16)}); var options = { maxResolution:1.40625/2, controls: [ new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Navigation(), centerMarkerControl, new OpenLayers.Control.Attribution({displayClass: 'prmtcd'}) ], numZoomLevels: 18 }; var map = new OpenLayers.Map('MAP',options); var kibanwms = new OpenLayers.Layer.TMS( "KIBAN 25000 TMS", "http://www.finds.jp/ws/tmc/", { layername: "KBN25000ANF-4326", type: "png", attribution: '<a target=\"_blank\" href="http://www.finds.jp/wsdocs/kibanwms/index.html">基盤地図情報(平20業使、第449号)</a>', isBaseLayer: true } ); map.addLayer(kibanwms); map.setCenter(new OpenLayers.LonLat(133.39, 34.5), 15); } </script> <style type="text/css"> html, body, #MAP { margin: 0; padding: 0; position: relative; width: 100%; height: 100%; } .prmtcd { bottom: 4px; right: 4px; background: #fff; } </style> </head> <body onload="init()"> <div id="MAP"> </div> </body> </html>