function define(f) { JsonGMLParser = f(); } importScripts('txml.js'); importScripts('JsonGMLParser.js'); self.addEventListener('message', function (e) { var gmlParser = new JsonGMLParser(true /*extractAttributes */, true /*xy */, undefined /*gmlnsm*/, undefined /*wfsnsm*/, undefined /*featureName*/, e.data.geometryFieldName); var data = e.data; var json, features; if (data.format === 'JSON') { json = JSON.parse(data.text); features = json.features; features.forEach(feature => { feature.positions = []; feature.geometry.coordinates.forEach(coordinate => { if (Array.isArray(coordinate)) { let positions = []; coordinate.forEach(item => { if (Array.isArray(item[0])) { let pArr = []; item.forEach(p => { pArr.push(p[0], p[1], p[2]) }) positions.push(pArr); } else { positions.push(item[0], item[1], item[2]) } }); feature.positions.push(positions); }else{ feature.positions.push(coordinate) } }) feature.attributes = feature.properties; feature.fid = feature.id; feature.geometryType = feature.geometry.type.toLocaleLowerCase(); feature.bounds = undefined; delete feature.geometry; delete feature.id; delete feature.properties; delete feature.geometry_name; delete feature.type; }) } else { json = tXml(data.text, { simplify: true }); features = gmlParser.read(json); } delete data.text; data.features = features; postMessage(data); /* load('data.json', function(xhr) { var result = xhr.responseText; var features = gmlParser.read(data.document); postMessage({id: data.id, features: features}); }); */ }); /* //simple XHR request in pure JavaScript function load(url, callback) { var xhr; if(typeof XMLHttpRequest !== 'undefined') xhr = new XMLHttpRequest(); else { var versions = ["MSXML2.XmlHttp.5.0", "MSXML2.XmlHttp.4.0", "MSXML2.XmlHttp.3.0", "MSXML2.XmlHttp.2.0", "Microsoft.XmlHttp"] for(var i = 0, len = versions.length; i < len; i++) { try { xhr = new ActiveXObject(versions[i]); break; } catch(e){} } // end for } xhr.onreadystatechange = ensureReadiness; function ensureReadiness() { if(xhr.readyState < 4) { return; } if(xhr.status !== 200) { return; } // all is well if(xhr.readyState === 4) { callback(xhr); } } xhr.open('GET', url, true); xhr.send(''); } */