Merge pull request #1101 from bbinet/overlay_center_positioning

ol.overlay center positioning
This commit is contained in:
Bruno Binet
2013-10-07 10:35:21 -07:00
6 changed files with 62 additions and 15 deletions
+3 -1
View File
@@ -1,6 +1,7 @@
goog.require('ol.Geolocation'); goog.require('ol.Geolocation');
goog.require('ol.Map'); goog.require('ol.Map');
goog.require('ol.Overlay'); goog.require('ol.Overlay');
goog.require('ol.OverlayPositioning');
goog.require('ol.RendererHints'); goog.require('ol.RendererHints');
goog.require('ol.View2D'); goog.require('ol.View2D');
goog.require('ol.dom.Input'); goog.require('ol.dom.Input');
@@ -37,7 +38,8 @@ geolocation.on('change', function() {
}); });
var marker = new ol.Overlay({ var marker = new ol.Overlay({
element: /** @type {Element} */ ($('<i/>').addClass('icon-flag').get(0)) element: /** @type {Element} */ ($('<i/>').addClass('icon-flag').get(0)),
positioning: ol.OverlayPositioning.BOTTOM_LEFT
}); });
map.addOverlay(marker); map.addOverlay(marker);
// bind the marker position to the device location. // bind the marker position to the device location.
+3 -1
View File
@@ -1,5 +1,6 @@
goog.require('ol.Map'); goog.require('ol.Map');
goog.require('ol.Overlay'); goog.require('ol.Overlay');
goog.require('ol.OverlayPositioning');
goog.require('ol.RendererHint'); goog.require('ol.RendererHint');
goog.require('ol.View2D'); goog.require('ol.View2D');
goog.require('ol.layer.Tile'); goog.require('ol.layer.Tile');
@@ -63,7 +64,8 @@ var map = new ol.Map({
var element = document.getElementById('popup'); var element = document.getElementById('popup');
var popup = new ol.Overlay({ var popup = new ol.Overlay({
element: element element: element,
positioning: ol.OverlayPositioning.BOTTOM_CENTER
}); });
map.addOverlay(popup); map.addOverlay(popup);
+9
View File
@@ -9,6 +9,14 @@
<link rel="stylesheet" href="../resources/layout.css" type="text/css"> <link rel="stylesheet" href="../resources/layout.css" type="text/css">
<link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css"> <link rel="stylesheet" href="../resources/bootstrap/css/bootstrap-responsive.min.css" type="text/css">
<style type="text/css"> <style type="text/css">
#marker {
width: 20px;
height: 20px;
border: 1px solid #088;
border-radius: 10px;
background-color: #0FF;
opacity: 0.5;
}
#vienna { #vienna {
text-decoration: none; text-decoration: none;
color: white; color: white;
@@ -60,6 +68,7 @@
<div style="display: none;"> <div style="display: none;">
<!-- Clickable label for Vienna --> <!-- Clickable label for Vienna -->
<a class="overlay" id="vienna" target="_blank" href="http://en.wikipedia.org/wiki/Vienna">Vienna</a> <a class="overlay" id="vienna" target="_blank" href="http://en.wikipedia.org/wiki/Vienna">Vienna</a>
<div id="marker" title="Marker"></div>
<!-- Popup --> <!-- Popup -->
<div id="popup" title="Welcome to ol3"></div> <div id="popup" title="Welcome to ol3"></div>
</div> </div>
+12 -2
View File
@@ -1,5 +1,6 @@
goog.require('ol.Map'); goog.require('ol.Map');
goog.require('ol.Overlay'); goog.require('ol.Overlay');
goog.require('ol.OverlayPositioning');
goog.require('ol.RendererHints'); goog.require('ol.RendererHints');
goog.require('ol.View2D'); goog.require('ol.View2D');
goog.require('ol.coordinate'); goog.require('ol.coordinate');
@@ -22,10 +23,19 @@ var map = new ol.Map({
}) })
}); });
var pos = ol.proj.transform([16.3725, 48.208889], 'EPSG:4326', 'EPSG:3857');
// Vienna marker
var marker = new ol.Overlay({
position: pos,
positioning: ol.OverlayPositioning.CENTER_CENTER,
element: document.getElementById('marker')
});
map.addOverlay(marker);
// Vienna label // Vienna label
var vienna = new ol.Overlay({ var vienna = new ol.Overlay({
position: ol.proj.transform( position: pos,
[16.3725, 48.208889], 'EPSG:4326', 'EPSG:3857'),
element: document.getElementById('vienna') element: document.getElementById('vienna')
}); });
map.addOverlay(vienna); map.addOverlay(vienna);
+5
View File
@@ -2,6 +2,11 @@
@exportSymbol ol.OverlayPositioning @exportSymbol ol.OverlayPositioning
@exportProperty ol.OverlayPositioning.BOTTOM_LEFT @exportProperty ol.OverlayPositioning.BOTTOM_LEFT
@exportProperty ol.OverlayPositioning.BOTTOM_CENTER
@exportProperty ol.OverlayPositioning.BOTTOM_RIGHT @exportProperty ol.OverlayPositioning.BOTTOM_RIGHT
@exportProperty ol.OverlayPositioning.CENTER_LEFT
@exportProperty ol.OverlayPositioning.CENTER_CENTER
@exportProperty ol.OverlayPositioning.CENTER_RIGHT
@exportProperty ol.OverlayPositioning.TOP_LEFT @exportProperty ol.OverlayPositioning.TOP_LEFT
@exportProperty ol.OverlayPositioning.TOP_CENTER
@exportProperty ol.OverlayPositioning.TOP_RIGHT @exportProperty ol.OverlayPositioning.TOP_RIGHT
+30 -11
View File
@@ -29,8 +29,13 @@ ol.OverlayProperty = {
*/ */
ol.OverlayPositioning = { ol.OverlayPositioning = {
BOTTOM_LEFT: 'bottom-left', BOTTOM_LEFT: 'bottom-left',
BOTTOM_CENTER: 'bottom-center',
BOTTOM_RIGHT: 'bottom-right', BOTTOM_RIGHT: 'bottom-right',
CENTER_LEFT: 'center-left',
CENTER_CENTER: 'center-center',
CENTER_RIGHT: 'center-right',
TOP_LEFT: 'top-left', TOP_LEFT: 'top-left',
TOP_CENTER: 'top-center',
TOP_RIGHT: 'top-right' TOP_RIGHT: 'top-right'
}; };
@@ -295,6 +300,7 @@ ol.Overlay.prototype.updatePixelPosition_ = function() {
var style = this.element_.style; var style = this.element_.style;
var positioning = this.getPositioning(); var positioning = this.getPositioning();
if (positioning == ol.OverlayPositioning.BOTTOM_RIGHT || if (positioning == ol.OverlayPositioning.BOTTOM_RIGHT ||
positioning == ol.OverlayPositioning.CENTER_RIGHT ||
positioning == ol.OverlayPositioning.TOP_RIGHT) { positioning == ol.OverlayPositioning.TOP_RIGHT) {
if (this.rendered_.left_ !== '') { if (this.rendered_.left_ !== '') {
this.rendered_.left_ = style.left = ''; this.rendered_.left_ = style.left = '';
@@ -307,21 +313,20 @@ ol.Overlay.prototype.updatePixelPosition_ = function() {
if (this.rendered_.right_ !== '') { if (this.rendered_.right_ !== '') {
this.rendered_.right_ = style.right = ''; this.rendered_.right_ = style.right = '';
} }
var left = Math.round(pixel[0]) + 'px'; var offsetX = 0;
if (positioning == ol.OverlayPositioning.BOTTOM_CENTER ||
positioning == ol.OverlayPositioning.CENTER_CENTER ||
positioning == ol.OverlayPositioning.TOP_CENTER) {
offsetX = goog.style.getSize(this.element_).width / 2;
}
var left = Math.round(pixel[0] - offsetX) + 'px';
if (this.rendered_.left_ != left) { if (this.rendered_.left_ != left) {
this.rendered_.left_ = style.left = left; this.rendered_.left_ = style.left = left;
} }
} }
if (positioning == ol.OverlayPositioning.TOP_LEFT || if (positioning == ol.OverlayPositioning.BOTTOM_LEFT ||
positioning == ol.OverlayPositioning.TOP_RIGHT) { positioning == ol.OverlayPositioning.BOTTOM_CENTER ||
if (this.rendered_.bottom_ !== '') { positioning == ol.OverlayPositioning.BOTTOM_RIGHT) {
this.rendered_.bottom_ = style.bottom = '';
}
var top = Math.round(pixel[1]) + 'px';
if (this.rendered_.top_ != top) {
this.rendered_.top_ = style.top = top;
}
} else {
if (this.rendered_.top_ !== '') { if (this.rendered_.top_ !== '') {
this.rendered_.top_ = style.top = ''; this.rendered_.top_ = style.top = '';
} }
@@ -329,6 +334,20 @@ ol.Overlay.prototype.updatePixelPosition_ = function() {
if (this.rendered_.bottom_ != bottom) { if (this.rendered_.bottom_ != bottom) {
this.rendered_.bottom_ = style.bottom = bottom; this.rendered_.bottom_ = style.bottom = bottom;
} }
} else {
if (this.rendered_.bottom_ !== '') {
this.rendered_.bottom_ = style.bottom = '';
}
var offsetY = 0;
if (positioning == ol.OverlayPositioning.CENTER_LEFT ||
positioning == ol.OverlayPositioning.CENTER_CENTER ||
positioning == ol.OverlayPositioning.CENTER_RIGHT) {
offsetY = goog.style.getSize(this.element_).height / 2;
}
var top = Math.round(pixel[1] - offsetY) + 'px';
if (this.rendered_.top_ != top) {
this.rendered_.top_ = style.top = top;
}
} }
if (!this.rendered_.visible) { if (!this.rendered_.visible) {