OpenLayers OpenLayers

Changeset 4197

Show
Ignore:
Timestamp:
09/07/07 18:19:55 (1 year ago)
Author:
crschmidt
Message:

Make GeoRSS format do GeoRSS points, lines, polygons in addition
to wgs84.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • sandbox/tschaub/xml/lib/OpenLayers/Format/GeoRSS.js

    r4195 r4197  
    4747     
    4848    /** 
    49      * APIMethod: read 
    50      * Return a list of features from a GeoRSS doc 
    51       
    52      * Parameters: 
    53      * data - {Element}  
    54      * 
    55      * Returns: 
    56      * An Array of <OpenLayers.Feature.Vector>s 
    57      */ 
    58     read: function(doc) { 
    59         if (typeof doc == "string") {  
    60             doc = OpenLayers.Format.XML.prototype.read.apply(this, [doc]); 
    61         } 
    62  
    63         /* Try RSS items first, then Atom entries */ 
    64         var itemlist = null; 
    65         itemlist = this.getElementsByTagNameNS(doc, '*', 'item'); 
    66         if (itemlist.length == 0) { 
    67             itemlist = this.getElementsByTagNameNS(doc, '*', 'entry'); 
    68         } 
    69          
    70         var features = []; 
    71         for(var i=0; i<itemlist.length; i++) { 
    72             // this is horrendous - please change this 
    73             var point = OpenLayers.Util.getNodes(itemlist[i], 'georss:point'); 
    74             var lat = OpenLayers.Util.getNodes(itemlist[i], 'geo:lat'); 
    75             var lon = OpenLayers.Util.getNodes(itemlist[i], 'geo:long'); 
     49     * Method: createGeometryFromItem 
     50     * Return an {<OpenLayers.Geometry>} from an XML dom GeoRSS Item. 
     51     */ 
     52    createGeometryFromItem: function(item) { 
     53        var point = OpenLayers.Util.getNodes(item, 'georss:point'); 
     54        var line = OpenLayers.Util.getNodes(item, 'georss:line'); 
     55        var polygon = OpenLayers.Util.getNodes(item, 'georss:polygon'); 
     56        var lat = OpenLayers.Util.getNodes(item, 'geo:lat'); 
     57        var lon = OpenLayers.Util.getNodes(item, 'geo:long'); 
     58        if (point.length > 0 || (lat.length > 0 && lon.length > 0)) { 
    7659            if (point.length > 0) { 
    7760                var location = point[0].firstChild.nodeValue.trim().split(/\s+/); 
     
    8063                    var location = point[0].firstChild.nodeValue.trim().split(/\s*,\s*/); 
    8164                } 
    82             } else if (lat.length > 0 && lon.length > 0)
     65            } else
    8366                var location = [parseFloat(lat[0].firstChild.nodeValue), parseFloat(lon[0].firstChild.nodeValue)]; 
    84             } else { 
    85                 continue; 
    86             } 
     67            }     
    8768            var geometry = new OpenLayers.Geometry.Point(parseFloat(location[1]), 
    88                                                          parseFloat(location[0])); 
    89  
     69                                                     parseFloat(location[0])); 
     70        } else if (line.length > 0) { 
     71            var coords = line[0].firstChild.nodeValue.trim().split(/\s+/); 
     72            var components = [];  
     73            for (var i=0; i < coords.length; i+=2) { 
     74                var point = new OpenLayers.Geometry.Point(parseFloat(coords[i+1]), parseFloat(coords[i])); 
     75                components.push(point); 
     76            } 
     77            geometry = new OpenLayers.Geometry.LineString(components); 
     78        } else if (polygon.length > 0) {  
     79            var coords = polygon[0].firstChild.nodeValue.trim().split(/\s+/); 
     80            var components = [];  
     81            for (var i=0; i < coords.length; i+=2) { 
     82                var point = new OpenLayers.Geometry.Point(parseFloat(coords[i+1]), parseFloat(coords[i])); 
     83                components.push(point); 
     84            } 
     85            geometry = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]); 
     86        } 
     87        return geometry;                                              
     88    },         
     89 
     90    /** 
     91     * Method: createGeometryFromItem 
     92     * Return an {<OpenLayers.Feature.Vector>} from an XML dom GeoRSS Item. 
     93     */ 
     94    createFeatureFromItem: function(item) { 
     95            var geometry = this.createGeometryFromItem(item); 
    9096            /* Provide defaults for title and description */ 
    9197            var title = "Untitled"; 
    9298            try { 
    93                 title = OpenLayers.Util.getNodes(itemlist[i],  
     99                title = OpenLayers.Util.getNodes(item,  
    94100                        "title")[0].firstChild.nodeValue; 
    95101            } 
     
    97103            
    98104            /* First try RSS descriptions, then Atom summaries */ 
    99             var descr_nodes = this.getElementsByTagNameNS(itemlist[i]
     105            var descr_nodes = this.getElementsByTagNameNS(item
    100106                                                          "*", 
    101107                                                          "description"); 
    102108            if (descr_nodes.length == 0) { 
    103                 descr_nodes = this.getElementsByTagNameNS(itemlist[i]
     109                descr_nodes = this.getElementsByTagNameNS(item
    104110                                                          "*", 
    105111                                                          "summary"); 
     
    113119            /* If no link URL is found in the first child node, try the 
    114120               href attribute */ 
    115             try { 
    116                 var link = OpenLayers.Util.getNodes(itemlist[i], "link")[0].firstChild.nodeValue; 
    117             }  
     121            var link = null; 
     122            var edit_link = null; 
     123            try { 
     124                var link = OpenLayers.Util.getNodes(item, "link")[0].firstChild.nodeValue; 
     125            } 
    118126            catch (e) { 
    119                 try { 
    120                     var link = OpenLayers.Util.getNodes(itemlist[i], "link")[0].getAttribute("href"); 
    121                 } 
    122                 catch (e) {} 
     127                var link_list = OpenLayers.Util.getNodes(item, "link"); 
     128                for (var i = 0; i < link_list.length; i++) { 
     129                    var this_link = link_list[i]; 
     130                    link = this_link.getAttribute("href"); 
     131                }     
     132            } 
     133            var id = null; 
     134            try { 
     135                id = OpenLayers.Util.getNodes(item, "id")[0].firstChild.nodeValue; 
     136            } catch (e) { 
    123137            } 
    124138             
     
    126140                "title": title, 
    127141                "description": description, 
    128                 "link": link 
     142                "link": link, 
    129143            }; 
    130             features.push(new OpenLayers.Feature.Vector(geometry, data)); 
     144            var feature = new OpenLayers.Feature.Vector(geometry, data); 
     145            feature.fid = id; 
     146            return feature; 
     147    },         
     148     
     149    /** 
     150     * APIMethod: read 
     151     * Return a list of features from a GeoRSS doc 
     152      
     153     * Parameters: 
     154     * data - {Element}  
     155     * 
     156     * Returns: 
     157     * An Array of <OpenLayers.Feature.Vector>s 
     158     */ 
     159    read: function(doc) { 
     160        if (typeof doc == "string") {  
     161            doc = OpenLayers.Format.XML.prototype.read.apply(this, [doc]); 
     162        } 
     163 
     164        /* Try RSS items first, then Atom entries */ 
     165        var itemlist = null; 
     166        itemlist = this.getElementsByTagNameNS(doc, '*', 'item'); 
     167        if (itemlist.length == 0) { 
     168            itemlist = this.getElementsByTagNameNS(doc, '*', 'entry'); 
     169        } 
     170         
     171        var features = []; 
     172        for(var i=0; i<itemlist.length; i++) { 
     173            // this is horrendous - please change this 
     174            var item = itemlist[i]; 
     175            features.push(this.createFeatureFromItem(item)); 
    131176        } 
    132177        return features;