@@ -2274,4 +2274,395 @@ describe('mapboxgl_WebMapV2', () => {
22742274 done ( ) ;
22752275 } ) ;
22762276 } ) ;
2277+
2278+ it ( 'initial_serverUrl' , ( done ) => {
2279+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2280+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2281+ return Promise . resolve ( new Response ( JSON . stringify ( uniqueLayer_point ) ) ) ;
2282+ } else if ( url . indexOf ( 'content.json?' ) > - 1 ) {
2283+ return Promise . resolve ( new Response ( layerData_CSV ) ) ;
2284+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2285+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2286+ }
2287+ return Promise . resolve ( ) ;
2288+ } ) ;
2289+ var datavizWebmap = new WebMap ( id , {
2290+ server : server
2291+ } ) ;
2292+ datavizWebmap . on ( 'addlayerssucceeded' , ( ) => {
2293+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2294+ done ( ) ;
2295+ } ) ;
2296+ } ) ;
2297+
2298+ it ( 'initial_markerLayer' , ( done ) => {
2299+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2300+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2301+ return Promise . resolve ( new Response ( JSON . stringify ( markerLayer ) ) ) ;
2302+ } else if ( url . indexOf ( '123456/content.json' ) > - 1 ) {
2303+ return Promise . resolve ( new Response ( JSON . stringify ( markerData2 ) ) ) ;
2304+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2305+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2306+ }
2307+ return Promise . resolve ( ) ;
2308+ } ) ;
2309+ var datavizWebmap = new WebMap ( 123456 , {
2310+ server : server
2311+ } ) ;
2312+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2313+ expect ( datavizWebmap . mapId ) . toEqual ( 123456 ) ;
2314+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2315+ const layers = map . getStyle ( ) . layers ;
2316+ expect ( layers . length ) . toBe ( 2 ) ;
2317+ const markerLayer = layers [ 1 ] ;
2318+ expect ( markerLayer . type ) . toBe ( 'symbol' ) ;
2319+ expect ( markerLayer . layout [ 'icon-image' ] ) . toBe (
2320+ 'http://fakeiportal/iportal/apps/dataviz/static/imgs/markers/ktv_red.png'
2321+ ) ;
2322+ done ( ) ;
2323+ } ) ;
2324+ } ) ;
2325+
2326+ it ( 'initial_heatLayer' , ( done ) => {
2327+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2328+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2329+ return Promise . resolve ( new Response ( JSON . stringify ( heatLayer ) ) ) ;
2330+ } else if ( url . indexOf ( '1920557079/content.json?' ) > - 1 ) {
2331+ return Promise . resolve ( new Response ( JSON . stringify ( chart_content ) ) ) ;
2332+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2333+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2334+ }
2335+ return Promise . resolve ( ) ;
2336+ } ) ;
2337+ var datavizWebmap = new WebMap ( id , {
2338+ server : server
2339+ } ) ;
2340+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2341+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2342+ const layers = map . getStyle ( ) . layers ;
2343+ expect ( layers . length ) . toBe ( 2 ) ;
2344+ const heatLayer = layers [ 1 ] ;
2345+ expect ( heatLayer . type ) . toBe ( 'heatmap' ) ;
2346+ expect ( heatLayer . paint [ 'heatmap-radius' ] ) . toBe ( 30 ) ;
2347+ done ( ) ;
2348+ } ) ;
2349+ } ) ;
2350+
2351+ it ( 'initial_vectorLayer_point' , ( done ) => {
2352+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2353+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2354+ return Promise . resolve ( new Response ( JSON . stringify ( vectorLayer_point ) ) ) ;
2355+ } else if ( url . indexOf ( '1920557079/content.json?' ) > - 1 ) {
2356+ return Promise . resolve ( new Response ( JSON . stringify ( chart_content ) ) ) ;
2357+ } else if ( url . indexOf ( '13136933/content.json?' ) > - 1 ) {
2358+ return Promise . resolve ( new Response ( JSON . stringify ( layerData_geojson [ 'POINT_GEOJSON' ] ) ) ) ;
2359+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2360+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2361+ }
2362+ return Promise . resolve ( ) ;
2363+ } ) ;
2364+ var datavizWebmap = new WebMap ( id , {
2365+ server : server
2366+ } ) ;
2367+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2368+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2369+ const layers = map . getStyle ( ) . layers ;
2370+ expect ( layers . length ) . toBe ( 5 ) ;
2371+ const vectorLayerPoint = layers [ 1 ] ;
2372+ expect ( vectorLayerPoint . type ) . toBe ( 'circle' ) ;
2373+ expect ( vectorLayerPoint . paint [ 'circle-radius' ] ) . toBe ( 6 ) ;
2374+ done ( ) ;
2375+ } ) ;
2376+ } ) ;
2377+
2378+ it ( 'initial_vectorLayer_line' , ( done ) => {
2379+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2380+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2381+ return Promise . resolve ( new Response ( JSON . stringify ( vectorLayer_line ) ) ) ;
2382+ } else if ( url . indexOf ( 'content.json?' ) > - 1 ) {
2383+ return Promise . resolve ( new Response ( JSON . stringify ( chart_content ) ) ) ;
2384+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2385+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2386+ }
2387+ return Promise . resolve ( ) ;
2388+ } ) ;
2389+ var datavizWebmap = new WebMap ( id , {
2390+ server : server
2391+ } ) ;
2392+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2393+ expect ( datavizWebmap . mapId ) . toBe ( id ) ;
2394+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2395+ const layers = map . getStyle ( ) . layers ;
2396+ expect ( layers . length ) . toBe ( 2 ) ;
2397+ const vectorLayerLine = layers [ 1 ] ;
2398+ expect ( vectorLayerLine . type ) . toBe ( 'line' ) ;
2399+ expect ( vectorLayerLine . paint [ 'line-width' ] ) . toBe ( 7 ) ;
2400+
2401+ done ( ) ;
2402+ } ) ;
2403+ } ) ;
2404+
2405+ it ( 'initial_ranksymbolLayer' , ( done ) => {
2406+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2407+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2408+ return Promise . resolve ( new Response ( JSON . stringify ( ranksymbolLayer ) ) ) ;
2409+ } else if ( url . indexOf ( 'content.json?' ) > - 1 ) {
2410+ return Promise . resolve ( new Response ( JSON . stringify ( chart_content ) ) ) ;
2411+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2412+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2413+ }
2414+ return Promise . resolve ( ) ;
2415+ } ) ;
2416+ spyOn ( ArrayStatistic , 'getArraySegments' ) . and . callFake ( function ( array , type , segNum ) {
2417+ return [
2418+ 0.406820286455 ,
2419+ 2.6944246004791665 ,
2420+ 4.982028914503333 ,
2421+ 7.2696332285275 ,
2422+ 9.557237542551666 ,
2423+ 11.844841856575833 ,
2424+ 14.1324461706
2425+ ] ;
2426+ } ) ;
2427+ var datavizWebmap = new WebMap ( id , {
2428+ server : server
2429+ } ) ;
2430+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2431+ const layers = map . getStyle ( ) . layers ;
2432+ expect ( layers . length ) . toBe ( 4 ) ;
2433+ const vectorLayerPoint = layers [ 1 ] ;
2434+ expect ( vectorLayerPoint . type ) . toBe ( 'circle' ) ;
2435+ expect ( vectorLayerPoint . paint [ 'circle-radius' ] . length ) . toBeGreaterThan ( 0 ) ;
2436+ const labelLayer = layers [ 3 ] ;
2437+ expect ( labelLayer . type ) . toBe ( 'symbol' ) ;
2438+ expect ( labelLayer . paint [ 'text-color' ] ) . toBe ( '#333' ) ;
2439+ expect ( labelLayer . layout [ 'text-field' ] ) . toBe ( '{机场}' ) ;
2440+ done ( ) ;
2441+ } ) ;
2442+ } ) ;
2443+
2444+ it ( 'initial_uniqueLayer_polygon' , ( done ) => {
2445+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2446+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2447+ return Promise . resolve ( new Response ( JSON . stringify ( uniqueLayer_polygon ) ) ) ;
2448+ } else if ( url . indexOf ( 'content.json?' ) > - 1 ) {
2449+ return Promise . resolve ( new Response ( JSON . stringify ( chart_content ) ) ) ;
2450+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2451+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2452+ }
2453+ return Promise . resolve ( ) ;
2454+ } ) ;
2455+ var datavizWebmap = new WebMap ( id , {
2456+ server : server
2457+ } ) ;
2458+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2459+ const layers = map . getStyle ( ) . layers ;
2460+ expect ( layers . length ) . toBe ( 4 ) ;
2461+ const vectorLayerPoint = layers [ 1 ] ;
2462+ const id = vectorLayerPoint . id ;
2463+ expect ( vectorLayerPoint . type ) . toBe ( 'fill' ) ;
2464+ expect ( vectorLayerPoint . paint [ 'fill-color' ] . length ) . toBeGreaterThan ( 0 ) ;
2465+ const strokeLayer = layers [ 2 ] ;
2466+ expect ( strokeLayer . id ) . toBe ( `${ id } -strokeLine` ) ;
2467+ expect ( strokeLayer . type ) . toBe ( 'line' ) ;
2468+ expect ( strokeLayer . paint [ 'line-color' ] ) . toBe ( '#ffffff' ) ;
2469+ done ( ) ;
2470+ } ) ;
2471+ } ) ;
2472+
2473+ it ( 'initial_wmsLayer' , ( done ) => {
2474+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2475+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2476+ return Promise . resolve ( new Response ( JSON . stringify ( wmsLayer ) ) ) ;
2477+ } else if ( url . indexOf ( 'REQUEST=GetCapabilities&SERVICE=WMS' ) > - 1 ) {
2478+ return Promise . resolve ( new Response ( wmsCapabilitiesText ) ) ;
2479+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2480+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2481+ }
2482+ return Promise . resolve ( ) ;
2483+ } ) ;
2484+ var datavizWebmap = new WebMap ( id , {
2485+ server : server
2486+ } ) ;
2487+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2488+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2489+ done ( ) ;
2490+ } ) ;
2491+ } ) ;
2492+
2493+ it ( 'initial_TiandituLayer' , ( done ) => {
2494+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2495+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2496+ return Promise . resolve ( new Response ( JSON . stringify ( tiandituLayer ) ) ) ;
2497+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2498+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2499+ }
2500+ return Promise . resolve ( ) ;
2501+ } ) ;
2502+ var datavizWebmap = new WebMap ( id , {
2503+ server : server
2504+ } ) ;
2505+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2506+ const layers = map . getStyle ( ) . layers ;
2507+ expect ( layers . length ) . toBe ( 2 ) ;
2508+ const tiandituLayer = layers [ 0 ] ;
2509+ expect ( tiandituLayer . id ) . toBe ( '天地图地形' ) ;
2510+ expect ( tiandituLayer . type ) . toBe ( 'raster' ) ;
2511+ const labelLayer = layers [ 1 ] ;
2512+ expect ( labelLayer . id ) . toBe ( '天地图地形-tdt-label' ) ;
2513+ done ( ) ;
2514+ } ) ;
2515+ } ) ;
2516+
2517+ it ( 'initial_xyzLayer' , ( done ) => {
2518+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2519+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2520+ return Promise . resolve ( new Response ( JSON . stringify ( xyzLayer ) ) ) ;
2521+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2522+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2523+ }
2524+ return Promise . resolve ( ) ;
2525+ } ) ;
2526+ var datavizWebmap = new WebMap ( id , {
2527+ server : server
2528+ } ) ;
2529+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2530+ const layers = map . getStyle ( ) . layers ;
2531+ expect ( layers . length ) . toBe ( 1 ) ;
2532+ const xyzLayer = layers [ 0 ] ;
2533+ expect ( xyzLayer . id ) . toBe ( 'OpenStreetMap' ) ;
2534+ expect ( xyzLayer . type ) . toBe ( 'raster' ) ;
2535+ done ( ) ;
2536+ } ) ;
2537+ } ) ;
2538+
2539+ it ( 'initial_mapboxstyleLayer' , ( done ) => {
2540+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2541+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2542+ return Promise . resolve ( new Response ( JSON . stringify ( mapboxstyleLayer ) ) ) ;
2543+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2544+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2545+ }
2546+ return Promise . resolve ( ) ;
2547+ } ) ;
2548+ var datavizWebmap = new WebMap ( id , {
2549+ server : server
2550+ } ) ;
2551+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2552+ expect ( datavizWebmap . options . serverUrl ) . toBe ( 'http://fack:8190/iportal/' ) ;
2553+ done ( ) ;
2554+ } ) ;
2555+ } ) ;
2556+
2557+ it ( 'initial_migrationLayer' , ( done ) => {
2558+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2559+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2560+ return Promise . resolve ( new Response ( migrationLayer ) ) ;
2561+ } else if ( url . indexOf ( 'content.json?' ) > - 1 ) {
2562+ return Promise . resolve ( new Response ( layerData_CSV ) ) ;
2563+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2564+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2565+ }
2566+ return Promise . resolve ( ) ;
2567+ } ) ;
2568+ var datavizWebmap = new WebMap ( id , {
2569+ server : server
2570+ } ) ;
2571+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2572+ done ( ) ;
2573+ } ) ;
2574+ } ) ;
2575+
2576+ it ( 'initial-rangeLayer-point' , ( done ) => {
2577+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2578+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2579+ return Promise . resolve ( new Response ( JSON . stringify ( webmap_rangeLayer ) ) ) ;
2580+ } else if ( url . indexOf ( 'content.json' ) > - 1 ) {
2581+ return Promise . resolve ( new Response ( JSON . stringify ( chart_content ) ) ) ;
2582+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2583+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2584+ }
2585+ return Promise . resolve ( ) ;
2586+ } ) ;
2587+ var datavizWebmap = new WebMap ( id , {
2588+ server : server
2589+ } ) ;
2590+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2591+ const layers = map . getStyle ( ) . layers ;
2592+ expect ( layers . length ) . toBe ( 2 ) ;
2593+ const rangeLayerPoint = layers [ 1 ] ;
2594+ const id = rangeLayerPoint . id ;
2595+ expect ( id ) . toBe ( '北京市轨道交通站点(9)' ) ;
2596+ expect ( rangeLayerPoint . type ) . toBe ( 'circle' ) ;
2597+ expect ( rangeLayerPoint . paint [ 'circle-radius' ] ) . toBe ( 8 ) ;
2598+ expect ( rangeLayerPoint . paint [ 'circle-color' ] . length ) . toBeGreaterThan ( 0 ) ;
2599+ done ( ) ;
2600+ } ) ;
2601+ } ) ;
2602+
2603+ it ( 'ISVJ-7952 CSV nullXY' , ( done ) => {
2604+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2605+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2606+ return Promise . resolve ( new Response ( JSON . stringify ( uniqueLayer_point ) ) ) ;
2607+ } else if ( url . indexOf ( 'content.json?' ) > - 1 ) {
2608+ return Promise . resolve ( new Response ( JSON . stringify ( csv_nullxy_Data ) ) ) ;
2609+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2610+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2611+ }
2612+ return Promise . resolve ( ) ;
2613+ } ) ;
2614+ var datavizWebmap = new WebMap ( id , {
2615+ server : server
2616+ } ) ;
2617+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2618+ expect ( map . getSource ( '民航数据' ) ) . not . toBeNull ( ) ;
2619+ expect ( map . getSource ( '民航数据' ) . _data . features . length ) . toBe ( 1 ) ;
2620+ done ( ) ;
2621+ } ) ;
2622+ } ) ;
2623+
2624+ it ( 'bing map' , ( done ) => {
2625+ const metaInfo = {
2626+ resourceSets : [
2627+ {
2628+ resources : [
2629+ {
2630+ __type : 'ImageryMetadata:http://schemas.microsoft.com/search/local/ws/rest/v1' ,
2631+ imageHeight : 256 ,
2632+ imageUrl :
2633+ 'https://{subdomain}.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{quadkey}?mkt=zh-CN&it=G,L&shading=hill&og=2505&n=z' ,
2634+ imageUrlSubdomains : [ 't0' , 't1' , 't2' , 't3' ] ,
2635+ imageWidth : 256
2636+ }
2637+ ]
2638+ }
2639+ ] ,
2640+ statusCode : 200 ,
2641+ statusDescription : 'OK'
2642+ } ;
2643+ spyOn ( FetchRequest , 'get' ) . and . callFake ( ( url ) => {
2644+ if ( url . indexOf ( 'map.json' ) > - 1 ) {
2645+ return Promise . resolve ( new Response ( JSON . stringify ( baseLayers [ 'BING' ] ) ) ) ;
2646+ } else if ( url . indexOf ( 'https://dev.virtualearth.net/REST/v1/Imagery/Metadata/RoadOnDemand?uriScheme=https&include=ImageryProviders&key=AhOVlIlR89XkNyDsXBAb7TjabrEokPoqhjk4ncLm9cQkJ5ae_JyhgV1wMcWnVrko&c=zh-cn' ) > - 1 ) {
2647+ return Promise . resolve ( new Response ( JSON . stringify ( metaInfo ) ) ) ;
2648+ } else if ( url . indexOf ( 'portal.json' ) > - 1 ) {
2649+ return Promise . resolve ( new Response ( JSON . stringify ( iportal_serviceProxy ) ) ) ;
2650+ }
2651+ return Promise . resolve ( ) ;
2652+ } ) ;
2653+ var datavizWebmap = new WebMap ( id , {
2654+ server : server ,
2655+ bingMapsKey : 'AhOVlIlR89XkNyDsXBAb7TjabrEokPoqhjk4ncLm9cQkJ5ae_JyhgV1wMcWnVrko'
2656+ } ) ;
2657+
2658+ datavizWebmap . on ( 'addlayerssucceeded' , ( { map } ) => {
2659+ expect ( map . getSource ( '必应地图' ) . tiles ) . toEqual ( [
2660+ 'https://t0.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{quadkey}?mkt=zh-CN&it=G,L&shading=hill&og=2505&n=z' ,
2661+ 'https://t1.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{quadkey}?mkt=zh-CN&it=G,L&shading=hill&og=2505&n=z' ,
2662+ 'https://t2.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{quadkey}?mkt=zh-CN&it=G,L&shading=hill&og=2505&n=z' ,
2663+ 'https://t3.ssl.ak.dynamic.tiles.virtualearth.net/comp/ch/{quadkey}?mkt=zh-CN&it=G,L&shading=hill&og=2505&n=z'
2664+ ] ) ;
2665+ done ( ) ;
2666+ } ) ;
2667+ } ) ;
22772668} ) ;
0 commit comments