]> git.openstreetmap.org Git - rails.git/blobdiff - public/lib/OpenLayers/Marker.js
openlayers madness
[rails.git] / public / lib / OpenLayers / Marker.js
diff --git a/public/lib/OpenLayers/Marker.js b/public/lib/OpenLayers/Marker.js
new file mode 100644 (file)
index 0000000..0640295
--- /dev/null
@@ -0,0 +1,109 @@
+/* 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.Marker = Class.create();
+OpenLayers.Marker.prototype = {
+    
+    /** @type OpenLayers.Icon */
+    icon: null,
+
+    /** location of object
+    * @type OpenLayers.LonLat */
+    lonlat: null,
+    
+    /** @type OpenLayers.Events*/
+    events: null,
+    
+    /** @type OpenLayers.Map */
+    map: null,
+    
+    /** 
+    * @constructor
+    *
+    * @param {OpenLayers.Icon} icon
+    * @param {OpenLayers.LonLat lonlat
+    */
+    initialize: function(lonlat, icon) {
+        this.lonlat = lonlat;
+        this.icon = (icon) ? icon : OpenLayers.Marker.defaultIcon();
+
+        this.events = new OpenLayers.Events(this, this.icon.imageDiv, null);
+    },
+    
+    destroy: function() {
+        this.map = null;
+        
+        if (this.icon != null) {
+            this.icon.destroy();
+            this.icon = null;
+        }
+    },
+    
+    /** 
+    * @param {OpenLayers.Pixel} px
+    * 
+    * @return A new DOM Image with this markerĀ“s icon set at the 
+    *         location passed-in
+    * @type DOMElement
+    */
+    draw: function(px) {
+        return this.icon.draw(px);
+    }, 
+
+    /**
+    * @param {OpenLayers.Pixel} px
+    */
+    moveTo: function (px) {
+        if ((px != null) && (this.icon != null)) {
+            this.icon.moveTo(px);
+        }            
+    },
+
+    /**
+     * @returns Whether or not the marker is currently visible on screen.
+     * @type Boolean
+     */
+    onScreen:function() {
+        
+        var onScreen = false;
+        if (this.map) {
+            var screenBounds = this.map.getExtent();
+            onScreen = screenBounds.contains(this.lonlat.lon, this.lonlat.lat);
+        }    
+        return onScreen;
+    },
+    
+    /**
+     * @param {float} inflate
+     */
+    inflate: function(inflate) {
+        if (this.icon) {
+            var newSize = new OpenLayers.Size(this.icon.size.w * inflate,
+                                              this.icon.size.h * inflate);
+            this.icon.setSize(newSize);
+        }        
+    },
+    
+    /** @final @type String */
+    CLASS_NAME: "OpenLayers.Marker"
+};
+
+
+/** 
+ * @returns A default OpenLayers.Icon to use for a marker
+ * @type OpenLayers.Icon
+ */
+OpenLayers.Marker.defaultIcon = function() {
+    var url = OpenLayers.Util.getImagesLocation() + "marker.png";
+    var size = new OpenLayers.Size(21, 25);
+    var calculateOffset = function(size) {
+                    return new OpenLayers.Pixel(-(size.w/2), -size.h);
+                 };
+
+    return new OpenLayers.Icon(url, size, null, calculateOffset);        
+};
+    
+