/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license. * See http://svn.openlayers.org/trunk/openlayers/license.txt for the full * text of the license. */ /** * @class */ OpenLayers.Feature = Class.create(); OpenLayers.Feature.prototype= { /** @type OpenLayers.Events */ events:null, /** @type OpenLayers.Layer */ layer: null, /** @type String */ id: null, /** @type OpenLayers.LonLat */ lonlat:null, /** @type Object */ data:null, /** @type OpenLayers.Marker */ marker: null, /** @type OpenLayers.Popup */ popup: null, /** * @constructor * * @param {OpenLayers.Layer} layer * @param {String} id * @param {OpenLayers.LonLat} lonlat * @param {Object} data */ initialize: function(layer, lonlat, data, id) { this.layer = layer; this.lonlat = lonlat; this.data = (data != null) ? data : new Object(); this.id = (id ? id : 'f' + Math.random()); }, /** * */ destroy: function() { //remove the popup from the map if ((this.layer != null) && (this.layer.map != null)) { if (this.popup != null) { this.layer.map.removePopup(this.popup); } } this.events = null; this.layer = null; this.id = null; this.lonlat = null; this.data = null; if (this.marker != null) { this.marker.destroy(); this.marker = null; } if (this.popup != null) { this.popup.destroy(); this.popup = null; } }, /** * @returns A Marker Object created from the 'lonlat' and 'icon' properties * set in this.data. If no 'lonlat' is set, returns null. If no * 'icon' is set, OpenLayers.Marker() will load the default image * @type OpenLayers.Marker */ createMarker: function() { var marker = null; if (this.lonlat != null) { this.marker = new OpenLayers.Marker(this.lonlat, this.data.icon); } return this.marker; }, /** * */ createPopup: function() { if (this.lonlat != null) { var id = this.id + "_popup"; var anchor = (this.marker) ? this.marker.icon : null; this.popup = new OpenLayers.Popup.AnchoredBubble(id, this.lonlat, this.data.popupSize, this.data.popupContentHTML, anchor); } return this.popup; }, CLASS_NAME: "OpenLayers.Feature" };