externalProjection properties. These allow for the reprojection of data -- OpenLayers users with SphericalMercator get this built in for EPSG:900913, and other users can use the external proj4js library available from MapBuilder SVN to add support for any number of projections. This means that featres can be, for example, transformed from a KML doc in 4326 to Spherical Mercator before being added to a layer, making using SphericalMercator slightly more enticing. r=elemoine (Closes #1039) git-svn-id: http://svn.openlayers.org/trunk/openlayers@5516 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
112 lines
4.9 KiB
JavaScript
112 lines
4.9 KiB
JavaScript
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under a modified BSD license.
|
|
* See http://svn.openlayers.org/trunk/openlayers/repository-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, {
|
|
|
|
/**
|
|
* 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) {
|
|
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 = {};
|
|
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['externalGraphic'] = vals[valIndex];
|
|
else if (columns[valIndex] == 'iconSize') {
|
|
var size = vals[valIndex].split(',');
|
|
style['graphicWidth'] = parseFloat(size[0]);
|
|
style['graphicHeight'] = parseFloat(size[1]);
|
|
} else if (columns[valIndex] == 'iconOffset') {
|
|
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];
|
|
}
|
|
}
|
|
}
|
|
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"
|
|
});
|