nyc-bookstores/node_modules/mapbox.js/extensions/mapbox.converters.googledocs.js
2013-05-27 13:45:59 -07:00

58 lines
1.9 KiB
JavaScript

// Takes a spreadsheet key, worksheet ID, and callback function with a
// features argument. Use this to find the worksheet ID:
// https://spreadsheets.google.com/feeds/worksheets/[spreadsheet_key]/public/basic?alt=json
if (typeof mapbox === 'undefined') mapbox = {};
if (typeof mapbox.converters === 'undefined') mapbox.converters = {};
mapbox.converters.googledocs = function(spreadsheet, sheet, callback) {
if (typeof reqwest === 'undefined') {
throw 'googledocs: reqwest required for mapbox.converters.googledocs';
}
function response(x) {
var features = [],
latfield = '',
lonfield = '';
if (!x || !x.feed) return features;
for (var f in x.feed.entry[0]) {
if (f.match(/\$Lat/i)) latfield = f;
if (f.match(/\$Lon/i)) lonfield = f;
}
for (var i = 0; i < x.feed.entry.length; i++) {
var entry = x.feed.entry[i];
var feature = {
geometry: {
type: 'Point',
coordinates: []
},
properties: {}
};
for (var y in entry) {
if (y === latfield) feature.geometry.coordinates[1] = parseFloat(entry[y].$t);
else if (y === lonfield) feature.geometry.coordinates[0] = parseFloat(entry[y].$t);
else if (y.indexOf('gsx$') === 0) {
feature.properties[y.replace('gsx$', '')] = entry[y].$t;
}
}
if (feature.geometry.coordinates.length == 2) features.push(feature);
}
return callback(features);
}
// Get sheet id with this:
var url = 'https://spreadsheets.google.com/feeds/list/' + spreadsheet +
'/' + sheet + '/public/values?alt=json-in-script&callback=callback';
reqwest({
url: url,
type: 'jsonp',
jsonpCallback: 'callback',
success: response,
error: response
});
};