OpenLayers OpenLayers

Ticket #926: popups.5.patch

File popups.5.patch, 209.5 kB (added by crschmidt, 2 years ago)
  • theme/default/style.css

    old new  
    113113 
    114114.olPopupContent { 
    115115    padding:5px; 
     116    overflow: auto; 
    116117}     
    117118.olControlNavToolbar {  
    118119    width:0px; 
     
    231232    filter: alpha(opacity=50); 
    232233}    
    233234 
    234 .olControlNoSelect  { 
    235   -moz-user-select: none;  
    236 }  
    237  
     235/*  
     236 * Due to current limitations in the OpenLayers code, you can only 
     237 * replace this image with another image which is 17px x 17px.  
     238 */    
     239.olPopupCloseBox { 
     240  background: url("../../img/close.gif") no-repeat; 
     241  cursor: pointer; 
     242
  • theme/default/framedCloud.css

    old new  
     1 
     2.olFramedCloudPopupContent { 
     3    padding: 5px; 
     4    overflow: auto; 
     5} 
  • tests/test_Popup.html

    old new  
    8484        popup.lonlat = true; 
    8585        popup.updatePosition(); 
    8686        t.ok(true, "update position doesn't fail when getLayerPxFromLonLat fails."); 
     87        map.destroy(); 
    8788    } 
    8889    function test_03_Popup_draw(t) { 
    89         t.plan( 17 ); 
     90        t.plan( 13 ); 
    9091         
    9192        var id = "chicken"; 
    9293        var x = 50; 
     
    9899        var hexColor = "#ff0000"; 
    99100        var opacity = 0.5; 
    100101        var border = "1px solid"; 
    101  
     102        map1 = new OpenLayers.Map("map"); 
    102103        popup = new OpenLayers.Popup(id); 
    103104        popup.setSize(new OpenLayers.Size(w, h)); 
    104105        popup.setContentHTML(content); 
    105106        popup.setBackgroundColor(color); 
    106107        popup.setOpacity(opacity); 
    107108        popup.setBorder(border); 
    108         popup.draw(new OpenLayers.Pixel(x, y)); 
     109        map1.addPopup(popup); 
     110        popup.moveTo(new OpenLayers.Pixel(x, y)); 
    109111                                      
    110112        t.eq(popup.div.id, id, "popup.div.id set correctly"); 
    111113        t.eq(popup.div.style.left, x + "px", "left position of popup.div set correctly"); 
    112114        t.eq(popup.div.style.top, y + "px", "top position of popup.div set correctly"); 
    113         t.eq(popup.div.style.width, w + "px", "width position of popup.div set correctly"); 
    114         t.eq(popup.div.style.height, h + "px", "heightposition of popup.div set correctly"); 
    115115 
    116116        var contentDiv = popup.div.childNodes[0].childNodes[0]; 
    117117         
    118118        t.eq(contentDiv.className, "olPopupContent", "correct content div className"); 
    119119        t.eq(contentDiv.id, "chicken_contentDiv", "correct content div id"); 
    120         t.eq(contentDiv.style.width, "500px", "correct content div width");  
    121         t.eq(contentDiv.style.height, "400px", "correct content div height"); 
    122120        t.eq(contentDiv.style.position, "relative", "correct content div position"); 
    123121        //Safari 3 separates style overflow into overflow-x and overflow-y 
    124122        var prop = (OpenLayers.Util.getBrowserName() == 'safari') ? 'overflowX' : 'overflow'; 
    125         t.eq(contentDiv.style[prop], "hidden", "correct content div overflow"); 
     123        t.eq(contentDiv.style[prop], "", "correct content div overflow"); 
    126124        t.eq(contentDiv.innerHTML, content, "correct content div content"); 
    127125 
    128126        var bColor = popup.div.style.backgroundColor; 
  • tests/Layer/test_GeoRSS.html

    old new  
    9797        }); 
    9898    } 
    9999    function test_Layer_GeoRSS_popups (t) { 
    100         t.plan( 8 );     
     100        t.plan( 4 );     
    101101        layer = new OpenLayers.Layer.GeoRSS('Test Layer', georss_txt); 
    102102        var map = new OpenLayers.Map('map'); 
    103103        var baseLayer = new OpenLayers.Layer.WMS("Test Layer",  
     
    112112          t.eq(layer.markers[0].events.listeners['click'].length, 1, "Marker events has one object"); 
    113113          layer.markers[0].events.triggerEvent('click', event); 
    114114          t.eq(map.popups.length, 1, "Popup opened correctly"); 
    115           t.eq(map.popups[0].size.w, 250, "Popup sized correctly x"); 
    116           t.eq(map.popups[0].size.h, 120, "Popup sized correctly y"); 
    117115          layer.markers[1].events.triggerEvent('click', event); 
    118116          t.eq(map.popups.length, 1, "1st popup gone, 2nd Popup opened correctly"); 
    119           t.eq(map.popups[0].size.w, 250, "Popup sized correctly x"); 
    120           t.eq(map.popups[0].size.h, 120, "Popup sized correctly y"); 
    121117        }); 
    122118         
    123119    } 
    124120    function test_Layer_GeoRSS_resizedPopups(t) { 
    125121        layer = new OpenLayers.Layer.GeoRSS('Test Layer', georss_txt, {'popupSize': new OpenLayers.Size(200,100)}); 
    126         t.plan( 8 );     
     122        t.plan( 4 );     
    127123        var map = new OpenLayers.Map('map'); 
    128124        var baseLayer = new OpenLayers.Layer.WMS("Test Layer",  
    129125            "http://octo.metacarta.com/cgi-bin/mapserv?", 
     
    137133          t.eq(layer.markers[0].events.listeners['click'].length, 1, "Marker events has one object"); 
    138134          layer.markers[0].events.triggerEvent('click', event); 
    139135          t.eq(map.popups.length, 1, "Popup opened correctly"); 
    140           t.eq(map.popups[0].size.w, 200, "Popup sized correctly x"); 
    141           t.eq(map.popups[0].size.h, 100, "Popup sized correctly y"); 
    142136          map.popups[0].size.w=300; 
    143137          layer.markers[1].events.triggerEvent('click', event); 
    144138          t.eq(map.popups.length, 1, "1st popup gone, 2nd Popup opened correctly"); 
    145           t.eq(map.popups[0].size.w, 200, "Popup sized correctly x"); 
    146           t.eq(map.popups[0].size.h, 100, "Popup sized correctly y"); 
    147139        }); 
    148140    }     
    149141 
  • lib/OpenLayers/Map.js

    old new  
    354354    panMethod: OpenLayers.Easing.Expo.easeOut, 
    355355     
    356356    /** 
     357     * Property: paddingForPopups 
     358     * {<OpenLayers.Bounds>} Outside margin of the popup. Used to prevent  
     359     *     the popup from getting too close to the map border. 
     360     */ 
     361    paddingForPopups : null, 
     362     
     363    /** 
    357364     * Constructor: OpenLayers.Map 
    358365     * Constructor for a new OpenLayers.Map instance. 
    359366     * 
     
    384391                                            OpenLayers.Map.TILE_HEIGHT); 
    385392         
    386393        this.maxExtent = new OpenLayers.Bounds(-180, -90, 180, 90); 
     394         
     395        this.paddingForPopups = new OpenLayers.Bounds(15, 15, 15, 15); 
    387396 
    388397        this.theme = OpenLayers._getScriptLocation() +  
    389398                             'theme/default/style.css';  
     
    525534        } else { 
    526535            this.events.unregister("resize", this, this.updateSize); 
    527536        }     
     537         
     538        this.paddingForPopups = null;     
    528539 
    529540        if (this.controls != null) { 
    530541            for (var i = this.controls.length - 1; i>=0; --i) { 
  • lib/OpenLayers/Control.js

    old new  
    7979    type: null,  
    8080 
    8181    /**  
    82      * Property: allowSelection 
    83      * {Boolean} By deafault, controls do not allow selection, because 
    84      * it may interfere with map dragging. If this is true, OpenLayers 
    85      * will not prevent selection of the control. 
    86      * Default is false. 
    87      */ 
    88     allowSelection: false,   
    89  
    90     /**  
    9182     * Property: displayClass  
    9283     * {string}  This property is used for CSS related to the drawing of the 
    9384     * Control.  
     
    249240        if (this.div == null) { 
    250241            this.div = OpenLayers.Util.createDiv(this.id); 
    251242            this.div.className = this.displayClass; 
    252             if (!this.allowSelection) { 
    253                 this.div.className += " olControlNoSelect"; 
    254                 this.div.setAttribute("unselectable", "on", 0); 
    255                 this.div.onselectstart = function() { return(false); };  
    256             }     
    257243            if (this.title != "") { 
    258244                this.div.title = this.title; 
    259245            } 
  • lib/OpenLayers/Popup/FramedCloud.js

    old new  
     1/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD 
     2 * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the 
     3 * full text of the license. */ 
     4 
     5/** 
     6 * @requires OpenLayers/Popup/Framed.js 
     7 * @requires OpenLayers/Util.js 
     8 */ 
     9 
     10/** 
     11 * Class: OpenLayers.Popup.FramedCloud 
     12 *  
     13 * Inherits from:  
     14 *  - <OpenLayers.Popup.Framed> 
     15 */ 
     16OpenLayers.Popup.FramedCloud =  
     17  OpenLayers.Class(OpenLayers.Popup.Framed, { 
     18 
     19    /** 
     20     * APIProperty: autoSize 
     21     * {Boolean} Framed Cloud is autosizing by default. 
     22     */ 
     23    autoSize: true, 
     24 
     25    /** 
     26     * APIProperty: panMapIfOutOfView 
     27     * {Boolean} Framed Cloud does pan into view by default. 
     28     */ 
     29    panMapIfOutOfView: true, 
     30 
     31    /** 
     32     * Property: imageSrc 
     33     * {String} 
     34     */ 
     35    imageSrc: OpenLayers.Util.getImagesLocation() + 'cloud-popup-relative.png', 
     36 
     37    /** 
     38     * APIProperty: imageSize 
     39     * {<OpenLayers.Size>} 
     40     */ 
     41    imageSize: new OpenLayers.Size(676, 736), 
     42 
     43    /** 
     44     * APIProperty: isAlphaImage 
     45     * {Boolean} The FramedCloud does not use an alpha image (in honor of the  
     46     *     good ie6 folk out there) 
     47     */ 
     48    isAlphaImage: false, 
     49 
     50    /**  
     51     * APIProperty: fixedRelativePosition 
     52     * {Boolean} The Framed Cloud popup works in just one fixed position. 
     53     */ 
     54    fixedRelativePosition: false, 
     55 
     56    /** 
     57     * Property: positionBlocks 
     58     * {Object} Hash of differen position blocks, keyed by relativePosition 
     59     *     two-character code string (ie "tl", "tr", "bl", "br") 
     60     */ 
     61    positionBlocks: { 
     62        "tl": { 
     63            'offset': new OpenLayers.Pixel(44, 0), 
     64            'padding': new OpenLayers.Bounds(8, 40, 8, 9), 
     65            'blocks': [ 
     66                { // top-left 
     67                    size: new OpenLayers.Size('auto', 'auto'), 
     68                    anchor: new OpenLayers.Bounds(0, 51, 22, 0), 
     69                    position: new OpenLayers.Pixel(0, 0) 
     70                }, 
     71                { //top-right 
     72                    size: new OpenLayers.Size(22, 'auto'), 
     73                    anchor: new OpenLayers.Bounds(null, 50, 0, 0), 
     74                    position: new OpenLayers.Pixel(-638, 0) 
     75                }, 
     76                { //bottom-left 
     77                    size: new OpenLayers.Size('auto', 21), 
     78                    anchor: new OpenLayers.Bounds(0, 32, 80, null), 
     79                    position: new OpenLayers.Pixel(0, -629) 
     80                }, 
     81                { //bottom-right 
     82                    size: new OpenLayers.Size(22, 21), 
     83                    anchor: new OpenLayers.Bounds(null, 32, 0, null), 
     84                    position: new OpenLayers.Pixel(-638, -629) 
     85                }, 
     86                { // stem 
     87                    size: new OpenLayers.Size(81, 54), 
     88                    anchor: new OpenLayers.Bounds(null, 0, 0, null), 
     89                    position: new OpenLayers.Pixel(0, -668) 
     90                } 
     91            ] 
     92        }, 
     93        "tr": { 
     94            'offset': new OpenLayers.Pixel(-45, 0), 
     95            'padding': new OpenLayers.Bounds(8, 40, 8, 9), 
     96            'blocks': [ 
     97                { // top-left 
     98                    size: new OpenLayers.Size('auto', 'auto'), 
     99                    anchor: new OpenLayers.Bounds(0, 51, 22, 0), 
     100                    position: new OpenLayers.Pixel(0, 0) 
     101                }, 
     102                { //top-right 
     103                    size: new OpenLayers.Size(22, 'auto'), 
     104                    anchor: new OpenLayers.Bounds(null, 50, 0, 0), 
     105                    position: new OpenLayers.Pixel(-638, 0) 
     106                }, 
     107                { //bottom-left 
     108                    size: new OpenLayers.Size('auto', 21), 
     109                    anchor: new OpenLayers.Bounds(0, 32, 22, null), 
     110                    position: new OpenLayers.Pixel(0, -629) 
     111                }, 
     112                { //bottom-right 
     113                    size: new OpenLayers.Size(22, 21), 
     114                    anchor: new OpenLayers.Bounds(null, 32, 0, null), 
     115                    position: new OpenLayers.Pixel(-638, -629) 
     116                }, 
     117                { // stem 
     118                    size: new OpenLayers.Size(81, 54), 
     119                    anchor: new OpenLayers.Bounds(0, 0, null, null), 
     120                    position: new OpenLayers.Pixel(-215, -668) 
     121                } 
     122            ] 
     123        }, 
     124        "bl": { 
     125            'offset': new OpenLayers.Pixel(45, 0), 
     126            'padding': new OpenLayers.Bounds(8, 9, 8, 40), 
     127            'blocks': [ 
     128                { // top-left 
     129                    size: new OpenLayers.Size('auto', 'auto'), 
     130                    anchor: new OpenLayers.Bounds(0, 21, 22, 32), 
     131                    position: new OpenLayers.Pixel(0, 0) 
     132                }, 
     133                { //top-right 
     134                    size: new OpenLayers.Size(22, 'auto'), 
     135                    anchor: new OpenLayers.Bounds(null, 21, 0, 32), 
     136                    position: new OpenLayers.Pixel(-638, 0) 
     137                }, 
     138                { //bottom-left 
     139                    size: new OpenLayers.Size('auto', 21), 
     140                    anchor: new OpenLayers.Bounds(0, 0, 22, null), 
     141                    position: new OpenLayers.Pixel(0, -629) 
     142                }, 
     143                { //bottom-right 
     144                    size: new OpenLayers.Size(22, 21), 
     145                    anchor: new OpenLayers.Bounds(null, 0, 0, null), 
     146                    position: new OpenLayers.Pixel(-638, -629) 
     147                }, 
     148                { // stem 
     149                    size: new OpenLayers.Size(81, 54), 
     150                    anchor: new OpenLayers.Bounds(null, null, 0, 0), 
     151                    position: new OpenLayers.Pixel(-101, -674) 
     152                } 
     153            ] 
     154        }, 
     155        "br": { 
     156            'offset': new OpenLayers.Pixel(-44, 0), 
     157            'padding': new OpenLayers.Bounds(8, 9, 8, 40), 
     158            'blocks': [ 
     159                { // top-left 
     160                    size: new OpenLayers.Size('auto', 'auto'), 
     161                    anchor: new OpenLayers.Bounds(0, 21, 22, 32), 
     162                    position: new OpenLayers.Pixel(0, 0) 
     163                }, 
     164                { //top-right 
     165                    size: new OpenLayers.Size(22, 'auto'), 
     166                    anchor: new OpenLayers.Bounds(null, 21, 0, 32), 
     167                    position: new OpenLayers.Pixel(-638, 0) 
     168                }, 
     169                { //bottom-left 
     170                    size: new OpenLayers.Size('auto', 21), 
     171                    anchor: new OpenLayers.Bounds(0, 0, 22, null), 
     172                    position: new OpenLayers.Pixel(0, -629) 
     173                }, 
     174                { //bottom-right 
     175                    size: new OpenLayers.Size(22, 21), 
     176                    anchor: new OpenLayers.Bounds(null, 0, 0, null), 
     177                    position: new OpenLayers.Pixel(-638, -629) 
     178                }, 
     179                { // stem 
     180                    size: new OpenLayers.Size(81, 54), 
     181                    anchor: new OpenLayers.Bounds(0, null, null, 0), 
     182                    position: new OpenLayers.Pixel(-311, -674) 
     183                } 
     184            ] 
     185        } 
     186    }, 
     187 
     188    /** 
     189     * APIProperty: minSize 
     190     * {<OpenLayers.Size>} 
     191     */ 
     192    minSize: new OpenLayers.Size(105, 10), 
     193 
     194    /** 
     195     * APIProperty: maxSize 
     196     * {<OpenLayers.Size>} 
     197     */ 
     198    maxSize: new OpenLayers.Size(600, 660), 
     199 
     200    /**  
     201     * Constructor: OpenLayers.Popup.FramedCloud 
     202     *  
     203     * Parameters: 
     204     * id - {String} 
     205     * lonlat - {<OpenLayers.LonLat>} 
     206     * size - {<OpenLayers.Size>} 
     207     * contentHTML - {String} 
     208     * anchor - {Object} Object to which we'll anchor the popup. Must expose  
     209     *     a 'size' (<OpenLayers.Size>) and 'offset' (<OpenLayers.Pixel>)  
     210     *     (Note that this is generally an <OpenLayers.Icon>). 
     211     * closeBox - {Boolean} 
     212     * closeBoxCallback - {Function} Function to be called on closeBox click. 
     213     */ 
     214    initialize:function(id, lonlat, size, contentHTML, anchor, closeBox,  
     215                        closeBoxCallback) { 
     216 
     217        OpenLayers.Popup.Framed.prototype.initialize.apply(this, arguments); 
     218        this.contentDiv.className = "olFramedCloudPopupContent"; 
     219    }, 
     220 
     221    /**  
     222     * APIMethod: destroy 
     223     */ 
     224    destroy: function() { 
     225        OpenLayers.Popup.Framed.prototype.destroy.apply(this, arguments); 
     226    }, 
     227 
     228    CLASS_NAME: "OpenLayers.Popup.FramedCloud" 
     229}); 
  • lib/OpenLayers/Popup/Framed.js

    old new  
     1/* Copyright (c) 2006-2008 MetaCarta, Inc., published under the Clear BSD 
     2 * license.  See http://svn.openlayers.org/trunk/openlayers/license.txt for the 
     3 * full text of the license. */ 
     4 
     5/** 
     6 * @requires OpenLayers/Popup/Anchored.js 
     7 */ 
     8 
     9/** 
     10 * Class: OpenLayers.Popup.Framed 
     11 *  
     12 * Inherits from: 
     13 *  - <OpenLayers.Popup.Anchored> 
     14 */ 
     15OpenLayers.Popup.Framed = 
     16  OpenLayers.Class(OpenLayers.Popup.Anchored, { 
     17 
     18    /** 
     19     * Property: imageSrc 
     20     * {String} location of the image to be used as the popup frame 
     21     */ 
     22    imageSrc: null, 
     23 
     24    /** 
     25     * Property: imageSize 
     26     * {<OpenLayers.Size>} Size (measured in pixels) of the image located 
     27     *     by the 'imageSrc' property. 
     28     */ 
     29    imageSize: null, 
     30 
     31    /** 
     32     * APIProperty: isAlphaImage 
     33     * {Boolean} The image has some alpha and thus needs to use the alpha  
     34     *     image hack. Note that setting this to true will have no noticeable 
     35     *     effect in FF or IE7 browsers, but will all but crush the ie6  
     36     *     browser.  
     37     *     Default is false. 
     38     */ 
     39    isAlphaImage: false, 
     40 
     41    /** 
     42     * Property: positionBlocks 
     43     * {Object} Hash of different position blocks (Object/Hashs). Each block  
     44     *     will be keyed by a two-character 'relativePosition'  
     45     *     code string (ie "tl", "tr", "bl", "br"). Block properties are  
     46     *     'offset', 'padding' (self-explanatory), and finally the 'blocks' 
     47     *     parameter, which is an array of the block objects.  
     48     *  
     49     *     Each block object must have 'size', 'anchor', and 'position'  
     50     *     properties. 
     51     *  
     52     *     Note that positionBlocks should never be modified at runtime. 
     53     */ 
     54    positionBlocks: null, 
     55 
     56    /** 
     57     * Property: blocks 
     58     * {Array[Object]} Array of objects, each of which is one "block" of the  
     59     *     popup. Each block has a 'div' and an 'image' property, both of  
     60     *     which are DOMElements, and the latter of which is appended to the  
     61     *     former. These are reused as the popup goes changing positions for 
     62     *     great economy and elegance. 
     63     */ 
     64    blocks: null, 
     65 
     66    /**  
     67     * APIProperty: fixedRelativePosition 
     68     * {Boolean} We want the framed popup to work dynamically placed relative 
     69     *     to its anchor but also in just one fixed position. A well designed 
     70     *     framed popup will have the pixels and logic to display itself in  
     71     *     any of the four relative positions, but (understandably), this will 
     72     *     not be the case for all of them. By setting this property to 'true',  
     73     *     framed popup will not recalculate for the best placement each time 
     74     *     it's open, but will always open the same way.  
     75     *     Note that if this is set to true, it is generally advisable to also 
     76     *     set the 'panIntoView' property to true so that the popup can be  
     77     *     scrolled into view (since it will often be offscreen on open) 
     78     *     Default is false. 
     79     */ 
     80    fixedRelativePosition: false, 
     81 
     82    /**  
     83     * Constructor: OpenLayers.Popup.Framed 
     84     *  
     85     * Parameters: 
     86     * id - {String} 
     87     * lonlat - {<OpenLayers.LonLat>} 
     88     * size - {<OpenLayers.Size>} 
     89     * contentHTML - {String} 
     90     * anchor - {Object} Object to which we'll anchor the popup. Must expose  
     91     *     a 'size' (<OpenLayers.Size>) and 'offset' (<OpenLayers.Pixel>)  
     92     *     (Note that this is generally an <OpenLayers.Icon>). 
     93     * closeBox - {Boolean} 
     94     * closeBoxCallback - {Function} Function to be called on closeBox click. 
     95     */ 
     96    initialize:function(id, lonlat, size, contentHTML, anchor, closeBox,  
     97                        closeBoxCallback) { 
     98 
     99        OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments); 
     100 
     101        if (this.fixedRelativePosition) { 
     102            //based on our decided relativePostion, set the current padding 
     103            // this keeps us from getting into trouble  
     104            this.updateRelativePosition(); 
     105             
     106            //make calculateRelativePosition always returnt the specified 
     107            // fiexed position. 
     108            this.calculateRelativePosition = function(px) { 
     109                return this.relativePosition; 
     110            }; 
     111        } 
     112 
     113        this.contentDiv.style.position = "absolute"; 
     114        this.contentDiv.style.zIndex = 1; 
     115 
     116        if (closeBox) { 
     117            this.closeDiv.style.zIndex = 1; 
     118        } 
     119 
     120        this.groupDiv.style.position = "absolute"; 
     121        this.groupDiv.style.top = "0px"; 
     122        this.groupDiv.style.left = "0px"; 
     123        this.groupDiv.style.height = "100%"; 
     124        this.groupDiv.style.width = "100%"; 
     125    }, 
     126 
     127    /**  
     128     * APIMethod: destroy 
     129     */ 
     130    destroy: function() { 
     131        this.imageSrc = null; 
     132        this.imageSize = null; 
     133        this.isAlphaImage = null; 
     134 
     135        this.fixedRelativePosition = false; 
     136        this.positionBlocks = null; 
     137 
     138        //remove our blocks 
     139        for(var i = 0; i < this.blocks.length; i++) { 
     140            var block = this.blocks[i]; 
     141 
     142            if (block.image) { 
     143                block.div.removeChild(block.image); 
     144            } 
     145            block.image = null; 
     146 
     147            if (block.div) { 
     148                this.groupDiv.removeChild(block.div); 
     149            } 
     150            block.div = null; 
     151        } 
     152        this.blocks = null; 
     153 
     154        OpenLayers.Popup.Anchored.prototype.destroy.apply(this, arguments); 
     155    }, 
     156 
     157    /** 
     158     * APIMethod: setBackgroundColor 
     159     */ 
     160    setBackgroundColor:function(color) { 
     161        //does nothing since the framed popup's entire scheme is based on a  
     162        // an image -- changing the background color makes no sense.  
     163    }, 
     164 
     165    /** 
     166     * APIMethod: setBorder 
     167     */ 
     168    setBorder:function() { 
     169        //does nothing since the framed popup's entire scheme is based on a  
     170        // an image -- changing the popup's border makes no sense.  
     171    }, 
     172 
     173    /** 
     174     * Method: setOpacity 
     175     * Sets the opacity of the popup. 
     176     *  
     177     * Parameters: 
     178     * opacity - {float} A value between 0.0 (transparent) and 1.0 (solid).    
     179     */ 
     180    setOpacity:function(opacity) { 
     181        //does nothing since we suppose that we'll never apply an opacity 
     182        // to a framed popup 
     183    }, 
     184 
     185    /** 
     186     * APIMethod: setSize 
     187     * Overridden here, because we need to update the blocks whenever the size 
     188     *     of the popup has changed. 
     189     *  
     190     * Parameters: 
     191     * size - {<OpenLayers.Size>} 
     192     */ 
     193    setSize:function(size) {  
     194        OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); 
     195 
     196        this.updateBlocks(); 
     197    }, 
     198 
     199    /** 
     200     * Method: updateRelativePosition 
     201     * When the relative position changes, we need to set the new padding  
     202     *     BBOX on the popup, reposition the close div, and update the blocks. 
     203     */ 
     204    updateRelativePosition: function() { 
     205 
     206        //update the padding 
     207        this.padding = this.positionBlocks[this.relativePosition].padding; 
     208 
     209        //update the position of our close box to new padding 
     210        if (this.closeDiv) { 
     211            // use the content div's css padding to determine if we should 
     212            //  padd the close div 
     213            var contentDivPadding = this.getContentDivPadding(); 
     214 
     215            this.closeDiv.style.right = contentDivPadding.right +  
     216                                        this.padding.right + "px"; 
     217            this.closeDiv.style.top = contentDivPadding.top +  
     218                                      this.padding.top + "px"; 
     219        } 
     220 
     221        this.updateBlocks(); 
     222    }, 
     223 
     224    /**  
     225     * Method: calculateNewPx 
     226     * Besides the standard offset as determined by the Anchored class, our  
     227     *     Framed popups have a special 'offset' property for each of their  
     228     *     positions, which is used to offset the popup relative to its anchor. 
     229     *  
     230     * Parameters: 
     231     * px - {<OpenLayers.Pixel>} 
     232     *  
     233     * Returns: 
     234     * {<OpenLayers.Pixel>} The the new px position of the popup on the screen 
     235     *     relative to the passed-in px. 
     236     */ 
     237    calculateNewPx:function(px) { 
     238        var newPx = OpenLayers.Popup.Anchored.prototype.calculateNewPx.apply( 
     239            this, arguments 
     240        ); 
     241 
     242        newPx = newPx.offset(this.positionBlocks[this.relativePosition].offset); 
     243 
     244        return newPx; 
     245    }, 
     246 
     247    /** 
     248     * Method: createBlocks 
     249     */ 
     250    createBlocks: function() { 
     251        this.blocks = []; 
     252 
     253        var position = this.positionBlocks[this.relativePosition]; 
     254        for (var i = 0; i < position.blocks.length; i++) { 
     255 
     256            var block = {}; 
     257            this.blocks.push(block); 
     258 
     259            var divId = this.id + '_FrameDecorationDiv_' + i; 
     260            block.div = OpenLayers.Util.createDiv(divId,  
     261                null, null, null, "absolute", null, "hidden", null 
     262            ); 
     263 
     264            var imgId = this.id + '_FrameDecorationImg_' + i; 
     265            var imageCreator =  
     266                (this.isAlphaImage) ? OpenLayers.Util.createAlphaImageDiv 
     267                                    : OpenLayers.Util.createImage; 
     268 
     269            block.image = imageCreator(imgId,  
     270                null, this.imageSize, this.imageSrc,  
     271                "absolute", null, null, null 
     272            ); 
     273 
     274            block.div.appendChild(block.image); 
     275            this.groupDiv.appendChild(block.div); 
     276        } 
     277    }, 
     278 
     279    /** 
     280     * Method: updateBlocks 
     281     * Internal method, called on initialize and when the popup's relative 
     282     *     position has changed. This function takes care of re-positioning 
     283     *     the popup's blocks in their appropropriate places. 
     284     */ 
     285    updateBlocks: function() { 
     286 
     287        if (!this.blocks) { 
     288            this.createBlocks(); 
     289        } 
     290 
     291        var position = this.positionBlocks[this.relativePosition]; 
     292        for (var i = 0; i < position.blocks.length; i++) { 
     293 
     294            var positionBlock = position.blocks[i]; 
     295            var block = this.blocks[i]; 
     296 
     297            // adjust sizes 
     298            var l = positionBlock.anchor.left; 
     299            var b = positionBlock.anchor.bottom; 
     300            var r = positionBlock.anchor.right; 
     301            var t = positionBlock.anchor.top; 
     302 
     303            //note that we use the isNaN() test here because if the  
     304            // size object is initialized with a "auto" parameter, the  
     305            // size constructor calls parseFloat() on the string,  
     306            // which will turn it into NaN 
     307            // 
     308            var w = (isNaN(positionBlock.size.w)) ? this.size.w - (r + l)  
     309                                                  : positionBlock.size.w; 
     310 
     311            var h = (isNaN(positionBlock.size.h)) ? this.size.h - (b + t)  
     312                                                  : positionBlock.size.h; 
     313 
     314            block.div.style.width = w + 'px'; 
     315            block.div.style.height = h + 'px'; 
     316 
     317            block.div.style.left = (l != null) ? l + 'px' : ''; 
     318            block.div.style.bottom = (b != null) ? b + 'px' : ''; 
     319            block.div.style.right = (r != null) ? r + 'px' : '';             
     320            block.div.style.top = (t != null) ? t + 'px' : ''; 
     321 
     322            block.image.style.left = positionBlock.position.x + 'px'; 
     323            block.image.style.top = positionBlock.position.y + 'px'; 
     324        } 
     325 
     326        this.contentDiv.style.left = this.padding.left + "px"; 
     327        this.contentDiv.style.top = this.padding.top + "px"; 
     328    }, 
     329 
     330    CLASS_NAME: "OpenLayers.Popup.Framed" 
     331}); 
  • lib/OpenLayers/Popup/AnchoredBubble.js

    old new  
    3838     */ 
    3939    initialize:function(id, lonlat, size, contentHTML, anchor, closeBox, 
    4040                        closeBoxCallback) { 
     41         
     42        this.padding = new OpenLayers.Bounds( 
     43            0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE, 
     44            0, OpenLayers.Popup.AnchoredBubble.CORNER_SIZE 
     45        ); 
    4146        OpenLayers.Popup.Anchored.prototype.initialize.apply(this, arguments); 
    4247    }, 
    4348 
     
    6469    }, 
    6570 
    6671    /** 
    67      * Method: moveTo 
    68      * The popup may have been moved to a new relative location, in which case 
     72     * Method: updateRelativePosition 
     73     * The popup has been moved to a new relative location, in which case 
    6974     *     we will want to re-do the rico corners. 
    70      *  
    71      * Parameters: 
    72      * px - {<OpenLayers.Pixel>} 
    7375     */ 
    74     moveTo: function(px) { 
    75         OpenLayers.Popup.Anchored.prototype.moveTo.apply(this, arguments); 
    76         this.setRicoCorners(!this.rounded); 
    77         this.rounded = true; 
     76    updateRelativePosition: function() { 
     77        this.setRicoCorners(); 
    7878    }, 
    7979 
    8080    /** 
     
    8585     */ 
    8686    setSize:function(size) {  
    8787        OpenLayers.Popup.Anchored.prototype.setSize.apply(this, arguments); 
    88          
    89         if (this.contentDiv != null) { 
    9088 
    91             var contentSize = this.size.clone(); 
    92             contentSize.h -= (2 * OpenLayers.Popup.AnchoredBubble.CORNER_SIZE); 
    93             contentSize.h -= (2 * this.padding); 
    94      
    95             this.contentDiv.style.height = contentSize.h + "px"; 
    96             this.contentDiv.style.width  = contentSize.w + "px"; 
    97              
    98             if (this.map) { 
    99                 //size has changed - must redo corners         
    100                 this.setRicoCorners(!this.rounded); 
    101                 this.rounded = true; 
    102             }     
    103         } 
     89        this.setRicoCorners(); 
    10490    },   
    10591 
    10692    /** 
     
    117103        if (this.div != null) { 
    118104            if (this.contentDiv != null) { 
    119105                this.div.style.background = "transparent"; 
    120                 OpenLayers.Rico.Corner.changeColor(this.contentDiv,  
     106                OpenLayers.Rico.Corner.changeColor(this.groupDiv,  
    121107                                                   this.backgroundColor); 
    122108            } 
    123109        } 
     
    154140    /**  
    155141     * Method: setRicoCorners 
    156142     * Update RICO corners according to the popup's current relative postion. 
    157      *   
    158      * Parameters: 
    159      * firstTime - {Boolean} This the first time the corners are being rounded. 
    160143     */ 
    161     setRicoCorners:function(firstTime) { 
     144    setRicoCorners:function() { 
    162145     
    163146        var corners = this.getCornersToRound(this.relativePosition); 
    164147        var options = {corners: corners, 
     
    166149                       bgColor: "transparent", 
    167150                         blend: false}; 
    168151 
    169         if (firstTime) { 
     152        if (!this.rounded) { 
    170153            OpenLayers.Rico.Corner.round(this.div, options); 
     154            this.rounded = true; 
    171155        } else { 
    172156            OpenLayers.Rico.Corner.reRound(this.groupDiv, options); 
    173157            //set the popup color and opacity 
  • lib/OpenLayers/Popup/Anchored.js

    old new  
    5353                                           offset: new OpenLayers.Pixel(0,0)}; 
    5454    }, 
    5555 
    56     /**  
    57      * Method: draw 
    58      *  
    59      * Parameters: 
    60      * px - {<OpenLayers.Pixel>} 
    61      *  
    62      * Returns:  
    63      * {DOMElement} Reference to a div that contains the drawn popup. 
     56    /** 
     57     * APIMethod: destroy 
    6458     */ 
    65     draw: function(px) { 
    66         if (px == null) { 
    67             if ((this.lonlat != null) && (this.map != null)) { 
    68                 px = this.map.getLayerPxFromLonLat(this.lonlat); 
    69             } 
    70         } 
     59    destroy: function() { 
     60        this.anchor = null; 
     61        this.relativePosition = null; 
    7162         
    72         //calculate relative position 
    73         this.relativePosition = this.calculateRelativePosition(px); 
    74          
    75         return OpenLayers.Popup.prototype.draw.apply(this, arguments); 
     63        OpenLayers.Popup.prototype.destroy.apply(this, arguments);         
    7664    }, 
    77      
    78     /**  
    79      * Method: calculateRelativePosition 
    80      *  
    81      * Parameters: 
    82      * px - {<OpenLayers.Pixel>} 
    83      *  
    84      * Returns: 
    85      * {String} The relative position ("br" "tr" "tl "bl") at which the popup 
    86      *     should be placed. 
     65 
     66    /** 
     67     * APIMethod: show 
     68     * Overridden from Popup since user might hide popup and then show() it  
     69     *     in a new location (meaning we might want to update the relative 
     70     *     position on the show) 
    8771     */ 
    88     calculateRelativePosition:function(px) { 
    89         var lonlat = this.map.getLonLatFromLayerPx(px);         
    90          
    91         var extent = this.map.getExtent(); 
    92         var quadrant = extent.determineQuadrant(lonlat); 
    93          
    94         return OpenLayers.Bounds.oppositeQuadrant(quadrant); 
    95     },  
     72    show: function() { 
     73        this.updatePosition(); 
     74        OpenLayers.Popup.prototype.show.apply(this, arguments); 
     75    }, 
    9676 
    9777    /** 
    9878     * Method: moveTo 
    9979     * Since the popup is moving to a new px, it might need also to be moved 
    100      *     relative to where the marker is. 
     80     *     relative to where the marker is. We first calculate the new  
     81     *     relativePosition, and then we calculate the new px where we will  
     82     *     put the popup, based on the new relative position.  
    10183     *  
     84     *     If the relativePosition has changed, we must also call  
     85     *     updateRelativePosition() to make any visual changes to the popup  
     86     *     which are associated with putting it in a new relativePosition. 
     87     *  
    10288     * Parameters: 
    10389     * px - {<OpenLayers.Pixel>} 
    10490     */ 
    10591    moveTo: function(px) { 
     92        var oldRelativePosition = this.relativePosition; 
    10693        this.relativePosition = this.calculateRelativePosition(px); 
    10794         
    10895        var newPx = this.calculateNewPx(px); 
    10996         
    11097        var newArguments = new Array(newPx);         
    11198        OpenLayers.Popup.prototype.moveTo.apply(this, newArguments); 
     99         
     100        //if this move has caused the popup to change its relative position,  
     101        // we need to make the appropriate cosmetic changes. 
     102        if (this.relativePosition != oldRelativePosition) { 
     103            this.updateRelativePosition(); 
     104        } 
    112105    }, 
    113      
     106 
    114107    /** 
    115      * Method: setSize 
     108     * APIMethod: setSize 
    116109     *  
    117110     * Parameters: 
    118111     * size - {<OpenLayers.Size>} 
     
    127120    },   
    128121     
    129122    /**  
     123     * Method: calculateRelativePosition 
     124     *  
     125     * Parameters: 
     126     * px - {<OpenLayers.Pixel>} 
     127     *  
     128     * Returns: 
     129     * {String} The relative position ("br" "tr" "tl "bl") at which the popup 
     130     *     should be placed. 
     131     */ 
     132    calculateRelativePosition:function(px) { 
     133        var lonlat = this.map.getLonLatFromLayerPx(px);         
     134         
     135        var extent = this.map.getExtent(); 
     136        var quadrant = extent.determineQuadrant(lonlat); 
     137         
     138        return OpenLayers.Bounds.oppositeQuadrant(quadrant); 
     139    },  
     140 
     141    /** 
     142     * Method: updateRelativePosition 
     143     * The popup has been moved to a new relative location, so we may want to  
     144     *     make some cosmetic adjustments to it.  
     145     *  
     146     *     Note that in the classic Anchored popup, there is nothing to do  
     147     *     here, since the popup looks exactly the same in all four positions. 
     148     *     Subclasses such as the AnchoredBubble and Framed, however, will  
     149     *     want to do something special here. 
     150     */ 
     151    updateRelativePosition: function() { 
     152        //to be overridden by subclasses 
     153    }, 
     154 
     155    /**  
    130156     * Method: calculateNewPx 
    131157     *  
    132158     * Parameters: 
  • lib/OpenLayers/Popup.js

    old new  
    8686     
    8787    /**  
    8888     * Property: groupDiv  
    89      * {DOMElement} the parent of <OpenLayers.Popup.contentDiv>  
     89     * {DOMElement} First and only child of 'div'. The group Div contains the 
     90     *     'contentDiv' and the 'closeDiv'. 
    9091     */ 
    9192    groupDiv: null, 
    9293 
     
    9798    closeDiv: null, 
    9899 
    99100    /**  
     101     * APIProperty: autoSize 
     102     * {Boolean} Resize the popup to auto-fit the contents. 
     103     *     Default is false. 
     104     */ 
     105    autoSize: false, 
     106 
     107    /** 
     108     * APIProperty: minSize 
     109     * {<OpenLayers.Size>} Minimum size allowed for the popup's contents. 
     110     */ 
     111    minSize: null, 
     112 
     113    /** 
     114     * APIProperty: maxSize 
     115     * {<OpenLayers.Size>} Maximum size allowed for the popup's contents. 
     116     */ 
     117    maxSize: null, 
     118 
     119    /**  
    100120     * Property: padding  
    101      * {int} the internal padding of the content div. 
     121     * {int or <OpenLayers.Bounds>} An extra opportunity to specify internal  
     122     *     padding of the content div inside the popup. This was originally 
     123     *     confused with the css padding as specified in style.css's  
     124     *     'olPopupContent' class. We would like to get rid of this altogether, 
     125     *     except that it does come in handy for the framed and anchoredbubble 
     126     *     popups, who need to maintain yet another barrier between their  
     127     *     content and the outer border of the popup itself.  
     128     *  
     129     *     Note that in order to not break API, we must continue to support  
     130     *     this property being set as an integer. Really, though, we'd like to  
     131     *     have this specified as a Bounds object so that user can specify 
     132     *     distinct left, top, right, bottom paddings. With the 3.0 release 
     133     *     we can make this only a bounds. 
    102134     */ 
    103     padding: 5
     135    padding: 0
    104136 
     137    /**  
     138     * Method: fixPadding 
     139     * To be removed in 3.0, this function merely helps us to deal with the  
     140     *     case where the user may have set an integer value for padding,  
     141     *     instead of an <OpenLayers.Bounds> object. 
     142     */ 
     143    fixPadding: function() { 
     144        if (typeof this.padding == "number") { 
     145            this.padding = new OpenLayers.Bounds( 
     146                this.padding, this.padding, this.padding, this.padding 
     147            ); 
     148        } 
     149    }, 
    105150 
     151    /** 
     152     * APIProperty: panMapIfOutOfView 
     153     * {Boolean} When drawn, pan map such that the entire popup is visible in 
     154     *     the current viewport (if necessary). 
     155     *     Default is false. 
     156     */ 
     157    panMapIfOutOfView: false, 
     158     
    106159    /**  
    107160     * Property: map  
    108161     * {<OpenLayers.Map>} this gets set in Map.js when the popup is added to the map 
     
    147200                                             null, null, null, "hidden"); 
    148201        this.div.className = 'olPopup'; 
    149202         
    150         this.groupDiv = OpenLayers.Util.createDiv(null, null, null,  
     203        var groupDivId = this.id + "_GroupDiv"; 
     204        this.groupDiv = OpenLayers.Util.createDiv(groupDivId, null, null,  
    151205                                                    null, "relative", null, 
    152206                                                    "hidden"); 
    153207 
    154208        var id = this.div.id + "_contentDiv"; 
    155209        this.contentDiv = OpenLayers.Util.createDiv(id, null, this.size.clone(),  
    156                                                     null, "relative", null, 
    157                                                     "hidden"); 
     210                                                    null, "relative"); 
    158211        this.contentDiv.className = 'olPopupContent';                                             
    159212        this.groupDiv.appendChild(this.contentDiv); 
    160213        this.div.appendChild(this.groupDiv); 
    161214 
    162215        if (closeBox) { 
    163            // close icon 
    164             var closeSize = new OpenLayers.Size(17,17); 
    165             var img = OpenLayers.Util.getImagesLocation() + "close.gif"; 
    166             this.closeDiv = OpenLayers.Util.createAlphaImageDiv( 
    167                 this.id + "_close", null, closeSize, img 
    168             ); 
    169             this.closeDiv.style.right = this.padding + "px"; 
    170             this.closeDiv.style.top = this.padding + "px"; 
    171             this.groupDiv.appendChild(this.closeDiv); 
     216            this.addCloseBox(closeBoxCallback); 
     217        }  
    172218 
    173             var closePopup = closeBoxCallback || function(e) { 
    174                 this.hide(); 
    175                 OpenLayers.Event.stop(e); 
    176             }; 
    177             OpenLayers.Event.observe(this.closeDiv, "click",  
    178                     OpenLayers.Function.bindAsEventListener(closePopup, this)); 
    179  
    180         } 
    181  
    182219        this.registerEvents(); 
    183220    }, 
    184221 
     
    187224     * nullify references to prevent circular references and memory leaks 
    188225     */ 
    189226    destroy: function() { 
     227 
     228        this.id = null; 
     229        this.lonlat = null; 
     230        this.size = null; 
     231        this.contentHTML = null; 
     232         
     233        this.backgroundColor = null; 
     234        this.opacity = null; 
     235        this.border = null; 
     236         
     237        this.events.destroy(); 
     238        this.events = null; 
     239         
     240        if (this.closeDiv) { 
     241            OpenLayers.Event.stopObservingElement(this.closeDiv);  
     242            this.groupDiv.removeChild(this.closeDiv); 
     243        } 
     244        this.closeDiv = null; 
     245         
     246        this.div.removeChild(this.groupDiv); 
     247        this.groupDiv = null; 
     248 
    190249        if (this.map != null) { 
    191250            this.map.removePopup(this); 
    192             this.map = null; 
    193251        } 
    194         this.events.destroy(); 
    195         this.events = null; 
     252        this.map = null; 
    196253        this.div = null; 
     254         
     255        this.autoSize = null; 
     256        this.minSize = null; 
     257        this.maxSize = null; 
     258        this.padding = null; 
     259        this.panMapIfOutOfView = null; 
    197260    }, 
    198261 
    199262    /**  
     
    213276            } 
    214277        } 
    215278         
    216         this.setSize(); 
     279        //listen to movestart, moveend to disable overflow (FF bug) 
     280        if (OpenLayers.Util.getBrowserName() == 'firefox') { 
     281            this.map.events.register("movestart", this, function() { 
     282                var style = document.defaultView.getComputedStyle( 
     283                    this.contentDiv, null 
     284                ); 
     285                var currentOverflow = style.getPropertyValue("overflow"); 
     286                if (currentOverflow != "hidden") { 
     287                    this.contentDiv._oldOverflow = currentOverflow; 
     288                    this.contentDiv.style.overflow = "hidden"; 
     289                } 
     290            }); 
     291            this.map.events.register("moveend", this, function() { 
     292                var oldOverflow = this.contentDiv._oldOverflow; 
     293                if (oldOverflow) { 
     294                    this.contentDiv.style.overflow = oldOverflow; 
     295                    this.contentDiv._oldOverflow = null; 
     296                } 
     297            }); 
     298        } 
     299 
     300        this.moveTo(px); 
     301        if (!this.autoSize) { 
     302            this.setSize(this.size); 
     303        } 
    217304        this.setBackgroundColor(); 
    218305        this.setOpacity(); 
    219306        this.setBorder(); 
    220307        this.setContentHTML(); 
    221         this.moveTo(px); 
     308         
     309        if (this.panMapIfOutOfView) { 
     310            this.panIntoView(); 
     311        }     
    222312 
    223313        return this.div; 
    224314    }, 
     
    265355     * Toggles visibility of the popup. 
    266356     */ 
    267357    toggle: function() { 
    268         OpenLayers.Element.toggle(this.div); 
     358        if (this.visible()) { 
     359            this.hide(); 
     360        } else { 
     361            this.show(); 
     362        } 
    269363    }, 
    270364 
    271365    /** 
     
    274368     */ 
    275369    show: function() { 
    276370        OpenLayers.Element.show(this.div); 
     371 
     372        if (this.panMapIfOutOfView) { 
     373            this.panIntoView(); 
     374        }     
    277375    }, 
    278376 
    279377    /** 
     
    289387     * Used to adjust the size of the popup.  
    290388     * 
    291389     * Parameters: 
    292      * size - {<OpenLayers.Size>} the new size of the popup in pixels. 
     390     * size - {<OpenLayers.Size>} the new size of the popup's contents div 
     391     *     (in pixels). 
    293392     */ 
    294393    setSize:function(size) {  
    295         if (size != undefined) { 
    296             this.size = size;  
     394        this.size = size;  
     395 
     396        var contentSize = this.size.clone(); 
     397         
     398        // if our contentDiv has a css 'padding' set on it by a stylesheet, we  
     399        //  must add that to the desired "size".  
     400        var contentDivPadding = this.getContentDivPadding(); 
     401        var wPadding = contentDivPadding.left + contentDivPadding.right; 
     402        var hPadding = contentDivPadding.top + contentDivPadding.bottom; 
     403 
     404        // take into account the popup's 'padding' property 
     405        this.fixPadding(); 
     406        wPadding += this.padding.left + this.padding.right; 
     407        hPadding += this.padding.top + this.padding.bottom; 
     408 
     409        // make extra space for the close div 
     410        if (this.closeDiv) { 
     411            var closeDivWidth = parseInt(this.closeDiv.style.width); 
     412            wPadding += closeDivWidth + contentDivPadding.right; 
    297413        } 
    298          
     414 
     415        //increase size of the main popup div to take into account the  
     416        // users's desired padding and close div.         
     417        this.size.w += wPadding; 
     418        this.size.h += hPadding; 
     419 
     420        //now if our browser is IE, we need to actually make the contents  
     421        // div itself bigger to take its own padding into effect. this makes  
     422        // me want to shoot someone, but so it goes. 
     423        if (OpenLayers.Util.getBrowserName() == "msie") { 
     424            contentSize.w += contentDivPadding.left + contentDivPadding.right; 
     425            contentSize.h += contentDivPadding.bottom + contentDivPadding.top; 
     426        } 
     427 
    299428        if (this.div != null) { 
    300429            this.div.style.width = this.size.w + "px"; 
    301430            this.div.style.height = this.size.h + "px"; 
    302431        } 
    303432        if (this.contentDiv != null){ 
    304             this.contentDiv.style.width = this.size.w + "px"; 
    305             this.contentDiv.style.height = this.size.h + "px"; 
     433            this.contentDiv.style.width = contentSize.w + "px"; 
     434            this.contentDiv.style.height = contentSize.h + "px"; 
    306435        } 
    307436    },   
    308437 
    309438    /** 
    310     * Method: setBackgroundColor 
    311     * Sets the background color of the popup. 
    312    
    313     * Parameters: 
    314     * color - {String} the background color.  eg "#FFBBBB" 
    315     */ 
     439    * Method: setBackgroundColor 
     440    * Sets the background color of the popup. 
     441   
     442    * Parameters: 
     443    * color - {String} the background color.  eg "#FFBBBB" 
     444    */ 
    316445    setBackgroundColor:function(color) {  
    317446        if (color != undefined) { 
    318447            this.backgroundColor = color;  
     
    373502            this.contentHTML = contentHTML; 
    374503        } 
    375504         
     505        if (this.autoSize) { 
     506 
     507            // determine actual render dimensions of the contents 
     508            var realSize =  
     509                 OpenLayers.Util.getRenderedDimensions(this.contentHTML); 
     510 
     511            // is the "real" size of the div is safe to display in our map? 
     512            var safeSize = this.getSafeContentSize(realSize); 
     513 
     514            var newSize = null; 
     515              
     516            if (safeSize.equals(realSize)) { 
     517                //real size of content is small enough to fit on the map,  
     518                // so we use real size. 
     519                newSize = realSize; 
     520 
     521            } else { 
     522 
     523                //make a new OL.Size object with the clipped dimensions  
     524                // set or null if not clipped. 
     525                var fixedSize = new OpenLayers.Size(); 
     526                fixedSize.w = (safeSize.w < realSize.w) ? safeSize.w : null; 
     527                fixedSize.h = (safeSize.h < realSize.h) ? safeSize.h : null; 
     528             
     529                if (fixedSize.w && fixedSize.h) { 
     530                    //content is too big in both directions, so we will use  
     531                    // max popup size (safeSize), knowing well that it will  
     532                    // overflow both ways.                 
     533                    newSize = safeSize; 
     534                } else { 
     535                    //content is clipped in only one direction, so we need to  
     536                    // run getRenderedDimensions() again with a fixed dimension 
     537                    var clippedSize = OpenLayers.Util.getRenderedDimensions( 
     538                        this.contentHTML, fixedSize 
     539                    ); 
     540                     
     541                    //if the clipped size is still the same as the safeSize,  
     542                    // that means that our content must be fixed in the  
     543                    // offending direction. If overflow is 'auto', this means  
     544                    // we are going to have a scrollbar for sure, so we must  
     545                    // adjust for that. 
     546                    // 
     547                    var currentOverflow = OpenLayers.Element.getStyle( 
     548                        this.contentDiv, "overflow" 
     549                    ); 
     550                    if ( (currentOverflow != "hidden") &&  
     551                         (clippedSize.equals(safeSize)) ) { 
     552                        var scrollBar = OpenLayers.Util.getScrollbarWidth(); 
     553                        if (fixedSize.w) { 
     554                            clippedSize.h += scrollBar; 
     555                        } else { 
     556                            clippedSize.w += scrollBar; 
     557                        } 
     558                    } 
     559                     
     560                    newSize = this.getSafeContentSize(clippedSize); 
     561                } 
     562            }                         
     563            this.setSize(newSize);      
     564        }         
     565 
    376566        if (this.contentDiv != null) { 
    377567            this.contentDiv.innerHTML = this.contentHTML; 
    378568        }     
    379569    }, 
    380570     
    381571 
     572    /** 
     573     * APIMethod: getSafeContentSize 
     574     *  
     575     * Parameters: 
     576     * size - {<OpenLayers.Size>} Desired size to make the popup. 
     577     *  
     578     * Returns: 
     579     * {<OpenLayers.Size>} A size to make the popup which is neither smaller 
     580     *     than the specified minimum size, nor bigger than the maximum  
     581     *     size (which is calculated relative to the size of the viewport). 
     582     */ 
     583    getSafeContentSize: function(size) { 
     584 
     585        var safeContentSize = size.clone(); 
     586 
     587        // if our contentDiv has a css 'padding' set on it by a stylesheet, we  
     588        //  must add that to the desired "size".  
     589        var contentDivPadding = this.getContentDivPadding(); 
     590        var wPadding = contentDivPadding.left + contentDivPadding.right; 
     591        var hPadding = contentDivPadding.top + contentDivPadding.bottom; 
     592 
     593        // take into account the popup's 'padding' property 
     594        this.fixPadding(); 
     595        wPadding += this.padding.left + this.padding.right; 
     596        hPadding += this.padding.top + this.padding.bottom; 
     597 
     598        if (this.closeDiv) { 
     599            var closeDivWidth = parseInt(this.closeDiv.style.width); 
     600            wPadding += closeDivWidth + contentDivPadding.right; 
     601        } 
     602 
     603        // prevent the popup from being smaller than a specified minimal size 
     604        if (this.minSize) { 
     605            safeContentSize.w = Math.max(safeContentSize.w,  
     606                (this.minSize.w - wPadding)); 
     607            safeContentSize.h = Math.max(safeContentSize.h,  
     608                (this.minSize.h - hPadding)); 
     609        } 
     610 
     611        // prevent the popup from being bigger than a specified maximum size 
     612        if (this.maxSize) { 
     613            safeContentSize.w = Math.min(safeContentSize.w,  
     614                (this.maxSize.w - wPadding)); 
     615            safeContentSize.h = Math.min(safeContentSize.h,  
     616                (this.maxSize.h - hPadding)); 
     617        } 
     618         
     619        //make sure the desired size to set doesn't result in a popup that  
     620        // is bigger than the map's viewport. 
     621        // 
     622        if (this.map && this.map.size) { 
     623 
     624            // Note that there *was* a reference to a 
     625            // 'OpenLayers.Popup.SCROLL_BAR_WIDTH' constant here, with special 
     626            // tolerance for it and everything... but it was never defined in 
     627            // the first place, so I don't know what to think. 
     628           
     629            var maxY = this.map.size.h -  
     630                this.map.paddingForPopups.top -  
     631                this.map.paddingForPopups.bottom -  
     632                hPadding; 
    382633     
     634            var maxX = this.map.size.w -  
     635                this.map.paddingForPopups.left -  
     636                this.map.paddingForPopups.right -  
     637                wPadding; 
     638     
     639            safeContentSize.w = Math.min(safeContentSize.w, maxX); 
     640            safeContentSize.h = Math.min(safeContentSize.h, maxY); 
     641        } 
     642         
     643        return safeContentSize; 
     644    }, 
     645     
     646    /** 
     647     * Method: getContentDivPadding 
     648     * Glorious, oh glorious hack in order to determine the css 'padding' of  
     649     *     the contentDiv. IE/Opera return null here unless we actually add the  
     650     *     popup's main 'div' element (which contains contentDiv) to the DOM.  
     651     *     So we make it invisible and then add it to the document temporarily.  
     652     * 
     653     *     Once we've taken the padding readings we need, we then remove it  
     654     *     from the DOM (it will actually get added to the DOM in  
     655     *     Map.js's addPopup) 
     656     * 
     657     * Returns: 
     658     * {<OpenLayers.Bounds>} 
     659     */ 
     660    getContentDivPadding: function() { 
     661 
     662        //use cached value if we have it 
     663        var contentDivPadding = this._contentDivPadding; 
     664        if (!contentDivPadding) { 
     665            //make the div invisible and add it to the page         
     666            this.div.style.display = "none"; 
     667            document.body.appendChild(this.div); 
     668     
     669            //read the padding settings from css, put them in an OL.Bounds         
     670            contentDivPadding = new OpenLayers.Bounds( 
     671                OpenLayers.Element.getStyle(this.contentDiv, "padding-left"), 
     672                OpenLayers.Element.getStyle(this.contentDiv, "padding-bottom"), 
     673                OpenLayers.Element.getStyle(this.contentDiv, "padding-right"), 
     674                OpenLayers.Element.getStyle(this.contentDiv, "padding-top") 
     675            ); 
     676     
     677            //cache the value 
     678            this._contentDivPadding = contentDivPadding; 
     679     
     680            //remove the div from the page and make it visible again 
     681            document.body.removeChild(this.div); 
     682            this.div.style.display = ""; 
     683        } 
     684        return contentDivPadding; 
     685    }, 
     686 
     687    /** 
     688     * Method: addCloseBox 
     689     *  
     690     * Parameters: 
     691     * callback - {Function} The callback to be called when the close button 
     692     *     is clicked. 
     693     */ 
     694    addCloseBox: function(callback) { 
     695 
     696        this.closeDiv = OpenLayers.Util.createDiv( 
     697            this.id + "_close", null, new OpenLayers.Size(17, 17) 
     698        ); 
     699        this.closeDiv.className = "olPopupCloseBox";  
     700         
     701        // use the content div's css padding to determine if we should 
     702        //  padd the close div 
     703        var contentDivPadding = this.getContentDivPadding(); 
     704          
     705        this.closeDiv.style.right = contentDivPadding.right + "px"; 
     706        this.closeDiv.style.top = contentDivPadding.top + "px"; 
     707        this.groupDiv.appendChild(this.closeDiv); 
     708 
     709        var closePopup = callback || function(e) { 
     710            this.hide(); 
     711            OpenLayers.Event.stop(e); 
     712        }; 
     713        OpenLayers.Event.observe(this.closeDiv, "click",  
     714                OpenLayers.Function.bindAsEventListener(closePopup, this)); 
     715    }, 
     716 
     717    /** 
     718     * Method: panIntoView 
     719     * Pans the map such that the popup is totaly viewable (if necessary) 
     720     */ 
     721    panIntoView: function() { 
     722         
     723        var mapSize = this.map.getSize(); 
     724     
     725        //start with the top left corner of the popup, in px,  
     726        // relative to the viewport 
     727        var origTL = this.map.getViewPortPxFromLayerPx( new OpenLayers.Pixel( 
     728            parseInt(this.div.style.left), 
     729            parseInt(this.div.style.top) 
     730        )); 
     731        var newTL = origTL.clone(); 
     732     
     733        //new left (compare to margins, using this.size to calculate right) 
     734        if (origTL.x < this.map.paddingForPopups.left) { 
     735            newTL.x = this.map.paddingForPopups.left; 
     736        } else  
     737        if ( (origTL.x + this.size.w) > (mapSize.w - this.map.paddingForPopups.right)) { 
     738            newTL.x = mapSize.w - this.map.paddingForPopups.right - this.size.w; 
     739        } 
     740         
     741        //new top (compare to margins, using this.size to calculate bottom) 
     742        if (origTL.y < this.map.paddingForPopups.top) { 
     743            newTL.y = this.map.paddingForPopups.top; 
     744        } else  
     745        if ( (origTL.y + this.size.h) > (mapSize.h - this.map.paddingForPopups.bottom)) { 
     746            newTL.y = mapSize.h - this.map.paddingForPopups.bottom - this.size.h; 
     747        } 
     748         
     749        var dx = origTL.x - newTL.x; 
     750        var dy = origTL.y - newTL.y; 
     751         
     752        this.map.pan(dx, dy); 
     753    }, 
     754 
    383755    /**  
    384756     * Method: registerEvents 
    385757     * Registers events on the popup. 
  • lib/OpenLayers/Util.js

    old new  
    13211321     
    13221322    return browserName; 
    13231323}; 
     1324 
     1325 
     1326 
     1327     
     1328/** 
     1329 * Method: getRenderedDimensions 
     1330 * Renders the contentHTML offscreen to determine actual dimensions for 
     1331 *     popup sizing. As we need layout to determine dimensions the content 
     1332 *     is rendered -9999px to the left and absolute to ensure the  
     1333 *     scrollbars do not flicker 
     1334 *      
     1335 * Parameters: 
     1336 * size - {<OpenLayers.Size>} If either the 'w' or 'h' properties is  
     1337 *     specified, we fix that dimension of the div to be measured. This is  
     1338 *     useful in the case where we have a limit in one dimension and must  
     1339 *     therefore meaure the flow in the other dimension. 
     1340 *  
     1341 * Returns: 
     1342 * {OpenLayers.Size} 
     1343 */ 
     1344OpenLayers.Util.getRenderedDimensions = function(contentHTML, size) { 
     1345     
     1346    var w = h = null; 
     1347     
     1348    // create temp container div with restricted size 
     1349    var container = document.createElement("div"); 
     1350    container.style.overflow= ""; 
     1351    container.style.position = "absolute"; 
     1352    container.style.left = "-9999px"; 
     1353         
     1354    //fix a dimension, if specified. 
     1355    if (size) { 
     1356        if (size.w) { 
     1357            w = container.style.width = size.w; 
     1358        } else if (size.h) { 
     1359            h = container.style.height = size.h; 
     1360        } 
     1361    } 
     1362     
     1363    // create temp content div and assign content 
     1364    var content = document.createElement("div"); 
     1365    content.innerHTML = contentHTML; 
     1366     
     1367    // add content to restricted container  
     1368    container.appendChild(content); 
     1369     
     1370    // append container to body for rendering 
     1371    document.body.appendChild(container); 
     1372     
     1373    // calculate scroll width of content and add corners and shadow width 
     1374    if (!w) { 
     1375        w = parseInt(content.scrollWidth); 
     1376     
     1377        // update container width to allow height to adjust 
     1378        container.style.width = w + "px"; 
     1379    }         
     1380    // capture height and add shadow and corner image widths 
     1381    if (!h) { 
     1382        h = parseInt(content.scrollHeight); 
     1383    } 
     1384 
     1385    // remove elements 
     1386    container.removeChild(content); 
     1387    document.body.removeChild(container); 
     1388     
     1389    return new OpenLayers.Size(w, h); 
     1390}; 
     1391 
     1392/** 
     1393 * APIFunction: getScrollbarWidth 
     1394 * This function has been modified by the OpenLayers from the original version, 
     1395 *     written by Matthew Eernisse and released under the Apache 2  
     1396 *     license here: 
     1397 *  
     1398 *     http://www.fleegix.org/articles/2006/05/30/getting-the-scrollbar-width-in-pixels 
     1399 *  
     1400 *     It has been modified simply to cache its value, since it is physically  
     1401 *     impossible that this code could ever run in more than one browser at  
     1402 *     once.  
     1403 *  
     1404 * Returns: 
     1405 * {Integer} 
     1406 */ 
     1407OpenLayers.Util.getScrollbarWidth = function() { 
     1408     
     1409    var scrollbarWidth = OpenLayers.Util._scrollbarWidth; 
     1410     
     1411    if (scrollbarWidth == null) { 
     1412        var scr = null; 
     1413        var inn = null; 
     1414        var wNoScroll = 0; 
     1415        var wScroll = 0; 
     1416     
     1417        // Outer scrolling div 
     1418        scr = document.createElement('div'); 
     1419        scr.style.position = 'absolute'; 
     1420        scr.style.top = '-1000px'; 
     1421        scr.style.left = '-1000px'; 
     1422        scr.style.width = '100px'; 
     1423        scr.style.height = '50px'; 
     1424        // Start with no scrollbar 
     1425        scr.style.overflow = 'hidden'; 
     1426     
     1427        // Inner content div 
     1428        inn = document.createElement('div'); 
     1429        inn.style.width = '100%'; 
     1430        inn.style.height = '200px'; 
     1431     
     1432        // Put the inner div in the scrolling div 
     1433        scr.appendChild(inn); 
     1434        // Append the scrolling div to the doc 
     1435        document.body.appendChild(scr); 
     1436     
     1437        // Width of the inner div sans scrollbar 
     1438        wNoScroll = inn.offsetWidth; 
     1439     
     1440        // Add the scrollbar 
     1441        scr.style.overflow = 'scroll'; 
     1442        // Width of the inner div width scrollbar 
     1443        wScroll = inn.offsetWidth; 
     1444     
     1445        // Remove the scrolling div from the doc 
     1446        document.body.removeChild(document.body.lastChild); 
     1447     
     1448        // Pixel width of the scroller 
     1449        OpenLayers.Util._scrollbarWidth = (wNoScroll - wScroll); 
     1450        scrollbarWidth = OpenLayers.Util._scrollbarWidth; 
     1451    } 
     1452 
     1453    return scrollbarWidth; 
     1454}; 
  • lib/OpenLayers.js

    old new  
    120120            "OpenLayers/Layer/TileCache.js", 
    121121            "OpenLayers/Popup/Anchored.js", 
    122122            "OpenLayers/Popup/AnchoredBubble.js", 
     123            "OpenLayers/Popup/Framed.js", 
     124            "OpenLayers/Popup/FramedCloud.js", 
    123125            "OpenLayers/Feature.js", 
    124126            "OpenLayers/Feature/Vector.js", 
    125127            "OpenLayers/Feature/WFS.js", 
  • examples/sundials.html

    old new  
     1<html xmlns="http://www.w3.org/1999/xhtml"> 
     2  <head> 
     3    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" /> 
     4        <link rel="stylesheet" href="../theme/default/framedCloud.css" type="text/css" /> 
     5 
     6    <style type="text/css"> 
     7        #map { 
     8            width: 100%; 
     9            height: 100%; 
     10            border: 1px solid black; 
     11        } 
     12        .olPopup p { margin:0px; } 
     13    </style> 
     14    <script src="../lib/OpenLayers.js"></script> 
     15    <script type="text/javascript"> 
     16        var lon = 5; 
     17        var lat = 40; 
     18        var zoom = 5; 
     19        var map, layer; 
     20 
     21        function init(){ 
     22            map = new OpenLayers.Map('map'); 
     23            layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", 
     24                    "http://labs.metacarta.com/wms/vmap0", {layers: 'basic'} ); 
     25            map.addLayer(layer); 
     26            map.addLayer(new OpenLayers.Layer.GML("KML", "sundials.kml",  
     27               { 
     28                format: OpenLayers.Format.KML,  
     29                formatOptions: { 
     30                  extractStyles: true,  
     31                  extractAttributes: true 
     32                } 
     33               })); 
     34             selectControl = new OpenLayers.Control.SelectFeature(map.layers[1], 
     35                {onSelect: onFeatureSelect, onUnselect: onFeatureUnselect}); 
     36   
     37            map.addControl(selectControl); 
     38            selectControl.activate();    
     39            map.zoomToMaxExtent(); 
     40        } 
     41        function onPopupClose(evt) { 
     42            selectControl.unselect(selectedFeature); 
     43        } 
     44        function onFeatureSelect(feature) { 
     45            selectedFeature = feature; 
     46            popup = new OpenLayers.Popup.FramedCloud("chicken",  
     47                                     feature.geometry.getBounds().getCenterLonLat(), 
     48                                     new OpenLayers.Size(100,100), 
     49                                     "<div style='font-size:.8em'>"+feature.attributes.description+"</div>", 
     50                                     null, true, onPopupClose); 
     51            feature.popup = popup; 
     52            map.addPopup(popup); 
     53        } 
     54        function onFeatureUnselect(feature) { 
     55            map.removePopup(feature.popup); 
     56            feature.popup.destroy(); 
     57            feature.popup = null; 
     58        } 
     59    </script> 
     60  </head> 
     61  <body onload="init()"> 
     62      <h1 id="title">KML Layer Example</h1> 
     63 
     64      <div id="tags"></div> 
     65 
     66      <p id="shortdesc"> 
     67          Demonstrates loading and displaying a KML file on top of a basemap. 
     68    </p> 
     69 
     70    <div id="map"></div> 
     71 
     72    <div id="docs"></div> 
     73  </body> 
     74</html> 
  • examples/sundials.kml

    old new  
     1<?xml version="1.0" encoding="UTF-8"?> 
     2<kml xmlns="http://earth.google.com/kml/2.2"> 
     3<Document> 
     4    <name>Sundial Collection.kmz</name> 
     5    <StyleMap id="msn_sunny_copy70"> 
     6        <Pair> 
     7            <key>normal</key> 
     8            <styleUrl>#sn_sunny_copy69</styleUrl> 
     9        </Pair> 
     10        <Pair> 
     11            <key>highlight</key> 
     12            <styleUrl>#sh_sunny_copy70</styleUrl> 
     13        </Pair> 
     14    </StyleMap> 
     15    <Style id="sh_sunny_copy69"> 
     16        <IconStyle> 
     17            <scale>1.4</scale> 
     18            <Icon> 
     19                <href>http://maps.google.com/mapfiles/kml/shapes/sunny.png</href> 
     20            </Icon> 
     21            <hotSpot x="0.5" y="0.5" xunits="fraction" yunits="fraction"/> 
     22        </IconStyle> 
     23        <LabelStyle> 
     24            <color>ff00aaff</color> 
     25        </LabelStyle> 
     26    </Style> 
     27    <Style id="sn_sunny_copy68"> 
     28        <IconStyle> 
     29            <scale>1.2</scale> 
     30            <Icon> 
     31                <href>http://maps.google.com/mapfiles/kml/shapes/sunny.png</href> 
     32            </Icon> 
     33            <hotSpot x="0.5" y="0.5" xunits="fraction" yunits="fraction"/> 
     34        </IconStyle> 
     35        <LabelStyle> 
     36            <color>ff00aaff</color> 
     37        </LabelStyle> 
     38    </Style> 
     39    <Style id="sn_sunny_copy69"> 
     40        <IconStyle> 
     41            <scale>1.2</scale> 
     42            <Icon> 
     43                <href>http://maps.google.com/mapfiles/kml/shapes/sunny.png</href> 
     44            </Icon> 
     45            <hotSpot x="0.5" y="0.5" xunits="fraction" yunits="fraction"/> 
     46        </IconStyle> 
     47        <LabelStyle> 
     48            <color>ff00aaff</color> 
     49        </LabelStyle> 
     50    </Style> 
     51    <Style id="sh_sunny_copy70"> 
     52        <IconStyle> 
     53            <scale>1.4</scale> 
     54            <Icon> 
     55                <href>http://maps.google.com/mapfiles/kml/shapes/sunny.png</href> 
     56            </Icon> 
     57            <hotSpot x="0.5" y="0.5" xunits="fraction" yunits="fraction"/> 
     58        </IconStyle> 
     59        <LabelStyle> 
     60            <color>ff00aaff</color> 
     61        </LabelStyle> 
     62    </Style> 
     63    <StyleMap id="msn_sunny_copy69"> 
     64        <Pair> 
     65            <key>normal</key> 
     66            <styleUrl>#sn_sunny_copy68</styleUrl> 
     67        </Pair> 
     68        <Pair> 
     69            <key>highlight</key> 
     70            <styleUrl>#sh_sunny_copy69</styleUrl> 
     71        </Pair> 
     72    </StyleMap> 
     73    <Folder> 
     74        <name>Sundial Collection</name> 
     75        <open>1</open> 
     76        <LookAt> 
     77            <longitude>-56.6884384968692</longitude> 
     78            <latitude>47.91963617483238</latitude> 
     79            <altitude>0</altitude> 
     80            <range>9958750.824018393</range> 
     81            <tilt>1.303827428939919e-015</tilt> 
     82            <heading>-16.31426621668193</heading> 
     83        </LookAt> 
     84        <Style> 
     85            <ListStyle> 
     86                <listItemType>check</listItemType> 
     87                <bgColor>00ffffff</bgColor> 
     88            </ListStyle> 
     89        </Style> 
     90        <Folder> 
     91            <name>High Resolution</name> 
     92            <Placemark> 
     93                <name>Sundial, Madestein, Den Haag</name> 
     94                <description><![CDATA[Horizontal sundial on the campus of the ‘Parnassia’ psychomedic centre in The Hague. The numbers on the left, 6,7 and 8, are wrong spelled. 
     95<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/zw-07-05-02.jpg"></p>]]></description> 
     96                <LookAt> 
     97                    <longitude>4.213227700645635</longitude> 
     98                    <latitude>52.04260288332888</latitude> 
     99                    <altitude>0</altitude> 
     100                    <range>24.63686803544318</range> 
     101                    <tilt>0</tilt> 
     102                    <heading>1.387289180270979e-005</heading> 
     103                </LookAt> 
     104                <styleUrl>#msn_sunny_copy69</styleUrl> 
     105                <Point> 
     106                    <coordinates>4.213209970684247,52.04268354765237,0</coordinates> 
     107                </Point> 
     108            </Placemark> 
     109            <Placemark> 
     110                <name>Sundial, Den Haag - Loosduinen</name> 
     111                <description><![CDATA[<p>Thanks to <b>A30</b></p> 
     112 
     113A sundial made of wooden blocks. 
     114The highest block in the middle is the style and casts its shadow each hour on one of the other blocks. 
     115 
     116<p><img src="http://www.dse.nl/~zonnewijzer/loosduin.jpg"></p> 
     117Image source:<a href="http://www.dse.nl/~zonnewijzer/loosduin.jpg">www.dse.nl</a>]]></description> 
     118                <LookAt> 
     119                    <longitude>4.236038669148795</longitude> 
     120                    <latitude>52.0499434967447</latitude> 
     121                    <altitude>0</altitude> 
     122                    <range>18.37312193280116</range> 
     123                    <tilt>2.202011190893535e-011</tilt> 
     124                    <heading>-0.3988978466888938</heading> 
     125                </LookAt> 
     126                <styleUrl>#msn_sunny_copy69</styleUrl> 
     127                <Point> 
     128                    <coordinates>4.236026636181407,52.049986562365,0</coordinates> 
     129                </Point> 
     130            </Placemark> 
     131            <Placemark> 
     132                <name>Sundial with light conductors - Paris, Les Halles</name> 
     133                <description><![CDATA[<p><img src="http://www.home.uni-osnabrueck.de/ahaenel/sonnuhr/paris1.jpg"></p> 
     134 
     135The sunlight falls on one of the three windows in the column (east, south, west) and over light conductors on the wall is indicated. 
     136 
     137<p><img src="http://www.home.uni-osnabrueck.de/ahaenel/sonnuhr/paris4.jpg"></p> 
     138 
     139The clock shows  16,40 o'clock. 
     140 
     141<p><img src="http://www.home.uni-osnabrueck.de/ahaenel/sonnuhr/paris5.jpg"></p> 
     142 
     143<a>Quelle:http://www.home.uni-osnabrueck.de/ahaenel/sonnuhr/paris_halles.htm</a> 
     144 
     145http://perso.orange.fr/cadrans.solaires/cadrans/cadran-halles-paris.html]]></description> 
     146                <LookAt> 
     147                    <longitude>2.344185113917775</longitude> 
     148                    <latitude>48.86294270160059</latitude> 
     149                    <altitude>0</altitude> 
     150                    <range>39.52787486507292</range> 
     151                    <tilt>0</tilt> 
     152                    <heading>-0.003533584730563007</heading> 
     153                </LookAt> 
     154                <styleUrl>#msn_sunny_copy69</styleUrl> 
     155                <Point> 
     156                    <coordinates>2.344143312335305,48.86302323987447,0</coordinates> 
     157                </Point> 
     158            </Placemark> 
     159            <Placemark> 
     160                <name>Sundial, Plymouth, Devon, UK</name> 
     161                <description><![CDATA[<p>The gnonom is 27 foot high, the pool has 21 feet diameter.  It was designed by architect Carole Vincent from Boscastle in Cornwall and was unvieled by Her Majesty the Queen on Friday July 22nd 1988 for a cost of  cost £70,000 . The sundial runs one hour and seventeen minutes behind local clocks.</p> 
     162<p><img src="http://www.photoready.co.uk/people-life/images/sundial-fountain.jpg"></p> 
     163<p>Image source:<a href="www.photoready.co.uk</a></p>]]></description> 
     164                <LookAt> 
     165                    <longitude>-4.142398271107962</longitude> 
     166                    <latitude>50.37145390235462</latitude> 
     167                    <altitude>0</altitude> 
     168                    <range>63.33410419881957</range> 
     169                    <tilt>0</tilt> 
     170                    <heading>-0.0001034131369701296</heading> 
     171                </LookAt> 
     172                <styleUrl>#msn_sunny_copy69</styleUrl> 
     173                <Point> 
     174                    <coordinates>-4.142446411782089,50.37160252809223,0</coordinates> 
     175                </Point> 
     176            </Placemark> 
     177            <Placemark> 
     178                <name>Sundial Millennium Timespace at Gosport, UK</name> 
     179                <description><![CDATA[<p><img src="http://www.sundials.co.uk/pix/gosport.jpg"></p> 
     180Image source:<a href="http://www.sundials.co.uk/pix/gosport.jpg">www.sundials.co.uk</a>]]></description> 
     181                <LookAt> 
     182                    <longitude>-1.117890647596098</longitude> 
     183                    <latitude>50.79319978711329</latitude> 
     184                    <altitude>0</altitude> 
     185                    <range>79.08348690288113</range> 
     186                    <tilt>0</tilt> 
     187                    <heading>0.02100880488328328</heading> 
     188                </LookAt> 
     189                <styleUrl>#msn_sunny_copy69</styleUrl> 
     190                <Point> 
     191                    <coordinates>-1.117887915142518,50.79336425684474,0</coordinates> 
     192                </Point> 
     193            </Placemark> 
     194            <Placemark> 
     195                <name>Sundial, Britzer Garten, Berlin</name> 
     196                <description>See photos on this page: 
     197http://home.arcor.de/ruth.kirsch/sonnenuhr/berlin_1xxxx/berlin_1xxxx.htm</description> 
     198                <LookAt> 
     199                    <longitude>13.42078373972489</longitude> 
     200                    <latitude>52.4366841172644</latitude> 
     201                    <altitude>0</altitude> 
     202                    <range>102.2086892967038</range> 
     203                    <tilt>0</tilt> 
     204                    <heading>-0.004885703167479627</heading> 
     205                </LookAt> 
     206                <styleUrl>#msn_sunny_copy69</styleUrl> 
     207                <Point> 
     208                    <coordinates>13.4207448482471,52.43682055829985,0</coordinates> 
     209                </Point> 
     210            </Placemark> 
     211            <Placemark> 
     212                <name>Sundial, Falkenplatz, Berlin</name> 
     213                <description><![CDATA[<p>The original reasoning event for the construction of the sundial was the UNO climate conference 1995 in Berlin. The base stone of the wall spiral was layed at a festivity at the equinox of March 1995. Until June 1995 the main construction was completed, and at another festivity at the summer solstice the gnonom and the totem ("Lebensbaum") was installed by Berlin fire fighters.</p> 
     214<p><img src="http://www.surveyor.in-berlin.de/sundials/imgs/Mauerpark-SD01.5.jpg"></p> 
     215<p>The nearly spiral sundial was planned as a "living sundial" and initiated by the groups of the "Netzwerk Klimagipfel 95", mainly by the journalist T. Römer with the "Verein zur Rettung des Regenwaldes und Naturschutzgebietes La Macarena", and the "Netzwerk Spiel/Kultur" at the Prenzlauer Berg.  
     216 
     217 
     218The covering clay stones were made out of three metric tons of white and brown clay, formed by children of about 50 institutions like school classes and kindergardens of the closer region. The stones were burned and installed in the summer of 1995. Partly they are constructed out of different materials, partly especially formed or ornamented. Six detail images are showing some examples: (White near Red - MC?, Smiley with Heart Eyes, Sun-Moon-Star, Red Broken and Patterned, Rain pits and Stone Hearts in Clay, Red near White - Clay Fish and Sunshine over the Sea).  
     219 
     220In September 1995 the sundial was completed. It was called "living sundial" because it was planned to replace the clay stones regulary when they are destroyed and to add some green to the outside wall of the clock. In December 1995 the clock got a special price of the local environmental administration.</p> 
     221<p><img src="http://www.surveyor.in-berlin.de/sundials/imgs/Mauerpark-Detail02.jpg">.<img src="http://www.surveyor.in-berlin.de/sundials/imgs/Mauerpark-Detail06.jpg"></p> 
     222 
     223 
     224<p>In September 1995 the sundial was completed. It was called "living sundial" because it was planned to replace the clay stones regulary when they are destroyed and to add some green to the outside wall of the clock. In December 1995 the clock got a special price of the local environmental administration.</p> 
     225<p><img src="http://www.surveyor.in-berlin.de/sundials/imgs/Mauerpark-SD02.5.jpg"></p> 
     226 
     227<p>This sundial was deconstructed at the end of 2002 or at the beginning of 2003:</p> 
     228<p><img src="http://www.surveyor.in-berlin.de/sundials/imgs/Mauerpark-SD03.5.jpg"></p> 
     229 
     230<p>Image source and infos:<a href="http://www.surveyor.in-berlin.de/sundials/Falkplatz-e.html">www.surveyor.in-berlin.de</a></p>]]></description> 
     231                <LookAt> 
     232                    <longitude>13.40239121468946</longitude> 
     233                    <latitude>52.54640622802566</latitude> 
     234                    <altitude>0</altitude> 
     235                    <range>55.75497205265645</range> 
     236                    <tilt>1.489511345854323e-009</tilt> 
     237                    <heading>2.6367660621925e-005</heading> 
     238                </LookAt> 
     239                <styleUrl>#msn_sunny_copy69</styleUrl> 
     240                <Point> 
     241                    <coordinates>13.40233774797299,52.54645010247089,0</coordinates> 
     242                </Point> 
     243            </Placemark> 
     244            <Placemark> 
     245                <name>Sundial, Halde Schwerin, Castrop-Rauxel, Germany</name> 
     246                <description><![CDATA[<p>Thanks to <b>htd42</b></p> 
     247<p><img src="http://www.ruhrgebiet.de/cgi-bin/imp?freizeit/sehenswuerdigkeiten/bindata/castrop-rauxel_halde_schwerin_RVR.jpg&articleID=5824&padding=no&thumbnailtype=jpg&width=250"></p> 
     248 
     249http://www.ruhrgebiet.de/freizeit/sehenswuerdigkeiten/cr_halde_schwerin.shtml?print]]></description> 
     250                <LookAt> 
     251                    <longitude>7.337404407947669</longitude> 
     252                    <latitude>51.54597716006042</latitude> 
     253                    <altitude>0</altitude> 
     254                    <range>51.28632275218226</range> 
     255                    <tilt>2.512805793870883e-009</tilt> 
     256                    <heading>-6.529566789930303e-005</heading> 
     257                </LookAt> 
     258                <styleUrl>#msn_sunny_copy69</styleUrl> 
     259                <Point> 
     260                    <coordinates>7.337359256982781,51.54610609965799,0</coordinates> 
     261                </Point> 
     262            </Placemark> 
     263            <Placemark> 
     264                <name>Sundial, Lloydminster, Canada</name> 
     265                <description><![CDATA[This sundial has not the longest gnomon but I think it has the biggest clock face in the world. 
     266 
     267<p><img src="http://www.mts.net/~sabanski/sundial/images/sundials%20of%20the%20world/Canada/Lloydminster/BMASP.jpg"></p> 
     268<p>Image source and infos:<a href="http://www.mts.net/~sabanski/sundial/sotw_canada_lloydminster.htm">www.mts.net</a></p>]]></description> 
     269                <LookAt> 
     270                    <longitude>-110.0353754682919</longitude> 
     271                    <latitude>53.26386357821667</latitude> 
     272                    <altitude>0</altitude> 
     273                    <range>155.9861269181855</range> 
     274                    <tilt>0</tilt> 
     275                    <heading>-0.01432903343453666</heading> 
     276                </LookAt> 
     277                <styleUrl>#msn_sunny_copy69</styleUrl> 
     278                <Point> 
     279                    <coordinates>-110.0355256583979,53.26413794825379,0</coordinates> 
     280                </Point> 
     281            </Placemark> 
     282            <Placemark> 
     283                <name>Giant Lady&apos;s Leg Sundial, Roselawn, Indiana, USA</name> 
     284                <description><![CDATA[<p>The Sun Aura Nudist Resort opened in 1933. Back then it was called Club Zoro and its founder was Alois Knapp, a Chicago lawyer, German Nacktkulturist, editor of Sunshine and Health magazine, and "the father of nudism in America." </p> 
     285 
     286<p><img src="http://www.roadsideamerica.com/attract/images/in/INLAKsundialleg4_0716.jpg"></p> 
     287 
     288<p>The club eventually passed into the hands of Dale and Mary Drost. Their son, Dick, had big ideas: he renamed the place Naked City, made it the home of the Ms. Nude Teeny Bopper Contest and the "Erin Go Bra-less" Dance on St. Patrick's Day, and had built the giant lady's leg sundial, 63 feet long and properly positioned to tell time -- a useful feature for wristwatchless nudists. </p> 
     289 
     290<p>Naked City closed in 1986 when Dick was run out of Indiana on child molestation charges, but the leg remains and so does the resort, now under new management. The circular main building with the mirror gold windows is a combination office-sauna-restaurant. </p> 
     291 
     292<p>The guy who paints the leg told us that Sun Aura is a "clothing optional" camp -- in other words, you don't have to get nude to take a picture of the big lady's leg. But for those who do choose to get into the spirit of things, a helpful sign on the exit road reads, "Stop. You Must Be Dressed Beyond This Point."</p> 
     293 
     294<p><a href="http://www.roadsideamerica.com/sights/sightstory.php?tip_AttrId=%3D11825">Roadside America</a></p>]]></description> 
     295                <LookAt> 
     296                    <longitude>-87.32599841452155</longitude> 
     297                    <latitude>41.14248697221019</latitude> 
     298                    <altitude>0</altitude> 
     299                    <range>40.06529731982877</range> 
     300                    <tilt>0</tilt> 
     301                    <heading>-108.7495178792767</heading> 
     302                </LookAt> 
     303                <styleUrl>#msn_sunny_copy69</styleUrl> 
     304                <Point> 
     305                    <coordinates>-87.32608203713804,41.14242622349031,0</coordinates> 
     306                </Point> 
     307            </Placemark> 
     308            <Placemark> 
     309                <name>Sundial, Ingleside, San Francisco, USA</name> 
     310                <description><![CDATA[<p>Thanks to <b>CostaPacific</b></p> 
     311 
     312Most people in San Francsco have no idea that their city is host to the world's second largest sundial. It was built in 1913 as a gimic to attract people to a new housing development that was built arround the configuration of the old Ingleside Race Track. 
     313 
     314<p><img src="http://p.vtourist.com/2174717-Architecture-San_Francisco.jpg"></p> 
     315<p>Image source:<a href="www.virtualtourist.com"></a>]]></description> 
     316                <LookAt> 
     317                    <longitude>-122.4687521474299</longitude> 
     318                    <latitude>37.72475779376939</latitude> 
     319                    <altitude>0</altitude> 
     320                    <range>104.1096478961583</range> 
     321                    <tilt>0</tilt> 
     322                    <heading>-6.694029629862418e-005</heading> 
     323                    <altitudeMode>relativeToGround</altitudeMode> 
     324                </LookAt> 
     325                <styleUrl>#msn_sunny_copy69</styleUrl> 
     326                <Point> 
     327                    <coordinates>-122.4687727980979,37.72497790751523,59.97947112427937</coordinates> 
     328                </Point> 
     329            </Placemark> 
     330            <Placemark> 
     331                <name>Sundial Bridge</name> 
     332                <description>Located in Redding, CA.  Opened in 2004 this bridge actually acts as a sundial.  The time can be read in a garden on the North side of the bridge. 
     333 
     334http://www.turtlebay.org/sundial/sundial.shtml</description> 
     335                <LookAt> 
     336                    <longitude>-122.3775376532067</longitude> 
     337                    <latitude>40.59329504591046</latitude> 
     338                    <altitude>0</altitude> 
     339                    <range>160.1654912126178</range> 
     340                    <tilt>7.884938307004504e-010</tilt> 
     341                    <heading>0.008470312235033726</heading> 
     342                </LookAt> 
     343                <styleUrl>#msn_sunny_copy69</styleUrl> 
     344                <Point> 
     345                    <coordinates>-122.3777030796087,40.59376952663914,0</coordinates> 
     346                </Point> 
     347            </Placemark> 
     348            <Placemark> 
     349                <name>Sundial, Jaipur,India</name> 
     350                <description><![CDATA[Thanks to <b>Villaman</b> 
     351 
     352<p align="center"><table width=400><tr><td><b><br>Jaipur Observatory Sundial</b><br><br> 
     353</td> 
     354</tr> 
     355<tr> 
     356<td> 
     357<p align="justify"> Walk through these doors and up the stairs to begin your journey along a line from Jaipur, India toward the North Celestial Pole. Such cosmic alignments abound in marvelous Indian observatories where the architecture itself allows astronomical measurements. The structures were built in Jaipur and other cities in the eighteenth century by the Maharaja Jai Singh II (1686-1743). Rising about 90 feet high, this stairway actually forms a shadow caster or gnomon, part of what is still perhaps the largest sundial on planet Earth. Testaments to Jai Singh II's passion for astronomy, the design and large scale of his observatories' structures still provide impressively accurate measurements of shadows and sightings of celestial angles.  
     358<p align="justify"><center><b>Jaipur Observatory Sundial<br><img src="http://apod.nasa.gov/apod/image/0312/02mantar_feresten.jpg" width=300></b></center></p> 
     359<p align="justify">More <a href="http://apod.nasa.gov/apod/ap031206.html">here.</a> 
     360 
     361</td> 
     362</tr> 
     363</table> 
     364<font color="white">]]></description> 
     365                <LookAt> 
     366                    <longitude>75.82482649881683</longitude> 
     367                    <latitude>26.924766672173</latitude> 
     368                    <altitude>0</altitude> 
     369                    <range>164.397137416247</range> 
     370                    <tilt>0</tilt> 
     371                    <heading>-0.02454798212483729</heading> 
     372                    <altitudeMode>relativeToGround</altitudeMode> 
     373                </LookAt> 
     374                <styleUrl>#msn_sunny_copy69</styleUrl> 
     375                <Point> 
     376                    <coordinates>75.82474437483685,26.92504292845888,0</coordinates> 
     377                </Point> 
     378            </Placemark> 
     379            <Placemark> 
     380                <name>Sundial, Schothorstpark, Amersfoort, Netherlands</name> 
     381                <description><![CDATA[<p>A large sundial in the Schothorstpark in Amersfoort. 
     382Thanks to <b>Acadvice</b>]]></description> 
     383                <LookAt> 
     384                    <longitude>5.385083481782106</longitude> 
     385                    <latitude>52.17868238866643</latitude> 
     386                    <altitude>0</altitude> 
     387                    <range>49.70911801163624</range> 
     388                    <tilt>5.249316070079438e-010</tilt> 
     389                    <heading>6.699999294207586e-006</heading> 
     390                    <altitudeMode>relativeToGround</altitudeMode> 
     391                </LookAt> 
     392                <styleUrl>#msn_sunny_copy69</styleUrl> 
     393                <Point> 
     394                    <coordinates>5.385063337537176,52.17873082332495,0</coordinates> 
     395                </Point> 
     396            </Placemark> 
     397            <Placemark> 
     398                <name>Sundial, Jardin de Reuilly, Paris</name> 
     399                <description><![CDATA[A huge horizontal sundial in Paris. 
     400<p><img src="http://perso.orange.fr/cadrans.solaires/cadrans/images/reuilly1-500.jpg" width="400"  hight="250"></p> 
     401 
     402<p><img src="http://perso.orange.fr/cadrans.solaires/cadrans/images/reuilly2-500.jpg" width="360"  hight="250"></p> 
     403Image source:<a href="http://perso.orange.fr/cadrans.solaires/cadrans/originaux-paris.html">http://perso.orange.fr</a></p>]]></description> 
     404                <LookAt> 
     405                    <longitude>2.387204592843604</longitude> 
     406                    <latitude>48.84242901629369</latitude> 
     407                    <altitude>0</altitude> 
     408                    <range>50.11592463998582</range> 
     409                    <tilt>8.113900329668256e-010</tilt> 
     410                    <heading>-0.001210217218456717</heading> 
     411                    <altitudeMode>relativeToGround</altitudeMode> 
     412                </LookAt> 
     413                <styleUrl>#msn_sunny_copy69</styleUrl> 
     414                <Point> 
     415                    <coordinates>2.38716774037826,48.84252766103683,0</coordinates> 
     416                </Point> 
     417            </Placemark> 
     418            <Placemark> 
     419                <name>Sundial, Stockgrove, Soulbury, Buckinghamshire, UK</name> 
     420                <description><![CDATA[<p>thanks to <b>houdinia</b></p> 
     421Sundial with analemmatic clock face. 
     422<p><img src="http://www.greensandtrust.org/images/newImages/stockStrip1.jpg"></p>]]></description> 
     423                <LookAt> 
     424                    <longitude>-0.666503881371199</longitude> 
     425                    <latitude>51.95548351688392</latitude> 
     426                    <altitude>0</altitude> 
     427                    <range>55.27920580004575</range> 
     428                    <tilt>6.264058771241075e-010</tilt> 
     429                    <heading>0.06911766261471311</heading> 
     430                    <altitudeMode>relativeToGround</altitudeMode> 
     431                </LookAt> 
     432                <styleUrl>#msn_sunny_copy69</styleUrl> 
     433                <Point> 
     434                    <coordinates>-0.6665014664411046,51.95551857959676,0</coordinates> 
     435                </Point> 
     436            </Placemark> 
     437            <Placemark> 
     438                <name>Sundial, Halde Hoheward, Germany</name> 
     439                <description><![CDATA[<p>The Obelisk – The Sundial</p> 
     440 
     441<p>The seeming movement of the sun in the sky, resulting in the discrimination between day and night, was one of the earliest observations of nature performed by men. It enables us to experience the phenomenon “time” with our own senses. The first examples for telling the time with the help of the sun or its shadow date back to the Ancient World. The are numerous archetypes for sundials built inmany different styles, using different techniques.</p> 
     442 
     443<p>The archetype for the horizontal sundial on top of the slagheap Hoheward is the sundial of the Roman Emperor Augustus on the Campus Martius in Rome.</p> 
     444(It is unknown, whether this ancient obelisk was part of a complete sun dial with hour and declination lines on the morning and afternoon side or whether only a meridian line existed to measure the elevation of the sun in upper culmination. The today's scientific knowledge indicates the existence of a meridian.) The observation of the Obelisk's shadow on the sundial enables the observer to easily determine date and time. Apart from “time” one can also experience the laws of celestial mechanics. Men encounter themselves in relation to the cosmos.</p> 
     445 
     446<p>Representing the first step in the realisation of the Astronomical Theme Park the Obelisk was opened on May 17th, 2005. It is located on the already completed south-eastern plateau of the slagheap at a height of 140 m above sea level. The shadowed area is 62 m in diameter.</p> 
     447 
     448 
     449 
     450<p><img src="http://www.horizontastronomie.de/bilder/ansicht-obelisk2.jpg"></p> 
     451This picture shows the Obelisk after the end of the assembly on the day of the opening. Shortly before it was put on top of the readily prepared pedestal by a helicopter and then bolted.  
     452 
     453<p><img src="http://www.horizontastronomie.de/bilder/o2.jpg" width="300" hight="360"></p> 
     454 
     455<p><a href="http://www.horizontastronomie.de/eindex.htm">http://www.horizontastronomie.de</a></p> 
     456 
     457 
     458 
     459<p>http://de.wikipedia.org/wiki/Halde_Hoheward#Sonnenuhr_mit_Obelisk</p> 
     460 
     461<p>http://www.horizontastronomie.de/animationen.htm</p>]]></description> 
     462                <LookAt> 
     463                    <longitude>7.170033145228383</longitude> 
     464                    <latitude>51.56646738931531</latitude> 
     465                    <altitude>0</altitude> 
     466                    <range>96.7791497847863</range> 
     467                    <tilt>4.155528307086707e-010</tilt> 
     468                    <heading>0.006376147752644328</heading> 
     469                    <altitudeMode>relativeToGround</altitudeMode> 
     470                </LookAt> 
     471                <styleUrl>#msn_sunny_copy69</styleUrl> 
     472                <Point> 
     473                    <coordinates>7.169892708740022,51.56683509795316,0</coordinates> 
     474                </Point> 
     475            </Placemark> 
     476            <Placemark> 
     477                <name>Sundial, Fachhochschule (FH) Bielefeld</name> 
     478                <description><![CDATA[A sundial with analemmatic layout.  
     479<p><img src="http://www.fh-bielefeld.de/ezimagecatalogue/catalogue/variations/4651-400x500.jpg"></p> 
     480http://www.fh-bielefeld.de/article/fh/4412/1/505?NavItemID=0&NavCatID=162]]></description> 
     481                <LookAt> 
     482                    <longitude>8.555263115842216</longitude> 
     483                    <latitude>52.02672953436973</latitude> 
     484                    <altitude>0</altitude> 
     485                    <range>50.10364671714684</range> 
     486                    <tilt>0</tilt> 
     487                    <heading>0.001255164290936946</heading> 
     488                    <altitudeMode>relativeToGround</altitudeMode> 
     489                </LookAt> 
     490                <styleUrl>#msn_sunny_copy69</styleUrl> 
     491                <Point> 
     492                    <coordinates>8.555215193531964,52.02681111856448,0</coordinates> 
     493                </Point> 
     494            </Placemark> 
     495            <Placemark> 
     496                <name>Sundial, Sun City, Arizona</name> 
     497                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/008_az_suncity.jpg"></p> 
     498 
     499<p><img src="http://www.sundials.org/registry/regphotos/008_az_suncity_2.jpg"></p>]]></description> 
     500                <LookAt> 
     501                    <longitude>-112.2739996808105</longitude> 
     502                    <latitude>33.61902729376313</latitude> 
     503                    <altitude>0</altitude> 
     504                    <range>44.66059102278575</range> 
     505                    <tilt>0</tilt> 
     506                    <heading>0.0001994953180518285</heading> 
     507                    <altitudeMode>relativeToGround</altitudeMode> 
     508                </LookAt> 
     509                <styleUrl>#msn_sunny_copy69</styleUrl> 
     510                <Point> 
     511                    <coordinates>-112.2740228273864,33.61913038777643,0</coordinates> 
     512                </Point> 
     513            </Placemark> 
     514            <Placemark> 
     515                <name>Sundial, Georgina Blach Intermediate School, Los Altos, CA</name> 
     516                <description><![CDATA[A corner of a roof used as sundial. 
     517<p><img src="http://www.sundials.org/registry/regphotos/498_ca_losaltos_blach.jpg"></p>]]></description> 
     518                <LookAt> 
     519                    <longitude>-122.083063541274</longitude> 
     520                    <latitude>37.36394994353518</latitude> 
     521                    <altitude>0</altitude> 
     522                    <range>99.46493929648614</range> 
     523                    <tilt>0</tilt> 
     524                    <heading>-6.524992683547596e-005</heading> 
     525                    <altitudeMode>relativeToGround</altitudeMode> 
     526                </LookAt> 
     527                <styleUrl>#msn_sunny_copy69</styleUrl> 
     528                <Point> 
     529                    <coordinates>-122.0831077334675,37.3641379192763,0</coordinates> 
     530                </Point> 
     531            </Placemark> 
     532            <Placemark> 
     533                <name>Sundial, Hilltop Park, San Francisco</name> 
     534                <description><![CDATA[A giant sundial 70 feet in diameter with a bright yellow painted steel gnomon 78 feet long. The dial has a cement base and was designed to be used as the stage for a surrounding amphitheater. 
     535<p><img src="http://www.sundials.org/registry/regphotos/419_ca_sanf_hunters_ridge.jpg"></p>]]></description> 
     536                <LookAt> 
     537                    <longitude>-122.3837414260284</longitude> 
     538                    <latitude>37.73308769461563</latitude> 
     539                    <altitude>0</altitude> 
     540                    <range>76.96447255875415</range> 
     541                    <tilt>0</tilt> 
     542                    <heading>-0.0001251047167258125</heading> 
     543                    <altitudeMode>relativeToGround</altitudeMode> 
     544                </LookAt> 
     545                <styleUrl>#msn_sunny_copy69</styleUrl> 
     546                <Point> 
     547                    <coordinates>-122.3837885185873,37.73313852750733,0</coordinates> 
     548                </Point> 
     549            </Placemark> 
     550            <Placemark> 
     551                <name>Sundial, Berlin-Weißensee</name> 
     552                <description><![CDATA[A nice sundial made of flowers. 
     553<p><img src="http://www.be.schule.de/schulen/wfs/pages/sundials/Blumenuhr,Weissensee.gif"></p> 
     554 
     555http://www.be.schule.de/schulen/wfs/pages/sundials/Weissensee.html]]></description> 
     556                <LookAt> 
     557                    <longitude>13.46637059089964</longitude> 
     558                    <latitude>52.55408525446345</latitude> 
     559                    <altitude>0</altitude> 
     560                    <range>35.24186259647233</range> 
     561                    <tilt>0</tilt> 
     562                    <heading>-0.002133411261797274</heading> 
     563                    <altitudeMode>relativeToGround</altitudeMode> 
     564                </LookAt> 
     565                <styleUrl>#msn_sunny_copy69</styleUrl> 
     566                <Point> 
     567                    <coordinates>13.46637589519183,52.55412143657096,0</coordinates> 
     568                </Point> 
     569            </Placemark> 
     570            <Placemark> 
     571                <name>Sundial, Olbers-Planetarium, Bremen</name> 
     572                <description><![CDATA[This is an armillary sphere sundial.  
     573 
     574<p><img src="http://planetarium.hs-bremen.de/bremen/pics/suhs.jpg"></p>]]></description> 
     575                <LookAt> 
     576                    <longitude>8.806980778676786</longitude> 
     577                    <latitude>53.06988134466393</latitude> 
     578                    <altitude>0</altitude> 
     579                    <range>24.09705977000565</range> 
     580                    <tilt>0</tilt> 
     581                    <heading>-0.001876272046377585</heading> 
     582                    <altitudeMode>relativeToGround</altitudeMode> 
     583                </LookAt> 
     584                <styleUrl>#msn_sunny_copy69</styleUrl> 
     585                <Point> 
     586                    <coordinates>8.806963468445417,53.0698959991562,0</coordinates> 
     587                </Point> 
     588            </Placemark> 
     589            <Placemark> 
     590                <name>Sundial, Westbroekpark, Denn Haag</name> 
     591                <description><![CDATA[This sundial is located at the Rosarium in the Westbroekpark, Denn Haag. 
     592<p><img src="http://www.denhaag.nl/Pics/dsb/Ststr/westbroekpark/rozenconcours45/rozenbedden-met-zonnewijzer.jpg"></p>]]></description> 
     593                <LookAt> 
     594                    <longitude>4.290891177932192</longitude> 
     595                    <latitude>52.10450647693549</latitude> 
     596                    <altitude>0</altitude> 
     597                    <range>20.57779559985518</range> 
     598                    <tilt>0</tilt> 
     599                    <heading>-0.8669355345663358</heading> 
     600                    <altitudeMode>relativeToGround</altitudeMode> 
     601                </LookAt> 
     602                <styleUrl>#msn_sunny_copy69</styleUrl> 
     603                <Point> 
     604                    <coordinates>4.290865552422943,52.10453275113748,0</coordinates> 
     605                </Point> 
     606            </Placemark> 
     607            <Placemark> 
     608                <name>Sundial, Amersfoort, Netherlands</name> 
     609                <description><![CDATA[In the arrow are 2 digital displays, one for civil time and one for local suntime. 
     610<p><img src="http://sundials.org/links/local/sunpointer/sunpointer.jpg"></p>]]></description> 
     611                <LookAt> 
     612                    <longitude>5.374167244217593</longitude> 
     613                    <latitude>52.15310253836927</latitude> 
     614                    <altitude>0</altitude> 
     615                    <range>31.45592479376158</range> 
     616                    <tilt>1.426589610824431e-009</tilt> 
     617                    <heading>-0.01164696084898205</heading> 
     618                    <altitudeMode>relativeToGround</altitudeMode> 
     619                </LookAt> 
     620                <styleUrl>#msn_sunny_copy69</styleUrl> 
     621                <Point> 
     622                    <coordinates>5.374145665653813,52.15310809583514,0</coordinates> 
     623                </Point> 
     624            </Placemark> 
     625            <Placemark> 
     626                <name>Sundial, Botanical Gardens, Sydney, Australia</name> 
     627                <description><![CDATA[This is an armillary sphere sundial. 
     628 
     629<p><img src="http://www.sundials.co.uk/PC090189.jpg"></p> 
     630 
     631<p><img src="http://www.sundials.co.uk/PC090193.jpg"></p>]]></description> 
     632                <LookAt> 
     633                    <longitude>151.2154952669206</longitude> 
     634                    <latitude>-33.86399908828604</latitude> 
     635                    <altitude>0</altitude> 
     636                    <range>16.43666728184123</range> 
     637                    <tilt>8.675342058213797e-007</tilt> 
     638                    <heading>-0.002067228419448193</heading> 
     639                    <altitudeMode>relativeToGround</altitudeMode> 
     640                </LookAt> 
     641                <styleUrl>#msn_sunny_copy69</styleUrl> 
     642                <Point> 
     643                    <coordinates>151.2154882763944,-33.86398565287625,0</coordinates> 
     644                </Point> 
     645            </Placemark> 
     646            <Placemark> 
     647                <name>Team Disney Sundial, Walt Disney World, Florida</name> 
     648                <description><![CDATA[Thanks to <b>Oftencold</b> 
     649 
     650<p><img src="http://www.sunpath-designs.com/disdial2b.gif"></p> 
     651 
     652http://www.de-zonnewijzerkring.nl/zw-arch/eng-home-zw-07-02.htm]]></description> 
     653                <LookAt> 
     654                    <longitude>-81.52113085122878</longitude> 
     655                    <latitude>28.36541360352638</latitude> 
     656                    <altitude>0</altitude> 
     657                    <range>167.7307771712135</range> 
     658                    <tilt>1.015026730473625e-011</tilt> 
     659                    <heading>-0.006287852151169638</heading> 
     660                    <altitudeMode>relativeToGround</altitudeMode> 
     661                </LookAt> 
     662                <styleUrl>#msn_sunny_copy69</styleUrl> 
     663                <Point> 
     664                    <coordinates>-81.52134276012195,28.36559634883421,0</coordinates> 
     665                </Point> 
     666            </Placemark> 
     667            <Placemark> 
     668                <name>Sundial, Janskerkhof, Utrecht,  Netherlands</name> 
     669                <description><![CDATA[A sundial with analemmatic layout. 
     670<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/zw-06-06-01.jpg"></p> 
     671 
     672<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/zw-06-06-02.jpg"></p>]]></description> 
     673                <LookAt> 
     674                    <longitude>5.121095723583527</longitude> 
     675                    <latitude>52.09338586502101</latitude> 
     676                    <altitude>0</altitude> 
     677                    <range>24.25734051739648</range> 
     678                    <tilt>5.490226183683639e-010</tilt> 
     679                    <heading>-0.0007122606404517594</heading> 
     680                    <altitudeMode>relativeToGround</altitudeMode> 
     681                </LookAt> 
     682                <styleUrl>#msn_sunny_copy69</styleUrl> 
     683                <Point> 
     684                    <coordinates>5.121088800707085,52.09341776135472,0</coordinates> 
     685                </Point> 
     686            </Placemark> 
     687            <Placemark> 
     688                <name>Sundial, San Jose Rep Theater, San Jose, CA</name> 
     689                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/f96acd0f-6ad7-4b0a-a4a0-e52d14dd0015.jpg"></p> 
     690 
     691<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM247Q">www.groundspeak.com</a></p>]]></description> 
     692                <LookAt> 
     693                    <longitude>-121.8860266085782</longitude> 
     694                    <latitude>37.33361545835343</latitude> 
     695                    <altitude>0</altitude> 
     696                    <range>32.31958319185324</range> 
     697                    <tilt>0</tilt> 
     698                    <heading>1.418565866412994e-005</heading> 
     699                    <altitudeMode>relativeToGround</altitudeMode> 
     700                </LookAt> 
     701                <styleUrl>#msn_sunny_copy69</styleUrl> 
     702                <Point> 
     703                    <coordinates>-121.886064353331,37.33364018615777,0</coordinates> 
     704                </Point> 
     705            </Placemark> 
     706            <Placemark> 
     707                <name>Millennium Sundial, Greenwich Park, London</name> 
     708                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/7cdcd20c-806c-4cbd-8a9c-5de27ffb115d.jpg"></p> 
     709 
     710<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM273J">www.groundspeak.com</a></p>]]></description> 
     711                <LookAt> 
     712                    <longitude>-0.001522539653513039</longitude> 
     713                    <latitude>51.48136176862654</latitude> 
     714                    <altitude>0</altitude> 
     715                    <range>61.96314954770909</range> 
     716                    <tilt>2.850197260451716e-009</tilt> 
     717                    <heading>-0.002911073287638733</heading> 
     718                    <altitudeMode>relativeToGround</altitudeMode> 
     719                </LookAt> 
     720                <styleUrl>#msn_sunny_copy69</styleUrl> 
     721                <Point> 
     722                    <coordinates>-0.00156808979284051,51.48142700407306,0</coordinates> 
     723                </Point> 
     724            </Placemark> 
     725            <Placemark> 
     726                <name>Sundial, Veterans Park, Waukesha, WI</name> 
     727                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/0e6202ea-2b62-4491-9029-0983445e7cde.jpg"></p> 
     728 
     729<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM2DTR">www.groundspeak.com</a></p>]]></description> 
     730                <LookAt> 
     731                    <longitude>-88.2367572684424</longitude> 
     732                    <latitude>43.00995357504599</latitude> 
     733                    <altitude>0</altitude> 
     734                    <range>49.0879478099675</range> 
     735                    <tilt>0</tilt> 
     736                    <heading>-2.769547716555237e-005</heading> 
     737                    <altitudeMode>relativeToGround</altitudeMode> 
     738                </LookAt> 
     739                <styleUrl>#msn_sunny_copy69</styleUrl> 
     740                <Point> 
     741                    <coordinates>-88.23678272979073,43.01004377682637,0</coordinates> 
     742                </Point> 
     743            </Placemark> 
     744            <Placemark> 
     745                <name>Underground Sundial, Munich, Germany</name> 
     746                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/6f0381f1-4c18-4d9d-95e5-2f9a79842dbe.jpg"></p> 
     747 
     748<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM12X2">www.groundspeak.com</a></p>]]></description> 
     749                <LookAt> 
     750                    <longitude>11.70480163926041</longitude> 
     751                    <latitude>48.13338615699044</latitude> 
     752                    <altitude>0</altitude> 
     753                    <range>49.09160069235252</range> 
     754                    <tilt>7.359413992305611e-011</tilt> 
     755                    <heading>1.363313751616389e-005</heading> 
     756                    <altitudeMode>relativeToGround</altitudeMode> 
     757                </LookAt> 
     758                <styleUrl>#msn_sunny_copy69</styleUrl> 
     759                <Point> 
     760                    <coordinates>11.70474103166116,48.13350333174798,0</coordinates> 
     761                </Point> 
     762            </Placemark> 
     763            <Placemark> 
     764                <name>Sundial, Crown Hill cemetery, Indianapolis, Indiana, USA</name> 
     765                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/d62d27fc-f175-4ac8-aab3-7ba9748d6b82.jpg"></p> 
     766 
     767<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1310">www.groundspeak.com</a></p>]]></description> 
     768                <LookAt> 
     769                    <longitude>-86.17300915391851</longitude> 
     770                    <latitude>39.82668935299838</latitude> 
     771                    <altitude>0</altitude> 
     772                    <range>35.63730089613371</range> 
     773                    <tilt>0</tilt> 
     774                    <heading>2.616180723282867e-005</heading> 
     775                    <altitudeMode>relativeToGround</altitudeMode> 
     776                </LookAt> 
     777                <styleUrl>#msn_sunny_copy69</styleUrl> 
     778                <Point> 
     779                    <coordinates>-86.17304253331795,39.82668119645058,0</coordinates> 
     780                </Point> 
     781            </Placemark> 
     782            <Placemark> 
     783                <name>Sundial, Coppell, TX</name> 
     784                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/2bb0da85-d5db-44ed-ae70-d89f290ad7fd.jpg"></p> 
     785 
     786<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1WJG">www.groundspeak.com</a></p>]]></description> 
     787                <LookAt> 
     788                    <longitude>-97.02194975520763</longitude> 
     789                    <latitude>32.95633568822581</latitude> 
     790                    <altitude>0</altitude> 
     791                    <range>61.19896168864369</range> 
     792                    <tilt>0</tilt> 
     793                    <heading>1.826645706530163e-005</heading> 
     794                    <altitudeMode>relativeToGround</altitudeMode> 
     795                </LookAt> 
     796                <styleUrl>#msn_sunny_copy69</styleUrl> 
     797                <Point> 
     798                    <coordinates>-97.02199840401494,32.95643533824669,0</coordinates> 
     799                </Point> 
     800            </Placemark> 
     801        </Folder> 
     802        <Folder> 
     803            <name>Low Resolution</name> 
     804            <Placemark> 
     805                <name>Sundial, Kota Baru Parahyangan</name> 
     806                <description><![CDATA[Thanks to <b>voorburger</b>. 
     807<p><img src="http://www.thebiggestsundial.com/php/thebiggestsundial/images/Exhibits/13/03052007134130.gif"></p>]]></description> 
     808                <LookAt> 
     809                    <longitude>107.4940550739811</longitude> 
     810                    <latitude>-6.852038750176605</latitude> 
     811                    <altitude>0</altitude> 
     812                    <range>296.7282563680993</range> 
     813                    <tilt>2.08633946131246e-011</tilt> 
     814                    <heading>0.5509822616366601</heading> 
     815                    <altitudeMode>relativeToGround</altitudeMode> 
     816                </LookAt> 
     817                <styleUrl>#msn_sunny_copy70</styleUrl> 
     818                <Point> 
     819                    <coordinates>107.4939718861608,-6.851748821808833,0</coordinates> 
     820                </Point> 
     821            </Placemark> 
     822            <Placemark> 
     823                <name>Sundial, Pajala, Sweden</name> 
     824                <description><![CDATA[<p>The world's biggest sundial today is in the Torne Valley, north of the Arctic Circle. The Guinness Book of Records has put Pajala, northern Sweden, on the map, and its sundial - formed as a "round square". </p> 
     825<p><img src="http://www.pajala.se/mun/pajala/www.nsf/($all)/A43859111165E6F2C1256EE40021DDF3/$file/soltorg23.JPG"></p> 
     826<p>The sundial in Pajala, 38.33 m. in diameter, holds the world record, according to the Guinness Book of Records. The previous record was held by Disney World in Orlando, Florida, with 37.18 m. </p> 
     827 
     828<p>The sundial was inaugurated by the Swedish Minister of Labour Margareta Winberg in July 1996. Pajala is situated at 23.28 ° East, 67.21 ° North, which is 70 km north of the Arctic Circle, making a circular sundial possible. This is due to the fact that the Midnight Sun describes a complete circle over the horizon.  
     829 
     830<p>Its masts of dried fir form a unique spatiality around a circular "square". The site is especially used for local functions such as Pajala Fair, Romp Week and the Northern Lights Festival. </p> 
     831 
     832<p>The central square in Pajala, through its size and latitude, offered conditions for a sundial dedicated to the Midnight Sun. Architect Mats Winsa took his inspiration from the square in Siena, and for the sculptures in the park - astronomical instruments in India dating back to the 18th century. Naturally, it was a challenge to compete with the previous record from 1991 by the world-famous Japanese architect, Arata Isozaki. </p> 
     833 
     834<p>The sundial captures the sun's movement by allowing the shadow of the central gnomon to fall across the hour divisions of the surrounding posts. The gnomon, like the Earth's axis, points toward the Pole Star, which according to Finnish-Ugrian mythology (the region has Finnish roots) holds up the firmament. The "sun wheel" embedded in the ground here (forming a cross in the circle) is in fact a calendar. Water bubbles up from four sources corresponding to the four principal points of the compass. The water gathers in the central pond, which was designed with children in mind. </p> 
     835 
     836<p>For their survival, humans have followed the rhythm of the sun. The need to observe the changing seasons and days led to the early development of the sundial. Our lives today are characterised by obedience to mechanical and national time - inventions separate from true solar time. The sundial displays true solar time, which in Pajala is half-an-hour ahead of national time. </p> 
     837 
     838<p>The sundial in Pajala celebrates light, and acts as a reminder of its significance for all life by functioning as a biological clock in a world fettered by artificial time. The hormone rush in spring reminds us of our direct dependence on sunlight as living beings.</p> 
     839 
     840<p>Info and image source:<a href="http://www.pajala.se/mun/pajala/www.nsf/english/$first?open&mname=Menu%C2%A4menuID=2CAE%C2%A4start=1">www.pajala.se</a></p> 
     841 
     842<p><img src="http://holmers.com/Pajala/Pajala1_050709.jpg"></p> 
     843<p>Image source:<a href="http://holmers.com/Pajala/Pajala1_050709.jpg">http://holmers.com</a></p>]]></description> 
     844                <LookAt> 
     845                    <longitude>23.36723004664742</longitude> 
     846                    <latitude>67.21282676944374</latitude> 
     847                    <altitude>0</altitude> 
     848                    <range>124.9604027877409</range> 
     849                    <tilt>3.010594647959025e-010</tilt> 
     850                    <heading>-1.130925335798896</heading> 
     851                    <altitudeMode>relativeToGround</altitudeMode> 
     852                </LookAt> 
     853                <styleUrl>#msn_sunny_copy70</styleUrl> 
     854                <Point> 
     855                    <coordinates>23.36716252896882,67.21299216873888,0</coordinates> 
     856                </Point> 
     857            </Placemark> 
     858            <Placemark> 
     859                <name>Sundial, Tenerife, Spain</name> 
     860                <description><![CDATA[Reloj del sol 
     861 
     862<p><img src="http://members.aon.at/mbrandn6/media/fotos/landart/watchteneriffa/tentotal1.jpg"></p> 
     863 
     864<p><img src="http://members.aon.at/mbrandn6/media/fotos/landart/watchteneriffa/tennah.jpg"></p> 
     865 
     866<p><img src="http://members.aon.at/mbrandn6/media/fotos/landart/watchteneriffa/tentotal3.jpg"></p> 
     867 
     868<p><img src="http://members.aon.at/mbrandn6/media/fotos/landart/watchteneriffa/draft.jpg"></p> 
     869<p>Image source:<a href="http://members.aon.at/mbrandn6/pagesgerman/framesetg/framelandart.html">http://members.aon.at</a></p> 
     870 
     871<p><a href="http://www.teneriffa.panoshot.de/de/panorama-interaktiv/gernot-huber-stiftung-reloj-del-sol-223.html 
     872">Interactice picture</a></p>]]></description> 
     873                <LookAt> 
     874                    <longitude>-16.56926659562192</longitude> 
     875                    <latitude>28.08256590461729</latitude> 
     876                    <altitude>0</altitude> 
     877                    <range>88.29371157400612</range> 
     878                    <tilt>0</tilt> 
     879                    <heading>8.633540737161729e-005</heading> 
     880                    <altitudeMode>relativeToGround</altitudeMode> 
     881                </LookAt> 
     882                <styleUrl>#msn_sunny_copy70</styleUrl> 
     883                <Point> 
     884                    <coordinates>-16.5693071701084,28.08261960124695,0</coordinates> 
     885                </Point> 
     886            </Placemark> 
     887            <Placemark> 
     888                <name>Sundial, Perranporth, UK</name> 
     889                <description><![CDATA[The Millennium Sundial was designed by Stuart Thorn. It tells Cornish time which is 20 minutes ahead of GMT. 
     890<p><img src="http://www.cornwalls.co.uk/photos/data/media/2/perranporth_sundial.jpg" width="421" hight="280"></p>]]></description> 
     891                <LookAt> 
     892                    <longitude>-5.157517535037663</longitude> 
     893                    <latitude>50.34723421976403</latitude> 
     894                    <altitude>0</altitude> 
     895                    <range>65.69642310338585</range> 
     896                    <tilt>0</tilt> 
     897                    <heading>-0.01795551609583625</heading> 
     898                    <altitudeMode>relativeToGround</altitudeMode> 
     899                </LookAt> 
     900                <styleUrl>#msn_sunny_copy70</styleUrl> 
     901                <Point> 
     902                    <coordinates>-5.157537433789316,50.34733238709538,0</coordinates> 
     903                </Point> 
     904            </Placemark> 
     905            <Placemark> 
     906                <name>Sundial, Council Bluffs, Iowa, USA</name> 
     907                <description><![CDATA[Large sundial at Council Bluffs Public Library 
     908 
     909<p><img src="http://www.sunpath-designs.com/librarydial1b.jpg" width="400" hight="300"></p> 
     910<p><img src="http://www.sunpath-designs.com/librarydial2b.jpg" width="400" hight="300"></p> 
     911<p><img src="http://www.sunpath-designs.com/librarydial3b.jpg" width="400" hight="300"></p>]]></description> 
     912                <LookAt> 
     913                    <longitude>-95.84953495410247</longitude> 
     914                    <latitude>41.25887711431908</latitude> 
     915                    <altitude>0</altitude> 
     916                    <range>196.5752069699831</range> 
     917                    <tilt>2.583166383376495e-010</tilt> 
     918                    <heading>0.0002124063872384501</heading> 
     919                </LookAt> 
     920                <styleUrl>#msn_sunny_copy70</styleUrl> 
     921                <Point> 
     922                    <coordinates>-95.84981881431206,41.25888611306795,294.4878429401121</coordinates> 
     923                </Point> 
     924            </Placemark> 
     925            <Placemark> 
     926                <name>Sundial. Meckhofen, Leverkusen, Germany</name> 
     927                <description><![CDATA[<p><img src="http://www.leverkusen.de/stadtportrait/partnerstaedte/400pxPartnerstaedteSonnenuhr01.jpg"></p> 
     928<p>Image source:<a href="v">www.leverkusen.de</a></p> 
     929 
     930<p><img src="http://www.lev2000.de/guide/Archiv1.jpg/39/Sonnenuhr01.jpg"></p> 
     931 
     932<p><img src="http://www.lev2000.de/guide/Archiv1.jpg/39/Sonnenuhr02.jpg"></p> 
     933<p>Image source:<a href="http://www.lev2000.de/guide/Archiv1.jpg/39/Sonnenuhr02.jpg">www.lev2000.de</a></p>]]></description> 
     934                <LookAt> 
     935                    <longitude>7.083354426150351</longitude> 
     936                    <latitude>51.04845387008112</latitude> 
     937                    <altitude>0</altitude> 
     938                    <range>66.17616066250443</range> 
     939                    <tilt>9.735256695418331e-010</tilt> 
     940                    <heading>0.0006924896867520876</heading> 
     941                    <altitudeMode>relativeToGround</altitudeMode> 
     942                </LookAt> 
     943                <styleUrl>#msn_sunny_copy70</styleUrl> 
     944                <Point> 
     945                    <coordinates>7.083321386023442,51.04852440832129,0</coordinates> 
     946                </Point> 
     947            </Placemark> 
     948            <Placemark> 
     949                <name>Sundial,  Adler Planetarium, Chicago, USA</name> 
     950                <description><![CDATA[<p><img src="http://www.wherry.com/photos/2001-04-29-chicago/DSCN1221-m.jpg" width="500" hight="375"></p>]]></description> 
     951                <LookAt> 
     952                    <longitude>-87.60711153340705</longitude> 
     953                    <latitude>41.86674796371171</latitude> 
     954                    <altitude>0</altitude> 
     955                    <range>27.37440941953917</range> 
     956                    <tilt>0</tilt> 
     957                    <heading>0.008419825260544345</heading> 
     958                </LookAt> 
     959                <styleUrl>#msn_sunny_copy70</styleUrl> 
     960                <Point> 
     961                    <coordinates>-87.60710764637246,41.86681374132155,0</coordinates> 
     962                </Point> 
     963            </Placemark> 
     964            <Placemark> 
     965                <name>Rose Garden Sundial, Christchurch, New Zealand</name> 
     966                <description><![CDATA[<p>Thanks to <b>NormB</b></p> 
     967<a href="http://www.ccc.govt.nz/Parks/BotanicGardens/tour_gardens_central_rose_garden.asp">Rose Garden History</a> 
     968 
     969<p> 
     970<b>Photo - NormB 11th April 2006<br> 
     971<img src="http://img527.imageshack.us/img527/509/sundialig8.jpg" alt="Image Hosted by ImageShack.us" /><p> 
     972<b>Photo - NormB 11th April 2006<br> 
     973<img src="http://img527.imageshack.us/img527/786/sundialplaquefn9.jpg" alt="Image Hosted by ImageShack.us" />]]></description> 
     974                <LookAt> 
     975                    <longitude>172.621331272394</longitude> 
     976                    <latitude>-43.53038034442864</latitude> 
     977                    <altitude>0</altitude> 
     978                    <range>86.04933199573917</range> 
     979                    <tilt>0</tilt> 
     980                    <heading>1.801092527765711</heading> 
     981                </LookAt> 
     982                <styleUrl>#msn_sunny_copy70</styleUrl> 
     983                <Point> 
     984                    <coordinates>172.6213650004974,-43.53035465311722,0</coordinates> 
     985                </Point> 
     986            </Placemark> 
     987            <Placemark> 
     988                <name>Sundial, Natchez Park</name> 
     989                <description><![CDATA[<p>Thanks to <b>caroling</b></p> 
     990 
     991In Seaside, NW FL, USA on the Emerald Coast. Panoramic images and movies of a sundial and visions of Xtals (energy crystals) on the March equinox, 2006. See http://www.wholeo.net/Trips/Art/Web/TripsArt/Travel/Florida/borders/flBorders.htm]]></description> 
     992                <LookAt> 
     993                    <longitude>-86.14177717779702</longitude> 
     994                    <latitude>30.32184243688109</latitude> 
     995                    <altitude>0</altitude> 
     996                    <range>46.50596341362312</range> 
     997                    <tilt>9.523139707563741e-010</tilt> 
     998                    <heading>0.0925379903960088</heading> 
     999                </LookAt> 
     1000                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1001                <Point> 
     1002                    <altitudeMode>relativeToGround</altitudeMode> 
     1003                    <coordinates>-86.14183223138707,30.32193188899003,3</coordinates> 
     1004                </Point> 
     1005            </Placemark> 
     1006            <Placemark> 
     1007                <name>Sundial, Charlotte, North Carolina, USA</name> 
     1008                <description><![CDATA[<p>Thanks to <b>BrettHo</b></p> 
     1009On the roof of the International Trade Center is this gigantic sundial.]]></description> 
     1010                <LookAt> 
     1011                    <longitude>-80.84002590296151</longitude> 
     1012                    <latitude>35.22682691631484</latitude> 
     1013                    <altitude>0</altitude> 
     1014                    <range>73.21919569418378</range> 
     1015                    <tilt>0</tilt> 
     1016                    <heading>12.34188537748346</heading> 
     1017                </LookAt> 
     1018                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1019                <Point> 
     1020                    <coordinates>-80.84002447413604,35.22696160522812,0</coordinates> 
     1021                </Point> 
     1022            </Placemark> 
     1023            <Placemark> 
     1024                <name>KTPalmerSundial, Carefree, Arizona, USA</name> 
     1025                <description><![CDATA[Thanks to <b>seer</b>. 
     1026<p><img src="http://www.sundials.org/registry/regphotos/001_az_carefree_2.jpg"></p> 
     1027http://www.bigwaste.com/photos/az/sundial/]]></description> 
     1028                <LookAt> 
     1029                    <longitude>-111.9217799027029</longitude> 
     1030                    <latitude>33.8245907883639</latitude> 
     1031                    <altitude>0</altitude> 
     1032                    <range>119.8165563905356</range> 
     1033                    <tilt>2.774426682549449e-010</tilt> 
     1034                    <heading>-1.574999619300427e-005</heading> 
     1035                </LookAt> 
     1036                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1037                <Point> 
     1038                    <coordinates>-111.9218327194278,33.82468559440962,0</coordinates> 
     1039                </Point> 
     1040            </Placemark> 
     1041            <Placemark> 
     1042                <name>Sundial, University of Science and Technology, Hong Kong</name> 
     1043                <description><![CDATA[<p><img src="http://perso.orange.fr/cadrans.solaires/cadrans/images/Maes-hongkong.jpg"></p> 
     1044 
     1045<p>Image source:<a href="http://perso.orange.fr/cadrans.solaires/cadrans/originaux-monde.html">http://perso.orange.fr</a></p>]]></description> 
     1046                <LookAt> 
     1047                    <longitude>114.2630116779084</longitude> 
     1048                    <latitude>22.33749401387006</latitude> 
     1049                    <altitude>0</altitude> 
     1050                    <range>111.6162130745504</range> 
     1051                    <tilt>0</tilt> 
     1052                    <heading>0.0003913059632004609</heading> 
     1053                    <altitudeMode>relativeToGround</altitudeMode> 
     1054                </LookAt> 
     1055                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1056                <Point> 
     1057                    <coordinates>114.2629690669868,22.33764072332584,0</coordinates> 
     1058                </Point> 
     1059            </Placemark> 
     1060            <Placemark> 
     1061                <name>Sundial,  Pekin, Illinois</name> 
     1062                <description><![CDATA[<p><img src="http://www.pekin.net/sundial/sundial.jpg"></p> 
     1063<p>Image source:<a href="http://www.pekin.net/sundial/index.html">www.pekin.net</a></p> 
     1064 
     1065<p><img src="http://www.sundials.org/registry/regphotos/233_il_perkin_parkdial.jpg"></p>]]></description> 
     1066                <LookAt> 
     1067                    <longitude>-89.63076522889526</longitude> 
     1068                    <latitude>40.56267466732153</latitude> 
     1069                    <altitude>0</altitude> 
     1070                    <range>161.1716772997438</range> 
     1071                    <tilt>0</tilt> 
     1072                    <heading>0.009112399365723663</heading> 
     1073                    <altitudeMode>relativeToGround</altitudeMode> 
     1074                </LookAt> 
     1075                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1076                <Point> 
     1077                    <coordinates>-89.63089561079578,40.56281064339486,0</coordinates> 
     1078                </Point> 
     1079            </Placemark> 
     1080            <Placemark> 
     1081                <name>Sundial, Edinburg, Hidalgo, USA</name> 
     1082                <description><![CDATA[<p><img src="http://www.sunpath-designs.com/utdial2b.GIF" width="300" hight="400"></p> 
     1083 
     1084<p><img src="http://www.sunpath-designs.com/utdial1b.gif"width="400" hight="300"><7p>]]></description> 
     1085                <LookAt> 
     1086                    <longitude>-98.17095602857175</longitude> 
     1087                    <latitude>26.30618568257091</latitude> 
     1088                    <altitude>0</altitude> 
     1089                    <range>122.1950947751469</range> 
     1090                    <tilt>0</tilt> 
     1091                    <heading>-0.005400653570135644</heading> 
     1092                    <altitudeMode>relativeToGround</altitudeMode> 
     1093                </LookAt> 
     1094                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1095                <Point> 
     1096                    <coordinates>-98.17104492887813,26.30639237212602,0</coordinates> 
     1097                </Point> 
     1098            </Placemark> 
     1099            <Placemark> 
     1100                <name>Sundial, Keppel Henge,</name> 
     1101                <description><![CDATA[<p><img src="http://www.mts.net/~sabanski/sundial/images/sundials%20of%20the%20world/Canada/Keppel%20Henge/sundial1.jpg"></p> 
     1102<p>http://www.steveirvine.com/sundial.html</p> 
     1103 
     1104 
     1105http://www.mts.net/~sabanski/sundial/sotw_canada_keppel.htm]]></description> 
     1106                <LookAt> 
     1107                    <longitude>-80.94374423682251</longitude> 
     1108                    <latitude>44.79038599160477</latitude> 
     1109                    <altitude>0</altitude> 
     1110                    <range>164.0454159373261</range> 
     1111                    <tilt>0</tilt> 
     1112                    <heading>-0.007334046679263517</heading> 
     1113                    <altitudeMode>relativeToGround</altitudeMode> 
     1114                </LookAt> 
     1115                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1116                <Point> 
     1117                    <coordinates>-80.94383190841853,44.79038705635566,0</coordinates> 
     1118                </Point> 
     1119            </Placemark> 
     1120            <Placemark> 
     1121                <name>Sundial at Science North, Sudbury, Ontario</name> 
     1122                <description><![CDATA[<p><img src="http://www.mts.net/~sabanski/sundial/images/sundials%20of%20the%20world/Canada/Science%20North/celeste1.jpg"></p> 
     1123 
     1124<p><img src="http://www.mts.net/~sabanski/sundial/images/sundials%20of%20the%20world/Canada/Science%20North/celeste2.jpg"></p> 
     1125 
     1126<p><img src="http://www.mts.net/~sabanski/sundial/images/sundials%20of%20the%20world/Canada/Science%20North/celeste3.jpg"></p> 
     1127 
     1128http://www.mts.net/~sabanski/sundial/sotw_canada_sn.htm]]></description> 
     1129                <LookAt> 
     1130                    <longitude>-80.99582033913947</longitude> 
     1131                    <latitude>46.46976830028441</latitude> 
     1132                    <altitude>0</altitude> 
     1133                    <range>85.82915438648354</range> 
     1134                    <tilt>0</tilt> 
     1135                    <heading>0.0003317215281456315</heading> 
     1136                    <altitudeMode>relativeToGround</altitudeMode> 
     1137                </LookAt> 
     1138                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1139                <Point> 
     1140                    <coordinates>-80.99588716181201,46.46988111501548,0</coordinates> 
     1141                </Point> 
     1142            </Placemark> 
     1143            <Placemark> 
     1144                <name>Sundial, Amble, UK</name> 
     1145                <description><![CDATA[<p><img src="http://ourworld.compuserve.com/homepages/Patrick_Powers/Amble.jpg"></p> 
     1146http://ourworld.compuserve.com/homepages/Patrick_Powers/amble.htm]]></description> 
     1147                <LookAt> 
     1148                    <longitude>-1.581634687429885</longitude> 
     1149                    <latitude>55.33514811404725</latitude> 
     1150                    <altitude>0</altitude> 
     1151                    <range>62.55005662709024</range> 
     1152                    <tilt>8.224100904372228e-010</tilt> 
     1153                    <heading>-0.008198736253532122</heading> 
     1154                    <altitudeMode>relativeToGround</altitudeMode> 
     1155                </LookAt> 
     1156                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1157                <Point> 
     1158                    <coordinates>-1.581720999552488,55.3352025087941,0</coordinates> 
     1159                </Point> 
     1160            </Placemark> 
     1161            <Placemark> 
     1162                <name>Sundial, University of Maryland, College Park</name> 
     1163                <description><![CDATA[<p><img src="http://www.mts.net/~sabanski/sundial/images/sundials%20of%20the%20world/USA/Maryland/Univ%20of%20Maryland%20.jpg"></p> 
     1164http://www.mts.net/~sabanski/sundial/sotw_usa_mland.htm]]></description> 
     1165                <LookAt> 
     1166                    <longitude>-76.94256839624576</longitude> 
     1167                    <latitude>38.98603731470438</latitude> 
     1168                    <altitude>0</altitude> 
     1169                    <range>69.47353847793947</range> 
     1170                    <tilt>0</tilt> 
     1171                    <heading>-0.00947513273561203</heading> 
     1172                    <altitudeMode>relativeToGround</altitudeMode> 
     1173                </LookAt> 
     1174                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1175                <Point> 
     1176                    <coordinates>-76.94253686137193,38.98616316295006,0</coordinates> 
     1177                </Point> 
     1178            </Placemark> 
     1179            <Placemark> 
     1180                <name>Sundial, Fort San Felipe del Morro, Puerto Rico</name> 
     1181                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/564_cuba_habana_1.jpg"></p>]]></description> 
     1182                <LookAt> 
     1183                    <longitude>-66.11899284422442</longitude> 
     1184                    <latitude>18.46786530709565</latitude> 
     1185                    <altitude>0</altitude> 
     1186                    <range>122.9114928009769</range> 
     1187                    <tilt>0</tilt> 
     1188                    <heading>0.001639161983653822</heading> 
     1189                    <altitudeMode>relativeToGround</altitudeMode> 
     1190                </LookAt> 
     1191                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1192                <Point> 
     1193                    <coordinates>-66.11900470518663,18.4679529172629,0</coordinates> 
     1194                </Point> 
     1195            </Placemark> 
     1196            <Placemark> 
     1197                <name>Sundial, Rose Garden, Phoenix</name> 
     1198                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/007_az_phoenix.jpg"></p>]]></description> 
     1199                <LookAt> 
     1200                    <longitude>-112.0911976535298</longitude> 
     1201                    <latitude>33.47007786030556</latitude> 
     1202                    <altitude>0</altitude> 
     1203                    <range>26.72933602203598</range> 
     1204                    <tilt>4.053298886062559e-011</tilt> 
     1205                    <heading>0.0001093808645832187</heading> 
     1206                    <altitudeMode>relativeToGround</altitudeMode> 
     1207                </LookAt> 
     1208                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1209                <Point> 
     1210                    <coordinates>-112.0912131593616,33.4701136927338,0</coordinates> 
     1211                </Point> 
     1212            </Placemark> 
     1213            <Placemark> 
     1214                <name>Sundial, Tucson, Arizona</name> 
     1215                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/012_az_tucson_la_pilita.jpg"></p>]]></description> 
     1216                <LookAt> 
     1217                    <longitude>-110.9748374101104</longitude> 
     1218                    <latitude>32.21591986778585</latitude> 
     1219                    <altitude>0</altitude> 
     1220                    <range>42.12321141209996</range> 
     1221                    <tilt>0</tilt> 
     1222                    <heading>-0.0002919115031976927</heading> 
     1223                    <altitudeMode>relativeToGround</altitudeMode> 
     1224                </LookAt> 
     1225                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1226                <Point> 
     1227                    <coordinates>-110.9748562940359,32.21593667064053,0</coordinates> 
     1228                </Point> 
     1229            </Placemark> 
     1230            <Placemark> 
     1231                <name>Sundial, Flandrau Planetarium, Tucson</name> 
     1232                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/013_az_tuscon_flandrau_planetarium.jpg"></p>]]></description> 
     1233                <LookAt> 
     1234                    <longitude>-110.9477979774635</longitude> 
     1235                    <latitude>32.23224398378896</latitude> 
     1236                    <altitude>0</altitude> 
     1237                    <range>33.29181342845133</range> 
     1238                    <tilt>3.6608792363658e-017</tilt> 
     1239                    <heading>0.0001605580448802178</heading> 
     1240                    <altitudeMode>relativeToGround</altitudeMode> 
     1241                </LookAt> 
     1242                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1243                <Point> 
     1244                    <coordinates>-110.9478231994691,32.23228861367718,0</coordinates> 
     1245                </Point> 
     1246            </Placemark> 
     1247            <Placemark> 
     1248                <name>Sundial, Vietnam Veterans Memorial, Kentucky</name> 
     1249                <description><![CDATA[<p><img src="http://www.vietvet.org/images/vn/billm/rags9.gif"></p> 
     1250 
     1251http://www.vietvet.org/kymem.htm]]></description> 
     1252                <LookAt> 
     1253                    <longitude>-84.8640348419774</longitude> 
     1254                    <latitude>38.17725413584271</latitude> 
     1255                    <altitude>0</altitude> 
     1256                    <range>136.9757698325458</range> 
     1257                    <tilt>1.322889725758878e-010</tilt> 
     1258                    <heading>-0.0003615314930558497</heading> 
     1259                    <altitudeMode>relativeToGround</altitudeMode> 
     1260                </LookAt> 
     1261                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1262                <Point> 
     1263                    <coordinates>-84.86405079639164,38.17749508752453,0</coordinates> 
     1264                </Point> 
     1265            </Placemark> 
     1266            <Placemark> 
     1267                <name>Sundial, Claremont, California</name> 
     1268                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/505_ca_claremont_1.jpg"></p> 
     1269 
     1270<p><img src="http://www.sundials.org/registry/regphotos/505_ca_claremont_2.jpg"></p>]]></description> 
     1271                <LookAt> 
     1272                    <longitude>-117.7288129576152</longitude> 
     1273                    <latitude>34.0992297660836</latitude> 
     1274                    <altitude>0</altitude> 
     1275                    <range>60.73786036422235</range> 
     1276                    <tilt>1.321942869740197e-009</tilt> 
     1277                    <heading>-0.002677989156069468</heading> 
     1278                    <altitudeMode>relativeToGround</altitudeMode> 
     1279                </LookAt> 
     1280                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1281                <Point> 
     1282                    <coordinates>-117.7288254316814,34.09928418001653,0</coordinates> 
     1283                </Point> 
     1284            </Placemark> 
     1285            <Placemark> 
     1286                <name>Sundial, Hoogezand, Netherlands</name> 
     1287                <description><![CDATA[The sundial in the Gorechtpark  was built in 1994 by the artist  Chris Verbeek. 
     1288<p><img src="http://www.hoogezand-sappemeer.nl/plaat.php?fileid=3054"></p> 
     1289 
     1290http://www.hoogezand-sappemeer.nl/index.php?simaction=content&mediumid=10&pagid=335&fontsize=10&stukid=2597]]></description> 
     1291                <LookAt> 
     1292                    <longitude>6.73589462010654</longitude> 
     1293                    <latitude>53.15594584104552</latitude> 
     1294                    <altitude>0</altitude> 
     1295                    <range>139.6528910743265</range> 
     1296                    <tilt>1.45482979338997e-010</tilt> 
     1297                    <heading>0.002950231733866508</heading> 
     1298                    <altitudeMode>relativeToGround</altitudeMode> 
     1299                </LookAt> 
     1300                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1301                <Point> 
     1302                    <coordinates>6.73578802230557,53.15607461082266,0</coordinates> 
     1303                </Point> 
     1304            </Placemark> 
     1305            <Placemark> 
     1306                <name>Sundial, Hoogeveen, Netherlands</name> 
     1307                <description><![CDATA[Sundial at Unigarant, Hoogeveen. 
     1308<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/werk-07-05-01.jpg"></p>]]></description> 
     1309                <LookAt> 
     1310                    <longitude>6.469908327982116</longitude> 
     1311                    <latitude>52.72012840714818</latitude> 
     1312                    <altitude>0</altitude> 
     1313                    <range>73.67703044709106</range> 
     1314                    <tilt>4.200981642085038e-012</tilt> 
     1315                    <heading>-0.0001367978398152192</heading> 
     1316                    <altitudeMode>relativeToGround</altitudeMode> 
     1317                </LookAt> 
     1318                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1319                <Point> 
     1320                    <coordinates>6.469803362243752,52.72017851542101,0</coordinates> 
     1321                </Point> 
     1322            </Placemark> 
     1323            <Placemark> 
     1324                <name>Sundial, Bicentennial Park, Homebush, Australia</name> 
     1325                <description><![CDATA[This 'walkthrough' sundial with a gnomon 8m long is well worth a visit and is near to the Olympic Park site of the 2000 Olympics. Hour lines and declination lines are set as brass strips in a concrete base dialface. 
     1326<p><img src="http://www.rnzih.org.nz/images/sun13.jpg"></p>]]></description> 
     1327                <LookAt> 
     1328                    <longitude>151.0785472180646</longitude> 
     1329                    <latitude>-33.84641177017981</latitude> 
     1330                    <altitude>0</altitude> 
     1331                    <range>163.2808310648841</range> 
     1332                    <tilt>1.201655085829064e-011</tilt> 
     1333                    <heading>4.265000695512084e-006</heading> 
     1334                    <altitudeMode>relativeToGround</altitudeMode> 
     1335                </LookAt> 
     1336                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1337                <Point> 
     1338                    <coordinates>151.0784520824468,-33.84631674048389,0</coordinates> 
     1339                </Point> 
     1340            </Placemark> 
     1341            <Placemark> 
     1342                <name>Sundial, Heerenveen, Netherlands</name> 
     1343                <description><![CDATA[A sundial in a roundabout. 
     1344<p><img src="http://upload.wikimedia.org/wikipedia/commons/thumb/0/02/Zonnewijzer_Heerenveen_16.JPG/300px-Zonnewijzer_Heerenveen_16.JPG"></p>]]></description> 
     1345                <LookAt> 
     1346                    <longitude>5.948360581453846</longitude> 
     1347                    <latitude>52.95021342348947</latitude> 
     1348                    <altitude>0</altitude> 
     1349                    <range>125.5263208537314</range> 
     1350                    <tilt>3.779142327674902e-010</tilt> 
     1351                    <heading>2.174750871196e-005</heading> 
     1352                    <altitudeMode>relativeToGround</altitudeMode> 
     1353                </LookAt> 
     1354                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1355                <Point> 
     1356                    <coordinates>5.94828156186523,52.95041125062435,0</coordinates> 
     1357                </Point> 
     1358            </Placemark> 
     1359            <Placemark> 
     1360                <name>Sundial, Zoetermeer, Netherlands</name> 
     1361                <description><![CDATA[A triangle shaped sundial. 
     1362<p><img src="http://www.chabot.demon.nl/images/Zoetermeer03.jpg"></p> 
     1363 
     1364http://www.chabot.demon.nl/sundials/index3.htm]]></description> 
     1365                <LookAt> 
     1366                    <longitude>4.48801136665803</longitude> 
     1367                    <latitude>52.03630549285332</latitude> 
     1368                    <altitude>0</altitude> 
     1369                    <range>64.63218166015471</range> 
     1370                    <tilt>0</tilt> 
     1371                    <heading>-0.0001443420778625332</heading> 
     1372                    <altitudeMode>relativeToGround</altitudeMode> 
     1373                </LookAt> 
     1374                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1375                <Point> 
     1376                    <coordinates>4.48796065586356,52.03633054351467,0</coordinates> 
     1377                </Point> 
     1378            </Placemark> 
     1379            <Placemark> 
     1380                <name>Sundial, Lancaster, Lancashire, UK</name> 
     1381                <description><![CDATA[A very nice analemmanic sundial made of stone. 
     1382<p><img src="http://static2.bareka.com/photos/medium/2472257/lancaster-sundial.jpg"></p> 
     1383 
     1384<p><img src="http://static4.bareka.com/photos/medium/2472163/becoming-gnomon.jpg"></p> 
     1385 
     1386<p><img src="http://static2.bareka.com/photos/medium/2472201/telling-time.jpg"></p>]]></description> 
     1387                <LookAt> 
     1388                    <longitude>-2.781711751106886</longitude> 
     1389                    <latitude>54.04618182827939</latitude> 
     1390                    <altitude>0</altitude> 
     1391                    <range>59.27999100628823</range> 
     1392                    <tilt>0</tilt> 
     1393                    <heading>2.19677695423205e-005</heading> 
     1394                    <altitudeMode>relativeToGround</altitudeMode> 
     1395                </LookAt> 
     1396                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1397                <Point> 
     1398                    <coordinates>-2.781728090880108,54.0462693701831,0</coordinates> 
     1399                </Point> 
     1400            </Placemark> 
     1401            <Placemark> 
     1402                <name>Sundial,  Nida, Lithuania</name> 
     1403                <description><![CDATA[A large horizontal sundial. 
     1404<p><img src="http://static1.bareka.com/photos/medium/47224/nida.jpg"></p>]]></description> 
     1405                <LookAt> 
     1406                    <longitude>20.99037235133227</longitude> 
     1407                    <latitude>55.29501544197078</latitude> 
     1408                    <altitude>0</altitude> 
     1409                    <range>177.9373429950499</range> 
     1410                    <tilt>4.620370977113893e-011</tilt> 
     1411                    <heading>0.0005344762650417512</heading> 
     1412                    <altitudeMode>relativeToGround</altitudeMode> 
     1413                </LookAt> 
     1414                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1415                <Point> 
     1416                    <coordinates>20.99033020665709,55.29525661423606,0</coordinates> 
     1417                </Point> 
     1418            </Placemark> 
     1419            <Placemark> 
     1420                <name>Sundial, Tavel, France</name> 
     1421                <description><![CDATA[A very large sundial, sadly in low res. 
     1422<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/zw-07-03-01.jpg" width="360" hight="270"></p> 
     1423 
     1424http://www.de-zonnewijzerkring.nl/zw-arch/eng-home-zw-07-03.htm]]></description> 
     1425                <LookAt> 
     1426                    <longitude>4.700355808916944</longitude> 
     1427                    <latitude>44.00154771856498</latitude> 
     1428                    <altitude>0</altitude> 
     1429                    <range>254.0752666918187</range> 
     1430                    <tilt>2.46623000787332e-010</tilt> 
     1431                    <heading>-0.0002391009248289202</heading> 
     1432                    <altitudeMode>relativeToGround</altitudeMode> 
     1433                </LookAt> 
     1434                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1435                <Point> 
     1436                    <coordinates>4.700351044280055,44.00172761202828,0</coordinates> 
     1437                </Point> 
     1438            </Placemark> 
     1439            <Placemark> 
     1440                <name>Sundial, St. Michielsgestel, Netherlands</name> 
     1441                <description><![CDATA[A large sundial in the gardens of the Institute for the Deaf in Sint Michielsgestel. 
     1442 
     1443<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/zw-06-10-01.jpg"></p> 
     1444 
     1445<p><img src="http://www.de-zonnewijzerkring.nl/imgs-arch/zw-06-10-02.jpg"></p>]]></description> 
     1446                <LookAt> 
     1447                    <longitude>5.346086124850936</longitude> 
     1448                    <latitude>51.64327189620946</latitude> 
     1449                    <altitude>0</altitude> 
     1450                    <range>111.9437734662239</range> 
     1451                    <tilt>6.47253437341193e-010</tilt> 
     1452                    <heading>0.002375287388397793</heading> 
     1453                    <altitudeMode>relativeToGround</altitudeMode> 
     1454                </LookAt> 
     1455                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1456                <Point> 
     1457                    <coordinates>5.346049636943462,51.64334209867396,0</coordinates> 
     1458                </Point> 
     1459            </Placemark> 
     1460            <Placemark> 
     1461                <name>Sundial,  Halle Saale, Germany</name> 
     1462                <description><![CDATA[Analemmatic sundial at the Planetarium 
     1463"Sigmund JÀhn" planetarium, Halle. 
     1464<p><img src="http://home.arcor.de/peter.lindner/sonnenuhr/h/halle_saale_061xx/5973_peissnitzinsel_planetarium_200707163002.jpg"></p> 
     1465 
     1466More photos:http://home.arcor.de/peter.lindner/sonnenuhr/h/halle_saale_061xx/halle_saale_061xx.htm]]></description> 
     1467                <LookAt> 
     1468                    <longitude>11.94846541701928</longitude> 
     1469                    <latitude>51.49449346439673</latitude> 
     1470                    <altitude>0</altitude> 
     1471                    <range>51.14591828296211</range> 
     1472                    <tilt>0</tilt> 
     1473                    <heading>0.0003207363265956715</heading> 
     1474                    <altitudeMode>relativeToGround</altitudeMode> 
     1475                </LookAt> 
     1476                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1477                <Point> 
     1478                    <coordinates>11.9484244247504,51.49452140024068,0</coordinates> 
     1479                </Point> 
     1480            </Placemark> 
     1481            <Placemark> 
     1482                <name>Sundial, Abano Terme, Italy</name> 
     1483                <description><![CDATA[<p><img src="http://members.aon.at/sundials/images/italia/i_07207.jpg"></p> 
     1484 
     1485http://members.aon.at/sundials/bild43_d.htm]]></description> 
     1486                <LookAt> 
     1487                    <longitude>11.7902588657866</longitude> 
     1488                    <latitude>45.36024293920432</latitude> 
     1489                    <altitude>0</altitude> 
     1490                    <range>88.27261765894279</range> 
     1491                    <tilt>5.645767845941023e-011</tilt> 
     1492                    <heading>0.0006214879519801648</heading> 
     1493                    <altitudeMode>relativeToGround</altitudeMode> 
     1494                </LookAt> 
     1495                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1496                <Point> 
     1497                    <coordinates>11.79017178556217,45.36037512888652,0</coordinates> 
     1498                </Point> 
     1499            </Placemark> 
     1500            <Placemark> 
     1501                <name>Sundial, Gasworks Park, Seattle, USA</name> 
     1502                <description><![CDATA[The sundial at Gas Works Park 
     1503<p><img src="http://www.magnusonpark.org/images/sundial.jpg"></p>]]></description> 
     1504                <LookAt> 
     1505                    <longitude>-122.3362979085422</longitude> 
     1506                    <latitude>47.64532276753428</latitude> 
     1507                    <altitude>0</altitude> 
     1508                    <range>144.9142629968483</range> 
     1509                    <tilt>1.398328526418574e-010</tilt> 
     1510                    <heading>-0.002257590778485548</heading> 
     1511                    <altitudeMode>relativeToGround</altitudeMode> 
     1512                </LookAt> 
     1513                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1514                <Point> 
     1515                    <coordinates>-122.3363617333393,47.64542146106401,0</coordinates> 
     1516                </Point> 
     1517            </Placemark> 
     1518            <Placemark> 
     1519                <name>Sundial, Biarritz, France</name> 
     1520                <description><![CDATA[<p><img src="http://www.santiago-compostela.net/pix/biar2.jpg"></p>]]></description> 
     1521                <LookAt> 
     1522                    <longitude>-1.554172472866423</longitude> 
     1523                    <latitude>43.49326953476108</latitude> 
     1524                    <altitude>0</altitude> 
     1525                    <range>25.2767811064234</range> 
     1526                    <tilt>1.050991544755056e-009</tilt> 
     1527                    <heading>0.004580769709390601</heading> 
     1528                    <altitudeMode>relativeToGround</altitudeMode> 
     1529                </LookAt> 
     1530                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1531                <Point> 
     1532                    <coordinates>-1.554180928484328,43.49329288628002,0</coordinates> 
     1533                </Point> 
     1534            </Placemark> 
     1535            <Placemark> 
     1536                <name>Sundial, Biarritz, France</name> 
     1537                <description><![CDATA[This is a small analemmatic sundial painted on the ground. 
     1538<p><img src="http://www.santiago-compostela.net/pix/biar1.jpg"></p>]]></description> 
     1539                <LookAt> 
     1540                    <longitude>-1.566562523529829</longitude> 
     1541                    <latitude>43.48379630381277</latitude> 
     1542                    <altitude>0</altitude> 
     1543                    <range>21.65084680450158</range> 
     1544                    <tilt>3.134801309486055e-010</tilt> 
     1545                    <heading>-0.003938809314781338</heading> 
     1546                    <altitudeMode>relativeToGround</altitudeMode> 
     1547                </LookAt> 
     1548                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1549                <Point> 
     1550                    <coordinates>-1.566563732160418,43.48381046528652,0</coordinates> 
     1551                </Point> 
     1552            </Placemark> 
     1553            <Placemark> 
     1554                <name>Sundial, Gardens of Easton Lodge, UK</name> 
     1555                <description><![CDATA[Easton Lodge, Little Easton, Dunmow, Essex, UK 
     1556 
     1557<p><img src="http://www.sundials.co.uk/pix/easton1.jpg"></p> 
     1558 
     1559<p><img src="http://www.sundials.co.uk/pix/easton2.jpg"></p> 
     1560 
     1561http://www.sundials.co.uk/newdials.htm]]></description> 
     1562                <LookAt> 
     1563                    <longitude>0.3149818536825662</longitude> 
     1564                    <latitude>51.89078052542742</latitude> 
     1565                    <altitude>0</altitude> 
     1566                    <range>55.96449646091584</range> 
     1567                    <tilt>4.648925194094304e-010</tilt> 
     1568                    <heading>0.00100690081475908</heading> 
     1569                    <altitudeMode>relativeToGround</altitudeMode> 
     1570                </LookAt> 
     1571                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1572                <Point> 
     1573                    <coordinates>0.3149732952370528,51.89085713320831,0</coordinates> 
     1574                </Point> 
     1575            </Placemark> 
     1576            <Placemark> 
     1577                <name>Sundial, Drake University, Des Moines, Iowa, USA</name> 
     1578                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/483_io_desmoines_drake_univ.jpg"></p>]]></description> 
     1579                <LookAt> 
     1580                    <longitude>-93.65212284615454</longitude> 
     1581                    <latitude>41.60195541103381</latitude> 
     1582                    <altitude>0</altitude> 
     1583                    <range>78.72982107342352</range> 
     1584                    <tilt>1.765081595632672e-010</tilt> 
     1585                    <heading>0.001286572559733559</heading> 
     1586                    <altitudeMode>relativeToGround</altitudeMode> 
     1587                </LookAt> 
     1588                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1589                <Point> 
     1590                    <coordinates>-93.65218647671061,41.60204463077999,0</coordinates> 
     1591                </Point> 
     1592            </Placemark> 
     1593            <Placemark> 
     1594                <name>Sundial, River State Park, Indianapolis, USA</name> 
     1595                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/276_in_indi_wrsp.jpg"></p>]]></description> 
     1596                <LookAt> 
     1597                    <longitude>-86.17152524772823</longitude> 
     1598                    <latitude>39.76773209074677</latitude> 
     1599                    <altitude>0</altitude> 
     1600                    <range>54.39844455317644</range> 
     1601                    <tilt>0</tilt> 
     1602                    <heading>0.002275213067656348</heading> 
     1603                    <altitudeMode>relativeToGround</altitudeMode> 
     1604                </LookAt> 
     1605                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1606                <Point> 
     1607                    <coordinates>-86.17158357583082,39.76772499391254,0</coordinates> 
     1608                </Point> 
     1609            </Placemark> 
     1610            <Placemark> 
     1611                <name>Sundial, Lawrence Hall of Science, Berkeley, CA, USA</name> 
     1612                <description><![CDATA[<p><img src="http://sundials.org/conference/2000/image176.jpg"></p>]]></description> 
     1613                <LookAt> 
     1614                    <longitude>-122.2467934369336</longitude> 
     1615                    <latitude>37.87843955912407</latitude> 
     1616                    <altitude>0</altitude> 
     1617                    <range>75.73772829567238</range> 
     1618                    <tilt>0</tilt> 
     1619                    <heading>-0.0005027058674008065</heading> 
     1620                    <altitudeMode>relativeToGround</altitudeMode> 
     1621                </LookAt> 
     1622                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1623                <Point> 
     1624                    <coordinates>-122.2468395686324,37.87850249930867,0</coordinates> 
     1625                </Point> 
     1626            </Placemark> 
     1627            <Placemark> 
     1628                <name>Sundial, Riverwalk, Augusta, Georgia, USA</name> 
     1629                <description><![CDATA[<p><img src="http://www.coe.uga.edu/sdpl/3hgh_res/sundial1.jpg"></p>]]></description> 
     1630                <LookAt> 
     1631                    <longitude>-81.96495913544699</longitude> 
     1632                    <latitude>33.47855115889769</latitude> 
     1633                    <altitude>0</altitude> 
     1634                    <range>24.10683016246917</range> 
     1635                    <tilt>0</tilt> 
     1636                    <heading>-0.004039593559848222</heading> 
     1637                    <altitudeMode>relativeToGround</altitudeMode> 
     1638                </LookAt> 
     1639                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1640                <Point> 
     1641                    <coordinates>-81.96497422223469,33.47856125757188,0</coordinates> 
     1642                </Point> 
     1643            </Placemark> 
     1644            <Placemark> 
     1645                <name>Sundial, Reggio nell&apos;Emilia, Italy</name> 
     1646                <description><![CDATA[<p><img src="http://perso.orange.fr/cadrans.solaires/cadrans/images/cadran_righi_araign%E9e.jpg"></p> 
     1647<p>Image source:<a href="http://perso.orange.fr/cadrans.solaires/cadrans/Cadran-brescia.html">http://perso.orange.fr</a></p>]]></description> 
     1648                <LookAt> 
     1649                    <longitude>10.64303919389926</longitude> 
     1650                    <latitude>44.71779646338597</latitude> 
     1651                    <altitude>0</altitude> 
     1652                    <range>189.7095730357674</range> 
     1653                    <tilt>0</tilt> 
     1654                    <heading>0.0003188808607201916</heading> 
     1655                    <altitudeMode>relativeToGround</altitudeMode> 
     1656                </LookAt> 
     1657                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1658                <Point> 
     1659                    <coordinates>10.64294491831197,44.71794161105381,0</coordinates> 
     1660                </Point> 
     1661            </Placemark> 
     1662            <Placemark> 
     1663                <name>Sundial, Rennes, France</name> 
     1664                <description><![CDATA[<p><img src="http://perso.orange.fr/cadrans.solaires/cadrans/images/cadran_beauregard_300.jpg"></p> 
     1665 
     1666<p>Image source:<a href="http://perso.orange.fr/cadrans.solaires/cadrans/images/cadran_beauregard_300.jpg">http://perso.orange.fr</a></p>]]></description> 
     1667                <LookAt> 
     1668                    <longitude>-1.701676278457902</longitude> 
     1669                    <latitude>48.13126501865703</latitude> 
     1670                    <altitude>0</altitude> 
     1671                    <range>61.61200771227915</range> 
     1672                    <tilt>0</tilt> 
     1673                    <heading>-7.297875936612596e-006</heading> 
     1674                    <altitudeMode>relativeToGround</altitudeMode> 
     1675                </LookAt> 
     1676                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1677                <Point> 
     1678                    <coordinates>-1.701699217745187,48.13129604209563,0</coordinates> 
     1679                </Point> 
     1680            </Placemark> 
     1681            <Placemark> 
     1682                <name>Sundial, Schneverdingen, Germany</name> 
     1683                <description><![CDATA[<p><img src="http://www.schneverdingen-touristik.de/Rest/Sonnenuhr%20quer.jpg" width="320" hight ="240"></p>]]></description> 
     1684                <LookAt> 
     1685                    <longitude>9.790867938787324</longitude> 
     1686                    <latitude>53.12943797238091</latitude> 
     1687                    <altitude>0</altitude> 
     1688                    <range>106.7617213575405</range> 
     1689                    <tilt>4.722006958129564e-010</tilt> 
     1690                    <heading>0.00116683463628678</heading> 
     1691                    <altitudeMode>relativeToGround</altitudeMode> 
     1692                </LookAt> 
     1693                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1694                <Point> 
     1695                    <coordinates>9.790707601654233,53.12958381093443,0</coordinates> 
     1696                </Point> 
     1697            </Placemark> 
     1698            <Placemark> 
     1699                <name>Sundial Obelisk, Charleston, South Carolina</name> 
     1700                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/10a1f88a-71e0-4341-96f3-e8e687af05c9.jpg"></p> 
     1701 
     1702<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM9J1">www.groundspeak.com</a></p>]]></description> 
     1703                <LookAt> 
     1704                    <longitude>-79.93166502066842</longitude> 
     1705                    <latitude>32.76970334074068</latitude> 
     1706                    <altitude>0</altitude> 
     1707                    <range>75.62015855417492</range> 
     1708                    <tilt>4.052617221081382e-011</tilt> 
     1709                    <heading>1.8933011389851e-005</heading> 
     1710                    <altitudeMode>relativeToGround</altitudeMode> 
     1711                </LookAt> 
     1712                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1713                <Point> 
     1714                    <coordinates>-79.93172500691688,32.76973746165206,0</coordinates> 
     1715                </Point> 
     1716            </Placemark> 
     1717            <Placemark> 
     1718                <name>Sundial, Morehead Planetarium, Chapel Hill, North Carolina</name> 
     1719                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/log/display/a71ce131-2875-4856-958f-2ca5e57a1df9.jpg"></p> 
     1720 
     1721<p>Image credit:<a href="http://www.waymarking.com/waymarks/WMCBZ">www.groundspeak.com</a></p>]]></description> 
     1722                <LookAt> 
     1723                    <longitude>-79.050938325099</longitude> 
     1724                    <latitude>35.91448691988588</latitude> 
     1725                    <altitude>0</altitude> 
     1726                    <range>64.77863580575449</range> 
     1727                    <tilt>0</tilt> 
     1728                    <heading>1.662447442472179e-005</heading> 
     1729                    <altitudeMode>relativeToGround</altitudeMode> 
     1730                </LookAt> 
     1731                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1732                <Point> 
     1733                    <coordinates>-79.05097493816135,35.91457037097104,0</coordinates> 
     1734                </Point> 
     1735            </Placemark> 
     1736            <Placemark> 
     1737                <name>Sundial, Berkeley, 
     1738California</name> 
     1739                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/log/display/9c455a92-2816-4071-950e-91f17b6fa4bd.jpg"></p> 
     1740 
     1741<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM988">www.groundspeak.com</a></p>]]></description> 
     1742                <LookAt> 
     1743                    <longitude>-122.3174670551103</longitude> 
     1744                    <latitude>37.86291969151575</latitude> 
     1745                    <altitude>0</altitude> 
     1746                    <range>46.45520126730318</range> 
     1747                    <tilt>1.288314315217904e-009</tilt> 
     1748                    <heading>2.022127862982459e-005</heading> 
     1749                    <altitudeMode>relativeToGround</altitudeMode> 
     1750                </LookAt> 
     1751                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1752                <Point> 
     1753                    <coordinates>-122.317517078111,37.86295037394118,0</coordinates> 
     1754                </Point> 
     1755            </Placemark> 
     1756            <Placemark> 
     1757                <name>Forest Lawn Cemetery Sundial, Buffalo, NY</name> 
     1758                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/c6aef5f9-367d-45f2-8f8c-d01bf5d233ae.jpg"></p> 
     1759 
     1760<p>Image credit:<a href="http://www.waymarking.com/waymarks/WMJQ8">www.groundspeak.com</a></p>]]></description> 
     1761                <LookAt> 
     1762                    <longitude>-78.85654999999994</longitude> 
     1763                    <latitude>42.92531666666667</latitude> 
     1764                    <altitude>0</altitude> 
     1765                    <range>76.25216432595194</range> 
     1766                    <tilt>0</tilt> 
     1767                    <heading>1.305178628551349e-014</heading> 
     1768                    <altitudeMode>relativeToGround</altitudeMode> 
     1769                </LookAt> 
     1770                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1771                <Point> 
     1772                    <coordinates>-78.85660856395873,42.92539096384056,0</coordinates> 
     1773                </Point> 
     1774            </Placemark> 
     1775            <Placemark> 
     1776                <name>Ruston Way Sundial ,Tacoma, Washington</name> 
     1777                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/dd5439e7-0312-443d-9557-d4986582ef59.jpg"></p> 
     1778 
     1779<p>Image credit:<a href="http://www.waymarking.com/waymarks/WMXQB">www.groundspeak.com</a></p>]]></description> 
     1780                <LookAt> 
     1781                    <longitude>-122.4622812282256</longitude> 
     1782                    <latitude>47.27566486193976</latitude> 
     1783                    <altitude>0</altitude> 
     1784                    <range>62.22457114364932</range> 
     1785                    <tilt>0</tilt> 
     1786                    <heading>0.0001239840172672445</heading> 
     1787                    <altitudeMode>relativeToGround</altitudeMode> 
     1788                </LookAt> 
     1789                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1790                <Point> 
     1791                    <coordinates>-122.4623519976878,47.27567991760397,0</coordinates> 
     1792                </Point> 
     1793            </Placemark> 
     1794            <Placemark> 
     1795                <name>Sundial ,Science Central, Fort Wayne, Indiana</name> 
     1796                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/e78d7f23-8999-47be-b678-e7140aa82ca7.jpg"></p> 
     1797 
     1798<p>Image credit:<a href="http://www.waymarking.com/waymarks/WMYG1">www.groundspeak.com</a></p>]]></description> 
     1799                <LookAt> 
     1800                    <longitude>-85.1392719076301</longitude> 
     1801                    <latitude>41.09135262868964</latitude> 
     1802                    <altitude>0</altitude> 
     1803                    <range>39.45104173043256</range> 
     1804                    <tilt>0</tilt> 
     1805                    <heading>-1.439899387224993e-005</heading> 
     1806                    <altitudeMode>relativeToGround</altitudeMode> 
     1807                </LookAt> 
     1808                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1809                <Point> 
     1810                    <coordinates>-85.13931366905783,41.09136114213859,0</coordinates> 
     1811                </Point> 
     1812            </Placemark> 
     1813            <Placemark> 
     1814                <name>Berkswich Millennium Sundial, Broc Hill, Staffordshire, UK</name> 
     1815                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/3351745c-c573-4970-98ef-8ba7740c9bca.jpg"></p> 
     1816 
     1817<p>Image credit:<a href="http://www.waymarking.com/waymarks/WMR8X">www.groundspeak.com</a></p>]]></description> 
     1818                <LookAt> 
     1819                    <longitude>-2.038136129920761</longitude> 
     1820                    <latitude>52.77711389120437</latitude> 
     1821                    <altitude>0</altitude> 
     1822                    <range>29.50351061813827</range> 
     1823                    <tilt>0</tilt> 
     1824                    <heading>3.758749562499077e-005</heading> 
     1825                    <altitudeMode>relativeToGround</altitudeMode> 
     1826                </LookAt> 
     1827                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1828                <Point> 
     1829                    <coordinates>-2.038162283146562,52.77714418176907,0</coordinates> 
     1830                </Point> 
     1831            </Placemark> 
     1832            <Placemark> 
     1833                <name>Sundial, Tazacorte Beach ,La Palma island</name> 
     1834                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/10cced19-2b34-482d-86c5-ee72fca9ab87.jpg"></p> 
     1835 
     1836<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM173Y">www.groundspeak.com</a></p>]]></description> 
     1837                <LookAt> 
     1838                    <longitude>-17.9461489138289</longitude> 
     1839                    <latitude>28.65121498294262</latitude> 
     1840                    <altitude>0</altitude> 
     1841                    <range>64.36805201552387</range> 
     1842                    <tilt>0</tilt> 
     1843                    <heading>4.047704004228316e-005</heading> 
     1844                    <altitudeMode>relativeToGround</altitudeMode> 
     1845                </LookAt> 
     1846                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1847                <Point> 
     1848                    <coordinates>-17.94620263531645,28.65124065936443,0</coordinates> 
     1849                </Point> 
     1850            </Placemark> 
     1851            <Placemark> 
     1852                <name>Sundial, Rochester, NY</name> 
     1853                <description><![CDATA[Residence Hall Quad Sundial 
     1854<p><img src="http://img.groundspeak.com/waymarking/display/86272fd4-17ae-4b5d-a120-35ba49574a1d.jpg"></p> 
     1855 
     1856<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM13N7">www.groundspeak.com</a></p>]]></description> 
     1857                <LookAt> 
     1858                    <longitude>-77.66915367541856</longitude> 
     1859                    <latitude>43.0844306339545</latitude> 
     1860                    <altitude>0</altitude> 
     1861                    <range>61.69080872372956</range> 
     1862                    <tilt>0</tilt> 
     1863                    <heading>9.994948692290747e-005</heading> 
     1864                    <altitudeMode>relativeToGround</altitudeMode> 
     1865                </LookAt> 
     1866                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1867                <Point> 
     1868                    <coordinates>-77.66917908415978,43.08440844604031,0</coordinates> 
     1869                </Point> 
     1870            </Placemark> 
     1871            <Placemark> 
     1872                <name>Sundial, Center of the World, Felicity, CA</name> 
     1873                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/log/691c99be-50f7-4916-88e7-9e103d994b22.jpg"></p> 
     1874 
     1875<p> 
     1876The 15 foot Sundial at Felicity is a three-dimensional bronze of Michelangelo's Arm of God painted on the Sistine Chapel ceiling. The arm was sculpted and cast in bronze in New England. The rock is local but the installation required the assistance of a mining engineer and a special drill. The bronze Roman numerals give the time. A sundial is precisely accurate once a year and this was set at noon on Christmas Day. The arm points to the Hill of Prayer, site of the Church on the Hill at Felicity. 
     1877At the entrance to The Center of the World campus is a 25 ft. high section of the original stairway of the Eiffel Tower. In 1983, the Government of France removed approximately 500 ft. of the original stairway. Built with the technology of the 1860's, the weight of approximately 54,000 lbs. was causing sway at the top of the then 94 year old tower. The 6,600 lb. section serves no practical purpose, but is part of the spirit of Felicity. 
     1878The idea of making Felicity the Center of the World came to Jacques-André when he'd been mayor only a few months. Somehow he convinced Imperial County, CA, to recognize his claim. Soon he had convinced the Institut Geographique National of France, General Dynamics Corporation, and The People's Republic of China to recognize it as well. "I knew I had to build something, but I didn't know what. My wife said, 'It's a desert; why not a pyramid?' So Jacques-André had built a 21-foot-tall pink marble pyramid, its interior lined with mirrors, a plaque embedded in the floor, marking the exact spot. For a dollar, tourists can now stand on the official Center Of The World and take a picture themselves at the official "Center Of The World". 
     1879The Felicity Post Office was dedicated on 5 December 1987 at a time when thousands of small post offices were being eliminated as an economy measure. The town, whose population numbered two, saw over 2,300 letters mailed that day. The dedication ceremony was highlighted by a speech in Chinese by Consul Zhou of the People’s Republic of China who traveled 600 miles for the occasion. It is operated by the town at a cost to the Federal Government of one dollar per year. Twenty uncashed one dollar checks are on file.</p> 
     1880 
     1881<p>Image and info credit:<a href="http://www.waymarking.com/waymarks/WM19WB">www.groundspeak.com</a></p>]]></description> 
     1882                <LookAt> 
     1883                    <longitude>-114.7654750861393</longitude> 
     1884                    <latitude>32.74988921016088</latitude> 
     1885                    <altitude>0</altitude> 
     1886                    <range>72.95555856498569</range> 
     1887                    <tilt>0</tilt> 
     1888                    <heading>3.146266385893141e-005</heading> 
     1889                    <altitudeMode>relativeToGround</altitudeMode> 
     1890                </LookAt> 
     1891                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1892                <Point> 
     1893                    <coordinates>-114.7655284077745,32.74992976207647,0</coordinates> 
     1894                </Point> 
     1895            </Placemark> 
     1896            <Placemark> 
     1897                <name>University of São Paulo Sundial, Sao Paulo, Brazi</name> 
     1898                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/a5362062-9509-4022-9693-fc2a064301d8.jpg"></p> 
     1899 
     1900<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1DJT">www.groundspeak.com</a></p>]]></description> 
     1901                <LookAt> 
     1902                    <longitude>-46.7204986760494</longitude> 
     1903                    <latitude>-23.56120553413547</latitude> 
     1904                    <altitude>0</altitude> 
     1905                    <range>122.7188487961642</range> 
     1906                    <tilt>0</tilt> 
     1907                    <heading>2.610051397350573e-005</heading> 
     1908                    <altitudeMode>relativeToGround</altitudeMode> 
     1909                </LookAt> 
     1910                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1911                <Point> 
     1912                    <coordinates>-46.7205459522717,-23.56115337159118,0</coordinates> 
     1913                </Point> 
     1914            </Placemark> 
     1915            <Placemark> 
     1916                <name>Slate bowl Sundial, Holker, UK</name> 
     1917                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/c6aca7e1-9221-4d8f-a0f4-e062e06346f9.jpg"></p> 
     1918 
     1919<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1DRW">www.groundspeak.com</a></p>]]></description> 
     1920                <LookAt> 
     1921                    <longitude>-2.987191130383048</longitude> 
     1922                    <latitude>54.188865359179</latitude> 
     1923                    <altitude>0</altitude> 
     1924                    <range>98.16442365143851</range> 
     1925                    <tilt>2.595660029656298e-010</tilt> 
     1926                    <heading>0.000142350860720713</heading> 
     1927                    <altitudeMode>relativeToGround</altitudeMode> 
     1928                </LookAt> 
     1929                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1930                <Point> 
     1931                    <coordinates>-2.987342530279506,54.18895843924356,0</coordinates> 
     1932                </Point> 
     1933            </Placemark> 
     1934            <Placemark> 
     1935                <name>Sundial, Jardin des Doms, Avignon</name> 
     1936                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/46383080-d099-4450-98a9-6d15c1c16441.jpg"></p> 
     1937 
     1938<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1M8Z">www.groundspeak.com</a></p>]]></description> 
     1939                <LookAt> 
     1940                    <longitude>4.807697613943427</longitude> 
     1941                    <latitude>43.95301885165002</latitude> 
     1942                    <altitude>0</altitude> 
     1943                    <range>32.75914708134153</range> 
     1944                    <tilt>1.205283678723288e-009</tilt> 
     1945                    <heading>2.147953504845766e-005</heading> 
     1946                    <altitudeMode>relativeToGround</altitudeMode> 
     1947                </LookAt> 
     1948                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1949                <Point> 
     1950                    <coordinates>4.807672022945837,43.95303620373285,0</coordinates> 
     1951                </Point> 
     1952            </Placemark> 
     1953            <Placemark> 
     1954                <name>Rillito Riverpark Sundial, Tucson, AZ</name> 
     1955                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/6c0bf495-b4fe-4549-a1c1-af8fb4328eae.jpg"></p> 
     1956 
     1957<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1TC7">www.groundspeak.com</a></p>]]></description> 
     1958                <LookAt> 
     1959                    <longitude>-111.0075277787534</longitude> 
     1960                    <latitude>32.30113621710221</latitude> 
     1961                    <altitude>0</altitude> 
     1962                    <range>94.15682746212195</range> 
     1963                    <tilt>0</tilt> 
     1964                    <heading>2.968664599173171e-005</heading> 
     1965                    <altitudeMode>relativeToGround</altitudeMode> 
     1966                </LookAt> 
     1967                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1968                <Point> 
     1969                    <coordinates>-111.0075933392788,32.30113929573149,0</coordinates> 
     1970                </Point> 
     1971            </Placemark> 
     1972            <Placemark> 
     1973                <name>Helium Monument Sundial, Amarillo, TX</name> 
     1974                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/a0b45c91-a572-4ca1-8a9d-b5ebb84c028b.jpg"></p> 
     1975 
     1976<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1WJY">www.groundspeak.com</a></p>]]></description> 
     1977                <LookAt> 
     1978                    <longitude>-101.9132978901728</longitude> 
     1979                    <latitude>35.19956726276647</latitude> 
     1980                    <altitude>0</altitude> 
     1981                    <range>60.53404995378031</range> 
     1982                    <tilt>5.162016480480558e-011</tilt> 
     1983                    <heading>3.00374135059527e-005</heading> 
     1984                    <altitudeMode>relativeToGround</altitudeMode> 
     1985                </LookAt> 
     1986                <styleUrl>#msn_sunny_copy70</styleUrl> 
     1987                <Point> 
     1988                    <coordinates>-101.9133182362553,35.19966266329223,0</coordinates> 
     1989                </Point> 
     1990            </Placemark> 
     1991            <Placemark> 
     1992                <name>Sundial, Hershey, Pennsylvania</name> 
     1993                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/fbb33ffa-3867-4f28-b12c-77bf647e1d13.jpg"></p> 
     1994 
     1995<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM1XC1">www.groundspeak.com</a></p>]]></description> 
     1996                <LookAt> 
     1997                    <longitude>-76.62980321024054</longitude> 
     1998                    <latitude>40.27170452963257</latitude> 
     1999                    <altitude>0</altitude> 
     2000                    <range>72.41553799015709</range> 
     2001                    <tilt>2.798231534250927e-010</tilt> 
     2002                    <heading>6.256605840320539e-005</heading> 
     2003                    <altitudeMode>relativeToGround</altitudeMode> 
     2004                </LookAt> 
     2005                <styleUrl>#msn_sunny_copy70</styleUrl> 
     2006                <Point> 
     2007                    <coordinates>-76.6298565862236,40.2718754812139,0</coordinates> 
     2008                </Point> 
     2009            </Placemark> 
     2010            <Placemark> 
     2011                <name>King Neptune Sundial, Hilton Head Island, South Carolina</name> 
     2012                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/e48230f9-b1fd-4cf6-bc81-7f0719cc13a5.jpg"></p> 
     2013 
     2014<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM2EY7">www.groundspeak.com</a></p>]]></description> 
     2015                <LookAt> 
     2016                    <longitude>-80.72801698168738</longitude> 
     2017                    <latitude>32.18076491029077</latitude> 
     2018                    <altitude>0</altitude> 
     2019                    <range>86.36647046692004</range> 
     2020                    <tilt>2.346233297172379e-010</tilt> 
     2021                    <heading>8.72178085589082e-006</heading> 
     2022                    <altitudeMode>relativeToGround</altitudeMode> 
     2023                </LookAt> 
     2024                <styleUrl>#msn_sunny_copy70</styleUrl> 
     2025                <Point> 
     2026                    <coordinates>-80.72806102317654,32.18084680335104,0</coordinates> 
     2027                </Point> 
     2028            </Placemark> 
     2029            <Placemark> 
     2030                <name>Jane Larue Memorial Sundial - Ann Arbor, Michigan</name> 
     2031                <description><![CDATA[<p><img src="http://img.groundspeak.com/waymarking/display/936cd562-a97c-44bd-8ed5-fcdf2495076d.jpg"></p> 
     2032 
     2033<p>Image credit:<a href="http://www.waymarking.com/waymarks/WM290J">www.groundspeak.com</a></p>]]></description> 
     2034                <LookAt> 
     2035                    <longitude>-83.66222470201295</longitude> 
     2036                    <latitude>42.30114702626376</latitude> 
     2037                    <altitude>0</altitude> 
     2038                    <range>26.29476256996721</range> 
     2039                    <tilt>0</tilt> 
     2040                    <heading>0.0001291940559531826</heading> 
     2041                    <altitudeMode>relativeToGround</altitudeMode> 
     2042                </LookAt> 
     2043                <styleUrl>#msn_sunny_copy70</styleUrl> 
     2044                <Point> 
     2045                    <coordinates>-83.66224748552365,42.30117333470928,0</coordinates> 
     2046                </Point> 
     2047            </Placemark> 
     2048        </Folder> 
     2049        <Folder> 
     2050            <name>Schoolyard Sundials</name> 
     2051            <Placemark> 
     2052                <name>Sundial, Julius-Brecht-Allee, Bremen</name> 
     2053                <LookAt> 
     2054                    <longitude>8.8674012861685</longitude> 
     2055                    <latitude>53.07651505713779</latitude> 
     2056                    <altitude>0</altitude> 
     2057                    <range>20.6687721420542</range> 
     2058                    <tilt>9.001122528249614e-011</tilt> 
     2059                    <heading>-0.00437506724289509</heading> 
     2060                    <altitudeMode>relativeToGround</altitudeMode> 
     2061                </LookAt> 
     2062                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2063                <Point> 
     2064                    <coordinates>8.867391721405184,53.07654483342672,0</coordinates> 
     2065                </Point> 
     2066            </Placemark> 
     2067            <Placemark> 
     2068                <name>Sundial, Drebberstraße, Bremen</name> 
     2069                <description><![CDATA[<p><img src="http://planetarium.hs-bremen.de/planetarium/pics/drebber.jpg"></p>]]></description> 
     2070                <LookAt> 
     2071                    <longitude>8.898052233187912</longitude> 
     2072                    <latitude>53.0400952944841</latitude> 
     2073                    <altitude>0</altitude> 
     2074                    <range>14.44345748598086</range> 
     2075                    <tilt>0</tilt> 
     2076                    <heading>-0.001637659480767247</heading> 
     2077                    <altitudeMode>relativeToGround</altitudeMode> 
     2078                </LookAt> 
     2079                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2080                <Point> 
     2081                    <coordinates>8.898047664850367,53.04011230005033,0</coordinates> 
     2082                </Point> 
     2083            </Placemark> 
     2084            <Placemark> 
     2085                <name>Sundial, Butjadingersrasse, Bremen</name> 
     2086                <description><![CDATA[<p><img src="http://planetarium.hs-bremen.de/planetarium/astroinfo/sonnenuhren/sonstige/butjadinger.jpg"></p>]]></description> 
     2087                <LookAt> 
     2088                    <longitude>8.759747956980032</longitude> 
     2089                    <latitude>53.08143879125452</latitude> 
     2090                    <altitude>0</altitude> 
     2091                    <range>37.83897098076405</range> 
     2092                    <tilt>0</tilt> 
     2093                    <heading>-0.002629545926081431</heading> 
     2094                    <altitudeMode>relativeToGround</altitudeMode> 
     2095                </LookAt> 
     2096                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2097                <Point> 
     2098                    <coordinates>8.759712018733111,53.08151322706201,0</coordinates> 
     2099                </Point> 
     2100            </Placemark> 
     2101        </Folder> 
     2102        <Folder> 
     2103            <name>In Progress</name> 
     2104            <Placemark> 
     2105                <name>Sundial, Greenwich, USA</name> 
     2106                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/345_ct_greenwich.jpg"></p>]]></description> 
     2107                <LookAt> 
     2108                    <longitude>-73.61498302559443</longitude> 
     2109                    <latitude>41.02226092221508</latitude> 
     2110                    <altitude>0</altitude> 
     2111                    <range>149.2259168633856</range> 
     2112                    <tilt>1.357926888487057e-010</tilt> 
     2113                    <heading>-0.001539166856947675</heading> 
     2114                    <altitudeMode>relativeToGround</altitudeMode> 
     2115                </LookAt> 
     2116                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2117                <Point> 
     2118                    <coordinates>-73.61504279924034,41.022311140554,0</coordinates> 
     2119                </Point> 
     2120            </Placemark> 
     2121            <Placemark> 
     2122                <name>Sonnenuhr?</name> 
     2123                <LookAt> 
     2124                    <longitude>11.05508326700377</longitude> 
     2125                    <latitude>49.45922489288633</latitude> 
     2126                    <altitude>0</altitude> 
     2127                    <range>50.88443884213967</range> 
     2128                    <tilt>8.335955203191607e-009</tilt> 
     2129                    <heading>0.0196675278275586</heading> 
     2130                    <altitudeMode>relativeToGround</altitudeMode> 
     2131                </LookAt> 
     2132                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2133                <Point> 
     2134                    <coordinates>11.0551380716084,49.45927364486676,0</coordinates> 
     2135                </Point> 
     2136            </Placemark> 
     2137            <Placemark> 
     2138                <name>Sundial, Edgewood Park, New Haven, USA</name> 
     2139                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/279_ct_newha_eng.jpg"><p> 
     2140 
     2141<p><img src="http://www.sundials.org/registry/regphotos/279_ct_newha_eng2.jpg"><p>]]></description> 
     2142                <LookAt> 
     2143                    <longitude>-72.95215163561284</longitude> 
     2144                    <latitude>41.31399188322968</latitude> 
     2145                    <altitude>0</altitude> 
     2146                    <range>154.2904142456261</range> 
     2147                    <tilt>0</tilt> 
     2148                    <heading>0.002187256502984029</heading> 
     2149                    <altitudeMode>relativeToGround</altitudeMode> 
     2150                </LookAt> 
     2151                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2152                <Point> 
     2153                    <coordinates>-72.95224192688632,41.31401837758977,0</coordinates> 
     2154                </Point> 
     2155            </Placemark> 
     2156            <Placemark> 
     2157                <name>Sundial, Pearl City, Oahu, USA</name> 
     2158                <description><![CDATA[<p><img src="http://www.sundials.org/registry/regphotos/535_hi_pearlcity_uofhi_1.jpg" height="300px" width="450px"></p>]]></description> 
     2159                <LookAt> 
     2160                    <longitude>-157.975920511215</longitude> 
     2161                    <latitude>21.39370171784438</latitude> 
     2162                    <altitude>0</altitude> 
     2163                    <range>93.82906502148613</range> 
     2164                    <tilt>0</tilt> 
     2165                    <heading>-0.001426474135915891</heading> 
     2166                    <altitudeMode>relativeToGround</altitudeMode> 
     2167                </LookAt> 
     2168                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2169                <Point> 
     2170                    <coordinates>-157.9759385077734,21.39376422631041,0</coordinates> 
     2171                </Point> 
     2172            </Placemark> 
     2173            <Placemark> 
     2174                <name>Sundial</name> 
     2175                <description>http://maget.maget.free.fr/SiteMont/index.html</description> 
     2176                <LookAt> 
     2177                    <longitude>-1.511135684750573</longitude> 
     2178                    <latitude>48.63640399624012</latitude> 
     2179                    <altitude>0</altitude> 
     2180                    <range>623.6899626138724</range> 
     2181                    <tilt>0</tilt> 
     2182                    <heading>-1.851737885201182e-005</heading> 
     2183                    <altitudeMode>relativeToGround</altitudeMode> 
     2184                </LookAt> 
     2185                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2186                <Point> 
     2187                    <coordinates>-1.511518347366319,48.63786003229999,0</coordinates> 
     2188                </Point> 
     2189            </Placemark> 
     2190            <GroundOverlay> 
     2191                <name>Mont-Saint-Michel</name> 
     2192                <description>http://maget.maget.free.fr/SiteMont/MSpage4.htm</description> 
     2193                <Icon> 
     2194                    <href>http://maget.maget.free.fr/SiteMont/images/le_Mont_Solaire-Land%20Art.jpg</href> 
     2195                    <viewBoundScale>0.75</viewBoundScale> 
     2196                </Icon> 
     2197                <LatLonBox> 
     2198                    <north>48.63770978435333</north> 
     2199                    <south>48.6344604605756</south> 
     2200                    <east>-1.5070705975067</east> 
     2201                    <west>-1.514375149320612</west> 
     2202                    <rotation>-11.46597601725745</rotation> 
     2203                </LatLonBox> 
     2204            </GroundOverlay> 
     2205            <Placemark> 
     2206                <name>Sundial Park, Ludiver park</name> 
     2207                <description>http://perso.orange.fr/cadrans.solaires/cadrans/cadran-parc-ludiver.html</description> 
     2208                <LookAt> 
     2209                    <longitude>-1.727863357864637</longitude> 
     2210                    <latitude>49.63119498354116</latitude> 
     2211                    <altitude>0</altitude> 
     2212                    <range>473.1060190443535</range> 
     2213                    <tilt>3.883358970183465e-011</tilt> 
     2214                    <heading>0.0005701632901766135</heading> 
     2215                    <altitudeMode>relativeToGround</altitudeMode> 
     2216                </LookAt> 
     2217                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2218                <Point> 
     2219                    <coordinates>-1.728331456927833,49.63191584214422,0</coordinates> 
     2220                </Point> 
     2221            </Placemark> 
     2222            <Placemark> 
     2223                <name>Sonnenuhr?</name> 
     2224                <LookAt> 
     2225                    <longitude>7.68545763101957</longitude> 
     2226                    <latitude>51.53642499090419</latitude> 
     2227                    <altitude>0</altitude> 
     2228                    <range>23.70363190324798</range> 
     2229                    <tilt>4.475657800962137e-010</tilt> 
     2230                    <heading>-0.1674345977313924</heading> 
     2231                    <altitudeMode>relativeToGround</altitudeMode> 
     2232                </LookAt> 
     2233                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2234                <Point> 
     2235                    <coordinates>7.685416995069303,51.53648149450991,0</coordinates> 
     2236                </Point> 
     2237            </Placemark> 
     2238            <Placemark> 
     2239                <name>Sundial at Tower of London</name> 
     2240                <description><![CDATA[<img src="http://gallery.ontopof-theworld.com/albums/photohunt/IMG_1031_t.jpg">]]></description> 
     2241                <LookAt> 
     2242                    <longitude>-0.07656780337525181</longitude> 
     2243                    <latitude>51.50981727675416</latitude> 
     2244                    <altitude>0</altitude> 
     2245                    <range>61.73369699893549</range> 
     2246                    <tilt>9.251491983355112e-010</tilt> 
     2247                    <heading>0.009688876514144714</heading> 
     2248                </LookAt> 
     2249                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2250                <Point> 
     2251                    <coordinates>-0.07656780337525181,51.50981727675417,0</coordinates> 
     2252                </Point> 
     2253            </Placemark> 
     2254            <Placemark> 
     2255                <name>War Veterans&apos; Memorial Park Sundial, Florida, United States</name> 
     2256                <LookAt> 
     2257                    <longitude>-82.77333790901622</longitude> 
     2258                    <latitude>27.8036881517592</latitude> 
     2259                    <altitude>0</altitude> 
     2260                    <range>96.43655563554265</range> 
     2261                    <tilt>4.405141995417006e-010</tilt> 
     2262                    <heading>9.892674215924156e-005</heading> 
     2263                    <altitudeMode>relativeToGround</altitudeMode> 
     2264                </LookAt> 
     2265                <styleUrl>#msn_sunny_copy69</styleUrl> 
     2266                <Point> 
     2267                    <coordinates>-82.77341348054247,27.80374932310448,0</coordinates> 
     2268                </Point> 
     2269            </Placemark> 
     2270        </Folder> 
     2271    </Folder> 
     2272</Document> 
     2273</kml> 
  • examples/popups.html

    old new  
    7272        } 
    7373         
    7474        function mousedown(evt) { 
    75              // check to see if the popup was hidden by the close box 
    76              // if so, then destroy it before continuing 
    77             if (popup != null) { 
    78                 if (!popup.visible()) { 
    79                     markers.map.removePopup(popup); 
    80                     popup.destroy(); 
    81                     popup = null; 
    82                 } 
    83             } 
    8475            if (popup == null) { 
    8576                popup = feature.createPopup(true); 
    86                 popup.setContentHTML("<a href='http://www.somethingconstructive.net' target='_blank'>click me</a>"); 
     77                popup.setContentHTML("<div style='background-color:red; width:150;height:100'><a href='http://www.somethingconstructive.net' target='_blank'>click me</a></div>"); 
    8778                popup.setBackgroundColor("yellow"); 
    8879                popup.setOpacity(0.7); 
    8980                markers.map.addPopup(popup); 
    9081            } else { 
    91                 markers.map.removePopup(popup); 
    92                 popup.destroy(); 
    93                 popup = null; 
    94             } 
     82                popup.toggle(); 
     83               } 
    9584            OpenLayers.Event.stop(evt); 
    9685        }         
    9786 
  • examples/popupMatrix.html

    old new  
     1<html xmlns="http://www.w3.org/1999/xhtml" debug="true"> 
     2  <head> 
     3    <link rel="stylesheet" href="../theme/default/style.css" type="text/css" /> 
     4    <style type="text/css"> 
     5        #map { 
     6            width: 900px; 
     7            height: 500px; 
     8            border: 1px solid black; 
     9            background-color: blue; 
     10        } 
     11    </style> 
     12 
     13    <link rel="stylesheet" href="../theme/default/framedCloud.css" type="text/css" /> 
     14 
     15    <script src="../lib/Firebug/firebug.js"></script> 
     16    <script src="../lib/OpenLayers.js"></script> 
     17    <script type="text/javascript"> 
     18        var map; 
     19        var layer, markers; 
     20         
     21        var currentPopup; 
     22         
     23        var samplePopupContentsHTML = "Old man down, way down down, down by the docks of the city.<br>Blind and dirty, asked me for a dime, a dime for a cup of coffee.<br>I got no dime but I got some time to hear his story.<br>My name is August West, and I love my Pearly Baker best more than my wine.<br>More than my wine - more than my maker, though he's no friend of mine.<br><br>Everyone said, I'd come to no good, I knew I would Pearly, believe them.<br>Half of my life, I spent doin' time for some other fucker's crime,<br>The other half found me stumbling 'round drunk on Burgundy wine.<br><br>But I'll get back on my feet again someday,<br>The good Lord willin', if He says I may.<br>I know that the life i'm livin's no good,<br>I'll get a new start, live the life I should.<br>I'll get up and fly away, I'll get up and fly away, fly away.<br><br>Pearly's been true, true to me, true to my dyin' day he said,<br>I said to him, I said to him, I'm sure she's been.<br>I said to him, I'm sure she's been tru to you.<br><br>Got up and wandered, wandered downtown, nowhere to go but just hang around.<br>I've got a girl, named Bonnie Lee, I know that girl's been true to me.<br>I know she's been, I'm sure she's been true to me.<br><br>"; 
     24        var samplePopupContentsHTML_WideShort = "Old man down, way down down, down by the docks of the city.Blind and dirty, asked me for a dime, a dime for a cup of coffee.I got no dime but I got some time to hear his story.My name is August West, and I love my Pearly Baker best more than my wine.More than my wine - more than my maker, though he's no friend of mine.Everyone said, I'd come to no good, I knew I would Pearly, believe them.<br>Half of my life, I spent doin' time for some other fucker's crime,The other half found me stumbling 'round drunk on Burgundy wine.But I'll get back on my feet again someday,The good Lord willin', if He says I may.I know that the life i'm livin's no good,I'll get a new start, live the life I should.I'll get up and fly away, I'll get up and fly away, fly away.Pearly's been true, true to me, true to my dyin' day he said,I said to him, I said to him, I'm sure she's been.I said to him, I'm sure she's been tru to you.Got up and wandered, wandered downtown, nowhere to go but just hang around.I've got a girl, named Bonnie Lee, I know that girl's been true to me.I know she's been, I'm sure she's been true to me."; 
     25         
     26// different popup types 
     27 
     28    //anchored 
     29        AutoSizeAnchored = OpenLayers.Class(OpenLayers.Popup.Anchored, { 
     30            'autoSize': true 
     31        }); 
     32 
     33        AutoSizeAnchoredMinSize = OpenLayers.Class(OpenLayers.Popup.Anchored, { 
     34            'autoSize': true,  
     35            'minSize': new OpenLayers.Size(400,400) 
     36        }); 
     37 
     38        AutoSizeAnchoredMaxSize = OpenLayers.Class(OpenLayers.Popup.Anchored, { 
     39            'autoSize': true,  
     40            'maxSize': new OpenLayers.Size(100,100) 
     41        }); 
     42 
     43        //anchoredbubble 
     44     
     45        AutoSizeAnchoredBubble = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, { 
     46            'autoSize': true 
     47        }); 
     48 
     49        AutoSizeAnchoredBubbleMinSize = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, { 
     50            'autoSize': true,  
     51            'minSize': new OpenLayers.Size(400,400) 
     52        }); 
     53 
     54        AutoSizeAnchoredBubbleMaxSize = OpenLayers.Class(OpenLayers.Popup.AnchoredBubble, { 
     55            'autoSize': true,  
     56            'maxSize': new OpenLayers.Size(100,100) 
     57        }); 
     58 
     59        //framed 
     60 
     61        //disable the autosize for the purpose of our matrix 
     62        OpenLayers.Popup.FramedCloud.prototype.autoSize = false; 
     63 
     64        AutoSizeFramedCloud = OpenLayers.Class(OpenLayers.Popup.FramedCloud, { 
     65            'autoSize': true 
     66        }); 
     67 
     68        AutoSizeFramedCloudMinSize = OpenLayers.Class(OpenLayers.Popup.FramedCloud, { 
     69            'autoSize': true,  
     70            'minSize': new OpenLayers.Size(400,400) 
     71        }); 
     72 
     73        AutoSizeFramedCloudMaxSize = OpenLayers.Class(OpenLayers.Popup.FramedCloud, { 
     74            'autoSize': true,  
     75            'maxSize': new OpenLayers.Size(100,100) 
     76        }); 
     77 
     78         
     79        function init(){ 
     80            map = new OpenLayers.Map('map'); 
     81 
     82            layer = new OpenLayers.Layer.Image( 
     83                "popupMatrix",  
     84                "popupMatrix.jpg",  
     85                new OpenLayers.Bounds(-82.5,-71.5,97.5,67.5), 
     86                new OpenLayers.Size(1024,768) 
     87            ); 
     88            map.addLayer(layer); 
     89 
     90            markers = new OpenLayers.Layer.Markers("zibo"); 
     91            map.addLayer(markers); 
     92 
     93            map.addControl(new OpenLayers.Control.LayerSwitcher()); 
     94            map.zoomToMaxExtent(); 
     95 
     96            addMarkers(); 
     97        } 
     98         
     99        function addMarkers() { 
     100 
     101            var ll, popupClass, popupContentHTML; 
     102 
     103        // 
     104        //Anchored NO OVERFLOW 
     105        // 
     106 
     107            //anchored popup small contents no autosize 
     108            ll = new OpenLayers.LonLat(-55,20); 
     109            popupClass = OpenLayers.Popup.Anchored; 
     110            popupContentHTML = '<img src="small.jpg"></img>'; 
     111            addMarker(ll, popupClass, popupContentHTML); 
     112 
     113            //anchored popup small contents no autosize closebox 
     114            var ll = new OpenLayers.LonLat(-50,20); 
     115            popupClass = OpenLayers.Popup.Anchored; 
     116            popupContentHTML = '<img src="small.jpg"></img>'; 
     117            addMarker(ll, popupClass, popupContentHTML, true); 
     118 
     119 
     120            //anchored popup small contents autosize 
     121            ll = new OpenLayers.LonLat(-40,20); 
     122            popupClass = AutoSizeAnchored; 
     123            popupContentHTML = '<img src="small.jpg"></img>'; 
     124            addMarker(ll, popupClass, popupContentHTML); 
     125 
     126            //anchored popup small contents autosize closebox 
     127            ll = new OpenLayers.LonLat(-35,20); 
     128            popupClass = AutoSizeAnchored; 
     129            popupContentHTML = '<img src="small.jpg"></img>'; 
     130            addMarker(ll, popupClass, popupContentHTML, true); 
     131 
     132 
     133            //anchored popup small contents autosize minsize 
     134            ll = new OpenLayers.LonLat(-25,20); 
     135            popupClass = AutoSizeAnchoredMinSize; 
     136            popupContentHTML = '<img src="small.jpg"></img>'; 
     137            addMarker(ll, popupClass, popupContentHTML); 
     138 
     139            //anchored popup small contents autosize minsize closebox 
     140            ll = new OpenLayers.LonLat(-20,20); 
     141            popupClass = AutoSizeAnchoredMinSize; 
     142            popupContentHTML = '<img src="small.jpg"></img>'; 
     143            addMarker(ll, popupClass, popupContentHTML, true); 
     144 
     145 
     146            //anchored popup small contents autosize maxsize 
     147            ll = new OpenLayers.LonLat(-10,20); 
     148            popupClass = AutoSizeAnchoredMaxSize; 
     149            popupContentHTML = '<img src="small.jpg"></img>'; 
     150            addMarker(ll, popupClass, popupContentHTML); 
     151 
     152            //anchored popup small contents autosize maxsize closebox 
     153            ll = new OpenLayers.LonLat(-5,20); 
     154            popupClass = AutoSizeAnchoredMaxSize; 
     155            popupContentHTML = '<img src="small.jpg"></img>'; 
     156            addMarker(ll, popupClass, popupContentHTML, true); 
     157 
     158 
     159            //anchored popup bigger contents autosize 
     160            ll = new OpenLayers.LonLat(5,20); 
     161            popupClass = AutoSizeAnchored; 
     162            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>' + samplePopupContentsHTML + '</div>'  
     163            addMarker(ll, popupClass, popupContentHTML); 
     164 
     165            //anchored popup bigger contents autosize closebox 
     166            ll = new OpenLayers.LonLat(10,20); 
     167            popupClass = AutoSizeAnchored; 
     168            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>'  
     169            addMarker(ll, popupClass, popupContentHTML, true); 
     170 
     171            //anchored popup wide short text contents autosize 
     172            ll = new OpenLayers.LonLat(20,20); 
     173            popupClass = AutoSizeAnchored; 
     174            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     175            addMarker(ll, popupClass, popupContentHTML); 
     176 
     177            //anchored popup wide short text contents autosize closebox 
     178            ll = new OpenLayers.LonLat(25,20); 
     179            popupClass = AutoSizeAnchored; 
     180            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     181            addMarker(ll, popupClass, popupContentHTML, true); 
     182 
     183 
     184            //anchored popup wide short fixed contents autosize 
     185            ll = new OpenLayers.LonLat(35,20); 
     186            popupClass = AutoSizeAnchored; 
     187            popupContentHTML = '<img src="wideshort.jpg"></img>'; 
     188            addMarker(ll, popupClass, popupContentHTML); 
     189 
     190            //anchored popup wide short fixed contents autosize closebox 
     191            ll = new OpenLayers.LonLat(40,20); 
     192            popupClass = AutoSizeAnchored; 
     193            popupContentHTML = '<img src="wideshort.jpg"></img>'; 
     194            addMarker(ll, popupClass, popupContentHTML, true); 
     195 
     196 
     197            //anchored popup thin long fixed contents autosize 
     198            ll = new OpenLayers.LonLat(50,20); 
     199            popupClass = AutoSizeAnchored; 
     200            popupContentHTML = '<img src="thinlong.jpg"></img>'; 
     201            addMarker(ll, popupClass, popupContentHTML); 
     202 
     203            //anchored popup thin long fixed contents autosize closebox 
     204            ll = new OpenLayers.LonLat(55,20); 
     205            popupClass = AutoSizeAnchored; 
     206            popupContentHTML = '<img src="thinlong.jpg"></img>'; 
     207            addMarker(ll, popupClass, popupContentHTML, true); 
     208 
     209 
     210            //anchored popup wide long fixed contents autosize 
     211            ll = new OpenLayers.LonLat(65,20); 
     212            popupClass = AutoSizeAnchored; 
     213            popupContentHTML = '<img  src="widelong.jpg"></img>'  
     214            addMarker(ll, popupClass, popupContentHTML); 
     215 
     216            //anchored popup wide long fixed contents autosize closebox 
     217            ll = new OpenLayers.LonLat(70,20); 
     218            popupClass = AutoSizeAnchored; 
     219            popupContentHTML = '<img  src="widelong.jpg"></img>'  
     220            addMarker(ll, popupClass, popupContentHTML, true); 
     221 
     222        // 
     223        //Anchored WITH OVERFLOW 
     224        // 
     225 
     226            //anchored popup small contents no autosize overflow 
     227            var ll = new OpenLayers.LonLat(-55,15); 
     228            popupClass = OpenLayers.Popup.Anchored; 
     229            popupContentHTML = '<img src="small.jpg"></img>'; 
     230            addMarker(ll, popupClass, popupContentHTML, false, true); 
     231 
     232            //anchored popup small contents no autosize closebox overflow 
     233            var ll = new OpenLayers.LonLat(-50,15); 
     234            popupClass = OpenLayers.Popup.Anchored; 
     235            popupContentHTML = '<img src="small.jpg"></img>'; 
     236            addMarker(ll, popupClass, popupContentHTML, true, true); 
     237 
     238 
     239            //anchored popup small contents autosize overflow 
     240            ll = new OpenLayers.LonLat(-40,15); 
     241            popupClass = AutoSizeAnchored; 
     242            popupContentHTML = '<img src="small.jpg"></img>'; 
     243            addMarker(ll, popupClass, popupContentHTML, false, true); 
     244 
     245            //anchored popup small contents autosize closebox overflow 
     246            ll = new OpenLayers.LonLat(-35,15); 
     247            popupClass = AutoSizeAnchored; 
     248            popupContentHTML = '<img src="small.jpg"></img>'; 
     249            addMarker(ll, popupClass, popupContentHTML, true, true); 
     250 
     251 
     252            //anchored popup small contents autosize minsize overflow 
     253            ll = new OpenLayers.LonLat(-25,15); 
     254            popupClass = AutoSizeAnchoredMinSize; 
     255            popupContentHTML = '<img src="small.jpg"></img>'; 
     256            addMarker(ll, popupClass, popupContentHTML, false, true); 
     257 
     258            //anchored popup small contents autosize minsize closebox overflow 
     259            ll = new OpenLayers.LonLat(-20,15); 
     260            popupClass = AutoSizeAnchoredMinSize; 
     261            popupContentHTML = '<img src="small.jpg"></img>'; 
     262            addMarker(ll, popupClass, popupContentHTML, true, true); 
     263 
     264 
     265            //anchored popup small contents autosize maxsize overflow 
     266            ll = new OpenLayers.LonLat(-10,15); 
     267            popupClass = AutoSizeAnchoredMaxSize; 
     268            popupContentHTML = '<img src="small.jpg"></img>'; 
     269            addMarker(ll, popupClass, popupContentHTML, false, true); 
     270 
     271            //anchored popup small contents autosize maxsize closebox overflow 
     272            ll = new OpenLayers.LonLat(-5,15); 
     273            popupClass = AutoSizeAnchoredMaxSize; 
     274            popupContentHTML = '<img src="small.jpg"></img>'; 
     275            addMarker(ll, popupClass, popupContentHTML, true, true); 
     276 
     277 
     278            //anchored popup bigger contents autosize overflow 
     279            ll = new OpenLayers.LonLat(5,15); 
     280            popupClass = AutoSizeAnchored; 
     281            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>'  
     282            addMarker(ll, popupClass, popupContentHTML, false, true); 
     283 
     284            //anchored popup bigger contents autosize closebox overflow 
     285            ll = new OpenLayers.LonLat(10,15); 
     286            popupClass = AutoSizeAnchored; 
     287            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML + '</div>'  
     288            addMarker(ll, popupClass, popupContentHTML, true, true); 
     289 
     290 
     291            //anchored popup wide short text contents autosize overflow 
     292            ll = new OpenLayers.LonLat(20,15); 
     293            popupClass = AutoSizeAnchored; 
     294            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     295            addMarker(ll, popupClass, popupContentHTML, false, true); 
     296 
     297            //anchored popup wide short text contents autosize closebox overflow 
     298            ll = new OpenLayers.LonLat(25,15); 
     299            popupClass = AutoSizeAnchored; 
     300            popupContentHTML = '<div style="background-color:red;">Popup.Anchored<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     301            addMarker(ll, popupClass, popupContentHTML, true, true); 
     302 
     303            //anchored popup wide short fixed contents autosize overflow 
     304            ll = new OpenLayers.LonLat(35,15); 
     305            popupClass = AutoSizeAnchored; 
     306            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     307            addMarker(ll, popupClass, popupContentHTML, false, true); 
     308 
     309            //anchored popup wide short fixed contents autosize closebox overflow 
     310            ll = new OpenLayers.LonLat(40,15); 
     311            popupClass = AutoSizeAnchored; 
     312            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     313            addMarker(ll, popupClass, popupContentHTML, true, true); 
     314 
     315 
     316            //anchored popup thin long fixed contents autosize overflow 
     317            ll = new OpenLayers.LonLat(50,15); 
     318            popupClass = AutoSizeAnchored; 
     319            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     320            addMarker(ll, popupClass, popupContentHTML, false, true); 
     321 
     322            //anchored popup thin long fixed contents autosize closebox overflow 
     323            ll = new OpenLayers.LonLat(55,15); 
     324            popupClass = AutoSizeAnchored; 
     325            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     326            addMarker(ll, popupClass, popupContentHTML, true, true); 
     327 
     328 
     329            //anchored popup wide long fixed contents autosize overflow 
     330            ll = new OpenLayers.LonLat(65,15); 
     331            popupClass = AutoSizeAnchored; 
     332            popupContentHTML = '<img src="widelong.jpg"></img>'  
     333            addMarker(ll, popupClass, popupContentHTML, false, true); 
     334 
     335            //anchored popup wide long fixed contents autosize closebox overflow 
     336            ll = new OpenLayers.LonLat(70,15); 
     337            popupClass = AutoSizeAnchored; 
     338            popupContentHTML = '<img src="widelong.jpg"></img>'  
     339            addMarker(ll, popupClass, popupContentHTML, true, true); 
     340 
     341 
     342        // 
     343        //Bubble NO OVERFLOW 
     344        // 
     345 
     346            //anchored bubble popup small contents no autosize 
     347            var ll = new OpenLayers.LonLat(-55,5); 
     348            popupClass = OpenLayers.Popup.AnchoredBubble; 
     349            popupContentHTML = '<img src="small.jpg"></img>'; 
     350            addMarker(ll, popupClass, popupContentHTML, false); 
     351 
     352            //anchored bubble popup small contents no autosize closebox 
     353            var ll = new OpenLayers.LonLat(-50,5); 
     354            popupClass = OpenLayers.Popup.AnchoredBubble; 
     355            popupContentHTML = '<img src="small.jpg"></img>'; 
     356            addMarker(ll, popupClass, popupContentHTML, true); 
     357 
     358 
     359            //anchored bubble popup small contents autosize 
     360            ll = new OpenLayers.LonLat(-40,5); 
     361            popupClass = AutoSizeAnchoredBubble; 
     362            popupContentHTML = '<img src="small.jpg"></img>'; 
     363            addMarker(ll, popupClass, popupContentHTML, false); 
     364 
     365            //anchored bubble popup small contents autosize closebox 
     366            ll = new OpenLayers.LonLat(-35,5); 
     367            popupClass = AutoSizeAnchoredBubble; 
     368            popupContentHTML = '<img src="small.jpg"></img>'; 
     369            addMarker(ll, popupClass, popupContentHTML, true); 
     370 
     371 
     372            //anchored bubble popup small contents autosize minsize 
     373            ll = new OpenLayers.LonLat(-25,5); 
     374            popupClass = AutoSizeAnchoredBubbleMinSize; 
     375            popupContentHTML = '<img src="small.jpg"></img>'; 
     376            addMarker(ll, popupClass, popupContentHTML, false); 
     377 
     378            //anchored bubble popup small contents autosize minsize closebox 
     379            ll = new OpenLayers.LonLat(-20,5); 
     380            popupClass = AutoSizeAnchoredBubbleMinSize; 
     381            popupContentHTML = '<img src="small.jpg"></img>'; 
     382            addMarker(ll, popupClass, popupContentHTML, true); 
     383 
     384 
     385            //anchored bubble popup small contents autosize maxsize 
     386            ll = new OpenLayers.LonLat(-10,5); 
     387            popupClass = AutoSizeAnchoredBubbleMaxSize; 
     388            popupContentHTML = '<img src="small.jpg"></img>'; 
     389            addMarker(ll, popupClass, popupContentHTML, false); 
     390 
     391            //anchored bubble popup small contents autosize maxsize closebox 
     392            ll = new OpenLayers.LonLat(-5,5); 
     393            popupClass = AutoSizeAnchoredBubbleMaxSize; 
     394            popupContentHTML = '<img src="small.jpg"></img>'; 
     395            addMarker(ll, popupClass, popupContentHTML, true); 
     396 
     397 
     398            //anchored bubble popup bigger contents autosize closebox 
     399            ll = new OpenLayers.LonLat(5,5); 
     400            popupClass = AutoSizeAnchoredBubble; 
     401            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>' + samplePopupContentsHTML + '</div>'  
     402            addMarker(ll, popupClass, popupContentHTML, false); 
     403 
     404            //anchored bubble popup bigger contents autosize closebox 
     405            ll = new OpenLayers.LonLat(10,5); 
     406            popupClass = AutoSizeAnchoredBubble; 
     407            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>'  
     408            addMarker(ll, popupClass, popupContentHTML, true); 
     409 
     410 
     411            //anchored bubble popup wide short text contents autosize 
     412            ll = new OpenLayers.LonLat(20,5); 
     413            popupClass = AutoSizeAnchoredBubble; 
     414            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     415            addMarker(ll, popupClass, popupContentHTML); 
     416 
     417            //anchored bubble popup wide short text contents autosize closebox 
     418            ll = new OpenLayers.LonLat(25,5); 
     419            popupClass = AutoSizeAnchoredBubble; 
     420            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     421            addMarker(ll, popupClass, popupContentHTML, true); 
     422 
     423 
     424            //anchored bubble popup wide short fixed contents autosize 
     425            ll = new OpenLayers.LonLat(35,5); 
     426            popupClass = AutoSizeAnchoredBubble; 
     427            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     428            addMarker(ll, popupClass, popupContentHTML); 
     429 
     430            //anchored bubble popup wide short fixed contents autosize closebox 
     431            ll = new OpenLayers.LonLat(40,5); 
     432            popupClass = AutoSizeAnchoredBubble; 
     433            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     434            addMarker(ll, popupClass, popupContentHTML, true); 
     435 
     436 
     437            //anchored bubble popup thin long fixed contents autosize 
     438            ll = new OpenLayers.LonLat(50,5); 
     439            popupClass = AutoSizeAnchoredBubble; 
     440            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     441            addMarker(ll, popupClass, popupContentHTML); 
     442 
     443            //anchored bubble popup thin long fixed contents autosize closebox 
     444            ll = new OpenLayers.LonLat(55,5); 
     445            popupClass = AutoSizeAnchoredBubble; 
     446            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     447            addMarker(ll, popupClass, popupContentHTML, true); 
     448 
     449 
     450            //anchored bubble popup wide long fixed contents autosize 
     451            ll = new OpenLayers.LonLat(65,5); 
     452            popupClass = AutoSizeAnchoredBubble; 
     453            popupContentHTML = '<img src="widelong.jpg"></img>'  
     454            addMarker(ll, popupClass, popupContentHTML); 
     455 
     456            //anchored bubble popup wide long fixed contents autosize closebox 
     457            ll = new OpenLayers.LonLat(70,5); 
     458            popupClass = AutoSizeAnchoredBubble; 
     459            popupContentHTML = '<img src="widelong.jpg"></img>'  
     460            addMarker(ll, popupClass, popupContentHTML, true); 
     461 
     462          // 
     463          //Bubble OVERFLOW 
     464          // 
     465 
     466              //anchored bubble popup small contents no autosize 
     467            var ll = new OpenLayers.LonLat(-55,0); 
     468            popupClass = OpenLayers.Popup.AnchoredBubble; 
     469            popupContentHTML = '<img src="small.jpg"></img>'; 
     470            addMarker(ll, popupClass, popupContentHTML, false, true); 
     471 
     472              //anchored bubble popup small contents no autosize closebox 
     473            var ll = new OpenLayers.LonLat(-50,0); 
     474            popupClass = OpenLayers.Popup.AnchoredBubble; 
     475            popupContentHTML = '<img src="small.jpg"></img>'; 
     476            addMarker(ll, popupClass, popupContentHTML, true, true); 
     477 
     478 
     479            //anchored bubble popup small contents autosize 
     480            ll = new OpenLayers.LonLat(-40,0); 
     481            popupClass = AutoSizeAnchoredBubble; 
     482            popupContentHTML = '<img src="small.jpg"></img>'; 
     483            addMarker(ll, popupClass, popupContentHTML, false, true); 
     484 
     485            //anchored bubble popup small contents autosize closebox 
     486            ll = new OpenLayers.LonLat(-35,0); 
     487            popupClass = AutoSizeAnchoredBubble; 
     488            popupContentHTML = '<img src="small.jpg"></img>'; 
     489            addMarker(ll, popupClass, popupContentHTML, true, true); 
     490 
     491 
     492            //anchored bubble popup small contents autosize minsize 
     493            ll = new OpenLayers.LonLat(-25,0); 
     494            popupClass = AutoSizeAnchoredBubbleMinSize; 
     495            popupContentHTML = '<img src="small.jpg"></img>'; 
     496            addMarker(ll, popupClass, popupContentHTML, false, true); 
     497 
     498            //anchored bubble popup small contents autosize minsize closebox 
     499            ll = new OpenLayers.LonLat(-20,0); 
     500            popupClass = AutoSizeAnchoredBubbleMinSize; 
     501            popupContentHTML = '<img src="small.jpg"></img>'; 
     502            addMarker(ll, popupClass, popupContentHTML, true, true); 
     503 
     504 
     505            //anchored bubble popup small contents autosize maxsize 
     506            ll = new OpenLayers.LonLat(-10,0); 
     507            popupClass = AutoSizeAnchoredBubbleMaxSize; 
     508            popupContentHTML = '<img src="small.jpg"></img>'; 
     509            addMarker(ll, popupClass, popupContentHTML, false, true); 
     510 
     511            //anchored bubble popup small contents autosize maxsize closebox 
     512            ll = new OpenLayers.LonLat(-5,0); 
     513            popupClass = AutoSizeAnchoredBubbleMaxSize; 
     514            popupContentHTML = '<img src="small.jpg"></img>'; 
     515            addMarker(ll, popupClass, popupContentHTML, true, true); 
     516 
     517 
     518            //anchored bubble popup bigger contents autosize closebox 
     519            ll = new OpenLayers.LonLat(5,0); 
     520            popupClass = AutoSizeAnchoredBubble; 
     521            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>'  
     522            addMarker(ll, popupClass, popupContentHTML, false, true); 
     523 
     524            //anchored bubble popup bigger contents autosize closebox 
     525            ll = new OpenLayers.LonLat(10,0); 
     526            popupClass = AutoSizeAnchoredBubble; 
     527            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>closebox<br>overflow<br>' + samplePopupContentsHTML + '</div>'  
     528            addMarker(ll, popupClass, popupContentHTML, true, true); 
     529 
     530 
     531            //anchored bubble popup wide short contents autosize overflow 
     532            ll = new OpenLayers.LonLat(20,0); 
     533            popupClass = AutoSizeAnchoredBubble; 
     534            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     535            addMarker(ll, popupClass, popupContentHTML, false, true); 
     536 
     537            //anchored bubble popup wide short contents autosize closebox overflow 
     538            ll = new OpenLayers.LonLat(25,0); 
     539            popupClass = AutoSizeAnchoredBubble; 
     540            popupContentHTML = '<div style="background-color:red;">Popup.AnchoredBubble<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     541            addMarker(ll, popupClass, popupContentHTML, true, true); 
     542 
     543 
     544            //anchored bubble popup wide short fixed contents autosize overflow 
     545            ll = new OpenLayers.LonLat(35,0); 
     546            popupClass = AutoSizeAnchoredBubble; 
     547            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     548            addMarker(ll, popupClass, popupContentHTML, false, true); 
     549 
     550            //anchored bubble popup wide short fixed contents autosize closebox overflow 
     551            ll = new OpenLayers.LonLat(40,0); 
     552            popupClass = AutoSizeAnchoredBubble; 
     553            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     554            addMarker(ll, popupClass, popupContentHTML, true, true); 
     555 
     556 
     557            //anchored bubble popup thin long fixed contents autosize overflow 
     558            ll = new OpenLayers.LonLat(50,0); 
     559            popupClass = AutoSizeAnchoredBubble; 
     560            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     561            addMarker(ll, popupClass, popupContentHTML, false, true); 
     562 
     563            //anchored bubble popup thin long fixed contents autosize closebox overflow 
     564            ll = new OpenLayers.LonLat(55,0); 
     565            popupClass = AutoSizeAnchoredBubble; 
     566            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     567            addMarker(ll, popupClass, popupContentHTML, true, true); 
     568 
     569 
     570            //anchored bubble popup wide long fixed contents autosize overflow 
     571            ll = new OpenLayers.LonLat(65,0); 
     572            popupClass = AutoSizeAnchoredBubble; 
     573            popupContentHTML = '<img src="widelong.jpg"></img>'  
     574            addMarker(ll, popupClass, popupContentHTML, false, true); 
     575 
     576            //anchored bubble popup wide long fixed contents autosize closebox overflow 
     577            ll = new OpenLayers.LonLat(70,0); 
     578            popupClass = AutoSizeAnchoredBubble; 
     579            popupContentHTML = '<img src="widelong.jpg"></img>'  
     580            addMarker(ll, popupClass, popupContentHTML, true, true); 
     581 
     582   //FRAMED 
     583  
     584          // 
     585          //FRAMED NO OVERFLOW 
     586          // 
     587 
     588              //anchored bubble popup small contents no autosize 
     589            var ll = new OpenLayers.LonLat(-55,-15); 
     590            popupClass = OpenLayers.Popup.FramedCloud; 
     591            popupContentHTML = '<img src="small.jpg"></img>'; 
     592            addMarker(ll, popupClass, popupContentHTML, false); 
     593 
     594              //anchored bubble popup small contents no autosize closebox 
     595            var ll = new OpenLayers.LonLat(-50,-15); 
     596            popupClass = OpenLayers.Popup.FramedCloud; 
     597            popupContentHTML = '<img src="small.jpg"></img>'; 
     598            addMarker(ll, popupClass, popupContentHTML, true); 
     599 
     600 
     601            //anchored bubble popup small contents autosize 
     602            ll = new OpenLayers.LonLat(-40,-15); 
     603            popupClass = AutoSizeFramedCloud; 
     604            popupContentHTML = '<img src="small.jpg"></img>'; 
     605            addMarker(ll, popupClass, popupContentHTML, false); 
     606 
     607            //anchored bubble popup small contents autosize closebox 
     608            ll = new OpenLayers.LonLat(-35,-15); 
     609            popupClass = AutoSizeFramedCloud; 
     610            popupContentHTML = '<img src="small.jpg"></img>'; 
     611            addMarker(ll, popupClass, popupContentHTML, true); 
     612 
     613 
     614            //anchored bubble popup small contents autosize minsize 
     615            ll = new OpenLayers.LonLat(-25,-15); 
     616            popupClass = AutoSizeFramedCloudMinSize; 
     617            popupContentHTML = '<img src="small.jpg"></img>'; 
     618            addMarker(ll, popupClass, popupContentHTML, false); 
     619 
     620            //anchored bubble popup small contents autosize minsize closebox 
     621            ll = new OpenLayers.LonLat(-20,-15); 
     622            popupClass = AutoSizeFramedCloudMinSize; 
     623            popupContentHTML = '<img src="small.jpg"></img>'; 
     624            addMarker(ll, popupClass, popupContentHTML, true); 
     625 
     626 
     627            //anchored bubble popup small contents autosize maxsize 
     628            ll = new OpenLayers.LonLat(-10,-15); 
     629            popupClass = AutoSizeFramedCloudMaxSize; 
     630            popupContentHTML = '<img src="small.jpg"></img>'; 
     631            addMarker(ll, popupClass, popupContentHTML, false); 
     632 
     633            //anchored bubble popup small contents autosize maxsize closebox 
     634            ll = new OpenLayers.LonLat(-5,-15); 
     635            popupClass = AutoSizeFramedCloudMaxSize; 
     636            popupContentHTML = '<img src="small.jpg"></img>'; 
     637            addMarker(ll, popupClass, popupContentHTML, true); 
     638 
     639 
     640            //anchored bubble popup bigger contents autosize closebox 
     641            ll = new OpenLayers.LonLat(5,-15); 
     642            popupClass = AutoSizeFramedCloud; 
     643            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>' + samplePopupContentsHTML + '</div>'  
     644            addMarker(ll, popupClass, popupContentHTML, false); 
     645 
     646            //anchored bubble popup bigger contents autosize closebox 
     647            ll = new OpenLayers.LonLat(10,-15); 
     648            popupClass = AutoSizeFramedCloud; 
     649            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>closebox<br>' + samplePopupContentsHTML + '</div>'  
     650            addMarker(ll, popupClass, popupContentHTML, true); 
     651 
     652 
     653            //anchored bubble popup wide short text contents autosize 
     654            ll = new OpenLayers.LonLat(20,-15); 
     655            popupClass = AutoSizeFramedCloud; 
     656            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize - wide short text<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     657            addMarker(ll, popupClass, popupContentHTML); 
     658 
     659            //anchored bubble popup wide short text contents autosize closebox 
     660            ll = new OpenLayers.LonLat(25,-15); 
     661            popupClass = AutoSizeFramedCloud; 
     662            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize - wide short text<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     663            addMarker(ll, popupClass, popupContentHTML, true); 
     664 
     665 
     666            //anchored bubble popup wide short fixed contents autosize 
     667            ll = new OpenLayers.LonLat(35,-15); 
     668            popupClass = AutoSizeFramedCloud; 
     669            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     670            addMarker(ll, popupClass, popupContentHTML); 
     671 
     672            //anchored bubble popup wide short fixed contents autosize closebox 
     673            ll = new OpenLayers.LonLat(40,-15); 
     674            popupClass = AutoSizeFramedCloud; 
     675            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     676            addMarker(ll, popupClass, popupContentHTML, true); 
     677 
     678 
     679            //anchored bubble popup thin long fixed contents autosize 
     680            ll = new OpenLayers.LonLat(50,-15); 
     681            popupClass = AutoSizeFramedCloud; 
     682            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     683            addMarker(ll, popupClass, popupContentHTML); 
     684 
     685            //anchored bubble popup thin long fixed contents autosize closebox 
     686            ll = new OpenLayers.LonLat(55,-15); 
     687            popupClass = AutoSizeFramedCloud; 
     688            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     689            addMarker(ll, popupClass, popupContentHTML, true); 
     690 
     691 
     692            //anchored bubble popup wide long fixed contents autosize 
     693            ll = new OpenLayers.LonLat(65,-15); 
     694            popupClass = AutoSizeFramedCloud; 
     695            popupContentHTML = '<img src="widelong.jpg"></img>'  
     696            addMarker(ll, popupClass, popupContentHTML); 
     697 
     698            //anchored bubble popup wide long fixed contents autosize closebox 
     699            ll = new OpenLayers.LonLat(70,-15); 
     700            popupClass = AutoSizeFramedCloud; 
     701            popupContentHTML = '<img src="widelong.jpg"></img>'  
     702            addMarker(ll, popupClass, popupContentHTML, true); 
     703 
     704          // 
     705          //FRAMED OVERFLOW 
     706          // 
     707 
     708              //anchored bubble popup small contents no autosize 
     709            var ll = new OpenLayers.LonLat(-55,-20); 
     710            popupClass = OpenLayers.Popup.FramedCloud; 
     711            popupContentHTML = '<img src="small.jpg"></img>'; 
     712            addMarker(ll, popupClass, popupContentHTML, false, true); 
     713 
     714              //anchored bubble popup small contents no autosize closebox 
     715            var ll = new OpenLayers.LonLat(-50,-20); 
     716            popupClass = OpenLayers.Popup.FramedCloud; 
     717            popupContentHTML = '<img src="small.jpg"></img>'; 
     718            addMarker(ll, popupClass, popupContentHTML, true, true); 
     719 
     720 
     721            //anchored bubble popup small contents autosize 
     722            ll = new OpenLayers.LonLat(-40,-20); 
     723            popupClass = AutoSizeFramedCloud; 
     724            popupContentHTML = '<img src="small.jpg"></img>'; 
     725            addMarker(ll, popupClass, popupContentHTML, false, true); 
     726 
     727            //anchored bubble popup small contents autosize closebox 
     728            ll = new OpenLayers.LonLat(-35,-20); 
     729            popupClass = AutoSizeFramedCloud; 
     730            popupContentHTML = '<img src="small.jpg"></img>'; 
     731            addMarker(ll, popupClass, popupContentHTML, true, true); 
     732 
     733 
     734            //anchored bubble popup small contents autosize minsize 
     735            ll = new OpenLayers.LonLat(-25,-20); 
     736            popupClass = AutoSizeFramedCloudMinSize; 
     737            popupContentHTML = '<img src="small.jpg"></img>'; 
     738            addMarker(ll, popupClass, popupContentHTML, false, true); 
     739 
     740            //anchored bubble popup small contents autosize minsize closebox 
     741            ll = new OpenLayers.LonLat(-20,-20); 
     742            popupClass = AutoSizeFramedCloudMinSize; 
     743            popupContentHTML = '<img src="small.jpg"></img>'; 
     744            addMarker(ll, popupClass, popupContentHTML, true, true); 
     745 
     746 
     747            //anchored bubble popup small contents autosize maxsize 
     748            ll = new OpenLayers.LonLat(-10,-20); 
     749            popupClass = AutoSizeFramedCloudMaxSize; 
     750            popupContentHTML = '<img src="small.jpg"></img>'; 
     751            addMarker(ll, popupClass, popupContentHTML, false, true); 
     752 
     753            //anchored bubble popup small contents autosize maxsize closebox 
     754            ll = new OpenLayers.LonLat(-5,-20); 
     755            popupClass = AutoSizeFramedCloudMaxSize; 
     756            popupContentHTML = '<img src="small.jpg"></img>'; 
     757            addMarker(ll, popupClass, popupContentHTML, true, true); 
     758 
     759 
     760            //anchored bubble popup bigger contents autosize closebox 
     761            ll = new OpenLayers.LonLat(5,-20); 
     762            popupClass = AutoSizeFramedCloud; 
     763            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>' + samplePopupContentsHTML + '</div>'  
     764            addMarker(ll, popupClass, popupContentHTML, false, true); 
     765 
     766            //anchored bubble popup bigger contents autosize closebox 
     767            ll = new OpenLayers.LonLat(10,-20); 
     768            popupClass = AutoSizeFramedCloud; 
     769            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>closebox<br>overflow<br>' + samplePopupContentsHTML + '</div>'  
     770            addMarker(ll, popupClass, popupContentHTML, true, true); 
     771 
     772 
     773            //anchored bubble popup wide short contents autosize overflow 
     774            ll = new OpenLayers.LonLat(20,-20); 
     775            popupClass = AutoSizeFramedCloud; 
     776            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     777            addMarker(ll, popupClass, popupContentHTML, false, true); 
     778 
     779            //anchored bubble popup wide short contents autosize closebox overflow 
     780            ll = new OpenLayers.LonLat(25,-20); 
     781            popupClass = AutoSizeFramedCloud; 
     782            popupContentHTML = '<div style="background-color:red;">Popup.FramedCloud<br>autosize<br>overflow<br>closebox<br>' + samplePopupContentsHTML_WideShort + '</div>'  
     783            addMarker(ll, popupClass, popupContentHTML, true, true); 
     784 
     785 
     786            //anchored bubble popup wide short fixed contents autosize overflow 
     787            ll = new OpenLayers.LonLat(35,-20); 
     788            popupClass = AutoSizeFramedCloud; 
     789            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     790            addMarker(ll, popupClass, popupContentHTML, false, true); 
     791 
     792            //anchored bubble popup wide short fixed contents autosize closebox overflow 
     793            ll = new OpenLayers.LonLat(40,-20); 
     794            popupClass = AutoSizeFramedCloud; 
     795            popupContentHTML = '<img src="wideshort.jpg"></img>'  
     796            addMarker(ll, popupClass, popupContentHTML, true, true); 
     797 
     798 
     799            //anchored bubble popup thin long fixed contents autosize overflow 
     800            ll = new OpenLayers.LonLat(50,-20); 
     801            popupClass = AutoSizeFramedCloud; 
     802            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     803            addMarker(ll, popupClass, popupContentHTML, false, true); 
     804 
     805            //anchored bubble popup thin long fixed contents autosize closebox overflow 
     806            ll = new OpenLayers.LonLat(55,-20); 
     807            popupClass = AutoSizeFramedCloud; 
     808            popupContentHTML = '<img src="thinlong.jpg"></img>'  
     809            addMarker(ll, popupClass, popupContentHTML, true, true); 
     810 
     811 
     812            //anchored bubble popup wide long fixed contents autosize overflow 
     813            ll = new OpenLayers.LonLat(65,-20); 
     814            popupClass = AutoSizeFramedCloud; 
     815            popupContentHTML = '<img src="widelong.jpg"></img>'  
     816            addMarker(ll, popupClass, popupContentHTML, false, true); 
     817 
     818            //anchored bubble popup wide long fixed contents autosize closebox overflow 
     819            ll = new OpenLayers.LonLat(70,-20); 
     820            popupClass = AutoSizeFramedCloud; 
     821            popupContentHTML = '<img src="widelong.jpg"></img>'  
     822            addMarker(ll, popupClass, popupContentHTML, true, true); 
     823  
     824 
     825        } 
     826 
     827        /** 
     828         * Function: addMarker 
     829         * Add a new marker to the markers layer given the following lonlat,  
     830         *     popupClass, and popup contents HTML. Also allow specifying  
     831         *     whether or not to give the popup a close box. 
     832         *  
     833         * Parameters: 
     834         * ll - {<OpenLayers.LonLat>} Where to place the marker 
     835         * popupClass - {<OpenLayers.Class>} Which class of popup to bring up  
     836         *     when the marker is clicked. 
     837         * popupContentHTML - {String} What to put in the popup 
     838         * closeBox - {Boolean} Should popup have a close box? 
     839         * overflow - {Boolean} Let the popup overflow scrollbars? 
     840         */ 
     841        function addMarker(ll, popupClass, popupContentHTML, closeBox, overflow) { 
     842 
     843            var feature = new OpenLayers.Feature(layer, ll);  
     844            feature.closeBox = closeBox; 
     845            feature.popupClass = popupClass; 
     846            feature.data.popupContentHTML = popupContentHTML; 
     847            feature.data.overflow = (overflow) ? "auto" : "hidden"; 
     848                     
     849            var marker = feature.createMarker(); 
     850 
     851            var markerClick = function (evt) { 
     852                if (this.popup == null) { 
     853                    this.popup = this.createPopup(this.closeBox); 
     854                    map.addPopup(this.popup); 
     855                    this.popup.show(); 
     856                } else { 
     857                    this.popup.toggle(); 
     858                } 
     859                currentPopup = this.popup; 
     860                OpenLayers.Event.stop(evt); 
     861            }; 
     862            marker.events.register("mousedown", feature, markerClick); 
     863 
     864            markers.addMarker(marker); 
     865        } 
     866 
     867    </script> 
     868  </head> 
     869  <body onload="init()"> 
     870  <h1 id="title">Popup Matrix</h1> 
     871 
     872  <div id="tags"> 
     873  </div> 
     874      <p id="shortdesc"> 
     875          All kinds of different popup configurations. 
     876      </p> 
     877 
     878      <div id="map"></div> 
     879 
     880        <!-- preloading these images so the autosize will work correctly --> 
     881        <img src="small.jpg" style="position:absolute; top:-5000px; left: -5000px"></img> 
     882        <img src="wideshort.jpg" style="position:absolute; top:-5000px; left: -5000px"></img> 
     883        <img src="widelong.jpg" style="position:absolute; top:-5000px; left: -5000px"></img> 
     884        <img src="thinlong.jpg" style="position:absolute; top:-5000px; left: -5000px"></img> 
     885 
     886      <br/>       
     887 
     888       
     889   </div> 
     890  </body> 
     891</html>