function PieParseProtoBuffer(){ this._state = { ready:false, message:null }; loadProtoFile(this._state); function loadProtoFile(state){ return new Promise((resolve) => { protobuf.load([ 'static/js/proto/wpIsolineRenderData.proto', 'static/js/proto/wpIsoSurfaceRenderData.proto', 'static/js/proto/streamline.proto', 'static/js/proto/wpGeoWindPole.proto'], (err, root) => { let datasetMessage = root.lookup("pbufWeather.wpIsolineRenderData"); let datasurfaceMessage = root.lookup("pbufWeather.wpIsoSurfaceRenderData"); let datastreamlineMessage = root.lookup("streamline.GeoStreamline"); let datawindpoleMessage = root.lookup("windpole.GeoWindPole"); state.ready = true; state.message = [datasetMessage,datasurfaceMessage,datastreamlineMessage,datawindpoleMessage]; resolve(); }); }) } } PieParseProtoBuffer.prototype.requestData = function(url,type){ return getProtobuf(this._state.message,url,type); } function getProtobuf(msg,url,type) { return new Promise((resolve) => { const xhr = new XMLHttpRequest(); xhr.open("GET","http://"+url, true); xhr.responseType = "arraybuffer"; xhr.onload = () => { let result = new Uint8Array(xhr.response); if (result.length === 0) { console.log('数据读取失败'); return false; } var readerData = new protobuf.Reader(result); let protoData; if(type=="isoline"){ protoData = msg[0].decode(readerData); }else if(type=="isv"){ protoData = msg[1].decode(readerData); }else if(type == "wsl"){ protoData = msg[2].decode(readerData); }else if(type == "wws"){ protoData = msg[3].decode(readerData); } resolve(protoData); }; xhr.send(null); }) }
js解析protobuf数据
最新推荐文章于 2024-08-15 09:34:18 发布