nakarte

Source code of https://map.sikmir.ru (fork)
git clone git://git.sikmir.ru/nakarte
Log | Files | Refs | LICENSE

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};