58 lines
1.9 KiB
JavaScript
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
|
|
});
|
|
};
|