[OpenLayers-Commits] r4197 - sandbox/tschaub/xml/lib/OpenLayers/Format
commits at openlayers.org
commits at openlayers.org
Fri Sep 7 18:19:57 EDT 2007
Author: crschmidt
Date: 2007-09-07 18:19:55 -0400 (Fri, 07 Sep 2007)
New Revision: 4197
Modified:
sandbox/tschaub/xml/lib/OpenLayers/Format/GeoRSS.js
Log:
Make GeoRSS format do GeoRSS points, lines, polygons in addition
to wgs84.
Modified: sandbox/tschaub/xml/lib/OpenLayers/Format/GeoRSS.js
===================================================================
--- sandbox/tschaub/xml/lib/OpenLayers/Format/GeoRSS.js 2007-09-07 22:06:40 UTC (rev 4196)
+++ sandbox/tschaub/xml/lib/OpenLayers/Format/GeoRSS.js 2007-09-07 22:19:55 UTC (rev 4197)
@@ -46,61 +46,67 @@
},
/**
- * APIMethod: read
- * Return a list of features from a GeoRSS doc
-
- * Parameters:
- * data - {Element}
- *
- * Returns:
- * An Array of <OpenLayers.Feature.Vector>s
+ * Method: createGeometryFromItem
+ * Return an {<OpenLayers.Geometry>} from an XML dom GeoRSS Item.
*/
- read: function(doc) {
- if (typeof doc == "string") {
- doc = OpenLayers.Format.XML.prototype.read.apply(this, [doc]);
- }
-
- /* Try RSS items first, then Atom entries */
- var itemlist = null;
- itemlist = this.getElementsByTagNameNS(doc, '*', 'item');
- if (itemlist.length == 0) {
- itemlist = this.getElementsByTagNameNS(doc, '*', 'entry');
- }
-
- var features = [];
- for(var i=0; i<itemlist.length; i++) {
- // this is horrendous - please change this
- var point = OpenLayers.Util.getNodes(itemlist[i], 'georss:point');
- var lat = OpenLayers.Util.getNodes(itemlist[i], 'geo:lat');
- var lon = OpenLayers.Util.getNodes(itemlist[i], 'geo:long');
+ createGeometryFromItem: function(item) {
+ var point = OpenLayers.Util.getNodes(item, 'georss:point');
+ var line = OpenLayers.Util.getNodes(item, 'georss:line');
+ var polygon = OpenLayers.Util.getNodes(item, 'georss:polygon');
+ var lat = OpenLayers.Util.getNodes(item, 'geo:lat');
+ var lon = OpenLayers.Util.getNodes(item, 'geo:long');
+ if (point.length > 0 || (lat.length > 0 && lon.length > 0)) {
if (point.length > 0) {
var location = point[0].firstChild.nodeValue.trim().split(/\s+/);
if (location.length !=2) {
var location = point[0].firstChild.nodeValue.trim().split(/\s*,\s*/);
}
- } else if (lat.length > 0 && lon.length > 0) {
+ } else {
var location = [parseFloat(lat[0].firstChild.nodeValue), parseFloat(lon[0].firstChild.nodeValue)];
- } else {
- continue;
+ }
+ var geometry = new OpenLayers.Geometry.Point(parseFloat(location[1]),
+ parseFloat(location[0]));
+ } else if (line.length > 0) {
+ var coords = line[0].firstChild.nodeValue.trim().split(/\s+/);
+ var components = [];
+ for (var i=0; i < coords.length; i+=2) {
+ var point = new OpenLayers.Geometry.Point(parseFloat(coords[i+1]), parseFloat(coords[i]));
+ components.push(point);
}
- var geometry = new OpenLayers.Geometry.Point(parseFloat(location[1]),
- parseFloat(location[0]));
+ geometry = new OpenLayers.Geometry.LineString(components);
+ } else if (polygon.length > 0) {
+ var coords = polygon[0].firstChild.nodeValue.trim().split(/\s+/);
+ var components = [];
+ for (var i=0; i < coords.length; i+=2) {
+ var point = new OpenLayers.Geometry.Point(parseFloat(coords[i+1]), parseFloat(coords[i]));
+ components.push(point);
+ }
+ geometry = new OpenLayers.Geometry.Polygon([new OpenLayers.Geometry.LinearRing(components)]);
+ }
+ return geometry;
+ },
+ /**
+ * Method: createGeometryFromItem
+ * Return an {<OpenLayers.Feature.Vector>} from an XML dom GeoRSS Item.
+ */
+ createFeatureFromItem: function(item) {
+ var geometry = this.createGeometryFromItem(item);
/* Provide defaults for title and description */
var title = "Untitled";
try {
- title = OpenLayers.Util.getNodes(itemlist[i],
+ title = OpenLayers.Util.getNodes(item,
"title")[0].firstChild.nodeValue;
}
catch (e) { title="Untitled"; }
/* First try RSS descriptions, then Atom summaries */
- var descr_nodes = this.getElementsByTagNameNS(itemlist[i],
+ var descr_nodes = this.getElementsByTagNameNS(item,
"*",
"description");
if (descr_nodes.length == 0) {
- descr_nodes = this.getElementsByTagNameNS(itemlist[i],
+ descr_nodes = this.getElementsByTagNameNS(item,
"*",
"summary");
}
@@ -112,23 +118,62 @@
/* If no link URL is found in the first child node, try the
href attribute */
+ var link = null;
+ var edit_link = null;
try {
- var link = OpenLayers.Util.getNodes(itemlist[i], "link")[0].firstChild.nodeValue;
- }
+ var link = OpenLayers.Util.getNodes(item, "link")[0].firstChild.nodeValue;
+ }
catch (e) {
- try {
- var link = OpenLayers.Util.getNodes(itemlist[i], "link")[0].getAttribute("href");
- }
- catch (e) {}
+ var link_list = OpenLayers.Util.getNodes(item, "link");
+ for (var i = 0; i < link_list.length; i++) {
+ var this_link = link_list[i];
+ link = this_link.getAttribute("href");
+ }
}
+ var id = null;
+ try {
+ id = OpenLayers.Util.getNodes(item, "id")[0].firstChild.nodeValue;
+ } catch (e) {
+ }
var data = {
"title": title,
"description": description,
- "link": link
+ "link": link,
};
- features.push(new OpenLayers.Feature.Vector(geometry, data));
+ var feature = new OpenLayers.Feature.Vector(geometry, data);
+ feature.fid = id;
+ return feature;
+ },
+
+ /**
+ * APIMethod: read
+ * Return a list of features from a GeoRSS doc
+
+ * Parameters:
+ * data - {Element}
+ *
+ * Returns:
+ * An Array of <OpenLayers.Feature.Vector>s
+ */
+ read: function(doc) {
+ if (typeof doc == "string") {
+ doc = OpenLayers.Format.XML.prototype.read.apply(this, [doc]);
}
+
+ /* Try RSS items first, then Atom entries */
+ var itemlist = null;
+ itemlist = this.getElementsByTagNameNS(doc, '*', 'item');
+ if (itemlist.length == 0) {
+ itemlist = this.getElementsByTagNameNS(doc, '*', 'entry');
+ }
+
+ var features = [];
+ for(var i=0; i<itemlist.length; i++) {
+ // this is horrendous - please change this
+ var item = itemlist[i];
+ features.push(this.createFeatureFromItem(item));
+ }
return features;
},
More information about the Commits
mailing list