diff options
Diffstat (limited to 'misc/openlayers/lib/OpenLayers/Marker.js')
-rw-r--r-- | misc/openlayers/lib/OpenLayers/Marker.js | 241 |
1 files changed, 241 insertions, 0 deletions
diff --git a/misc/openlayers/lib/OpenLayers/Marker.js b/misc/openlayers/lib/OpenLayers/Marker.js new file mode 100644 index 0000000..1dde347 --- /dev/null +++ b/misc/openlayers/lib/OpenLayers/Marker.js @@ -0,0 +1,241 @@ +/* Copyright (c) 2006-2013 by OpenLayers Contributors (see authors.txt for + * full list of contributors). Published under the 2-clause BSD license. + * See license.txt in the OpenLayers distribution or repository for the + * full text of the license. */ + + +/** + * @requires OpenLayers/BaseTypes/Class.js + * @requires OpenLayers/Events.js + * @requires OpenLayers/Icon.js + */ + +/** + * Class: OpenLayers.Marker + * Instances of OpenLayers.Marker are a combination of a + * <OpenLayers.LonLat> and an <OpenLayers.Icon>. + * + * Markers are generally added to a special layer called + * <OpenLayers.Layer.Markers>. + * + * Example: + * (code) + * var markers = new OpenLayers.Layer.Markers( "Markers" ); + * map.addLayer(markers); + * + * var size = new OpenLayers.Size(21,25); + * var offset = new OpenLayers.Pixel(-(size.w/2), -size.h); + * var icon = new OpenLayers.Icon('http://www.openlayers.org/dev/img/marker.png', size, offset); + * markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon)); + * markers.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(0,0),icon.clone())); + * + * (end) + * + * Note that if you pass an icon into the Marker constructor, it will take + * that icon and use it. This means that you should not share icons between + * markers -- you use them once, but you should clone() for any additional + * markers using that same icon. + */ +OpenLayers.Marker = OpenLayers.Class({ + + /** + * Property: icon + * {<OpenLayers.Icon>} The icon used by this marker. + */ + icon: null, + + /** + * Property: lonlat + * {<OpenLayers.LonLat>} location of object + */ + lonlat: null, + + /** + * Property: events + * {<OpenLayers.Events>} the event handler. + */ + events: null, + + /** + * Property: map + * {<OpenLayers.Map>} the map this marker is attached to + */ + map: null, + + /** + * Constructor: OpenLayers.Marker + * + * Parameters: + * lonlat - {<OpenLayers.LonLat>} the position of this marker + * icon - {<OpenLayers.Icon>} the icon for this marker + */ + initialize: function(lonlat, icon) { + this.lonlat = lonlat; + + var newIcon = (icon) ? icon : OpenLayers.Marker.defaultIcon(); + if (this.icon == null) { + this.icon = newIcon; + } else { + this.icon.url = newIcon.url; + this.icon.size = newIcon.size; + this.icon.offset = newIcon.offset; + this.icon.calculateOffset = newIcon.calculateOffset; + } + this.events = new OpenLayers.Events(this, this.icon.imageDiv); + }, + + /** + * APIMethod: destroy + * Destroy the marker. You must first remove the marker from any + * layer which it has been added to, or you will get buggy behavior. + * (This can not be done within the marker since the marker does not + * know which layer it is attached to.) + */ + destroy: function() { + // erase any drawn features + this.erase(); + + this.map = null; + + this.events.destroy(); + this.events = null; + + if (this.icon != null) { + this.icon.destroy(); + this.icon = null; + } + }, + + /** + * Method: draw + * Calls draw on the icon, and returns that output. + * + * Parameters: + * px - {<OpenLayers.Pixel>} + * + * Returns: + * {DOMElement} A new DOM Image with this marker's icon set at the + * location passed-in + */ + draw: function(px) { + return this.icon.draw(px); + }, + + /** + * Method: erase + * Erases any drawn elements for this marker. + */ + erase: function() { + if (this.icon != null) { + this.icon.erase(); + } + }, + + /** + * Method: moveTo + * Move the marker to the new location. + * + * Parameters: + * px - {<OpenLayers.Pixel>|Object} the pixel position to move to. + * An OpenLayers.Pixel or an object with a 'x' and 'y' properties. + */ + moveTo: function (px) { + if ((px != null) && (this.icon != null)) { + this.icon.moveTo(px); + } + this.lonlat = this.map.getLonLatFromLayerPx(px); + }, + + /** + * APIMethod: isDrawn + * + * Returns: + * {Boolean} Whether or not the marker is drawn. + */ + isDrawn: function() { + var isDrawn = (this.icon && this.icon.isDrawn()); + return isDrawn; + }, + + /** + * Method: onScreen + * + * Returns: + * {Boolean} Whether or not the marker is currently visible on screen. + */ + onScreen:function() { + + var onScreen = false; + if (this.map) { + var screenBounds = this.map.getExtent(); + onScreen = screenBounds.containsLonLat(this.lonlat); + } + return onScreen; + }, + + /** + * Method: inflate + * Englarges the markers icon by the specified ratio. + * + * Parameters: + * inflate - {float} the ratio to enlarge the marker by (passing 2 + * will double the size). + */ + inflate: function(inflate) { + if (this.icon) { + this.icon.setSize({ + w: this.icon.size.w * inflate, + h: this.icon.size.h * inflate + }); + } + }, + + /** + * Method: setOpacity + * Change the opacity of the marker by changin the opacity of + * its icon + * + * Parameters: + * opacity - {float} Specified as fraction (0.4, etc) + */ + setOpacity: function(opacity) { + this.icon.setOpacity(opacity); + }, + + /** + * Method: setUrl + * Change URL of the Icon Image. + * + * url - {String} + */ + setUrl: function(url) { + this.icon.setUrl(url); + }, + + /** + * Method: display + * Hide or show the icon + * + * display - {Boolean} + */ + display: function(display) { + this.icon.display(display); + }, + + CLASS_NAME: "OpenLayers.Marker" +}); + + +/** + * Function: defaultIcon + * Creates a default <OpenLayers.Icon>. + * + * Returns: + * {<OpenLayers.Icon>} A default OpenLayers.Icon to use for a marker + */ +OpenLayers.Marker.defaultIcon = function() { + return new OpenLayers.Icon(OpenLayers.Util.getImageLocation("marker.png"), + {w: 21, h: 25}, {x: -10.5, y: -25}); +}; + + |