yandex.js (3218B)
1 import BaseService from './baseService'; 2 3 class YandexRuler extends BaseService { 4 urlRe = /yandex\..+[?&]rl=([^&]+)/u; 5 6 isOurUrl() { 7 return this.urlRe.test(this.origUrl); 8 } 9 10 requestOptions() { 11 return []; 12 } 13 14 parseResponse() { 15 let last_lat = 0; 16 let last_lng = 0; 17 let error; 18 const points = []; 19 let s = this.urlRe.exec(this.origUrl)[1]; 20 s = s.replace(/%2C/iug, ','); 21 const points_str = s.split('~'); 22 for (let i = 0; i < points_str.length; i++) { 23 let point = points_str[i].split(','); 24 let lng = parseFloat(point[0]); 25 let lat = parseFloat(point[1]); 26 if (isNaN(lat) || isNaN(lng)) { 27 error = 'CORRUPT'; 28 break; 29 } 30 last_lng += lng; 31 last_lat += lat; 32 points.push({lat: last_lat, lng: last_lng}); 33 } 34 return [{ 35 error: error, 36 tracks: [points], 37 name: 'Yandex ruler' 38 }]; 39 } 40 } 41 42 // function parseYandexMap(txt) { 43 // var start_tag = '<script id="vpage" type="application/json">'; 44 // var json_start = txt.indexOf(start_tag); 45 // if (json_start === -1) { 46 // return null; 47 // } 48 // json_start += start_tag.length; 49 // var json_end = txt.indexOf('</script>', json_start); 50 // if (json_end === -1) { 51 // return null; 52 // } 53 // var map_data = txt.substring(json_start, json_end); 54 // map_data = JSON.parse(map_data); 55 // console.log(map_data); 56 // if (!('request' in map_data)) { 57 // return null; 58 // } 59 // var name = 'YandexMap'; 60 // var segments = []; 61 // var error; 62 // if (map_data.vpage && map_data.vpage.data && map_data.vpage.data.objects && map_data.vpage.data.objects.length) { 63 // var mapName = ('' + (map_data.vpage.data.name || '')).trim(); 64 // if (mapName.length > 3) { 65 // name = ''; 66 // } else if (mapName.length) { 67 // name += ': '; 68 // } 69 // name += fileutils.decodeUTF8(mapName); 70 // map_data.vpage.data.objects.forEach(function(obj){ 71 // if (obj.pts && obj.pts.length) { 72 // var segment = []; 73 // for (var i=0; i< obj.pts.length; i++) { 74 // var pt = obj.pts[i]; 75 // var lng = parseFloat(pt[0]); 76 // var lat = parseFloat(pt[1]); 77 // if (isNaN(lat) || isNaN(lng)) { 78 // error = 'CORRUPT'; 79 // break; 80 // } 81 // segment.push({lat: lat, lng:lng}); 82 // } 83 // if (segment.length) { 84 // segments.push(segment); 85 // } 86 // } 87 // }); 88 // } 89 // if (map_data.request.args && map_data.request.args.rl) { 90 // var res = parseYandexRulerString(map_data.request.args.rl); 91 // error = error || res.error; 92 // if (res.points && res.points.length) { 93 // segments.push(res.points); 94 // } 95 // } 96 // return [{name: name, error: error, tracks: segments}]; 97 // } 98 99 export {YandexRuler};