1+ <!DOCTYPE html>
12< script >
3+ // points = [{lat:xx, lng:xx}, {lat:xx, lng:xx}, {lat:xx, lng:xx}, ...];
24
3- // points = [{lat:xx, lng:xx}, {lat:xx, lng:xx}, {lat:xx, lng:xx}, ...];
4-
5- function polylineencode ( points ) {
6- let result = "" ;
7- let passpoint ;
8- for ( let point of points ) {
9- if ( passpoint ) {
10- result += encode ( point . lat - passpoint . lat ) ;
11- result += encode ( point . lng - passpoint . lng ) ;
12- }
13- else {
14- result += encode ( point . lat ) ;
15- result += encode ( point . lng ) ;
16- }
17- passpoint = point ;
18- }
19- return result ;
20- function encode ( num ) {
21- let dec = Math . round ( num * 100000 ) ;
22- dec <<= 1 ;
23- if ( num < 0 ) dec = ~ dec ;
24- let chunks = [ ] ;
25- do {
26- chunks . push ( dec % 32 ) ;
27- dec = Math . floor ( dec / 32 ) ;
28- } while ( dec > 0 ) ;
29- for ( let key in chunks ) {
30- if ( key < chunks . length - 1 )
31- chunks [ key ] |= 32 ;
32- chunks [ key ] += 63 ;
33- }
5+ function polylineencode ( points ) {
346 let result = "" ;
35- for ( let chunk of chunks ) result += String . fromCharCode ( chunk ) ;
7+ let passpoint ;
8+ for ( let point of points ) {
9+ if ( passpoint ) {
10+ result += encode ( point . lat - passpoint . lat ) ;
11+ result += encode ( point . lng - passpoint . lng ) ;
12+ } else {
13+ result += encode ( point . lat ) ;
14+ result += encode ( point . lng ) ;
15+ }
16+ passpoint = point ;
17+ }
3618 return result ;
37- }
38- }
39- function polylinedecode ( code ) {
40- let trucks = [ ] ;
41- let truck = 0 ;
42- let carriage_q = 0 ;
43- let lat ;
44- let point ;
45- for ( let x = 0 , xx = code . length ; x < xx ; ++ x ) {
46- let i = code . charCodeAt ( x ) ;
47- i -= 63 ;
48- let _5_bits = i << ( 32 - 5 ) >>> ( 32 - 5 ) ;
49- truck |= _5_bits << carriage_q ;
50- carriage_q += 5 ;
51- let is_last = ( i & ( 1 << 5 ) ) == 0 ;
52- if ( is_last ) {
53- truck >>>= 1 ;
54- if ( ( truck & 1 ) == 1 ) {
55- truck = ~ truck ;
19+ function encode ( num ) {
20+ let dec = Math . round ( num * 100000 ) ;
21+ dec <<= 1 ;
22+ if ( num < 0 ) dec = ~ dec ;
23+ let chunks = [ ] ;
24+ do {
25+ chunks . push ( dec % 32 ) ;
26+ dec = Math . floor ( dec / 32 ) ;
27+ } while ( dec > 0 ) ;
28+ for ( let key in chunks ) {
29+ if ( key < chunks . length - 1 ) chunks [ key ] |= 32 ;
30+ chunks [ key ] += 63 ;
5631 }
57- if ( lat === undefined ) lat = truck / 100000 ;
58- else {
59- if ( point === undefined )
60- point = { lat : lat , lng : truck / 100000 } ;
32+ let result = "" ;
33+ for ( let chunk of chunks ) result += String . fromCharCode ( chunk ) ;
34+ return result ;
35+ }
36+ }
37+ function polylinedecode ( code ) {
38+ let trucks = [ ] ;
39+ let truck = 0 ;
40+ let carriage_q = 0 ;
41+ let lat ;
42+ let point ;
43+ for ( let x = 0 , xx = code . length ; x < xx ; ++ x ) {
44+ let i = code . charCodeAt ( x ) ;
45+ i -= 63 ;
46+ let _5_bits = ( i << ( 32 - 5 ) ) >>> ( 32 - 5 ) ;
47+ truck |= _5_bits << carriage_q ;
48+ carriage_q += 5 ;
49+ let is_last = ( i & amp ; ( 1 << 5 ) ) == 0 ;
50+ if ( is_last ) {
51+ truck >>>= 1 ;
52+ if ( ( truck & amp ; 1 ) == 1 ) {
53+ truck = ~ truck ;
54+ }
55+ if ( lat === undefined ) lat = truck / 100000 ;
6156 else {
62- point . lat += lat ;
63- point . lng += truck / 100000 ;
57+ if ( point === undefined )
58+ point = { lat : lat , lng : truck / 100000 } ;
59+ else {
60+ point . lat += lat ;
61+ point . lng += truck / 100000 ;
62+ }
63+ trucks . push ( { lat : point . lat , lng : point . lng } ) ;
64+ lat = undefined ;
6465 }
65- trucks . push ( { lat : point . lat , lng : point . lng } ) ;
66- lat = undefined ;
66+ carriage_q = 0 ;
67+ truck = 0 ;
6768 }
68- carriage_q = 0 ;
69- truck = 0 ;
7069 }
70+ return trucks ;
7171 }
72- return trucks ;
73- }
7472
75- function polyline ( ) {
76- let points = [ { lat :38.5 , lng :- 120.2 } , { lat :40.7 , lng :- 120.95 } , { lat :43.252 , lng :- 126.453 } ] ;
77- console . log ( points ) ;
78- let code = polylineencode ( points ) ;
79- console . log ( code ) ;
80- let result = polylinedecode ( code ) ;
81- console . log ( result ) ;
82- }
83- polyline ( ) ;
84- </ script >
73+ function polyline ( ) {
74+ let points = [
75+ { lat : 38.5 , lng : - 120.2 } ,
76+ { lat : 40.7 , lng : - 120.95 } ,
77+ { lat : 43.252 , lng : - 126.453 } ,
78+ ] ;
79+ console . log ( points ) ;
80+ let code = polylineencode ( points ) ;
81+ console . log ( code ) ;
82+ let result = polylinedecode ( code ) ;
83+ console . log ( result ) ;
84+ }
85+ polyline ( ) ;
86+ </ script >
0 commit comments