|
/* Copyright (c) 2006-2010 by OpenLayers Contributors (see authors.txt for |
|
* full list of contributors). Published under the Clear BSD license. |
|
* See http://svn.openlayers.org/trunk/openlayers/license.txt for the |
|
* full text of the license. */ |
|
|
|
/** |
|
* @requires OpenLayers/Feature/Vector.js |
|
* @requires OpenLayers/Geometry/Point.js |
|
*/ |
|
|
|
/** |
|
* Class: OpenLayers.Format.Text |
|
* Read Text format. Create a new instance with the <OpenLayers.Format.Text> |
|
* constructor. This reads text which is formatted like CSV text, using |
|
* tabs as the seperator by default. It provides parsing of data originally |
|
* used in the MapViewerService, described on the wiki. This Format is used |
|
* by the <OpenLayers.Layer.Text> class. |
|
* |
|
* Inherits from: |
|
* - <OpenLayers.Format> |
|
*/ |
|
OpenLayers.Format.Text = OpenLayers.Class(OpenLayers.Format, { |
|
|
|
/** |
|
* APIProperty: defaultStyle |
|
* defaultStyle allows one to control the default styling of the features. |
|
* It should be a symbolizer hash. By default, this is set to match the |
|
* Layer.Text behavior, which is to use the default OpenLayers Icon. |
|
*/ |
|
defaultStyle: null, |
|
|
|
/** |
|
* APIProperty: extractStyles |
|
* set to true to extract styles from the TSV files, using information |
|
* from the image or icon, iconSize and iconOffset fields. This will result |
|
* in features with a symbolizer (style) property set, using the |
|
* default symbolizer specified in <defaultStyle>. Set to false if you |
|
* wish to use a styleMap or OpenLayers.Style options to style your |
|
* layer instead. |
|
*/ |
|
extractStyles: true, |
|
|
|
/** |
|
* Constructor: OpenLayers.Format.Text |
|
* Create a new parser for TSV Text. |
|
* |
|
* Parameters: |
|
* options - {Object} An optional object whose properties will be set on |
|
* this instance. |
|
*/ |
|
initialize: function(options) { |
|
options = options || {}; |
|
|
|
if(options.extractStyles !== false) { |
|
options.defaultStyle = { |
|
'externalGraphic': OpenLayers.Util.getImagesLocation() + |
|
"marker.png", |
|
'graphicWidth': 21, |
|
'graphicHeight': 25, |
|
'graphicXOffset': -10.5, |
|
'graphicYOffset': -12.5 |
|
}; |
|
} |
|
|
|
OpenLayers.Format.prototype.initialize.apply(this, [options]); |
|
}, |
|
|
|
/** |
|
* APIMethod: read |
|
* Return a list of features from a Tab Seperated Values text string. |
|
* |
|
* Parameters: |
|
* data - {String} |
|
* |
|
* Returns: |
|
* An Array of <OpenLayers.Feature.Vector>s |
|
*/ |
|
read: function(text) { |
|
var lines = text.split('\n'); |
|
var columns; |
|
var features = []; |
|
// length - 1 to allow for trailing new line |
|
for (var lcv = 0; lcv < (lines.length - 1); lcv++) { |
|
var currLine = lines[lcv].replace(/^\s*/,'').replace(/\s*$/,''); |
|
|
|
if (currLine.charAt(0) != '#') { /* not a comment */ |
|
|
|
if (!columns) { |
|
//First line is columns |
|
columns = currLine.split('\t'); |
|
} else { |
|
var vals = currLine.split('\t'); |
|
var geometry = new OpenLayers.Geometry.Point(0,0); |
|
var attributes = {}; |
|
var style = this.defaultStyle ? |
|
OpenLayers.Util.applyDefaults({}, this.defaultStyle) : |
|
null; |
|
var icon, iconSize, iconOffset, overflow; |
|
var set = false; |
|
for (var valIndex = 0; valIndex < vals.length; valIndex++) { |
|
if (vals[valIndex]) { |
|
if (columns[valIndex] == 'point') { |
|
var coords = vals[valIndex].split(','); |
|
geometry.y = parseFloat(coords[0]); |
|
geometry.x = parseFloat(coords[1]); |
|
set = true; |
|
} else if (columns[valIndex] == 'lat') { |
|
geometry.y = parseFloat(vals[valIndex]); |
|
set = true; |
|
} else if (columns[valIndex] == 'lon') { |
|
geometry.x = parseFloat(vals[valIndex]); |
|
set = true; |
|
} else if (columns[valIndex] == 'title') |
|
attributes['title'] = vals[valIndex]; |
|
else if (columns[valIndex] == 'image' || |
|
columns[valIndex] == 'icon' && style) { |
|
style['externalGraphic'] = vals[valIndex]; |
|
} else if (columns[valIndex] == 'iconSize' && style) { |
|
var size = vals[valIndex].split(','); |
|
style['graphicWidth'] = parseFloat(size[0]); |
|
style['graphicHeight'] = parseFloat(size[1]); |
|
} else if (columns[valIndex] == 'iconOffset' && style) { |
|
var offset = vals[valIndex].split(','); |
|
style['graphicXOffset'] = parseFloat(offset[0]); |
|
style['graphicYOffset'] = parseFloat(offset[1]); |
|
} else if (columns[valIndex] == 'description') { |
|
attributes['description'] = vals[valIndex]; |
|
} else if (columns[valIndex] == 'overflow') { |
|
attributes['overflow'] = vals[valIndex]; |
|
} else { |
|
// For StyleMap filtering, allow additional |
|
// columns to be stored as attributes. |
|
attributes[columns[valIndex]] = vals[valIndex]; |
|
} |
|
} |
|
} |
|
if (set) { |
|
if (this.internalProjection && this.externalProjection) { |
|
geometry.transform(this.externalProjection, |
|
this.internalProjection); |
|
} |
|
var feature = new OpenLayers.Feature.Vector(geometry, attributes, style); |
|
features.push(feature); |
|
} |
|
} |
|
} |
|
} |
|
return features; |
|
}, |
|
|
|
CLASS_NAME: "OpenLayers.Format.Text" |
|
}); |
|
|