echarts-all.js 2.0 MB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468154691547015471154721547315474154751547615477154781547915480154811548215483154841548515486154871548815489154901549115492154931549415495154961549715498154991550015501155021550315504155051550615507155081550915510155111551215513155141551515516155171551815519155201552115522155231552415525155261552715528155291553015531155321553315534155351553615537155381553915540155411554215543155441554515546155471554815549155501555115552155531555415555155561555715558155591556015561155621556315564155651556615567155681556915570155711557215573155741557515576155771557815579155801558115582155831558415585155861558715588155891559015591155921559315594155951559615597155981559915600156011560215603156041560515606156071560815609156101561115612156131561415615156161561715618156191562015621156221562315624156251562615627156281562915630156311563215633156341563515636156371563815639156401564115642156431564415645156461564715648156491565015651156521565315654156551565615657156581565915660156611566215663156641566515666156671566815669156701567115672156731567415675156761567715678156791568015681156821568315684156851568615687156881568915690156911569215693156941569515696156971569815699157001570115702157031570415705157061570715708157091571015711157121571315714157151571615717157181571915720157211572215723157241572515726157271572815729157301573115732157331573415735157361573715738157391574015741157421574315744157451574615747157481574915750157511575215753157541575515756157571575815759157601576115762157631576415765157661576715768157691577015771157721577315774157751577615777157781577915780157811578215783157841578515786157871578815789157901579115792157931579415795157961579715798157991580015801158021580315804158051580615807158081580915810158111581215813158141581515816158171581815819158201582115822158231582415825158261582715828158291583015831158321583315834158351583615837158381583915840158411584215843158441584515846158471584815849158501585115852158531585415855158561585715858158591586015861158621586315864158651586615867158681586915870158711587215873158741587515876158771587815879158801588115882158831588415885158861588715888158891589015891158921589315894158951589615897158981589915900159011590215903159041590515906159071590815909159101591115912159131591415915159161591715918159191592015921159221592315924159251592615927159281592915930159311593215933159341593515936159371593815939159401594115942159431594415945159461594715948159491595015951159521595315954159551595615957159581595915960159611596215963159641596515966159671596815969159701597115972159731597415975159761597715978159791598015981159821598315984159851598615987159881598915990159911599215993159941599515996159971599815999160001600116002160031600416005160061600716008160091601016011160121601316014160151601616017160181601916020160211602216023160241602516026160271602816029160301603116032160331603416035160361603716038160391604016041160421604316044160451604616047160481604916050160511605216053160541605516056160571605816059160601606116062160631606416065160661606716068160691607016071160721607316074160751607616077160781607916080160811608216083160841608516086160871608816089160901609116092160931609416095160961609716098160991610016101161021610316104161051610616107161081610916110161111611216113161141611516116161171611816119161201612116122161231612416125161261612716128161291613016131161321613316134161351613616137161381613916140161411614216143161441614516146161471614816149161501615116152161531615416155161561615716158161591616016161161621616316164161651616616167161681616916170161711617216173161741617516176161771617816179161801618116182161831618416185161861618716188161891619016191161921619316194161951619616197161981619916200162011620216203162041620516206162071620816209162101621116212162131621416215162161621716218162191622016221162221622316224162251622616227162281622916230162311623216233162341623516236162371623816239162401624116242162431624416245162461624716248162491625016251162521625316254162551625616257162581625916260162611626216263162641626516266162671626816269162701627116272162731627416275162761627716278162791628016281162821628316284162851628616287162881628916290162911629216293162941629516296162971629816299163001630116302163031630416305163061630716308163091631016311163121631316314163151631616317163181631916320163211632216323163241632516326163271632816329163301633116332163331633416335163361633716338163391634016341163421634316344163451634616347163481634916350163511635216353163541635516356163571635816359163601636116362163631636416365163661636716368163691637016371163721637316374163751637616377163781637916380163811638216383163841638516386163871638816389163901639116392163931639416395163961639716398163991640016401164021640316404164051640616407164081640916410164111641216413164141641516416164171641816419164201642116422164231642416425164261642716428164291643016431164321643316434164351643616437164381643916440164411644216443164441644516446164471644816449164501645116452164531645416455164561645716458164591646016461164621646316464164651646616467164681646916470164711647216473164741647516476164771647816479164801648116482164831648416485164861648716488164891649016491164921649316494164951649616497164981649916500165011650216503165041650516506165071650816509165101651116512165131651416515165161651716518165191652016521165221652316524165251652616527165281652916530165311653216533165341653516536165371653816539165401654116542165431654416545165461654716548165491655016551165521655316554165551655616557165581655916560165611656216563165641656516566165671656816569165701657116572165731657416575165761657716578165791658016581165821658316584165851658616587165881658916590165911659216593165941659516596165971659816599166001660116602166031660416605166061660716608166091661016611166121661316614166151661616617166181661916620166211662216623166241662516626166271662816629166301663116632166331663416635166361663716638166391664016641166421664316644166451664616647166481664916650166511665216653166541665516656166571665816659166601666116662166631666416665166661666716668166691667016671166721667316674166751667616677166781667916680166811668216683166841668516686166871668816689166901669116692166931669416695166961669716698166991670016701167021670316704167051670616707167081670916710167111671216713167141671516716167171671816719167201672116722167231672416725167261672716728167291673016731167321673316734167351673616737167381673916740167411674216743167441674516746167471674816749167501675116752167531675416755167561675716758167591676016761167621676316764167651676616767167681676916770167711677216773167741677516776167771677816779167801678116782167831678416785167861678716788167891679016791167921679316794167951679616797167981679916800168011680216803168041680516806168071680816809168101681116812168131681416815168161681716818168191682016821168221682316824168251682616827168281682916830168311683216833168341683516836168371683816839168401684116842168431684416845168461684716848168491685016851168521685316854168551685616857168581685916860168611686216863168641686516866168671686816869168701687116872168731687416875168761687716878168791688016881168821688316884168851688616887168881688916890168911689216893168941689516896168971689816899169001690116902169031690416905169061690716908169091691016911169121691316914169151691616917169181691916920169211692216923169241692516926169271692816929169301693116932169331693416935169361693716938169391694016941169421694316944169451694616947169481694916950169511695216953169541695516956169571695816959169601696116962169631696416965169661696716968169691697016971169721697316974169751697616977169781697916980169811698216983169841698516986169871698816989169901699116992169931699416995169961699716998169991700017001170021700317004170051700617007170081700917010170111701217013170141701517016170171701817019170201702117022170231702417025170261702717028170291703017031170321703317034170351703617037170381703917040170411704217043170441704517046170471704817049170501705117052170531705417055170561705717058170591706017061170621706317064170651706617067170681706917070170711707217073170741707517076170771707817079170801708117082170831708417085170861708717088170891709017091170921709317094170951709617097170981709917100171011710217103171041710517106171071710817109171101711117112171131711417115171161711717118171191712017121171221712317124171251712617127171281712917130171311713217133171341713517136171371713817139171401714117142171431714417145171461714717148171491715017151171521715317154171551715617157171581715917160171611716217163171641716517166171671716817169171701717117172171731717417175171761717717178171791718017181171821718317184171851718617187171881718917190171911719217193171941719517196171971719817199172001720117202172031720417205172061720717208172091721017211172121721317214172151721617217172181721917220172211722217223172241722517226172271722817229172301723117232172331723417235172361723717238172391724017241172421724317244172451724617247172481724917250172511725217253172541725517256172571725817259172601726117262172631726417265172661726717268172691727017271172721727317274172751727617277172781727917280172811728217283172841728517286172871728817289172901729117292172931729417295172961729717298172991730017301173021730317304173051730617307173081730917310173111731217313173141731517316173171731817319173201732117322173231732417325173261732717328173291733017331173321733317334173351733617337173381733917340173411734217343173441734517346173471734817349173501735117352173531735417355173561735717358173591736017361173621736317364173651736617367173681736917370173711737217373173741737517376173771737817379173801738117382173831738417385173861738717388173891739017391173921739317394173951739617397173981739917400174011740217403174041740517406174071740817409174101741117412174131741417415174161741717418174191742017421174221742317424174251742617427174281742917430174311743217433174341743517436174371743817439174401744117442174431744417445174461744717448174491745017451174521745317454174551745617457174581745917460174611746217463174641746517466174671746817469174701747117472174731747417475174761747717478174791748017481174821748317484174851748617487174881748917490174911749217493174941749517496174971749817499175001750117502175031750417505175061750717508175091751017511175121751317514175151751617517175181751917520175211752217523175241752517526175271752817529175301753117532175331753417535175361753717538175391754017541175421754317544175451754617547175481754917550175511755217553175541755517556175571755817559175601756117562175631756417565175661756717568175691757017571175721757317574175751757617577175781757917580175811758217583175841758517586175871758817589175901759117592175931759417595175961759717598175991760017601176021760317604176051760617607176081760917610176111761217613176141761517616176171761817619176201762117622176231762417625176261762717628176291763017631176321763317634176351763617637176381763917640176411764217643176441764517646176471764817649176501765117652176531765417655176561765717658176591766017661176621766317664176651766617667176681766917670176711767217673176741767517676176771767817679176801768117682176831768417685176861768717688176891769017691176921769317694176951769617697176981769917700177011770217703177041770517706177071770817709177101771117712177131771417715177161771717718177191772017721177221772317724177251772617727177281772917730177311773217733177341773517736177371773817739177401774117742177431774417745177461774717748177491775017751177521775317754177551775617757177581775917760177611776217763177641776517766177671776817769177701777117772177731777417775177761777717778177791778017781177821778317784177851778617787177881778917790177911779217793177941779517796177971779817799178001780117802178031780417805178061780717808178091781017811178121781317814178151781617817178181781917820178211782217823178241782517826178271782817829178301783117832178331783417835178361783717838178391784017841178421784317844178451784617847178481784917850178511785217853178541785517856178571785817859178601786117862178631786417865178661786717868178691787017871178721787317874178751787617877178781787917880178811788217883178841788517886178871788817889178901789117892178931789417895178961789717898178991790017901179021790317904179051790617907179081790917910179111791217913179141791517916179171791817919179201792117922179231792417925179261792717928179291793017931179321793317934179351793617937179381793917940179411794217943179441794517946179471794817949179501795117952179531795417955179561795717958179591796017961179621796317964179651796617967179681796917970179711797217973179741797517976179771797817979179801798117982179831798417985179861798717988179891799017991179921799317994179951799617997179981799918000180011800218003180041800518006180071800818009180101801118012180131801418015180161801718018180191802018021180221802318024180251802618027180281802918030180311803218033180341803518036180371803818039180401804118042180431804418045180461804718048180491805018051180521805318054180551805618057180581805918060180611806218063180641806518066180671806818069180701807118072180731807418075180761807718078180791808018081180821808318084180851808618087180881808918090180911809218093180941809518096180971809818099181001810118102181031810418105181061810718108181091811018111181121811318114181151811618117181181811918120181211812218123181241812518126181271812818129181301813118132181331813418135181361813718138181391814018141181421814318144181451814618147181481814918150181511815218153181541815518156181571815818159181601816118162181631816418165181661816718168181691817018171181721817318174181751817618177181781817918180181811818218183181841818518186181871818818189181901819118192181931819418195181961819718198181991820018201182021820318204182051820618207182081820918210182111821218213182141821518216182171821818219182201822118222182231822418225182261822718228182291823018231182321823318234182351823618237182381823918240182411824218243182441824518246182471824818249182501825118252182531825418255182561825718258182591826018261182621826318264182651826618267182681826918270182711827218273182741827518276182771827818279182801828118282182831828418285182861828718288182891829018291182921829318294182951829618297182981829918300183011830218303183041830518306183071830818309183101831118312183131831418315183161831718318183191832018321183221832318324183251832618327183281832918330183311833218333183341833518336183371833818339183401834118342183431834418345183461834718348183491835018351183521835318354183551835618357183581835918360183611836218363183641836518366183671836818369183701837118372183731837418375183761837718378183791838018381183821838318384183851838618387183881838918390183911839218393183941839518396183971839818399184001840118402184031840418405184061840718408184091841018411184121841318414184151841618417184181841918420184211842218423184241842518426184271842818429184301843118432184331843418435184361843718438184391844018441184421844318444184451844618447184481844918450184511845218453184541845518456184571845818459184601846118462184631846418465184661846718468184691847018471184721847318474184751847618477184781847918480184811848218483184841848518486184871848818489184901849118492184931849418495184961849718498184991850018501185021850318504185051850618507185081850918510185111851218513185141851518516185171851818519185201852118522185231852418525185261852718528185291853018531185321853318534185351853618537185381853918540185411854218543185441854518546185471854818549185501855118552185531855418555185561855718558185591856018561185621856318564185651856618567185681856918570185711857218573185741857518576185771857818579185801858118582185831858418585185861858718588185891859018591185921859318594185951859618597185981859918600186011860218603186041860518606186071860818609186101861118612186131861418615186161861718618186191862018621186221862318624186251862618627186281862918630186311863218633186341863518636186371863818639186401864118642186431864418645186461864718648186491865018651186521865318654186551865618657186581865918660186611866218663186641866518666186671866818669186701867118672186731867418675186761867718678186791868018681186821868318684186851868618687186881868918690186911869218693186941869518696186971869818699187001870118702187031870418705187061870718708187091871018711187121871318714187151871618717187181871918720187211872218723187241872518726187271872818729187301873118732187331873418735187361873718738187391874018741187421874318744187451874618747187481874918750187511875218753187541875518756187571875818759187601876118762187631876418765187661876718768187691877018771187721877318774187751877618777187781877918780187811878218783187841878518786187871878818789187901879118792187931879418795187961879718798187991880018801188021880318804188051880618807188081880918810188111881218813188141881518816188171881818819188201882118822188231882418825188261882718828188291883018831188321883318834188351883618837188381883918840188411884218843188441884518846188471884818849188501885118852188531885418855188561885718858188591886018861188621886318864188651886618867188681886918870188711887218873188741887518876188771887818879188801888118882188831888418885188861888718888188891889018891188921889318894188951889618897188981889918900189011890218903189041890518906189071890818909189101891118912189131891418915189161891718918189191892018921189221892318924189251892618927189281892918930189311893218933189341893518936189371893818939189401894118942189431894418945189461894718948189491895018951189521895318954189551895618957189581895918960189611896218963189641896518966189671896818969189701897118972189731897418975189761897718978189791898018981189821898318984189851898618987189881898918990189911899218993189941899518996189971899818999190001900119002190031900419005190061900719008190091901019011190121901319014190151901619017190181901919020190211902219023190241902519026190271902819029190301903119032190331903419035190361903719038190391904019041190421904319044190451904619047190481904919050190511905219053190541905519056190571905819059190601906119062190631906419065190661906719068190691907019071190721907319074190751907619077190781907919080190811908219083190841908519086190871908819089190901909119092190931909419095190961909719098190991910019101191021910319104191051910619107191081910919110191111911219113191141911519116191171911819119191201912119122191231912419125191261912719128191291913019131191321913319134191351913619137191381913919140191411914219143191441914519146191471914819149191501915119152191531915419155191561915719158191591916019161191621916319164191651916619167191681916919170191711917219173191741917519176191771917819179191801918119182191831918419185191861918719188191891919019191191921919319194191951919619197191981919919200192011920219203192041920519206192071920819209192101921119212192131921419215192161921719218192191922019221192221922319224192251922619227192281922919230192311923219233192341923519236192371923819239192401924119242192431924419245192461924719248192491925019251192521925319254192551925619257192581925919260192611926219263192641926519266192671926819269192701927119272192731927419275192761927719278192791928019281192821928319284192851928619287192881928919290192911929219293192941929519296192971929819299193001930119302193031930419305193061930719308193091931019311193121931319314193151931619317193181931919320193211932219323193241932519326193271932819329193301933119332193331933419335193361933719338193391934019341193421934319344193451934619347193481934919350193511935219353193541935519356193571935819359193601936119362193631936419365193661936719368193691937019371193721937319374193751937619377193781937919380193811938219383193841938519386193871938819389193901939119392193931939419395193961939719398193991940019401194021940319404194051940619407194081940919410194111941219413194141941519416194171941819419194201942119422194231942419425194261942719428194291943019431194321943319434194351943619437194381943919440194411944219443194441944519446194471944819449194501945119452194531945419455194561945719458194591946019461194621946319464194651946619467194681946919470194711947219473194741947519476194771947819479194801948119482194831948419485194861948719488194891949019491194921949319494194951949619497194981949919500195011950219503195041950519506195071950819509195101951119512195131951419515195161951719518195191952019521195221952319524195251952619527195281952919530195311953219533195341953519536195371953819539195401954119542195431954419545195461954719548195491955019551195521955319554195551955619557195581955919560195611956219563195641956519566195671956819569195701957119572195731957419575195761957719578195791958019581195821958319584195851958619587195881958919590195911959219593195941959519596195971959819599196001960119602196031960419605196061960719608196091961019611196121961319614196151961619617196181961919620196211962219623196241962519626196271962819629196301963119632196331963419635196361963719638196391964019641196421964319644196451964619647196481964919650196511965219653196541965519656196571965819659196601966119662196631966419665196661966719668196691967019671196721967319674196751967619677196781967919680196811968219683196841968519686196871968819689196901969119692196931969419695196961969719698196991970019701197021970319704197051970619707197081970919710197111971219713197141971519716197171971819719197201972119722197231972419725197261972719728197291973019731197321973319734197351973619737197381973919740197411974219743197441974519746197471974819749197501975119752197531975419755197561975719758197591976019761197621976319764197651976619767197681976919770197711977219773197741977519776197771977819779197801978119782197831978419785197861978719788197891979019791197921979319794197951979619797197981979919800198011980219803198041980519806198071980819809198101981119812198131981419815198161981719818198191982019821198221982319824198251982619827198281982919830198311983219833198341983519836198371983819839198401984119842198431984419845198461984719848198491985019851198521985319854198551985619857198581985919860198611986219863198641986519866198671986819869198701987119872198731987419875198761987719878198791988019881198821988319884198851988619887198881988919890198911989219893198941989519896198971989819899199001990119902199031990419905199061990719908199091991019911199121991319914199151991619917199181991919920199211992219923199241992519926199271992819929199301993119932199331993419935199361993719938199391994019941199421994319944199451994619947199481994919950199511995219953199541995519956199571995819959199601996119962199631996419965199661996719968199691997019971199721997319974199751997619977199781997919980199811998219983199841998519986199871998819989199901999119992199931999419995199961999719998199992000020001200022000320004200052000620007200082000920010200112001220013200142001520016200172001820019200202002120022200232002420025200262002720028200292003020031200322003320034200352003620037200382003920040200412004220043200442004520046200472004820049200502005120052200532005420055200562005720058200592006020061200622006320064200652006620067200682006920070200712007220073200742007520076200772007820079200802008120082200832008420085200862008720088200892009020091200922009320094200952009620097200982009920100201012010220103201042010520106201072010820109201102011120112201132011420115201162011720118201192012020121201222012320124201252012620127201282012920130201312013220133201342013520136201372013820139201402014120142201432014420145201462014720148201492015020151201522015320154201552015620157201582015920160201612016220163201642016520166201672016820169201702017120172201732017420175201762017720178201792018020181201822018320184201852018620187201882018920190201912019220193201942019520196201972019820199202002020120202202032020420205202062020720208202092021020211202122021320214202152021620217202182021920220202212022220223202242022520226202272022820229202302023120232202332023420235202362023720238202392024020241202422024320244202452024620247202482024920250202512025220253202542025520256202572025820259202602026120262202632026420265202662026720268202692027020271202722027320274202752027620277202782027920280202812028220283202842028520286202872028820289202902029120292202932029420295202962029720298202992030020301203022030320304203052030620307203082030920310203112031220313203142031520316203172031820319203202032120322203232032420325203262032720328203292033020331203322033320334203352033620337203382033920340203412034220343203442034520346203472034820349203502035120352203532035420355203562035720358203592036020361203622036320364203652036620367203682036920370203712037220373203742037520376203772037820379203802038120382203832038420385203862038720388203892039020391203922039320394203952039620397203982039920400204012040220403204042040520406204072040820409204102041120412204132041420415204162041720418204192042020421204222042320424204252042620427204282042920430204312043220433204342043520436204372043820439204402044120442204432044420445204462044720448204492045020451204522045320454204552045620457204582045920460204612046220463204642046520466204672046820469204702047120472204732047420475204762047720478204792048020481204822048320484204852048620487204882048920490204912049220493204942049520496204972049820499205002050120502205032050420505205062050720508205092051020511205122051320514205152051620517205182051920520205212052220523205242052520526205272052820529205302053120532205332053420535205362053720538205392054020541205422054320544205452054620547205482054920550205512055220553205542055520556205572055820559205602056120562205632056420565205662056720568205692057020571205722057320574205752057620577205782057920580205812058220583205842058520586205872058820589205902059120592205932059420595205962059720598205992060020601206022060320604206052060620607206082060920610206112061220613206142061520616206172061820619206202062120622206232062420625206262062720628206292063020631206322063320634206352063620637206382063920640206412064220643206442064520646206472064820649206502065120652206532065420655206562065720658206592066020661206622066320664206652066620667206682066920670206712067220673206742067520676206772067820679206802068120682206832068420685206862068720688206892069020691206922069320694206952069620697206982069920700207012070220703207042070520706207072070820709207102071120712207132071420715207162071720718207192072020721207222072320724207252072620727207282072920730207312073220733207342073520736207372073820739207402074120742207432074420745207462074720748207492075020751207522075320754207552075620757207582075920760207612076220763207642076520766207672076820769207702077120772207732077420775207762077720778207792078020781207822078320784207852078620787207882078920790207912079220793207942079520796207972079820799208002080120802208032080420805208062080720808208092081020811208122081320814208152081620817208182081920820208212082220823208242082520826208272082820829208302083120832208332083420835208362083720838208392084020841208422084320844208452084620847208482084920850208512085220853208542085520856208572085820859208602086120862208632086420865208662086720868208692087020871208722087320874208752087620877208782087920880208812088220883208842088520886208872088820889208902089120892208932089420895208962089720898208992090020901209022090320904209052090620907209082090920910209112091220913209142091520916209172091820919209202092120922209232092420925209262092720928209292093020931209322093320934209352093620937209382093920940209412094220943209442094520946209472094820949209502095120952209532095420955209562095720958209592096020961209622096320964209652096620967209682096920970209712097220973209742097520976209772097820979209802098120982209832098420985209862098720988209892099020991209922099320994209952099620997209982099921000210012100221003210042100521006210072100821009210102101121012210132101421015210162101721018210192102021021210222102321024210252102621027210282102921030210312103221033210342103521036210372103821039210402104121042210432104421045210462104721048210492105021051210522105321054210552105621057210582105921060210612106221063210642106521066210672106821069210702107121072210732107421075210762107721078210792108021081210822108321084210852108621087210882108921090210912109221093210942109521096210972109821099211002110121102211032110421105211062110721108211092111021111211122111321114211152111621117211182111921120211212112221123211242112521126211272112821129211302113121132211332113421135211362113721138211392114021141211422114321144211452114621147211482114921150211512115221153211542115521156211572115821159211602116121162211632116421165211662116721168211692117021171211722117321174211752117621177211782117921180211812118221183211842118521186211872118821189211902119121192211932119421195211962119721198211992120021201212022120321204212052120621207212082120921210212112121221213212142121521216212172121821219212202122121222212232122421225212262122721228212292123021231212322123321234212352123621237212382123921240212412124221243212442124521246212472124821249212502125121252212532125421255212562125721258212592126021261212622126321264212652126621267212682126921270212712127221273212742127521276212772127821279212802128121282212832128421285212862128721288212892129021291212922129321294212952129621297212982129921300213012130221303213042130521306213072130821309213102131121312213132131421315213162131721318213192132021321213222132321324213252132621327213282132921330213312133221333213342133521336213372133821339213402134121342213432134421345213462134721348213492135021351213522135321354213552135621357213582135921360213612136221363213642136521366213672136821369213702137121372213732137421375213762137721378213792138021381213822138321384213852138621387213882138921390213912139221393213942139521396213972139821399214002140121402214032140421405214062140721408214092141021411214122141321414214152141621417214182141921420214212142221423214242142521426214272142821429214302143121432214332143421435214362143721438214392144021441214422144321444214452144621447214482144921450214512145221453214542145521456214572145821459214602146121462214632146421465214662146721468214692147021471214722147321474214752147621477214782147921480214812148221483214842148521486214872148821489214902149121492214932149421495214962149721498214992150021501215022150321504215052150621507215082150921510215112151221513215142151521516215172151821519215202152121522215232152421525215262152721528215292153021531215322153321534215352153621537215382153921540215412154221543215442154521546215472154821549215502155121552215532155421555215562155721558215592156021561215622156321564215652156621567215682156921570215712157221573215742157521576215772157821579215802158121582215832158421585215862158721588215892159021591215922159321594215952159621597215982159921600216012160221603216042160521606216072160821609216102161121612216132161421615216162161721618216192162021621216222162321624216252162621627216282162921630216312163221633216342163521636216372163821639216402164121642216432164421645216462164721648216492165021651216522165321654216552165621657216582165921660216612166221663216642166521666216672166821669216702167121672216732167421675216762167721678216792168021681216822168321684216852168621687216882168921690216912169221693216942169521696216972169821699217002170121702217032170421705217062170721708217092171021711217122171321714217152171621717217182171921720217212172221723217242172521726217272172821729217302173121732217332173421735217362173721738217392174021741217422174321744217452174621747217482174921750217512175221753217542175521756217572175821759217602176121762217632176421765217662176721768217692177021771217722177321774217752177621777217782177921780217812178221783217842178521786217872178821789217902179121792217932179421795217962179721798217992180021801218022180321804218052180621807218082180921810218112181221813218142181521816218172181821819218202182121822218232182421825218262182721828218292183021831218322183321834218352183621837218382183921840218412184221843218442184521846218472184821849218502185121852218532185421855218562185721858218592186021861218622186321864218652186621867218682186921870218712187221873218742187521876218772187821879218802188121882218832188421885218862188721888218892189021891218922189321894218952189621897218982189921900219012190221903219042190521906219072190821909219102191121912219132191421915219162191721918219192192021921219222192321924219252192621927219282192921930219312193221933219342193521936219372193821939219402194121942219432194421945219462194721948219492195021951219522195321954219552195621957219582195921960219612196221963219642196521966219672196821969219702197121972219732197421975219762197721978219792198021981219822198321984219852198621987219882198921990219912199221993219942199521996219972199821999220002200122002220032200422005220062200722008220092201022011220122201322014220152201622017220182201922020220212202222023220242202522026220272202822029220302203122032220332203422035220362203722038220392204022041220422204322044220452204622047220482204922050220512205222053220542205522056220572205822059220602206122062220632206422065220662206722068220692207022071220722207322074220752207622077220782207922080220812208222083220842208522086220872208822089220902209122092220932209422095220962209722098220992210022101221022210322104221052210622107221082210922110221112211222113221142211522116221172211822119221202212122122221232212422125221262212722128221292213022131221322213322134221352213622137221382213922140221412214222143221442214522146221472214822149221502215122152221532215422155221562215722158221592216022161221622216322164221652216622167221682216922170221712217222173221742217522176221772217822179221802218122182221832218422185221862218722188221892219022191221922219322194221952219622197221982219922200222012220222203222042220522206222072220822209222102221122212222132221422215222162221722218222192222022221222222222322224222252222622227222282222922230222312223222233222342223522236222372223822239222402224122242222432224422245222462224722248222492225022251222522225322254222552225622257222582225922260222612226222263222642226522266222672226822269222702227122272222732227422275222762227722278222792228022281222822228322284222852228622287222882228922290222912229222293222942229522296222972229822299223002230122302223032230422305223062230722308223092231022311223122231322314223152231622317223182231922320223212232222323223242232522326223272232822329223302233122332223332233422335223362233722338223392234022341223422234322344223452234622347223482234922350223512235222353223542235522356223572235822359223602236122362223632236422365223662236722368223692237022371223722237322374223752237622377223782237922380223812238222383223842238522386223872238822389223902239122392223932239422395223962239722398223992240022401224022240322404224052240622407224082240922410224112241222413224142241522416224172241822419224202242122422224232242422425224262242722428224292243022431224322243322434224352243622437224382243922440224412244222443224442244522446224472244822449224502245122452224532245422455224562245722458224592246022461224622246322464224652246622467224682246922470224712247222473224742247522476224772247822479224802248122482224832248422485224862248722488224892249022491224922249322494224952249622497224982249922500225012250222503225042250522506225072250822509225102251122512225132251422515225162251722518225192252022521225222252322524225252252622527225282252922530225312253222533225342253522536225372253822539225402254122542225432254422545225462254722548225492255022551225522255322554225552255622557225582255922560225612256222563225642256522566225672256822569225702257122572225732257422575225762257722578225792258022581225822258322584225852258622587225882258922590225912259222593225942259522596225972259822599226002260122602226032260422605226062260722608226092261022611226122261322614226152261622617226182261922620226212262222623226242262522626226272262822629226302263122632226332263422635226362263722638226392264022641226422264322644226452264622647226482264922650226512265222653226542265522656226572265822659226602266122662226632266422665226662266722668226692267022671226722267322674226752267622677226782267922680226812268222683226842268522686226872268822689226902269122692226932269422695226962269722698226992270022701227022270322704227052270622707227082270922710227112271222713227142271522716227172271822719227202272122722227232272422725227262272722728227292273022731227322273322734227352273622737227382273922740227412274222743227442274522746227472274822749227502275122752227532275422755227562275722758227592276022761227622276322764227652276622767227682276922770227712277222773227742277522776227772277822779227802278122782227832278422785227862278722788227892279022791227922279322794227952279622797227982279922800228012280222803228042280522806228072280822809228102281122812228132281422815228162281722818228192282022821228222282322824228252282622827228282282922830228312283222833228342283522836228372283822839228402284122842228432284422845228462284722848228492285022851228522285322854228552285622857228582285922860228612286222863228642286522866228672286822869228702287122872228732287422875228762287722878228792288022881228822288322884228852288622887228882288922890228912289222893228942289522896228972289822899229002290122902229032290422905229062290722908229092291022911229122291322914229152291622917229182291922920229212292222923229242292522926229272292822929229302293122932229332293422935229362293722938229392294022941229422294322944229452294622947229482294922950229512295222953229542295522956229572295822959229602296122962229632296422965229662296722968229692297022971229722297322974229752297622977229782297922980229812298222983229842298522986229872298822989229902299122992229932299422995229962299722998229992300023001230022300323004230052300623007230082300923010230112301223013230142301523016230172301823019230202302123022230232302423025230262302723028230292303023031230322303323034230352303623037230382303923040230412304223043230442304523046230472304823049230502305123052230532305423055230562305723058230592306023061230622306323064230652306623067230682306923070230712307223073230742307523076230772307823079230802308123082230832308423085230862308723088230892309023091230922309323094230952309623097230982309923100231012310223103231042310523106231072310823109231102311123112231132311423115231162311723118231192312023121231222312323124231252312623127231282312923130231312313223133231342313523136231372313823139231402314123142231432314423145231462314723148231492315023151231522315323154231552315623157231582315923160231612316223163231642316523166231672316823169231702317123172231732317423175231762317723178231792318023181231822318323184231852318623187231882318923190231912319223193231942319523196231972319823199232002320123202232032320423205232062320723208232092321023211232122321323214232152321623217232182321923220232212322223223232242322523226232272322823229232302323123232232332323423235232362323723238232392324023241232422324323244232452324623247232482324923250232512325223253232542325523256232572325823259232602326123262232632326423265232662326723268232692327023271232722327323274232752327623277232782327923280232812328223283232842328523286232872328823289232902329123292232932329423295232962329723298232992330023301233022330323304233052330623307233082330923310233112331223313233142331523316233172331823319233202332123322233232332423325233262332723328233292333023331233322333323334233352333623337233382333923340233412334223343233442334523346233472334823349233502335123352233532335423355233562335723358233592336023361233622336323364233652336623367233682336923370233712337223373233742337523376233772337823379233802338123382233832338423385233862338723388233892339023391233922339323394233952339623397233982339923400234012340223403234042340523406234072340823409234102341123412234132341423415234162341723418234192342023421234222342323424234252342623427234282342923430234312343223433234342343523436234372343823439234402344123442234432344423445234462344723448234492345023451234522345323454234552345623457234582345923460234612346223463234642346523466234672346823469234702347123472234732347423475234762347723478234792348023481234822348323484234852348623487234882348923490234912349223493234942349523496234972349823499235002350123502235032350423505235062350723508235092351023511235122351323514235152351623517235182351923520235212352223523235242352523526235272352823529235302353123532235332353423535235362353723538235392354023541235422354323544235452354623547235482354923550235512355223553235542355523556235572355823559235602356123562235632356423565235662356723568235692357023571235722357323574235752357623577235782357923580235812358223583235842358523586235872358823589235902359123592235932359423595235962359723598235992360023601236022360323604236052360623607236082360923610236112361223613236142361523616236172361823619236202362123622236232362423625236262362723628236292363023631236322363323634236352363623637236382363923640236412364223643236442364523646236472364823649236502365123652236532365423655236562365723658236592366023661236622366323664236652366623667236682366923670236712367223673236742367523676236772367823679236802368123682236832368423685236862368723688236892369023691236922369323694236952369623697236982369923700237012370223703237042370523706237072370823709237102371123712237132371423715237162371723718237192372023721237222372323724237252372623727237282372923730237312373223733237342373523736237372373823739237402374123742237432374423745237462374723748237492375023751237522375323754237552375623757237582375923760237612376223763237642376523766237672376823769237702377123772237732377423775237762377723778237792378023781237822378323784237852378623787237882378923790237912379223793237942379523796237972379823799238002380123802238032380423805238062380723808238092381023811238122381323814238152381623817238182381923820238212382223823238242382523826238272382823829238302383123832238332383423835238362383723838238392384023841238422384323844238452384623847238482384923850238512385223853238542385523856238572385823859238602386123862238632386423865238662386723868238692387023871238722387323874238752387623877238782387923880238812388223883238842388523886238872388823889238902389123892238932389423895238962389723898238992390023901239022390323904239052390623907239082390923910239112391223913239142391523916239172391823919239202392123922239232392423925239262392723928239292393023931239322393323934239352393623937239382393923940239412394223943239442394523946239472394823949239502395123952239532395423955239562395723958239592396023961239622396323964239652396623967239682396923970239712397223973239742397523976239772397823979239802398123982239832398423985239862398723988239892399023991239922399323994239952399623997239982399924000240012400224003240042400524006240072400824009240102401124012240132401424015240162401724018240192402024021240222402324024240252402624027240282402924030240312403224033240342403524036240372403824039240402404124042240432404424045240462404724048240492405024051240522405324054240552405624057240582405924060240612406224063240642406524066240672406824069240702407124072240732407424075240762407724078240792408024081240822408324084240852408624087240882408924090240912409224093240942409524096240972409824099241002410124102241032410424105241062410724108241092411024111241122411324114241152411624117241182411924120241212412224123241242412524126241272412824129241302413124132241332413424135241362413724138241392414024141241422414324144241452414624147241482414924150241512415224153241542415524156241572415824159241602416124162241632416424165241662416724168241692417024171241722417324174241752417624177241782417924180241812418224183241842418524186241872418824189241902419124192241932419424195241962419724198241992420024201242022420324204242052420624207242082420924210242112421224213242142421524216242172421824219242202422124222242232422424225242262422724228242292423024231242322423324234242352423624237242382423924240242412424224243242442424524246242472424824249242502425124252242532425424255242562425724258242592426024261242622426324264242652426624267242682426924270242712427224273242742427524276242772427824279242802428124282242832428424285242862428724288242892429024291242922429324294242952429624297242982429924300243012430224303243042430524306243072430824309243102431124312243132431424315243162431724318243192432024321243222432324324243252432624327243282432924330243312433224333243342433524336243372433824339243402434124342243432434424345243462434724348243492435024351243522435324354243552435624357243582435924360243612436224363243642436524366243672436824369243702437124372243732437424375243762437724378243792438024381243822438324384243852438624387243882438924390243912439224393243942439524396243972439824399244002440124402244032440424405244062440724408244092441024411244122441324414244152441624417244182441924420244212442224423244242442524426244272442824429244302443124432244332443424435244362443724438244392444024441244422444324444244452444624447244482444924450244512445224453244542445524456244572445824459244602446124462244632446424465244662446724468244692447024471244722447324474244752447624477244782447924480244812448224483244842448524486244872448824489244902449124492244932449424495244962449724498244992450024501245022450324504245052450624507245082450924510245112451224513245142451524516245172451824519245202452124522245232452424525245262452724528245292453024531245322453324534245352453624537245382453924540245412454224543245442454524546245472454824549245502455124552245532455424555245562455724558245592456024561245622456324564245652456624567245682456924570245712457224573245742457524576245772457824579245802458124582245832458424585245862458724588245892459024591245922459324594245952459624597245982459924600246012460224603246042460524606246072460824609246102461124612246132461424615246162461724618246192462024621246222462324624246252462624627246282462924630246312463224633246342463524636246372463824639246402464124642246432464424645246462464724648246492465024651246522465324654246552465624657246582465924660246612466224663246642466524666246672466824669246702467124672246732467424675246762467724678246792468024681246822468324684246852468624687246882468924690246912469224693246942469524696246972469824699247002470124702247032470424705247062470724708247092471024711247122471324714247152471624717247182471924720247212472224723247242472524726247272472824729247302473124732247332473424735247362473724738247392474024741247422474324744247452474624747247482474924750247512475224753247542475524756247572475824759247602476124762247632476424765247662476724768247692477024771247722477324774247752477624777247782477924780247812478224783247842478524786247872478824789247902479124792247932479424795247962479724798247992480024801248022480324804248052480624807248082480924810248112481224813248142481524816248172481824819248202482124822248232482424825248262482724828248292483024831248322483324834248352483624837248382483924840248412484224843248442484524846248472484824849248502485124852248532485424855248562485724858248592486024861248622486324864248652486624867248682486924870248712487224873248742487524876248772487824879248802488124882248832488424885248862488724888248892489024891248922489324894248952489624897248982489924900249012490224903249042490524906249072490824909249102491124912249132491424915249162491724918249192492024921249222492324924249252492624927249282492924930249312493224933249342493524936249372493824939249402494124942249432494424945249462494724948249492495024951249522495324954249552495624957249582495924960249612496224963249642496524966249672496824969249702497124972249732497424975249762497724978249792498024981249822498324984249852498624987249882498924990249912499224993249942499524996249972499824999250002500125002250032500425005250062500725008250092501025011250122501325014250152501625017250182501925020250212502225023250242502525026250272502825029250302503125032250332503425035250362503725038250392504025041250422504325044250452504625047250482504925050250512505225053250542505525056250572505825059250602506125062250632506425065250662506725068250692507025071250722507325074250752507625077250782507925080250812508225083250842508525086250872508825089250902509125092250932509425095250962509725098250992510025101251022510325104251052510625107251082510925110251112511225113251142511525116251172511825119251202512125122251232512425125251262512725128251292513025131251322513325134251352513625137251382513925140251412514225143251442514525146251472514825149251502515125152251532515425155251562515725158251592516025161251622516325164251652516625167251682516925170251712517225173251742517525176251772517825179251802518125182251832518425185251862518725188251892519025191251922519325194251952519625197251982519925200252012520225203252042520525206252072520825209252102521125212252132521425215252162521725218252192522025221252222522325224252252522625227252282522925230252312523225233252342523525236252372523825239252402524125242252432524425245252462524725248252492525025251252522525325254252552525625257252582525925260252612526225263252642526525266252672526825269252702527125272252732527425275252762527725278252792528025281252822528325284252852528625287252882528925290252912529225293252942529525296252972529825299253002530125302253032530425305253062530725308253092531025311253122531325314253152531625317253182531925320253212532225323253242532525326253272532825329253302533125332253332533425335253362533725338253392534025341253422534325344253452534625347253482534925350253512535225353253542535525356253572535825359253602536125362253632536425365253662536725368253692537025371253722537325374253752537625377253782537925380253812538225383253842538525386253872538825389253902539125392253932539425395253962539725398253992540025401254022540325404254052540625407254082540925410254112541225413254142541525416254172541825419254202542125422254232542425425254262542725428254292543025431254322543325434254352543625437254382543925440254412544225443254442544525446254472544825449254502545125452254532545425455254562545725458254592546025461254622546325464254652546625467254682546925470254712547225473254742547525476254772547825479254802548125482254832548425485254862548725488254892549025491254922549325494254952549625497254982549925500255012550225503255042550525506255072550825509255102551125512255132551425515255162551725518255192552025521255222552325524255252552625527255282552925530255312553225533255342553525536255372553825539255402554125542255432554425545255462554725548255492555025551255522555325554255552555625557255582555925560255612556225563255642556525566255672556825569255702557125572255732557425575255762557725578255792558025581255822558325584255852558625587255882558925590255912559225593255942559525596255972559825599256002560125602256032560425605256062560725608256092561025611256122561325614256152561625617256182561925620256212562225623256242562525626256272562825629256302563125632256332563425635256362563725638256392564025641256422564325644256452564625647256482564925650256512565225653256542565525656256572565825659256602566125662256632566425665256662566725668256692567025671256722567325674256752567625677256782567925680256812568225683256842568525686256872568825689256902569125692256932569425695256962569725698256992570025701257022570325704257052570625707257082570925710257112571225713257142571525716257172571825719257202572125722257232572425725257262572725728257292573025731257322573325734257352573625737257382573925740257412574225743257442574525746257472574825749257502575125752257532575425755257562575725758257592576025761257622576325764257652576625767257682576925770257712577225773257742577525776257772577825779257802578125782257832578425785257862578725788257892579025791257922579325794257952579625797257982579925800258012580225803258042580525806258072580825809258102581125812258132581425815258162581725818258192582025821258222582325824258252582625827258282582925830258312583225833258342583525836258372583825839258402584125842258432584425845258462584725848258492585025851258522585325854258552585625857258582585925860258612586225863258642586525866258672586825869258702587125872258732587425875258762587725878258792588025881258822588325884258852588625887258882588925890258912589225893258942589525896258972589825899259002590125902259032590425905259062590725908259092591025911259122591325914259152591625917259182591925920259212592225923259242592525926259272592825929259302593125932259332593425935259362593725938259392594025941259422594325944259452594625947259482594925950259512595225953259542595525956259572595825959259602596125962259632596425965259662596725968259692597025971259722597325974259752597625977259782597925980259812598225983259842598525986259872598825989259902599125992259932599425995259962599725998259992600026001260022600326004260052600626007260082600926010260112601226013260142601526016260172601826019260202602126022260232602426025260262602726028260292603026031260322603326034260352603626037260382603926040260412604226043260442604526046260472604826049260502605126052260532605426055260562605726058260592606026061260622606326064260652606626067260682606926070260712607226073260742607526076260772607826079260802608126082260832608426085260862608726088260892609026091260922609326094260952609626097260982609926100261012610226103261042610526106261072610826109261102611126112261132611426115261162611726118261192612026121261222612326124261252612626127261282612926130261312613226133261342613526136261372613826139261402614126142261432614426145261462614726148261492615026151261522615326154261552615626157261582615926160261612616226163261642616526166261672616826169261702617126172261732617426175261762617726178261792618026181261822618326184261852618626187261882618926190261912619226193261942619526196261972619826199262002620126202262032620426205262062620726208262092621026211262122621326214262152621626217262182621926220262212622226223262242622526226262272622826229262302623126232262332623426235262362623726238262392624026241262422624326244262452624626247262482624926250262512625226253262542625526256262572625826259262602626126262262632626426265262662626726268262692627026271262722627326274262752627626277262782627926280262812628226283262842628526286262872628826289262902629126292262932629426295262962629726298262992630026301263022630326304263052630626307263082630926310263112631226313263142631526316263172631826319263202632126322263232632426325263262632726328263292633026331263322633326334263352633626337263382633926340263412634226343263442634526346263472634826349263502635126352263532635426355263562635726358263592636026361263622636326364263652636626367263682636926370263712637226373263742637526376263772637826379263802638126382263832638426385263862638726388263892639026391263922639326394263952639626397263982639926400264012640226403264042640526406264072640826409264102641126412264132641426415264162641726418264192642026421264222642326424264252642626427264282642926430264312643226433264342643526436264372643826439264402644126442264432644426445264462644726448264492645026451264522645326454264552645626457264582645926460264612646226463264642646526466264672646826469264702647126472264732647426475264762647726478264792648026481264822648326484264852648626487264882648926490264912649226493264942649526496264972649826499265002650126502265032650426505265062650726508265092651026511265122651326514265152651626517265182651926520265212652226523265242652526526265272652826529265302653126532265332653426535265362653726538265392654026541265422654326544265452654626547265482654926550265512655226553265542655526556265572655826559265602656126562265632656426565265662656726568265692657026571265722657326574265752657626577265782657926580265812658226583265842658526586265872658826589265902659126592265932659426595265962659726598265992660026601266022660326604266052660626607266082660926610266112661226613266142661526616266172661826619266202662126622266232662426625266262662726628266292663026631266322663326634266352663626637266382663926640266412664226643266442664526646266472664826649266502665126652266532665426655266562665726658266592666026661266622666326664266652666626667266682666926670266712667226673266742667526676266772667826679266802668126682266832668426685266862668726688266892669026691266922669326694266952669626697266982669926700267012670226703267042670526706267072670826709267102671126712267132671426715267162671726718267192672026721267222672326724267252672626727267282672926730267312673226733267342673526736267372673826739267402674126742267432674426745267462674726748267492675026751267522675326754267552675626757267582675926760267612676226763267642676526766267672676826769267702677126772267732677426775267762677726778267792678026781267822678326784267852678626787267882678926790267912679226793267942679526796267972679826799268002680126802268032680426805268062680726808268092681026811268122681326814268152681626817268182681926820268212682226823268242682526826268272682826829268302683126832268332683426835268362683726838268392684026841268422684326844268452684626847268482684926850268512685226853268542685526856268572685826859268602686126862268632686426865268662686726868268692687026871268722687326874268752687626877268782687926880268812688226883268842688526886268872688826889268902689126892268932689426895268962689726898268992690026901269022690326904269052690626907269082690926910269112691226913269142691526916269172691826919269202692126922269232692426925269262692726928269292693026931269322693326934269352693626937269382693926940269412694226943269442694526946269472694826949269502695126952269532695426955269562695726958269592696026961269622696326964269652696626967269682696926970269712697226973269742697526976269772697826979269802698126982269832698426985269862698726988269892699026991269922699326994269952699626997269982699927000270012700227003270042700527006270072700827009270102701127012270132701427015270162701727018270192702027021270222702327024270252702627027270282702927030270312703227033270342703527036270372703827039270402704127042270432704427045270462704727048270492705027051270522705327054270552705627057270582705927060270612706227063270642706527066270672706827069270702707127072270732707427075270762707727078270792708027081270822708327084270852708627087270882708927090270912709227093270942709527096270972709827099271002710127102271032710427105271062710727108271092711027111271122711327114271152711627117271182711927120271212712227123271242712527126271272712827129271302713127132271332713427135271362713727138271392714027141271422714327144271452714627147271482714927150271512715227153271542715527156271572715827159271602716127162271632716427165271662716727168271692717027171271722717327174271752717627177271782717927180271812718227183271842718527186271872718827189271902719127192271932719427195271962719727198271992720027201272022720327204272052720627207272082720927210272112721227213272142721527216272172721827219272202722127222272232722427225272262722727228272292723027231272322723327234272352723627237272382723927240272412724227243272442724527246272472724827249272502725127252272532725427255272562725727258272592726027261272622726327264272652726627267272682726927270272712727227273272742727527276272772727827279272802728127282272832728427285272862728727288272892729027291272922729327294272952729627297272982729927300273012730227303273042730527306273072730827309273102731127312273132731427315273162731727318273192732027321273222732327324273252732627327273282732927330273312733227333273342733527336273372733827339273402734127342273432734427345273462734727348273492735027351273522735327354273552735627357273582735927360273612736227363273642736527366273672736827369273702737127372273732737427375273762737727378273792738027381273822738327384273852738627387273882738927390273912739227393273942739527396273972739827399274002740127402274032740427405274062740727408274092741027411274122741327414274152741627417274182741927420274212742227423274242742527426274272742827429274302743127432274332743427435274362743727438274392744027441274422744327444274452744627447274482744927450274512745227453274542745527456274572745827459274602746127462274632746427465274662746727468274692747027471274722747327474274752747627477274782747927480274812748227483274842748527486274872748827489274902749127492274932749427495274962749727498274992750027501275022750327504275052750627507275082750927510275112751227513275142751527516275172751827519275202752127522275232752427525275262752727528275292753027531275322753327534275352753627537275382753927540275412754227543275442754527546275472754827549275502755127552275532755427555275562755727558275592756027561275622756327564275652756627567275682756927570275712757227573275742757527576275772757827579275802758127582275832758427585275862758727588275892759027591275922759327594275952759627597275982759927600276012760227603276042760527606276072760827609276102761127612276132761427615276162761727618276192762027621276222762327624276252762627627276282762927630276312763227633276342763527636276372763827639276402764127642276432764427645276462764727648276492765027651276522765327654276552765627657276582765927660276612766227663276642766527666276672766827669276702767127672276732767427675276762767727678276792768027681276822768327684276852768627687276882768927690276912769227693276942769527696276972769827699277002770127702277032770427705277062770727708277092771027711277122771327714277152771627717277182771927720277212772227723277242772527726277272772827729277302773127732277332773427735277362773727738277392774027741277422774327744277452774627747277482774927750277512775227753277542775527756277572775827759277602776127762277632776427765277662776727768277692777027771277722777327774277752777627777277782777927780277812778227783277842778527786277872778827789277902779127792277932779427795277962779727798277992780027801278022780327804278052780627807278082780927810278112781227813278142781527816278172781827819278202782127822278232782427825278262782727828278292783027831278322783327834278352783627837278382783927840278412784227843278442784527846278472784827849278502785127852278532785427855278562785727858278592786027861278622786327864278652786627867278682786927870278712787227873278742787527876278772787827879278802788127882278832788427885278862788727888278892789027891278922789327894278952789627897278982789927900279012790227903279042790527906279072790827909279102791127912279132791427915279162791727918279192792027921279222792327924279252792627927279282792927930279312793227933279342793527936279372793827939279402794127942279432794427945279462794727948279492795027951279522795327954279552795627957279582795927960279612796227963279642796527966279672796827969279702797127972279732797427975279762797727978279792798027981279822798327984279852798627987279882798927990279912799227993279942799527996279972799827999280002800128002280032800428005280062800728008280092801028011280122801328014280152801628017280182801928020280212802228023280242802528026280272802828029280302803128032280332803428035280362803728038280392804028041280422804328044280452804628047280482804928050280512805228053280542805528056280572805828059280602806128062280632806428065280662806728068280692807028071280722807328074280752807628077280782807928080280812808228083280842808528086280872808828089280902809128092280932809428095280962809728098280992810028101281022810328104281052810628107281082810928110281112811228113281142811528116281172811828119281202812128122281232812428125281262812728128281292813028131281322813328134281352813628137281382813928140281412814228143281442814528146281472814828149281502815128152281532815428155281562815728158281592816028161281622816328164281652816628167281682816928170281712817228173281742817528176281772817828179281802818128182281832818428185281862818728188281892819028191281922819328194281952819628197281982819928200282012820228203282042820528206282072820828209282102821128212282132821428215282162821728218282192822028221282222822328224282252822628227282282822928230282312823228233282342823528236282372823828239282402824128242282432824428245282462824728248282492825028251282522825328254282552825628257282582825928260282612826228263282642826528266282672826828269282702827128272282732827428275282762827728278282792828028281282822828328284282852828628287282882828928290282912829228293282942829528296282972829828299283002830128302283032830428305283062830728308283092831028311283122831328314283152831628317283182831928320283212832228323283242832528326283272832828329283302833128332283332833428335283362833728338283392834028341283422834328344283452834628347283482834928350283512835228353283542835528356283572835828359283602836128362283632836428365283662836728368283692837028371283722837328374283752837628377283782837928380283812838228383283842838528386283872838828389283902839128392283932839428395283962839728398283992840028401284022840328404284052840628407284082840928410284112841228413284142841528416284172841828419284202842128422284232842428425284262842728428284292843028431284322843328434284352843628437284382843928440284412844228443284442844528446284472844828449284502845128452284532845428455284562845728458284592846028461284622846328464284652846628467284682846928470284712847228473284742847528476284772847828479284802848128482284832848428485284862848728488284892849028491284922849328494284952849628497284982849928500285012850228503285042850528506285072850828509285102851128512285132851428515285162851728518285192852028521285222852328524285252852628527285282852928530285312853228533285342853528536285372853828539285402854128542285432854428545285462854728548285492855028551285522855328554285552855628557285582855928560285612856228563285642856528566285672856828569285702857128572285732857428575285762857728578285792858028581285822858328584285852858628587285882858928590285912859228593285942859528596285972859828599286002860128602286032860428605286062860728608286092861028611286122861328614286152861628617286182861928620286212862228623286242862528626286272862828629286302863128632286332863428635286362863728638286392864028641286422864328644286452864628647286482864928650286512865228653286542865528656286572865828659286602866128662286632866428665286662866728668286692867028671286722867328674286752867628677286782867928680286812868228683286842868528686286872868828689286902869128692286932869428695286962869728698286992870028701287022870328704287052870628707287082870928710287112871228713287142871528716287172871828719287202872128722287232872428725287262872728728287292873028731287322873328734287352873628737287382873928740287412874228743287442874528746287472874828749287502875128752287532875428755287562875728758287592876028761287622876328764287652876628767287682876928770287712877228773287742877528776287772877828779287802878128782287832878428785287862878728788287892879028791287922879328794287952879628797287982879928800288012880228803288042880528806288072880828809288102881128812288132881428815288162881728818288192882028821288222882328824288252882628827288282882928830288312883228833288342883528836288372883828839288402884128842288432884428845288462884728848288492885028851288522885328854288552885628857288582885928860288612886228863288642886528866288672886828869288702887128872288732887428875288762887728878288792888028881288822888328884288852888628887288882888928890288912889228893288942889528896288972889828899289002890128902289032890428905289062890728908289092891028911289122891328914289152891628917289182891928920289212892228923289242892528926289272892828929289302893128932289332893428935289362893728938289392894028941289422894328944289452894628947289482894928950289512895228953289542895528956289572895828959289602896128962289632896428965289662896728968289692897028971289722897328974289752897628977289782897928980289812898228983289842898528986289872898828989289902899128992289932899428995289962899728998289992900029001290022900329004290052900629007290082900929010290112901229013290142901529016290172901829019290202902129022290232902429025290262902729028290292903029031290322903329034290352903629037290382903929040290412904229043290442904529046290472904829049290502905129052290532905429055290562905729058290592906029061290622906329064290652906629067290682906929070290712907229073290742907529076290772907829079290802908129082290832908429085290862908729088290892909029091290922909329094290952909629097290982909929100291012910229103291042910529106291072910829109291102911129112291132911429115291162911729118291192912029121291222912329124291252912629127291282912929130291312913229133291342913529136291372913829139291402914129142291432914429145291462914729148291492915029151291522915329154291552915629157291582915929160291612916229163291642916529166291672916829169291702917129172291732917429175291762917729178291792918029181291822918329184291852918629187291882918929190291912919229193291942919529196291972919829199292002920129202292032920429205292062920729208292092921029211292122921329214292152921629217292182921929220292212922229223292242922529226292272922829229292302923129232292332923429235292362923729238292392924029241292422924329244292452924629247292482924929250292512925229253292542925529256292572925829259292602926129262292632926429265292662926729268292692927029271292722927329274292752927629277292782927929280292812928229283292842928529286292872928829289292902929129292292932929429295292962929729298292992930029301293022930329304293052930629307293082930929310293112931229313293142931529316293172931829319293202932129322293232932429325293262932729328293292933029331293322933329334293352933629337293382933929340293412934229343293442934529346293472934829349293502935129352293532935429355293562935729358293592936029361293622936329364293652936629367293682936929370293712937229373293742937529376293772937829379293802938129382293832938429385293862938729388293892939029391293922939329394293952939629397293982939929400294012940229403294042940529406294072940829409294102941129412294132941429415294162941729418294192942029421294222942329424294252942629427294282942929430294312943229433294342943529436294372943829439294402944129442294432944429445294462944729448294492945029451294522945329454294552945629457294582945929460294612946229463294642946529466294672946829469294702947129472294732947429475294762947729478294792948029481294822948329484294852948629487294882948929490294912949229493294942949529496294972949829499295002950129502295032950429505295062950729508295092951029511295122951329514295152951629517295182951929520295212952229523295242952529526295272952829529295302953129532295332953429535295362953729538295392954029541295422954329544295452954629547295482954929550295512955229553295542955529556295572955829559295602956129562295632956429565295662956729568295692957029571295722957329574295752957629577295782957929580295812958229583295842958529586295872958829589295902959129592295932959429595295962959729598295992960029601296022960329604296052960629607296082960929610296112961229613296142961529616296172961829619296202962129622296232962429625296262962729628296292963029631296322963329634296352963629637296382963929640296412964229643296442964529646296472964829649296502965129652296532965429655296562965729658296592966029661296622966329664296652966629667296682966929670296712967229673296742967529676296772967829679296802968129682296832968429685296862968729688296892969029691296922969329694296952969629697296982969929700297012970229703297042970529706297072970829709297102971129712297132971429715297162971729718297192972029721297222972329724297252972629727297282972929730297312973229733297342973529736297372973829739297402974129742297432974429745297462974729748297492975029751297522975329754297552975629757297582975929760297612976229763297642976529766297672976829769297702977129772297732977429775297762977729778297792978029781297822978329784297852978629787297882978929790297912979229793297942979529796297972979829799298002980129802298032980429805298062980729808298092981029811298122981329814298152981629817298182981929820298212982229823298242982529826298272982829829298302983129832298332983429835298362983729838298392984029841298422984329844298452984629847298482984929850298512985229853298542985529856298572985829859298602986129862298632986429865298662986729868298692987029871298722987329874298752987629877298782987929880298812988229883298842988529886298872988829889298902989129892298932989429895298962989729898298992990029901299022990329904299052990629907299082990929910299112991229913299142991529916299172991829919299202992129922299232992429925299262992729928299292993029931299322993329934299352993629937299382993929940299412994229943299442994529946299472994829949299502995129952299532995429955299562995729958299592996029961299622996329964299652996629967299682996929970299712997229973299742997529976299772997829979299802998129982299832998429985299862998729988299892999029991299922999329994299952999629997299982999930000300013000230003300043000530006300073000830009300103001130012300133001430015300163001730018300193002030021300223002330024300253002630027300283002930030300313003230033300343003530036300373003830039300403004130042300433004430045300463004730048300493005030051300523005330054300553005630057300583005930060300613006230063300643006530066300673006830069300703007130072300733007430075300763007730078300793008030081300823008330084300853008630087300883008930090300913009230093300943009530096300973009830099301003010130102301033010430105301063010730108301093011030111301123011330114301153011630117301183011930120301213012230123301243012530126301273012830129301303013130132301333013430135301363013730138301393014030141301423014330144301453014630147301483014930150301513015230153301543015530156301573015830159301603016130162301633016430165301663016730168301693017030171301723017330174301753017630177301783017930180301813018230183301843018530186301873018830189301903019130192301933019430195301963019730198301993020030201302023020330204302053020630207302083020930210302113021230213302143021530216302173021830219302203022130222302233022430225302263022730228302293023030231302323023330234302353023630237302383023930240302413024230243302443024530246302473024830249302503025130252302533025430255302563025730258302593026030261302623026330264302653026630267302683026930270302713027230273302743027530276302773027830279302803028130282302833028430285302863028730288302893029030291302923029330294302953029630297302983029930300303013030230303303043030530306303073030830309303103031130312303133031430315303163031730318303193032030321303223032330324303253032630327303283032930330303313033230333303343033530336303373033830339303403034130342303433034430345303463034730348303493035030351303523035330354303553035630357303583035930360303613036230363303643036530366303673036830369303703037130372303733037430375303763037730378303793038030381303823038330384303853038630387303883038930390303913039230393303943039530396303973039830399304003040130402304033040430405304063040730408304093041030411304123041330414304153041630417304183041930420304213042230423304243042530426304273042830429304303043130432304333043430435304363043730438304393044030441304423044330444304453044630447304483044930450304513045230453304543045530456304573045830459304603046130462304633046430465304663046730468304693047030471304723047330474304753047630477304783047930480304813048230483304843048530486304873048830489304903049130492304933049430495304963049730498304993050030501305023050330504305053050630507305083050930510305113051230513305143051530516305173051830519305203052130522305233052430525305263052730528305293053030531305323053330534305353053630537305383053930540305413054230543305443054530546305473054830549305503055130552305533055430555305563055730558305593056030561305623056330564305653056630567305683056930570305713057230573305743057530576305773057830579305803058130582305833058430585305863058730588305893059030591305923059330594305953059630597305983059930600306013060230603306043060530606306073060830609306103061130612306133061430615306163061730618306193062030621306223062330624306253062630627306283062930630306313063230633306343063530636306373063830639306403064130642306433064430645306463064730648306493065030651306523065330654306553065630657306583065930660306613066230663306643066530666306673066830669306703067130672306733067430675306763067730678306793068030681306823068330684306853068630687306883068930690306913069230693306943069530696306973069830699307003070130702307033070430705307063070730708307093071030711307123071330714307153071630717307183071930720307213072230723307243072530726307273072830729307303073130732307333073430735307363073730738307393074030741307423074330744307453074630747307483074930750307513075230753307543075530756307573075830759307603076130762307633076430765307663076730768307693077030771307723077330774307753077630777307783077930780307813078230783307843078530786307873078830789307903079130792307933079430795307963079730798307993080030801308023080330804308053080630807308083080930810308113081230813308143081530816308173081830819308203082130822308233082430825308263082730828308293083030831308323083330834308353083630837308383083930840308413084230843308443084530846308473084830849308503085130852308533085430855308563085730858308593086030861308623086330864308653086630867308683086930870308713087230873308743087530876308773087830879308803088130882308833088430885308863088730888308893089030891308923089330894308953089630897308983089930900309013090230903309043090530906309073090830909309103091130912309133091430915309163091730918309193092030921309223092330924309253092630927309283092930930309313093230933309343093530936309373093830939309403094130942309433094430945309463094730948309493095030951309523095330954309553095630957309583095930960309613096230963309643096530966309673096830969309703097130972309733097430975309763097730978309793098030981309823098330984309853098630987309883098930990309913099230993309943099530996309973099830999310003100131002310033100431005310063100731008310093101031011310123101331014310153101631017310183101931020310213102231023310243102531026310273102831029310303103131032310333103431035310363103731038310393104031041310423104331044310453104631047310483104931050310513105231053310543105531056310573105831059310603106131062310633106431065310663106731068310693107031071310723107331074310753107631077310783107931080310813108231083310843108531086310873108831089310903109131092310933109431095310963109731098310993110031101311023110331104311053110631107311083110931110311113111231113311143111531116311173111831119311203112131122311233112431125311263112731128311293113031131311323113331134311353113631137311383113931140311413114231143311443114531146311473114831149311503115131152311533115431155311563115731158311593116031161311623116331164311653116631167311683116931170311713117231173311743117531176311773117831179311803118131182311833118431185311863118731188311893119031191311923119331194311953119631197311983119931200312013120231203312043120531206312073120831209312103121131212312133121431215312163121731218312193122031221312223122331224312253122631227312283122931230312313123231233312343123531236312373123831239312403124131242312433124431245312463124731248312493125031251312523125331254312553125631257312583125931260312613126231263312643126531266312673126831269312703127131272312733127431275312763127731278312793128031281312823128331284312853128631287312883128931290312913129231293312943129531296312973129831299313003130131302313033130431305313063130731308313093131031311313123131331314313153131631317313183131931320313213132231323313243132531326313273132831329313303133131332313333133431335313363133731338313393134031341313423134331344313453134631347313483134931350313513135231353313543135531356313573135831359313603136131362313633136431365313663136731368313693137031371313723137331374313753137631377313783137931380313813138231383313843138531386313873138831389313903139131392313933139431395313963139731398313993140031401314023140331404314053140631407314083140931410314113141231413314143141531416314173141831419314203142131422314233142431425314263142731428314293143031431314323143331434314353143631437314383143931440314413144231443314443144531446314473144831449314503145131452314533145431455314563145731458314593146031461314623146331464314653146631467314683146931470314713147231473314743147531476314773147831479314803148131482314833148431485314863148731488314893149031491314923149331494314953149631497314983149931500315013150231503315043150531506315073150831509315103151131512315133151431515315163151731518315193152031521315223152331524315253152631527315283152931530315313153231533315343153531536315373153831539315403154131542315433154431545315463154731548315493155031551315523155331554315553155631557315583155931560315613156231563315643156531566315673156831569315703157131572315733157431575315763157731578315793158031581315823158331584315853158631587315883158931590315913159231593315943159531596315973159831599316003160131602316033160431605316063160731608316093161031611316123161331614316153161631617316183161931620316213162231623316243162531626316273162831629316303163131632316333163431635316363163731638316393164031641316423164331644316453164631647316483164931650316513165231653316543165531656316573165831659316603166131662316633166431665316663166731668316693167031671316723167331674316753167631677316783167931680316813168231683316843168531686316873168831689316903169131692316933169431695316963169731698316993170031701317023170331704317053170631707317083170931710317113171231713317143171531716317173171831719317203172131722317233172431725317263172731728317293173031731317323173331734317353173631737317383173931740317413174231743317443174531746317473174831749317503175131752317533175431755317563175731758317593176031761317623176331764317653176631767317683176931770317713177231773317743177531776317773177831779317803178131782317833178431785317863178731788317893179031791317923179331794317953179631797317983179931800318013180231803318043180531806318073180831809318103181131812318133181431815318163181731818318193182031821318223182331824318253182631827318283182931830318313183231833318343183531836318373183831839318403184131842318433184431845318463184731848318493185031851318523185331854318553185631857318583185931860318613186231863318643186531866318673186831869318703187131872318733187431875318763187731878318793188031881318823188331884318853188631887318883188931890318913189231893318943189531896318973189831899319003190131902319033190431905319063190731908319093191031911319123191331914319153191631917319183191931920319213192231923319243192531926319273192831929319303193131932319333193431935319363193731938319393194031941319423194331944319453194631947319483194931950319513195231953319543195531956319573195831959319603196131962319633196431965319663196731968319693197031971319723197331974319753197631977319783197931980319813198231983319843198531986319873198831989319903199131992319933199431995319963199731998319993200032001320023200332004320053200632007320083200932010320113201232013320143201532016320173201832019320203202132022320233202432025320263202732028320293203032031320323203332034320353203632037320383203932040320413204232043320443204532046320473204832049320503205132052320533205432055320563205732058320593206032061320623206332064320653206632067320683206932070320713207232073320743207532076320773207832079320803208132082320833208432085320863208732088320893209032091320923209332094320953209632097320983209932100321013210232103321043210532106321073210832109321103211132112321133211432115321163211732118321193212032121321223212332124321253212632127321283212932130321313213232133321343213532136321373213832139321403214132142321433214432145321463214732148321493215032151321523215332154321553215632157321583215932160321613216232163321643216532166321673216832169321703217132172321733217432175321763217732178321793218032181321823218332184321853218632187321883218932190321913219232193321943219532196321973219832199322003220132202322033220432205322063220732208322093221032211322123221332214322153221632217322183221932220322213222232223322243222532226322273222832229322303223132232322333223432235322363223732238322393224032241322423224332244322453224632247322483224932250322513225232253322543225532256322573225832259322603226132262322633226432265322663226732268322693227032271322723227332274322753227632277322783227932280322813228232283322843228532286322873228832289322903229132292322933229432295322963229732298322993230032301323023230332304323053230632307323083230932310323113231232313323143231532316323173231832319323203232132322323233232432325323263232732328323293233032331323323233332334323353233632337323383233932340323413234232343323443234532346323473234832349323503235132352323533235432355323563235732358323593236032361323623236332364323653236632367323683236932370323713237232373323743237532376323773237832379323803238132382323833238432385323863238732388323893239032391323923239332394323953239632397323983239932400324013240232403324043240532406324073240832409324103241132412324133241432415324163241732418324193242032421324223242332424324253242632427324283242932430324313243232433324343243532436324373243832439324403244132442324433244432445324463244732448324493245032451324523245332454324553245632457324583245932460324613246232463324643246532466324673246832469324703247132472324733247432475324763247732478324793248032481324823248332484324853248632487324883248932490324913249232493324943249532496324973249832499325003250132502325033250432505325063250732508325093251032511325123251332514325153251632517325183251932520325213252232523325243252532526325273252832529325303253132532325333253432535325363253732538325393254032541325423254332544325453254632547325483254932550325513255232553325543255532556325573255832559325603256132562325633256432565325663256732568325693257032571325723257332574325753257632577325783257932580325813258232583325843258532586325873258832589325903259132592325933259432595325963259732598325993260032601326023260332604326053260632607326083260932610326113261232613326143261532616326173261832619326203262132622326233262432625326263262732628326293263032631326323263332634326353263632637326383263932640326413264232643326443264532646326473264832649326503265132652326533265432655326563265732658326593266032661326623266332664326653266632667326683266932670326713267232673326743267532676326773267832679326803268132682326833268432685326863268732688326893269032691326923269332694326953269632697326983269932700327013270232703327043270532706327073270832709327103271132712327133271432715327163271732718327193272032721327223272332724327253272632727327283272932730327313273232733327343273532736327373273832739327403274132742327433274432745327463274732748327493275032751327523275332754327553275632757327583275932760327613276232763327643276532766327673276832769327703277132772327733277432775327763277732778327793278032781327823278332784327853278632787327883278932790327913279232793327943279532796327973279832799328003280132802328033280432805328063280732808328093281032811328123281332814328153281632817328183281932820328213282232823328243282532826328273282832829328303283132832328333283432835328363283732838328393284032841328423284332844328453284632847328483284932850328513285232853328543285532856328573285832859328603286132862328633286432865328663286732868328693287032871328723287332874328753287632877328783287932880328813288232883328843288532886328873288832889328903289132892328933289432895328963289732898328993290032901329023290332904329053290632907329083290932910329113291232913329143291532916329173291832919329203292132922329233292432925329263292732928329293293032931329323293332934329353293632937329383293932940329413294232943329443294532946329473294832949329503295132952329533295432955329563295732958329593296032961329623296332964329653296632967329683296932970329713297232973329743297532976329773297832979329803298132982329833298432985329863298732988329893299032991329923299332994329953299632997329983299933000330013300233003330043300533006330073300833009330103301133012330133301433015330163301733018330193302033021330223302333024330253302633027330283302933030330313303233033330343303533036330373303833039330403304133042330433304433045330463304733048330493305033051330523305333054330553305633057330583305933060330613306233063330643306533066330673306833069330703307133072330733307433075330763307733078330793308033081330823308333084330853308633087330883308933090330913309233093330943309533096330973309833099331003310133102331033310433105331063310733108331093311033111331123311333114331153311633117331183311933120331213312233123331243312533126331273312833129331303313133132331333313433135331363313733138331393314033141331423314333144331453314633147331483314933150331513315233153331543315533156331573315833159331603316133162331633316433165331663316733168331693317033171331723317333174331753317633177331783317933180331813318233183331843318533186331873318833189331903319133192331933319433195331963319733198331993320033201332023320333204332053320633207332083320933210332113321233213332143321533216332173321833219332203322133222332233322433225332263322733228332293323033231332323323333234332353323633237332383323933240332413324233243332443324533246332473324833249332503325133252332533325433255332563325733258332593326033261332623326333264332653326633267332683326933270332713327233273332743327533276332773327833279332803328133282332833328433285332863328733288332893329033291332923329333294332953329633297332983329933300333013330233303333043330533306333073330833309333103331133312333133331433315333163331733318333193332033321333223332333324333253332633327333283332933330333313333233333333343333533336333373333833339333403334133342333433334433345333463334733348333493335033351333523335333354333553335633357333583335933360333613336233363333643336533366333673336833369333703337133372333733337433375333763337733378333793338033381333823338333384333853338633387333883338933390333913339233393333943339533396333973339833399334003340133402334033340433405334063340733408334093341033411334123341333414334153341633417334183341933420334213342233423334243342533426334273342833429334303343133432334333343433435334363343733438334393344033441334423344333444334453344633447334483344933450334513345233453334543345533456334573345833459334603346133462334633346433465334663346733468334693347033471334723347333474334753347633477334783347933480334813348233483334843348533486334873348833489334903349133492334933349433495334963349733498334993350033501335023350333504335053350633507335083350933510335113351233513335143351533516335173351833519335203352133522335233352433525335263352733528335293353033531335323353333534335353353633537335383353933540335413354233543335443354533546335473354833549335503355133552335533355433555335563355733558335593356033561335623356333564335653356633567335683356933570335713357233573335743357533576335773357833579335803358133582335833358433585335863358733588335893359033591335923359333594335953359633597335983359933600336013360233603336043360533606336073360833609336103361133612336133361433615336163361733618336193362033621336223362333624336253362633627336283362933630336313363233633336343363533636336373363833639336403364133642336433364433645336463364733648336493365033651336523365333654336553365633657336583365933660336613366233663336643366533666336673366833669336703367133672336733367433675336763367733678336793368033681336823368333684336853368633687336883368933690336913369233693336943369533696336973369833699337003370133702337033370433705337063370733708337093371033711337123371333714337153371633717337183371933720337213372233723337243372533726337273372833729337303373133732337333373433735337363373733738337393374033741337423374333744337453374633747337483374933750337513375233753337543375533756337573375833759337603376133762337633376433765337663376733768337693377033771337723377333774337753377633777337783377933780337813378233783337843378533786337873378833789337903379133792337933379433795337963379733798337993380033801338023380333804338053380633807338083380933810338113381233813338143381533816338173381833819338203382133822338233382433825338263382733828338293383033831338323383333834338353383633837338383383933840338413384233843338443384533846338473384833849338503385133852338533385433855338563385733858338593386033861338623386333864338653386633867338683386933870338713387233873338743387533876338773387833879338803388133882338833388433885338863388733888338893389033891338923389333894338953389633897338983389933900339013390233903339043390533906339073390833909339103391133912339133391433915339163391733918339193392033921339223392333924339253392633927339283392933930339313393233933339343393533936339373393833939339403394133942339433394433945339463394733948339493395033951339523395333954339553395633957339583395933960339613396233963339643396533966339673396833969339703397133972339733397433975339763397733978339793398033981339823398333984339853398633987339883398933990339913399233993339943399533996339973399833999340003400134002340033400434005340063400734008340093401034011340123401334014340153401634017340183401934020340213402234023340243402534026340273402834029340303403134032340333403434035340363403734038340393404034041340423404334044340453404634047340483404934050340513405234053340543405534056340573405834059340603406134062340633406434065340663406734068340693407034071340723407334074340753407634077340783407934080340813408234083340843408534086340873408834089340903409134092340933409434095340963409734098340993410034101341023410334104341053410634107341083410934110341113411234113341143411534116341173411834119341203412134122341233412434125341263412734128341293413034131341323413334134341353413634137341383413934140341413414234143341443414534146341473414834149341503415134152341533415434155341563415734158341593416034161341623416334164341653416634167341683416934170341713417234173341743417534176341773417834179341803418134182341833418434185341863418734188341893419034191341923419334194341953419634197341983419934200342013420234203342043420534206342073420834209342103421134212342133421434215342163421734218342193422034221342223422334224342253422634227342283422934230342313423234233342343423534236342373423834239342403424134242342433424434245342463424734248342493425034251342523425334254342553425634257342583425934260342613426234263342643426534266342673426834269342703427134272342733427434275342763427734278342793428034281342823428334284342853428634287342883428934290342913429234293342943429534296342973429834299343003430134302343033430434305343063430734308343093431034311343123431334314343153431634317343183431934320343213432234323343243432534326343273432834329343303433134332343333433434335343363433734338343393434034341343423434334344343453434634347343483434934350343513435234353343543435534356343573435834359343603436134362343633436434365343663436734368343693437034371343723437334374343753437634377343783437934380343813438234383343843438534386343873438834389343903439134392343933439434395343963439734398343993440034401344023440334404344053440634407344083440934410344113441234413344143441534416344173441834419344203442134422344233442434425344263442734428344293443034431344323443334434344353443634437344383443934440344413444234443344443444534446344473444834449344503445134452344533445434455344563445734458344593446034461344623446334464344653446634467344683446934470344713447234473344743447534476344773447834479344803448134482344833448434485344863448734488344893449034491344923449334494344953449634497344983449934500345013450234503345043450534506345073450834509345103451134512345133451434515345163451734518345193452034521345223452334524345253452634527345283452934530345313453234533345343453534536345373453834539345403454134542345433454434545345463454734548345493455034551345523455334554345553455634557345583455934560345613456234563345643456534566345673456834569345703457134572345733457434575345763457734578345793458034581345823458334584345853458634587345883458934590345913459234593345943459534596345973459834599346003460134602346033460434605346063460734608346093461034611346123461334614346153461634617346183461934620346213462234623346243462534626346273462834629346303463134632346333463434635346363463734638346393464034641346423464334644346453464634647346483464934650346513465234653346543465534656346573465834659346603466134662346633466434665346663466734668346693467034671346723467334674346753467634677346783467934680346813468234683346843468534686346873468834689346903469134692346933469434695346963469734698346993470034701347023470334704347053470634707347083470934710347113471234713347143471534716347173471834719347203472134722347233472434725347263472734728347293473034731347323473334734347353473634737347383473934740347413474234743347443474534746347473474834749347503475134752347533475434755347563475734758347593476034761347623476334764347653476634767347683476934770347713477234773347743477534776347773477834779347803478134782347833478434785347863478734788347893479034791347923479334794347953479634797347983479934800348013480234803348043480534806348073480834809348103481134812348133481434815348163481734818348193482034821348223482334824348253482634827348283482934830348313483234833348343483534836348373483834839348403484134842348433484434845348463484734848348493485034851348523485334854348553485634857348583485934860348613486234863348643486534866348673486834869348703487134872348733487434875348763487734878348793488034881348823488334884348853488634887348883488934890348913489234893348943489534896348973489834899349003490134902349033490434905349063490734908349093491034911349123491334914349153491634917349183491934920349213492234923349243492534926349273492834929349303493134932349333493434935349363493734938349393494034941349423494334944349453494634947349483494934950349513495234953349543495534956349573495834959349603496134962349633496434965349663496734968349693497034971349723497334974349753497634977349783497934980349813498234983349843498534986349873498834989349903499134992349933499434995349963499734998349993500035001350023500335004350053500635007350083500935010350113501235013350143501535016350173501835019350203502135022350233502435025350263502735028350293503035031350323503335034350353503635037350383503935040350413504235043350443504535046350473504835049350503505135052350533505435055350563505735058350593506035061350623506335064350653506635067350683506935070350713507235073350743507535076350773507835079350803508135082350833508435085350863508735088350893509035091350923509335094350953509635097350983509935100351013510235103351043510535106351073510835109351103511135112351133511435115351163511735118351193512035121351223512335124351253512635127351283512935130351313513235133351343513535136351373513835139351403514135142351433514435145351463514735148351493515035151351523515335154351553515635157351583515935160351613516235163351643516535166351673516835169351703517135172351733517435175351763517735178351793518035181351823518335184351853518635187351883518935190351913519235193351943519535196351973519835199352003520135202352033520435205352063520735208352093521035211352123521335214352153521635217352183521935220352213522235223352243522535226352273522835229352303523135232352333523435235352363523735238352393524035241352423524335244352453524635247352483524935250352513525235253352543525535256352573525835259352603526135262352633526435265352663526735268352693527035271352723527335274352753527635277352783527935280352813528235283352843528535286352873528835289352903529135292352933529435295352963529735298352993530035301353023530335304353053530635307353083530935310353113531235313353143531535316353173531835319353203532135322353233532435325353263532735328353293533035331353323533335334353353533635337353383533935340353413534235343353443534535346353473534835349353503535135352353533535435355353563535735358353593536035361353623536335364353653536635367353683536935370353713537235373353743537535376353773537835379353803538135382353833538435385353863538735388353893539035391353923539335394353953539635397353983539935400354013540235403354043540535406354073540835409354103541135412354133541435415354163541735418354193542035421354223542335424354253542635427354283542935430354313543235433354343543535436354373543835439354403544135442354433544435445354463544735448354493545035451354523545335454354553545635457354583545935460354613546235463354643546535466354673546835469354703547135472354733547435475354763547735478354793548035481354823548335484354853548635487354883548935490354913549235493354943549535496354973549835499355003550135502355033550435505355063550735508355093551035511355123551335514355153551635517355183551935520355213552235523355243552535526355273552835529355303553135532355333553435535355363553735538355393554035541355423554335544355453554635547355483554935550355513555235553355543555535556355573555835559355603556135562355633556435565355663556735568355693557035571355723557335574355753557635577355783557935580355813558235583355843558535586355873558835589355903559135592355933559435595355963559735598355993560035601356023560335604356053560635607356083560935610356113561235613356143561535616356173561835619356203562135622356233562435625356263562735628356293563035631356323563335634356353563635637356383563935640356413564235643356443564535646356473564835649356503565135652356533565435655356563565735658356593566035661356623566335664356653566635667356683566935670356713567235673356743567535676356773567835679356803568135682356833568435685356863568735688356893569035691356923569335694356953569635697356983569935700357013570235703357043570535706357073570835709357103571135712357133571435715357163571735718357193572035721357223572335724357253572635727357283572935730357313573235733357343573535736357373573835739357403574135742357433574435745357463574735748357493575035751357523575335754357553575635757357583575935760357613576235763357643576535766357673576835769357703577135772357733577435775357763577735778357793578035781357823578335784357853578635787357883578935790357913579235793357943579535796357973579835799358003580135802358033580435805358063580735808358093581035811358123581335814358153581635817358183581935820358213582235823358243582535826358273582835829358303583135832358333583435835358363583735838358393584035841358423584335844358453584635847358483584935850358513585235853358543585535856358573585835859358603586135862358633586435865358663586735868358693587035871358723587335874358753587635877358783587935880358813588235883358843588535886358873588835889358903589135892358933589435895358963589735898358993590035901359023590335904359053590635907359083590935910359113591235913359143591535916359173591835919359203592135922359233592435925359263592735928359293593035931359323593335934359353593635937359383593935940359413594235943359443594535946359473594835949359503595135952359533595435955359563595735958359593596035961359623596335964359653596635967359683596935970359713597235973359743597535976359773597835979359803598135982359833598435985359863598735988359893599035991359923599335994359953599635997359983599936000360013600236003360043600536006360073600836009360103601136012360133601436015360163601736018360193602036021360223602336024360253602636027360283602936030360313603236033360343603536036360373603836039360403604136042360433604436045360463604736048360493605036051360523605336054360553605636057360583605936060360613606236063360643606536066360673606836069360703607136072360733607436075360763607736078360793608036081360823608336084360853608636087360883608936090360913609236093360943609536096360973609836099361003610136102361033610436105361063610736108361093611036111361123611336114361153611636117361183611936120361213612236123361243612536126361273612836129361303613136132361333613436135361363613736138361393614036141361423614336144361453614636147361483614936150361513615236153361543615536156361573615836159361603616136162361633616436165361663616736168361693617036171361723617336174361753617636177361783617936180361813618236183361843618536186361873618836189361903619136192361933619436195361963619736198361993620036201362023620336204362053620636207362083620936210362113621236213362143621536216362173621836219362203622136222362233622436225362263622736228362293623036231362323623336234362353623636237362383623936240362413624236243362443624536246362473624836249362503625136252362533625436255362563625736258362593626036261362623626336264362653626636267362683626936270362713627236273362743627536276362773627836279362803628136282362833628436285362863628736288362893629036291362923629336294362953629636297362983629936300363013630236303363043630536306363073630836309363103631136312363133631436315363163631736318363193632036321363223632336324363253632636327363283632936330363313633236333363343633536336363373633836339363403634136342363433634436345363463634736348363493635036351363523635336354363553635636357363583635936360363613636236363363643636536366363673636836369363703637136372363733637436375363763637736378363793638036381363823638336384363853638636387363883638936390363913639236393363943639536396363973639836399364003640136402364033640436405364063640736408364093641036411364123641336414364153641636417364183641936420364213642236423364243642536426364273642836429364303643136432364333643436435364363643736438364393644036441364423644336444364453644636447364483644936450364513645236453364543645536456364573645836459364603646136462364633646436465364663646736468364693647036471364723647336474364753647636477364783647936480364813648236483364843648536486364873648836489364903649136492364933649436495364963649736498364993650036501365023650336504365053650636507365083650936510365113651236513365143651536516365173651836519365203652136522365233652436525365263652736528365293653036531365323653336534365353653636537365383653936540365413654236543365443654536546365473654836549365503655136552365533655436555365563655736558365593656036561365623656336564365653656636567365683656936570365713657236573365743657536576365773657836579365803658136582365833658436585365863658736588365893659036591365923659336594365953659636597365983659936600366013660236603366043660536606366073660836609366103661136612366133661436615366163661736618366193662036621366223662336624366253662636627366283662936630366313663236633366343663536636366373663836639366403664136642366433664436645366463664736648366493665036651366523665336654366553665636657366583665936660366613666236663366643666536666366673666836669366703667136672366733667436675366763667736678366793668036681366823668336684366853668636687366883668936690366913669236693366943669536696366973669836699367003670136702367033670436705367063670736708367093671036711367123671336714367153671636717367183671936720367213672236723367243672536726367273672836729367303673136732367333673436735367363673736738367393674036741367423674336744367453674636747367483674936750367513675236753367543675536756367573675836759367603676136762367633676436765367663676736768367693677036771367723677336774367753677636777367783677936780367813678236783367843678536786367873678836789367903679136792367933679436795367963679736798367993680036801368023680336804368053680636807368083680936810368113681236813368143681536816368173681836819368203682136822368233682436825368263682736828368293683036831368323683336834368353683636837368383683936840368413684236843368443684536846368473684836849368503685136852368533685436855368563685736858368593686036861368623686336864368653686636867368683686936870368713687236873368743687536876368773687836879368803688136882368833688436885368863688736888368893689036891368923689336894368953689636897368983689936900369013690236903369043690536906369073690836909369103691136912369133691436915369163691736918369193692036921369223692336924369253692636927369283692936930369313693236933369343693536936369373693836939369403694136942369433694436945369463694736948369493695036951369523695336954369553695636957369583695936960369613696236963369643696536966369673696836969369703697136972369733697436975369763697736978369793698036981369823698336984369853698636987369883698936990369913699236993369943699536996369973699836999370003700137002370033700437005370063700737008370093701037011370123701337014370153701637017370183701937020370213702237023370243702537026370273702837029370303703137032370333703437035370363703737038370393704037041370423704337044370453704637047370483704937050370513705237053370543705537056370573705837059370603706137062370633706437065370663706737068370693707037071370723707337074370753707637077370783707937080370813708237083370843708537086370873708837089370903709137092370933709437095370963709737098370993710037101371023710337104371053710637107371083710937110371113711237113371143711537116371173711837119371203712137122371233712437125371263712737128371293713037131371323713337134371353713637137371383713937140371413714237143371443714537146371473714837149371503715137152371533715437155371563715737158371593716037161371623716337164371653716637167371683716937170371713717237173371743717537176371773717837179371803718137182371833718437185371863718737188371893719037191371923719337194371953719637197371983719937200372013720237203372043720537206372073720837209372103721137212372133721437215372163721737218372193722037221372223722337224372253722637227372283722937230372313723237233372343723537236372373723837239372403724137242372433724437245372463724737248372493725037251372523725337254372553725637257372583725937260372613726237263372643726537266372673726837269372703727137272372733727437275372763727737278372793728037281372823728337284372853728637287372883728937290372913729237293372943729537296372973729837299373003730137302373033730437305373063730737308373093731037311373123731337314373153731637317373183731937320373213732237323373243732537326373273732837329373303733137332373333733437335373363733737338373393734037341373423734337344373453734637347373483734937350373513735237353373543735537356373573735837359373603736137362373633736437365373663736737368373693737037371373723737337374373753737637377373783737937380373813738237383373843738537386373873738837389373903739137392373933739437395373963739737398373993740037401374023740337404374053740637407374083740937410374113741237413374143741537416374173741837419374203742137422374233742437425374263742737428374293743037431374323743337434374353743637437374383743937440374413744237443374443744537446374473744837449374503745137452374533745437455374563745737458374593746037461374623746337464374653746637467374683746937470374713747237473374743747537476374773747837479374803748137482374833748437485374863748737488374893749037491374923749337494374953749637497374983749937500375013750237503375043750537506375073750837509375103751137512375133751437515375163751737518375193752037521375223752337524375253752637527375283752937530375313753237533375343753537536375373753837539375403754137542375433754437545375463754737548375493755037551375523755337554375553755637557375583755937560375613756237563375643756537566375673756837569375703757137572375733757437575375763757737578375793758037581375823758337584375853758637587375883758937590375913759237593375943759537596375973759837599376003760137602376033760437605376063760737608376093761037611376123761337614376153761637617376183761937620376213762237623376243762537626376273762837629376303763137632376333763437635376363763737638376393764037641376423764337644376453764637647376483764937650376513765237653376543765537656376573765837659376603766137662376633766437665376663766737668376693767037671376723767337674376753767637677376783767937680376813768237683376843768537686376873768837689376903769137692376933769437695376963769737698376993770037701377023770337704377053770637707377083770937710377113771237713377143771537716377173771837719377203772137722377233772437725377263772737728377293773037731377323773337734377353773637737377383773937740377413774237743377443774537746377473774837749377503775137752377533775437755377563775737758377593776037761377623776337764377653776637767377683776937770377713777237773377743777537776377773777837779377803778137782377833778437785377863778737788377893779037791377923779337794377953779637797377983779937800378013780237803378043780537806378073780837809378103781137812378133781437815378163781737818378193782037821378223782337824378253782637827378283782937830378313783237833378343783537836378373783837839378403784137842378433784437845378463784737848378493785037851378523785337854378553785637857378583785937860378613786237863378643786537866378673786837869378703787137872378733787437875378763787737878378793788037881378823788337884378853788637887378883788937890378913789237893378943789537896378973789837899379003790137902379033790437905379063790737908379093791037911379123791337914379153791637917379183791937920379213792237923379243792537926379273792837929379303793137932379333793437935379363793737938379393794037941379423794337944379453794637947379483794937950379513795237953379543795537956379573795837959379603796137962379633796437965379663796737968379693797037971379723797337974379753797637977379783797937980379813798237983379843798537986379873798837989379903799137992379933799437995379963799737998379993800038001380023800338004380053800638007380083800938010380113801238013380143801538016380173801838019380203802138022380233802438025380263802738028380293803038031380323803338034380353803638037380383803938040380413804238043380443804538046380473804838049380503805138052380533805438055380563805738058380593806038061380623806338064380653806638067380683806938070380713807238073380743807538076380773807838079380803808138082380833808438085380863808738088380893809038091380923809338094380953809638097380983809938100381013810238103381043810538106381073810838109381103811138112381133811438115381163811738118381193812038121381223812338124381253812638127381283812938130381313813238133381343813538136381373813838139381403814138142381433814438145381463814738148381493815038151381523815338154381553815638157381583815938160381613816238163381643816538166381673816838169381703817138172381733817438175381763817738178381793818038181381823818338184381853818638187381883818938190381913819238193381943819538196381973819838199382003820138202382033820438205382063820738208382093821038211382123821338214382153821638217382183821938220382213822238223382243822538226382273822838229382303823138232382333823438235382363823738238382393824038241382423824338244382453824638247382483824938250382513825238253382543825538256382573825838259382603826138262382633826438265382663826738268382693827038271382723827338274382753827638277382783827938280382813828238283382843828538286382873828838289382903829138292382933829438295382963829738298382993830038301383023830338304383053830638307383083830938310383113831238313383143831538316383173831838319383203832138322383233832438325383263832738328383293833038331383323833338334383353833638337383383833938340383413834238343383443834538346383473834838349383503835138352383533835438355383563835738358383593836038361383623836338364383653836638367383683836938370383713837238373383743837538376383773837838379383803838138382383833838438385383863838738388383893839038391383923839338394383953839638397383983839938400384013840238403384043840538406384073840838409384103841138412384133841438415384163841738418384193842038421384223842338424384253842638427384283842938430384313843238433384343843538436384373843838439384403844138442384433844438445384463844738448384493845038451384523845338454384553845638457384583845938460384613846238463384643846538466384673846838469384703847138472384733847438475384763847738478384793848038481384823848338484384853848638487384883848938490384913849238493384943849538496384973849838499385003850138502385033850438505385063850738508385093851038511385123851338514385153851638517385183851938520385213852238523385243852538526385273852838529385303853138532385333853438535385363853738538385393854038541385423854338544385453854638547385483854938550385513855238553385543855538556385573855838559385603856138562385633856438565385663856738568385693857038571385723857338574385753857638577385783857938580385813858238583385843858538586385873858838589385903859138592385933859438595385963859738598385993860038601386023860338604386053860638607386083860938610386113861238613386143861538616386173861838619386203862138622386233862438625386263862738628386293863038631386323863338634386353863638637386383863938640386413864238643386443864538646386473864838649386503865138652386533865438655386563865738658386593866038661386623866338664386653866638667386683866938670386713867238673386743867538676386773867838679386803868138682386833868438685386863868738688386893869038691386923869338694386953869638697386983869938700387013870238703387043870538706387073870838709387103871138712387133871438715387163871738718387193872038721387223872338724387253872638727387283872938730387313873238733387343873538736387373873838739387403874138742387433874438745387463874738748387493875038751387523875338754387553875638757387583875938760387613876238763387643876538766387673876838769387703877138772387733877438775387763877738778387793878038781387823878338784387853878638787387883878938790387913879238793387943879538796387973879838799388003880138802388033880438805388063880738808388093881038811388123881338814388153881638817388183881938820388213882238823388243882538826388273882838829388303883138832388333883438835388363883738838388393884038841388423884338844388453884638847388483884938850388513885238853388543885538856388573885838859388603886138862388633886438865388663886738868388693887038871388723887338874388753887638877388783887938880388813888238883388843888538886388873888838889388903889138892388933889438895388963889738898388993890038901389023890338904389053890638907389083890938910389113891238913389143891538916389173891838919389203892138922389233892438925389263892738928389293893038931389323893338934389353893638937389383893938940389413894238943389443894538946389473894838949389503895138952389533895438955389563895738958389593896038961389623896338964389653896638967389683896938970389713897238973389743897538976389773897838979389803898138982389833898438985389863898738988389893899038991389923899338994389953899638997389983899939000390013900239003390043900539006390073900839009390103901139012390133901439015390163901739018390193902039021390223902339024390253902639027390283902939030390313903239033390343903539036390373903839039390403904139042390433904439045390463904739048390493905039051390523905339054390553905639057390583905939060390613906239063390643906539066390673906839069390703907139072390733907439075390763907739078390793908039081390823908339084390853908639087390883908939090390913909239093390943909539096390973909839099391003910139102391033910439105391063910739108391093911039111391123911339114391153911639117391183911939120391213912239123391243912539126391273912839129391303913139132391333913439135391363913739138391393914039141391423914339144391453914639147391483914939150391513915239153391543915539156391573915839159391603916139162391633916439165391663916739168391693917039171391723917339174391753917639177391783917939180391813918239183391843918539186391873918839189391903919139192391933919439195391963919739198391993920039201392023920339204392053920639207392083920939210392113921239213392143921539216392173921839219392203922139222392233922439225392263922739228392293923039231392323923339234392353923639237392383923939240392413924239243392443924539246392473924839249392503925139252392533925439255392563925739258392593926039261392623926339264392653926639267392683926939270392713927239273392743927539276392773927839279392803928139282392833928439285392863928739288392893929039291392923929339294392953929639297392983929939300393013930239303393043930539306393073930839309393103931139312393133931439315393163931739318393193932039321393223932339324393253932639327393283932939330393313933239333393343933539336393373933839339393403934139342393433934439345393463934739348393493935039351393523935339354393553935639357393583935939360393613936239363393643936539366393673936839369393703937139372393733937439375393763937739378393793938039381393823938339384393853938639387393883938939390393913939239393393943939539396393973939839399394003940139402394033940439405394063940739408394093941039411394123941339414394153941639417394183941939420394213942239423394243942539426394273942839429394303943139432394333943439435394363943739438394393944039441394423944339444394453944639447394483944939450394513945239453394543945539456394573945839459394603946139462394633946439465394663946739468394693947039471394723947339474394753947639477394783947939480394813948239483394843948539486394873948839489394903949139492394933949439495394963949739498394993950039501395023950339504395053950639507395083950939510395113951239513395143951539516395173951839519395203952139522395233952439525395263952739528395293953039531395323953339534395353953639537395383953939540395413954239543395443954539546395473954839549395503955139552395533955439555395563955739558395593956039561395623956339564395653956639567395683956939570395713957239573395743957539576395773957839579395803958139582395833958439585395863958739588395893959039591395923959339594395953959639597395983959939600396013960239603396043960539606396073960839609396103961139612396133961439615396163961739618396193962039621396223962339624396253962639627396283962939630396313963239633396343963539636396373963839639396403964139642396433964439645396463964739648396493965039651396523965339654396553965639657396583965939660396613966239663396643966539666396673966839669396703967139672396733967439675396763967739678396793968039681396823968339684396853968639687396883968939690396913969239693396943969539696396973969839699397003970139702397033970439705397063970739708397093971039711397123971339714397153971639717397183971939720397213972239723397243972539726397273972839729397303973139732397333973439735397363973739738397393974039741397423974339744397453974639747397483974939750397513975239753397543975539756397573975839759397603976139762397633976439765397663976739768397693977039771397723977339774397753977639777397783977939780397813978239783397843978539786397873978839789397903979139792397933979439795397963979739798397993980039801398023980339804398053980639807398083980939810398113981239813398143981539816398173981839819398203982139822398233982439825398263982739828398293983039831398323983339834398353983639837398383983939840398413984239843398443984539846398473984839849398503985139852398533985439855398563985739858398593986039861398623986339864398653986639867398683986939870398713987239873398743987539876398773987839879398803988139882398833988439885398863988739888398893989039891398923989339894398953989639897398983989939900399013990239903399043990539906399073990839909399103991139912399133991439915399163991739918399193992039921399223992339924399253992639927399283992939930399313993239933399343993539936399373993839939399403994139942399433994439945399463994739948399493995039951399523995339954399553995639957399583995939960399613996239963399643996539966399673996839969399703997139972399733997439975399763997739978399793998039981399823998339984399853998639987399883998939990399913999239993399943999539996399973999839999400004000140002400034000440005400064000740008400094001040011400124001340014400154001640017400184001940020400214002240023400244002540026400274002840029400304003140032400334003440035400364003740038400394004040041400424004340044400454004640047400484004940050400514005240053400544005540056400574005840059400604006140062400634006440065400664006740068400694007040071400724007340074400754007640077400784007940080400814008240083400844008540086400874008840089400904009140092400934009440095400964009740098400994010040101401024010340104401054010640107401084010940110401114011240113401144011540116401174011840119401204012140122401234012440125401264012740128401294013040131401324013340134401354013640137401384013940140401414014240143401444014540146401474014840149401504015140152401534015440155401564015740158401594016040161401624016340164401654016640167401684016940170401714017240173401744017540176401774017840179401804018140182401834018440185401864018740188401894019040191401924019340194401954019640197401984019940200402014020240203402044020540206402074020840209402104021140212402134021440215402164021740218402194022040221402224022340224402254022640227402284022940230402314023240233402344023540236402374023840239402404024140242402434024440245402464024740248402494025040251402524025340254402554025640257402584025940260402614026240263402644026540266402674026840269402704027140272402734027440275402764027740278402794028040281402824028340284402854028640287402884028940290402914029240293402944029540296402974029840299403004030140302403034030440305403064030740308403094031040311403124031340314403154031640317403184031940320403214032240323403244032540326403274032840329403304033140332403334033440335403364033740338403394034040341403424034340344403454034640347403484034940350403514035240353403544035540356403574035840359403604036140362403634036440365403664036740368403694037040371403724037340374403754037640377403784037940380403814038240383403844038540386403874038840389403904039140392403934039440395403964039740398403994040040401404024040340404404054040640407404084040940410404114041240413404144041540416404174041840419404204042140422404234042440425404264042740428404294043040431404324043340434404354043640437404384043940440404414044240443404444044540446404474044840449404504045140452404534045440455404564045740458404594046040461404624046340464404654046640467404684046940470404714047240473404744047540476404774047840479404804048140482404834048440485404864048740488404894049040491404924049340494404954049640497404984049940500405014050240503405044050540506405074050840509405104051140512405134051440515405164051740518405194052040521405224052340524405254052640527405284052940530405314053240533405344053540536405374053840539405404054140542405434054440545405464054740548405494055040551405524055340554405554055640557405584055940560405614056240563405644056540566405674056840569405704057140572405734057440575405764057740578405794058040581405824058340584405854058640587405884058940590405914059240593405944059540596405974059840599406004060140602406034060440605406064060740608406094061040611406124061340614406154061640617406184061940620406214062240623406244062540626406274062840629406304063140632406334063440635406364063740638406394064040641406424064340644406454064640647406484064940650406514065240653406544065540656406574065840659406604066140662406634066440665406664066740668406694067040671406724067340674406754067640677406784067940680406814068240683406844068540686406874068840689406904069140692406934069440695406964069740698406994070040701407024070340704407054070640707407084070940710407114071240713407144071540716407174071840719407204072140722407234072440725407264072740728407294073040731407324073340734407354073640737407384073940740407414074240743407444074540746407474074840749407504075140752407534075440755407564075740758407594076040761407624076340764407654076640767407684076940770407714077240773407744077540776407774077840779407804078140782407834078440785407864078740788407894079040791407924079340794407954079640797407984079940800408014080240803408044080540806408074080840809408104081140812408134081440815408164081740818408194082040821408224082340824408254082640827408284082940830408314083240833408344083540836408374083840839408404084140842408434084440845408464084740848408494085040851408524085340854408554085640857408584085940860408614086240863408644086540866408674086840869408704087140872408734087440875408764087740878408794088040881408824088340884408854088640887408884088940890408914089240893408944089540896408974089840899409004090140902409034090440905409064090740908409094091040911409124091340914409154091640917409184091940920409214092240923409244092540926409274092840929409304093140932409334093440935409364093740938409394094040941409424094340944409454094640947409484094940950409514095240953409544095540956409574095840959409604096140962409634096440965409664096740968409694097040971409724097340974409754097640977409784097940980409814098240983409844098540986409874098840989409904099140992409934099440995409964099740998409994100041001410024100341004410054100641007410084100941010410114101241013410144101541016410174101841019410204102141022410234102441025410264102741028410294103041031410324103341034410354103641037410384103941040410414104241043410444104541046410474104841049410504105141052410534105441055410564105741058410594106041061410624106341064410654106641067410684106941070410714107241073410744107541076410774107841079410804108141082410834108441085410864108741088410894109041091410924109341094410954109641097410984109941100411014110241103411044110541106411074110841109411104111141112411134111441115411164111741118411194112041121411224112341124411254112641127411284112941130411314113241133411344113541136411374113841139411404114141142411434114441145411464114741148411494115041151411524115341154411554115641157411584115941160411614116241163411644116541166411674116841169411704117141172411734117441175411764117741178411794118041181411824118341184411854118641187411884118941190411914119241193411944119541196411974119841199412004120141202412034120441205412064120741208412094121041211412124121341214412154121641217412184121941220412214122241223412244122541226412274122841229412304123141232412334123441235412364123741238412394124041241412424124341244412454124641247412484124941250412514125241253412544125541256412574125841259412604126141262412634126441265412664126741268412694127041271412724127341274412754127641277412784127941280412814128241283412844128541286412874128841289412904129141292412934129441295412964129741298412994130041301413024130341304413054130641307413084130941310413114131241313413144131541316413174131841319413204132141322413234132441325413264132741328413294133041331413324133341334413354133641337413384133941340413414134241343413444134541346413474134841349413504135141352413534135441355413564135741358413594136041361413624136341364413654136641367413684136941370413714137241373413744137541376413774137841379413804138141382413834138441385413864138741388413894139041391413924139341394413954139641397413984139941400414014140241403414044140541406414074140841409414104141141412414134141441415414164141741418414194142041421414224142341424414254142641427414284142941430414314143241433414344143541436414374143841439414404144141442414434144441445414464144741448414494145041451414524145341454414554145641457414584145941460414614146241463414644146541466414674146841469414704147141472414734147441475414764147741478414794148041481414824148341484414854148641487414884148941490414914149241493414944149541496414974149841499415004150141502415034150441505415064150741508415094151041511415124151341514415154151641517415184151941520415214152241523415244152541526415274152841529415304153141532415334153441535415364153741538415394154041541415424154341544415454154641547415484154941550415514155241553415544155541556415574155841559415604156141562415634156441565415664156741568415694157041571415724157341574415754157641577415784157941580415814158241583415844158541586415874158841589415904159141592415934159441595415964159741598415994160041601416024160341604416054160641607416084160941610416114161241613416144161541616416174161841619416204162141622416234162441625416264162741628416294163041631416324163341634416354163641637416384163941640416414164241643416444164541646416474164841649416504165141652416534165441655416564165741658416594166041661416624166341664416654166641667416684166941670416714167241673416744167541676416774167841679416804168141682416834168441685416864168741688416894169041691416924169341694416954169641697416984169941700417014170241703417044170541706417074170841709417104171141712417134171441715417164171741718417194172041721417224172341724417254172641727417284172941730417314173241733417344173541736417374173841739417404174141742417434174441745417464174741748417494175041751417524175341754417554175641757417584175941760417614176241763417644176541766417674176841769417704177141772417734177441775417764177741778417794178041781417824178341784417854178641787417884178941790417914179241793417944179541796417974179841799418004180141802418034180441805418064180741808418094181041811418124181341814418154181641817418184181941820418214182241823418244182541826418274182841829418304183141832418334183441835418364183741838418394184041841418424184341844418454184641847418484184941850418514185241853418544185541856418574185841859418604186141862418634186441865418664186741868418694187041871418724187341874418754187641877418784187941880418814188241883418844188541886418874188841889418904189141892418934189441895418964189741898418994190041901419024190341904419054190641907419084190941910419114191241913419144191541916419174191841919419204192141922419234192441925419264192741928419294193041931419324193341934419354193641937419384193941940419414194241943419444194541946419474194841949419504195141952419534195441955419564195741958419594196041961419624196341964419654196641967419684196941970419714197241973419744197541976419774197841979419804198141982419834198441985419864198741988419894199041991419924199341994419954199641997419984199942000420014200242003420044200542006420074200842009420104201142012420134201442015420164201742018420194202042021420224202342024420254202642027420284202942030420314203242033420344203542036420374203842039420404204142042420434204442045420464204742048420494205042051420524205342054420554205642057420584205942060420614206242063420644206542066420674206842069420704207142072420734207442075420764207742078420794208042081420824208342084420854208642087420884208942090420914209242093420944209542096420974209842099421004210142102421034210442105421064210742108421094211042111421124211342114421154211642117421184211942120421214212242123421244212542126421274212842129421304213142132421334213442135421364213742138421394214042141421424214342144421454214642147421484214942150421514215242153421544215542156421574215842159421604216142162421634216442165421664216742168421694217042171421724217342174421754217642177421784217942180421814218242183421844218542186421874218842189421904219142192421934219442195421964219742198421994220042201422024220342204422054220642207422084220942210422114221242213422144221542216422174221842219422204222142222422234222442225422264222742228422294223042231422324223342234422354223642237422384223942240422414224242243422444224542246422474224842249422504225142252422534225442255422564225742258422594226042261422624226342264422654226642267422684226942270422714227242273422744227542276422774227842279422804228142282422834228442285422864228742288422894229042291422924229342294422954229642297422984229942300423014230242303423044230542306423074230842309423104231142312423134231442315423164231742318423194232042321423224232342324423254232642327423284232942330423314233242333423344233542336423374233842339423404234142342423434234442345423464234742348423494235042351423524235342354423554235642357423584235942360423614236242363423644236542366423674236842369423704237142372423734237442375423764237742378423794238042381423824238342384423854238642387423884238942390423914239242393423944239542396423974239842399424004240142402424034240442405424064240742408424094241042411424124241342414424154241642417424184241942420424214242242423424244242542426424274242842429424304243142432424334243442435424364243742438424394244042441424424244342444424454244642447424484244942450424514245242453424544245542456424574245842459424604246142462424634246442465424664246742468424694247042471424724247342474424754247642477424784247942480424814248242483424844248542486424874248842489424904249142492424934249442495424964249742498424994250042501425024250342504425054250642507425084250942510425114251242513425144251542516425174251842519425204252142522425234252442525425264252742528425294253042531425324253342534425354253642537425384253942540425414254242543425444254542546425474254842549425504255142552425534255442555425564255742558425594256042561425624256342564425654256642567425684256942570425714257242573425744257542576425774257842579425804258142582425834258442585425864258742588425894259042591425924259342594425954259642597425984259942600426014260242603426044260542606426074260842609426104261142612426134261442615426164261742618426194262042621426224262342624426254262642627426284262942630426314263242633426344263542636426374263842639426404264142642426434264442645426464264742648426494265042651426524265342654426554265642657426584265942660426614266242663426644266542666426674266842669426704267142672426734267442675426764267742678426794268042681426824268342684426854268642687426884268942690426914269242693426944269542696426974269842699427004270142702427034270442705427064270742708427094271042711427124271342714427154271642717427184271942720427214272242723427244272542726427274272842729427304273142732427334273442735427364273742738427394274042741427424274342744427454274642747427484274942750427514275242753427544275542756427574275842759427604276142762427634276442765427664276742768427694277042771427724277342774427754277642777427784277942780427814278242783427844278542786427874278842789427904279142792427934279442795427964279742798427994280042801428024280342804428054280642807428084280942810428114281242813428144281542816428174281842819428204282142822428234282442825428264282742828428294283042831428324283342834428354283642837428384283942840428414284242843428444284542846428474284842849428504285142852428534285442855428564285742858428594286042861428624286342864428654286642867428684286942870428714287242873428744287542876428774287842879428804288142882428834288442885428864288742888428894289042891428924289342894428954289642897428984289942900429014290242903429044290542906429074290842909429104291142912429134291442915429164291742918429194292042921429224292342924429254292642927429284292942930429314293242933429344293542936429374293842939429404294142942429434294442945429464294742948429494295042951429524295342954429554295642957429584295942960429614296242963429644296542966429674296842969429704297142972429734297442975429764297742978429794298042981429824298342984429854298642987429884298942990429914299242993429944299542996429974299842999430004300143002430034300443005430064300743008430094301043011430124301343014430154301643017430184301943020430214302243023430244302543026430274302843029430304303143032430334303443035430364303743038430394304043041430424304343044430454304643047430484304943050430514305243053430544305543056430574305843059430604306143062430634306443065430664306743068430694307043071430724307343074430754307643077430784307943080430814308243083430844308543086430874308843089430904309143092430934309443095430964309743098430994310043101431024310343104431054310643107431084310943110431114311243113431144311543116431174311843119431204312143122431234312443125431264312743128431294313043131431324313343134431354313643137431384313943140431414314243143431444314543146431474314843149431504315143152431534315443155431564315743158431594316043161431624316343164431654316643167431684316943170431714317243173431744317543176431774317843179431804318143182431834318443185431864318743188431894319043191431924319343194431954319643197431984319943200432014320243203432044320543206432074320843209432104321143212432134321443215432164321743218432194322043221432224322343224432254322643227432284322943230432314323243233432344323543236432374323843239432404324143242432434324443245432464324743248432494325043251432524325343254432554325643257432584325943260432614326243263432644326543266432674326843269432704327143272432734327443275432764327743278432794328043281432824328343284432854328643287432884328943290432914329243293432944329543296432974329843299433004330143302433034330443305433064330743308433094331043311433124331343314433154331643317433184331943320433214332243323433244332543326433274332843329433304333143332433334333443335433364333743338433394334043341433424334343344433454334643347433484334943350433514335243353433544335543356433574335843359433604336143362433634336443365433664336743368433694337043371433724337343374433754337643377433784337943380433814338243383433844338543386433874338843389433904339143392433934339443395433964339743398433994340043401434024340343404434054340643407434084340943410434114341243413434144341543416434174341843419434204342143422434234342443425434264342743428434294343043431434324343343434434354343643437434384343943440434414344243443434444344543446434474344843449434504345143452434534345443455434564345743458434594346043461434624346343464434654346643467434684346943470434714347243473434744347543476434774347843479434804348143482434834348443485434864348743488434894349043491434924349343494434954349643497434984349943500435014350243503435044350543506435074350843509435104351143512435134351443515435164351743518435194352043521435224352343524435254352643527435284352943530435314353243533435344353543536435374353843539435404354143542435434354443545435464354743548435494355043551435524355343554435554355643557435584355943560435614356243563435644356543566435674356843569435704357143572435734357443575435764357743578435794358043581435824358343584435854358643587435884358943590435914359243593435944359543596435974359843599436004360143602436034360443605436064360743608436094361043611436124361343614436154361643617436184361943620436214362243623436244362543626436274362843629436304363143632436334363443635436364363743638436394364043641436424364343644436454364643647436484364943650436514365243653436544365543656436574365843659436604366143662436634366443665436664366743668436694367043671436724367343674436754367643677436784367943680436814368243683436844368543686436874368843689436904369143692436934369443695436964369743698436994370043701437024370343704437054370643707437084370943710437114371243713437144371543716437174371843719437204372143722437234372443725437264372743728437294373043731437324373343734437354373643737437384373943740437414374243743437444374543746437474374843749437504375143752437534375443755437564375743758437594376043761437624376343764437654376643767437684376943770437714377243773437744377543776437774377843779437804378143782437834378443785437864378743788437894379043791437924379343794437954379643797437984379943800438014380243803438044380543806438074380843809438104381143812438134381443815438164381743818438194382043821438224382343824438254382643827438284382943830438314383243833438344383543836438374383843839438404384143842438434384443845438464384743848438494385043851438524385343854438554385643857438584385943860438614386243863438644386543866438674386843869438704387143872438734387443875438764387743878438794388043881438824388343884438854388643887438884388943890438914389243893438944389543896438974389843899439004390143902439034390443905439064390743908439094391043911439124391343914439154391643917439184391943920439214392243923439244392543926439274392843929439304393143932439334393443935439364393743938439394394043941439424394343944439454394643947439484394943950439514395243953439544395543956439574395843959439604396143962439634396443965439664396743968439694397043971439724397343974439754397643977439784397943980439814398243983439844398543986439874398843989439904399143992439934399443995439964399743998439994400044001440024400344004440054400644007440084400944010440114401244013440144401544016440174401844019440204402144022440234402444025440264402744028440294403044031440324403344034440354403644037440384403944040440414404244043440444404544046440474404844049440504405144052440534405444055440564405744058440594406044061440624406344064440654406644067440684406944070440714407244073440744407544076440774407844079440804408144082440834408444085440864408744088440894409044091440924409344094440954409644097440984409944100441014410244103441044410544106441074410844109441104411144112441134411444115441164411744118441194412044121441224412344124441254412644127441284412944130441314413244133441344413544136441374413844139441404414144142441434414444145441464414744148441494415044151441524415344154441554415644157441584415944160441614416244163441644416544166441674416844169441704417144172441734417444175441764417744178441794418044181441824418344184441854418644187441884418944190441914419244193441944419544196441974419844199442004420144202442034420444205442064420744208442094421044211442124421344214442154421644217442184421944220442214422244223442244422544226442274422844229442304423144232442334423444235442364423744238442394424044241442424424344244442454424644247442484424944250442514425244253442544425544256442574425844259442604426144262442634426444265442664426744268442694427044271442724427344274442754427644277442784427944280442814428244283442844428544286442874428844289442904429144292442934429444295442964429744298442994430044301443024430344304443054430644307443084430944310443114431244313443144431544316443174431844319443204432144322443234432444325443264432744328443294433044331443324433344334443354433644337443384433944340443414434244343443444434544346443474434844349443504435144352443534435444355443564435744358443594436044361443624436344364443654436644367443684436944370443714437244373443744437544376443774437844379443804438144382443834438444385443864438744388443894439044391443924439344394443954439644397443984439944400444014440244403444044440544406444074440844409444104441144412444134441444415444164441744418444194442044421444224442344424444254442644427444284442944430444314443244433444344443544436444374443844439444404444144442444434444444445444464444744448444494445044451444524445344454444554445644457444584445944460444614446244463444644446544466444674446844469444704447144472444734447444475444764447744478444794448044481444824448344484444854448644487444884448944490444914449244493444944449544496444974449844499445004450144502445034450444505445064450744508445094451044511445124451344514445154451644517445184451944520445214452244523445244452544526445274452844529445304453144532445334453444535445364453744538445394454044541445424454344544445454454644547445484454944550445514455244553445544455544556445574455844559445604456144562445634456444565445664456744568445694457044571445724457344574445754457644577445784457944580445814458244583445844458544586445874458844589445904459144592445934459444595445964459744598445994460044601446024460344604446054460644607446084460944610446114461244613446144461544616446174461844619446204462144622446234462444625446264462744628446294463044631446324463344634446354463644637446384463944640446414464244643446444464544646446474464844649446504465144652446534465444655446564465744658446594466044661446624466344664446654466644667446684466944670446714467244673446744467544676446774467844679446804468144682446834468444685446864468744688446894469044691446924469344694446954469644697446984469944700447014470244703447044470544706447074470844709447104471144712447134471444715447164471744718447194472044721447224472344724447254472644727447284472944730447314473244733447344473544736447374473844739447404474144742447434474444745447464474744748447494475044751447524475344754447554475644757447584475944760447614476244763447644476544766447674476844769447704477144772447734477444775447764477744778447794478044781447824478344784447854478644787447884478944790447914479244793447944479544796447974479844799448004480144802448034480444805448064480744808448094481044811448124481344814448154481644817448184481944820448214482244823448244482544826448274482844829448304483144832448334483444835448364483744838448394484044841448424484344844448454484644847448484484944850448514485244853448544485544856448574485844859448604486144862448634486444865448664486744868448694487044871448724487344874448754487644877448784487944880448814488244883448844488544886448874488844889448904489144892448934489444895448964489744898448994490044901449024490344904449054490644907449084490944910449114491244913449144491544916449174491844919449204492144922449234492444925449264492744928449294493044931449324493344934449354493644937449384493944940449414494244943449444494544946449474494844949449504495144952449534495444955449564495744958449594496044961449624496344964449654496644967449684496944970449714497244973449744497544976449774497844979449804498144982449834498444985449864498744988449894499044991449924499344994449954499644997449984499945000450014500245003450044500545006450074500845009450104501145012450134501445015450164501745018450194502045021450224502345024450254502645027450284502945030450314503245033450344503545036450374503845039450404504145042450434504445045450464504745048450494505045051450524505345054450554505645057450584505945060450614506245063450644506545066450674506845069450704507145072450734507445075450764507745078450794508045081450824508345084450854508645087450884508945090450914509245093450944509545096450974509845099451004510145102451034510445105451064510745108451094511045111451124511345114451154511645117451184511945120451214512245123451244512545126451274512845129451304513145132451334513445135451364513745138451394514045141451424514345144451454514645147451484514945150451514515245153451544515545156451574515845159451604516145162451634516445165451664516745168451694517045171451724517345174451754517645177451784517945180451814518245183451844518545186451874518845189451904519145192451934519445195451964519745198451994520045201452024520345204452054520645207452084520945210452114521245213452144521545216452174521845219452204522145222452234522445225452264522745228452294523045231452324523345234452354523645237452384523945240452414524245243452444524545246452474524845249452504525145252452534525445255452564525745258452594526045261452624526345264452654526645267452684526945270452714527245273452744527545276452774527845279452804528145282452834528445285452864528745288452894529045291452924529345294452954529645297452984529945300453014530245303453044530545306453074530845309453104531145312453134531445315453164531745318453194532045321453224532345324453254532645327453284532945330453314533245333453344533545336453374533845339453404534145342453434534445345453464534745348453494535045351453524535345354453554535645357453584535945360453614536245363453644536545366453674536845369453704537145372453734537445375453764537745378453794538045381453824538345384453854538645387453884538945390453914539245393453944539545396453974539845399454004540145402454034540445405454064540745408454094541045411454124541345414454154541645417454184541945420454214542245423454244542545426454274542845429454304543145432454334543445435454364543745438454394544045441454424544345444454454544645447454484544945450454514545245453454544545545456454574545845459454604546145462454634546445465454664546745468454694547045471454724547345474454754547645477454784547945480454814548245483454844548545486454874548845489454904549145492454934549445495454964549745498454994550045501455024550345504455054550645507455084550945510455114551245513455144551545516455174551845519455204552145522455234552445525455264552745528455294553045531455324553345534455354553645537455384553945540455414554245543455444554545546455474554845549455504555145552455534555445555455564555745558455594556045561455624556345564455654556645567455684556945570455714557245573455744557545576455774557845579455804558145582455834558445585455864558745588455894559045591455924559345594455954559645597455984559945600456014560245603456044560545606456074560845609456104561145612456134561445615456164561745618456194562045621456224562345624456254562645627456284562945630456314563245633456344563545636456374563845639456404564145642456434564445645456464564745648456494565045651456524565345654456554565645657456584565945660456614566245663456644566545666456674566845669456704567145672456734567445675456764567745678456794568045681456824568345684456854568645687456884568945690456914569245693456944569545696456974569845699457004570145702457034570445705457064570745708457094571045711457124571345714457154571645717457184571945720457214572245723457244572545726457274572845729457304573145732457334573445735457364573745738457394574045741457424574345744457454574645747457484574945750457514575245753457544575545756457574575845759457604576145762457634576445765457664576745768457694577045771457724577345774457754577645777457784577945780457814578245783457844578545786457874578845789457904579145792457934579445795457964579745798457994580045801458024580345804458054580645807458084580945810458114581245813458144581545816458174581845819458204582145822458234582445825458264582745828458294583045831458324583345834458354583645837458384583945840458414584245843458444584545846458474584845849458504585145852458534585445855458564585745858458594586045861458624586345864458654586645867458684586945870458714587245873458744587545876458774587845879458804588145882458834588445885458864588745888458894589045891458924589345894458954589645897458984589945900459014590245903459044590545906459074590845909459104591145912459134591445915459164591745918459194592045921459224592345924459254592645927459284592945930459314593245933459344593545936459374593845939459404594145942459434594445945459464594745948459494595045951459524595345954459554595645957459584595945960459614596245963459644596545966459674596845969459704597145972459734597445975459764597745978459794598045981459824598345984459854598645987459884598945990459914599245993459944599545996459974599845999460004600146002460034600446005460064600746008460094601046011460124601346014460154601646017460184601946020460214602246023460244602546026460274602846029460304603146032460334603446035460364603746038460394604046041460424604346044460454604646047460484604946050460514605246053460544605546056460574605846059460604606146062460634606446065460664606746068460694607046071460724607346074460754607646077460784607946080460814608246083460844608546086460874608846089460904609146092460934609446095460964609746098460994610046101461024610346104461054610646107461084610946110461114611246113461144611546116461174611846119461204612146122461234612446125461264612746128461294613046131461324613346134461354613646137461384613946140461414614246143461444614546146461474614846149461504615146152461534615446155461564615746158461594616046161461624616346164461654616646167461684616946170461714617246173461744617546176461774617846179461804618146182461834618446185461864618746188461894619046191461924619346194461954619646197461984619946200462014620246203462044620546206462074620846209462104621146212462134621446215462164621746218462194622046221462224622346224462254622646227462284622946230462314623246233462344623546236462374623846239462404624146242462434624446245462464624746248462494625046251462524625346254462554625646257462584625946260462614626246263462644626546266462674626846269462704627146272462734627446275462764627746278462794628046281462824628346284462854628646287462884628946290462914629246293462944629546296462974629846299463004630146302463034630446305463064630746308463094631046311463124631346314463154631646317463184631946320463214632246323463244632546326463274632846329463304633146332463334633446335463364633746338463394634046341463424634346344463454634646347463484634946350463514635246353463544635546356463574635846359463604636146362463634636446365463664636746368463694637046371463724637346374463754637646377463784637946380463814638246383463844638546386463874638846389463904639146392463934639446395463964639746398463994640046401464024640346404464054640646407464084640946410464114641246413464144641546416464174641846419464204642146422464234642446425464264642746428464294643046431464324643346434464354643646437464384643946440464414644246443464444644546446464474644846449464504645146452464534645446455464564645746458464594646046461464624646346464464654646646467464684646946470464714647246473464744647546476464774647846479464804648146482464834648446485464864648746488464894649046491464924649346494464954649646497464984649946500465014650246503465044650546506465074650846509465104651146512465134651446515465164651746518465194652046521465224652346524465254652646527465284652946530465314653246533465344653546536465374653846539465404654146542465434654446545465464654746548465494655046551465524655346554465554655646557465584655946560465614656246563465644656546566465674656846569465704657146572465734657446575465764657746578465794658046581465824658346584465854658646587465884658946590465914659246593465944659546596465974659846599466004660146602466034660446605466064660746608466094661046611466124661346614466154661646617466184661946620466214662246623466244662546626466274662846629466304663146632466334663446635466364663746638466394664046641466424664346644466454664646647466484664946650466514665246653466544665546656466574665846659466604666146662466634666446665466664666746668466694667046671466724667346674466754667646677466784667946680466814668246683466844668546686466874668846689466904669146692466934669446695466964669746698466994670046701467024670346704467054670646707467084670946710467114671246713467144671546716467174671846719467204672146722467234672446725467264672746728467294673046731467324673346734467354673646737467384673946740467414674246743467444674546746467474674846749467504675146752467534675446755467564675746758467594676046761467624676346764467654676646767467684676946770467714677246773467744677546776467774677846779467804678146782467834678446785467864678746788467894679046791467924679346794467954679646797467984679946800468014680246803468044680546806468074680846809468104681146812468134681446815468164681746818468194682046821468224682346824468254682646827468284682946830468314683246833468344683546836468374683846839468404684146842468434684446845468464684746848468494685046851468524685346854468554685646857468584685946860468614686246863468644686546866468674686846869468704687146872468734687446875468764687746878468794688046881468824688346884468854688646887468884688946890468914689246893468944689546896468974689846899469004690146902469034690446905469064690746908469094691046911469124691346914469154691646917469184691946920469214692246923469244692546926469274692846929469304693146932469334693446935469364693746938469394694046941469424694346944469454694646947469484694946950469514695246953469544695546956469574695846959469604696146962469634696446965469664696746968469694697046971469724697346974469754697646977469784697946980469814698246983469844698546986469874698846989469904699146992469934699446995469964699746998469994700047001470024700347004470054700647007470084700947010470114701247013470144701547016470174701847019470204702147022470234702447025470264702747028470294703047031470324703347034470354703647037470384703947040470414704247043470444704547046470474704847049470504705147052470534705447055470564705747058470594706047061470624706347064470654706647067470684706947070470714707247073470744707547076470774707847079470804708147082470834708447085470864708747088470894709047091470924709347094470954709647097470984709947100471014710247103471044710547106471074710847109471104711147112471134711447115471164711747118471194712047121471224712347124471254712647127471284712947130471314713247133471344713547136471374713847139471404714147142471434714447145471464714747148471494715047151471524715347154471554715647157471584715947160471614716247163471644716547166471674716847169471704717147172471734717447175471764717747178471794718047181471824718347184471854718647187471884718947190471914719247193471944719547196471974719847199472004720147202472034720447205472064720747208472094721047211472124721347214472154721647217472184721947220472214722247223472244722547226472274722847229472304723147232472334723447235472364723747238472394724047241472424724347244472454724647247472484724947250472514725247253472544725547256472574725847259472604726147262472634726447265472664726747268472694727047271472724727347274472754727647277472784727947280472814728247283472844728547286472874728847289472904729147292472934729447295472964729747298472994730047301473024730347304473054730647307473084730947310473114731247313473144731547316473174731847319473204732147322473234732447325473264732747328473294733047331473324733347334473354733647337473384733947340473414734247343473444734547346473474734847349473504735147352473534735447355473564735747358473594736047361473624736347364473654736647367473684736947370473714737247373473744737547376473774737847379473804738147382473834738447385473864738747388473894739047391473924739347394473954739647397473984739947400474014740247403474044740547406474074740847409474104741147412474134741447415474164741747418474194742047421474224742347424474254742647427474284742947430474314743247433474344743547436474374743847439474404744147442474434744447445474464744747448474494745047451474524745347454474554745647457474584745947460474614746247463474644746547466474674746847469474704747147472474734747447475474764747747478474794748047481474824748347484474854748647487474884748947490474914749247493474944749547496474974749847499475004750147502475034750447505475064750747508475094751047511475124751347514475154751647517475184751947520475214752247523475244752547526475274752847529475304753147532475334753447535475364753747538475394754047541475424754347544475454754647547475484754947550475514755247553475544755547556475574755847559475604756147562475634756447565475664756747568475694757047571475724757347574475754757647577475784757947580475814758247583475844758547586475874758847589475904759147592475934759447595475964759747598475994760047601476024760347604476054760647607476084760947610476114761247613476144761547616476174761847619476204762147622476234762447625476264762747628476294763047631476324763347634476354763647637476384763947640476414764247643476444764547646476474764847649476504765147652476534765447655476564765747658476594766047661476624766347664476654766647667476684766947670476714767247673476744767547676476774767847679476804768147682476834768447685476864768747688476894769047691476924769347694476954769647697476984769947700477014770247703477044770547706477074770847709477104771147712477134771447715477164771747718477194772047721477224772347724477254772647727477284772947730477314773247733477344773547736477374773847739477404774147742477434774447745477464774747748477494775047751477524775347754477554775647757477584775947760477614776247763477644776547766477674776847769477704777147772477734777447775477764777747778477794778047781477824778347784477854778647787477884778947790477914779247793477944779547796477974779847799478004780147802478034780447805478064780747808478094781047811478124781347814478154781647817478184781947820478214782247823478244782547826478274782847829478304783147832478334783447835478364783747838478394784047841478424784347844478454784647847478484784947850478514785247853478544785547856478574785847859478604786147862478634786447865478664786747868478694787047871478724787347874478754787647877478784787947880478814788247883478844788547886478874788847889478904789147892478934789447895478964789747898478994790047901479024790347904479054790647907479084790947910479114791247913479144791547916479174791847919479204792147922479234792447925479264792747928479294793047931479324793347934479354793647937479384793947940479414794247943479444794547946479474794847949479504795147952479534795447955479564795747958479594796047961479624796347964479654796647967479684796947970479714797247973479744797547976479774797847979479804798147982479834798447985479864798747988479894799047991479924799347994479954799647997479984799948000480014800248003480044800548006480074800848009480104801148012480134801448015480164801748018480194802048021480224802348024480254802648027480284802948030480314803248033480344803548036480374803848039480404804148042480434804448045480464804748048480494805048051480524805348054480554805648057480584805948060480614806248063480644806548066480674806848069480704807148072480734807448075480764807748078480794808048081480824808348084480854808648087480884808948090480914809248093480944809548096480974809848099481004810148102481034810448105481064810748108481094811048111481124811348114481154811648117481184811948120481214812248123481244812548126481274812848129481304813148132481334813448135481364813748138481394814048141481424814348144481454814648147481484814948150481514815248153481544815548156481574815848159481604816148162481634816448165481664816748168481694817048171481724817348174481754817648177481784817948180481814818248183481844818548186481874818848189481904819148192481934819448195481964819748198481994820048201482024820348204482054820648207482084820948210482114821248213482144821548216482174821848219482204822148222482234822448225482264822748228482294823048231482324823348234482354823648237482384823948240482414824248243482444824548246482474824848249482504825148252482534825448255482564825748258482594826048261482624826348264482654826648267482684826948270482714827248273482744827548276482774827848279482804828148282482834828448285482864828748288482894829048291482924829348294482954829648297482984829948300483014830248303483044830548306483074830848309483104831148312483134831448315483164831748318483194832048321483224832348324483254832648327483284832948330483314833248333483344833548336483374833848339483404834148342483434834448345483464834748348483494835048351483524835348354483554835648357483584835948360483614836248363483644836548366483674836848369483704837148372483734837448375483764837748378483794838048381483824838348384483854838648387483884838948390483914839248393483944839548396483974839848399484004840148402484034840448405484064840748408484094841048411484124841348414484154841648417484184841948420484214842248423484244842548426484274842848429484304843148432484334843448435484364843748438484394844048441484424844348444484454844648447484484844948450484514845248453484544845548456484574845848459484604846148462484634846448465484664846748468484694847048471484724847348474484754847648477484784847948480484814848248483484844848548486484874848848489484904849148492484934849448495484964849748498484994850048501485024850348504485054850648507485084850948510485114851248513485144851548516485174851848519485204852148522485234852448525485264852748528485294853048531485324853348534485354853648537485384853948540485414854248543485444854548546485474854848549485504855148552485534855448555485564855748558485594856048561485624856348564485654856648567485684856948570485714857248573485744857548576485774857848579485804858148582485834858448585485864858748588485894859048591485924859348594485954859648597485984859948600486014860248603486044860548606486074860848609486104861148612486134861448615486164861748618486194862048621486224862348624486254862648627486284862948630486314863248633486344863548636486374863848639486404864148642486434864448645486464864748648486494865048651486524865348654486554865648657486584865948660486614866248663486644866548666486674866848669486704867148672486734867448675486764867748678486794868048681486824868348684486854868648687486884868948690486914869248693486944869548696486974869848699487004870148702487034870448705487064870748708487094871048711487124871348714487154871648717487184871948720487214872248723487244872548726487274872848729487304873148732487334873448735487364873748738487394874048741487424874348744487454874648747487484874948750487514875248753487544875548756487574875848759487604876148762487634876448765487664876748768487694877048771487724877348774487754877648777487784877948780487814878248783487844878548786487874878848789487904879148792487934879448795487964879748798487994880048801488024880348804488054880648807488084880948810488114881248813488144881548816488174881848819488204882148822488234882448825488264882748828488294883048831488324883348834488354883648837488384883948840488414884248843488444884548846488474884848849488504885148852488534885448855488564885748858488594886048861488624886348864488654886648867488684886948870488714887248873488744887548876488774887848879488804888148882488834888448885488864888748888488894889048891488924889348894488954889648897488984889948900489014890248903489044890548906489074890848909489104891148912489134891448915489164891748918489194892048921489224892348924489254892648927489284892948930489314893248933489344893548936489374893848939489404894148942489434894448945489464894748948489494895048951489524895348954489554895648957489584895948960489614896248963489644896548966489674896848969489704897148972489734897448975489764897748978489794898048981489824898348984489854898648987489884898948990489914899248993489944899548996489974899848999490004900149002490034900449005490064900749008490094901049011490124901349014490154901649017490184901949020490214902249023490244902549026490274902849029490304903149032490334903449035490364903749038490394904049041490424904349044490454904649047490484904949050490514905249053490544905549056490574905849059490604906149062490634906449065490664906749068490694907049071490724907349074490754907649077490784907949080490814908249083490844908549086490874908849089490904909149092490934909449095490964909749098490994910049101491024910349104491054910649107491084910949110491114911249113491144911549116491174911849119491204912149122491234912449125491264912749128491294913049131491324913349134491354913649137491384913949140491414914249143491444914549146491474914849149491504915149152491534915449155491564915749158491594916049161491624916349164491654916649167491684916949170491714917249173491744917549176491774917849179491804918149182491834918449185491864918749188491894919049191491924919349194491954919649197491984919949200492014920249203492044920549206492074920849209492104921149212492134921449215492164921749218492194922049221492224922349224492254922649227492284922949230492314923249233492344923549236492374923849239492404924149242492434924449245492464924749248492494925049251492524925349254492554925649257492584925949260492614926249263492644926549266492674926849269492704927149272492734927449275492764927749278492794928049281492824928349284492854928649287492884928949290492914929249293492944929549296492974929849299493004930149302493034930449305493064930749308493094931049311493124931349314493154931649317493184931949320493214932249323493244932549326493274932849329493304933149332493334933449335493364933749338493394934049341493424934349344493454934649347493484934949350493514935249353493544935549356493574935849359493604936149362493634936449365493664936749368493694937049371493724937349374493754937649377493784937949380493814938249383493844938549386493874938849389493904939149392493934939449395493964939749398493994940049401494024940349404494054940649407494084940949410494114941249413494144941549416494174941849419494204942149422494234942449425494264942749428494294943049431494324943349434494354943649437494384943949440494414944249443494444944549446494474944849449494504945149452494534945449455494564945749458494594946049461494624946349464494654946649467494684946949470494714947249473494744947549476494774947849479494804948149482494834948449485494864948749488494894949049491494924949349494494954949649497494984949949500495014950249503495044950549506495074950849509495104951149512495134951449515495164951749518495194952049521495224952349524495254952649527495284952949530495314953249533495344953549536495374953849539495404954149542495434954449545495464954749548495494955049551495524955349554495554955649557495584955949560495614956249563495644956549566495674956849569495704957149572495734957449575495764957749578495794958049581495824958349584495854958649587495884958949590495914959249593495944959549596495974959849599496004960149602496034960449605496064960749608496094961049611496124961349614496154961649617496184961949620496214962249623496244962549626496274962849629496304963149632496334963449635496364963749638496394964049641496424964349644496454964649647496484964949650496514965249653496544965549656496574965849659496604966149662496634966449665496664966749668496694967049671496724967349674496754967649677496784967949680496814968249683496844968549686496874968849689496904969149692496934969449695496964969749698496994970049701497024970349704497054970649707497084970949710497114971249713497144971549716497174971849719497204972149722497234972449725497264972749728497294973049731497324973349734497354973649737497384973949740497414974249743497444974549746497474974849749497504975149752497534975449755497564975749758497594976049761497624976349764497654976649767497684976949770497714977249773497744977549776497774977849779497804978149782497834978449785497864978749788497894979049791497924979349794497954979649797497984979949800498014980249803498044980549806498074980849809498104981149812498134981449815498164981749818498194982049821498224982349824498254982649827498284982949830498314983249833498344983549836498374983849839498404984149842498434984449845498464984749848498494985049851498524985349854498554985649857498584985949860498614986249863498644986549866498674986849869498704987149872498734987449875498764987749878498794988049881498824988349884
  1. (function(_global){
  2. var require, define;
  3. (function () {
  4. var mods = {};
  5. define = function (id, deps, factory) {
  6. mods[id] = {
  7. id: id,
  8. deps: deps,
  9. factory: factory,
  10. defined: 0,
  11. exports: {},
  12. require: createRequire(id)
  13. };
  14. };
  15. require = createRequire('');
  16. function normalize(id, baseId) {
  17. if (!baseId) {
  18. return id;
  19. }
  20. if (id.indexOf('.') === 0) {
  21. var basePath = baseId.split('/');
  22. var namePath = id.split('/');
  23. var baseLen = basePath.length - 1;
  24. var nameLen = namePath.length;
  25. var cutBaseTerms = 0;
  26. var cutNameTerms = 0;
  27. pathLoop: for (var i = 0; i < nameLen; i++) {
  28. switch (namePath[i]) {
  29. case '..':
  30. if (cutBaseTerms < baseLen) {
  31. cutBaseTerms++;
  32. cutNameTerms++;
  33. }
  34. else {
  35. break pathLoop;
  36. }
  37. break;
  38. case '.':
  39. cutNameTerms++;
  40. break;
  41. default:
  42. break pathLoop;
  43. }
  44. }
  45. basePath.length = baseLen - cutBaseTerms;
  46. namePath = namePath.slice(cutNameTerms);
  47. return basePath.concat(namePath).join('/');
  48. }
  49. return id;
  50. }
  51. function createRequire(baseId) {
  52. var cacheMods = {};
  53. function localRequire(id, callback) {
  54. if (typeof id === 'string') {
  55. var exports = cacheMods[id];
  56. if (!exports) {
  57. exports = getModExports(normalize(id, baseId));
  58. cacheMods[id] = exports;
  59. }
  60. return exports;
  61. }
  62. else if (id instanceof Array) {
  63. callback = callback || function () {};
  64. callback.apply(this, getModsExports(id, callback, baseId));
  65. }
  66. };
  67. return localRequire;
  68. }
  69. function getModsExports(ids, factory, baseId) {
  70. var es = [];
  71. var mod = mods[baseId];
  72. for (var i = 0, l = Math.min(ids.length, factory.length); i < l; i++) {
  73. var id = normalize(ids[i], baseId);
  74. var arg;
  75. switch (id) {
  76. case 'require':
  77. arg = (mod && mod.require) || require;
  78. break;
  79. case 'exports':
  80. arg = mod.exports;
  81. break;
  82. case 'module':
  83. arg = mod;
  84. break;
  85. default:
  86. arg = getModExports(id);
  87. }
  88. es.push(arg);
  89. }
  90. return es;
  91. }
  92. function getModExports(id) {
  93. var mod = mods[id];
  94. if (!mod) {
  95. throw new Error('No ' + id);
  96. }
  97. if (!mod.defined) {
  98. var factory = mod.factory;
  99. var factoryReturn = factory.apply(
  100. this,
  101. getModsExports(mod.deps || [], factory, id)
  102. );
  103. if (typeof factoryReturn !== 'undefined') {
  104. mod.exports = factoryReturn;
  105. }
  106. mod.defined = 1;
  107. }
  108. return mod.exports;
  109. }
  110. }());
  111. define('echarts', ['echarts/echarts'], function (main) {return main;});
  112. define('echarts/echarts', [
  113. 'require',
  114. './config',
  115. 'zrender/tool/util',
  116. 'zrender/tool/event',
  117. 'zrender/tool/env',
  118. 'zrender',
  119. 'zrender/config',
  120. './chart/island',
  121. './component/toolbox',
  122. './component',
  123. './component/title',
  124. './component/tooltip',
  125. './component/legend',
  126. './util/ecData',
  127. './chart',
  128. 'zrender/tool/color',
  129. './component/timeline',
  130. 'zrender/shape/Image',
  131. 'zrender/loadingEffect/Bar',
  132. 'zrender/loadingEffect/Bubble',
  133. 'zrender/loadingEffect/DynamicLine',
  134. 'zrender/loadingEffect/Ring',
  135. 'zrender/loadingEffect/Spin',
  136. 'zrender/loadingEffect/Whirling',
  137. './theme/macarons',
  138. './theme/infographic'
  139. ], function (require) {
  140. var ecConfig = require('./config');
  141. var zrUtil = require('zrender/tool/util');
  142. var zrEvent = require('zrender/tool/event');
  143. var self = {};
  144. var _canvasSupported = require('zrender/tool/env').canvasSupported;
  145. var _idBase = new Date() - 0;
  146. var _instances = {};
  147. var DOM_ATTRIBUTE_KEY = '_echarts_instance_';
  148. self.version = '2.2.7';
  149. self.dependencies = { zrender: '2.1.1' };
  150. self.init = function (dom, theme) {
  151. var zrender = require('zrender');
  152. if (zrender.version.replace('.', '') - 0 < self.dependencies.zrender.replace('.', '') - 0) {
  153. console.error('ZRender ' + zrender.version + ' is too old for ECharts ' + self.version + '. Current version need ZRender ' + self.dependencies.zrender + '+');
  154. }
  155. dom = dom instanceof Array ? dom[0] : dom;
  156. var key = dom.getAttribute(DOM_ATTRIBUTE_KEY);
  157. if (!key) {
  158. key = _idBase++;
  159. dom.setAttribute(DOM_ATTRIBUTE_KEY, key);
  160. }
  161. if (_instances[key]) {
  162. _instances[key].dispose();
  163. }
  164. _instances[key] = new Echarts(dom);
  165. _instances[key].id = key;
  166. _instances[key].canvasSupported = _canvasSupported;
  167. _instances[key].setTheme(theme);
  168. return _instances[key];
  169. };
  170. self.getInstanceById = function (key) {
  171. return _instances[key];
  172. };
  173. function MessageCenter() {
  174. zrEvent.Dispatcher.call(this);
  175. }
  176. zrUtil.merge(MessageCenter.prototype, zrEvent.Dispatcher.prototype, true);
  177. function Echarts(dom) {
  178. dom.innerHTML = '';
  179. this._themeConfig = {};
  180. this.dom = dom;
  181. this._connected = false;
  182. this._status = {
  183. dragIn: false,
  184. dragOut: false,
  185. needRefresh: false
  186. };
  187. this._curEventType = false;
  188. this._chartList = [];
  189. this._messageCenter = new MessageCenter();
  190. this._messageCenterOutSide = new MessageCenter();
  191. this.resize = this.resize();
  192. this._init();
  193. }
  194. var ZR_EVENT = require('zrender/config').EVENT;
  195. var ZR_EVENT_LISTENS = [
  196. 'CLICK',
  197. 'DBLCLICK',
  198. 'MOUSEOVER',
  199. 'MOUSEOUT',
  200. 'DRAGSTART',
  201. 'DRAGEND',
  202. 'DRAGENTER',
  203. 'DRAGOVER',
  204. 'DRAGLEAVE',
  205. 'DROP'
  206. ];
  207. function callChartListMethodReverse(ecInstance, methodName, arg0, arg1, arg2) {
  208. var chartList = ecInstance._chartList;
  209. var len = chartList.length;
  210. while (len--) {
  211. var chart = chartList[len];
  212. if (typeof chart[methodName] === 'function') {
  213. chart[methodName](arg0, arg1, arg2);
  214. }
  215. }
  216. }
  217. Echarts.prototype = {
  218. _init: function () {
  219. var self = this;
  220. var _zr = require('zrender').init(this.dom);
  221. this._zr = _zr;
  222. this._messageCenter.dispatch = function (type, event, eventPackage, that) {
  223. eventPackage = eventPackage || {};
  224. eventPackage.type = type;
  225. eventPackage.event = event;
  226. self._messageCenter.dispatchWithContext(type, eventPackage, that);
  227. self._messageCenterOutSide.dispatchWithContext(type, eventPackage, that);
  228. };
  229. this._onevent = function (param) {
  230. return self.__onevent(param);
  231. };
  232. for (var e in ecConfig.EVENT) {
  233. if (e != 'CLICK' && e != 'DBLCLICK' && e != 'HOVER' && e != 'MOUSEOUT' && e != 'MAP_ROAM') {
  234. this._messageCenter.bind(ecConfig.EVENT[e], this._onevent, this);
  235. }
  236. }
  237. var eventBehaviors = {};
  238. this._onzrevent = function (param) {
  239. return self[eventBehaviors[param.type]](param);
  240. };
  241. for (var i = 0, len = ZR_EVENT_LISTENS.length; i < len; i++) {
  242. var eventName = ZR_EVENT_LISTENS[i];
  243. var eventValue = ZR_EVENT[eventName];
  244. eventBehaviors[eventValue] = '_on' + eventName.toLowerCase();
  245. _zr.on(eventValue, this._onzrevent);
  246. }
  247. this.chart = {};
  248. this.component = {};
  249. var Island = require('./chart/island');
  250. this._island = new Island(this._themeConfig, this._messageCenter, _zr, {}, this);
  251. this.chart.island = this._island;
  252. var Toolbox = require('./component/toolbox');
  253. this._toolbox = new Toolbox(this._themeConfig, this._messageCenter, _zr, {}, this);
  254. this.component.toolbox = this._toolbox;
  255. var componentLibrary = require('./component');
  256. componentLibrary.define('title', require('./component/title'));
  257. componentLibrary.define('tooltip', require('./component/tooltip'));
  258. componentLibrary.define('legend', require('./component/legend'));
  259. if (_zr.getWidth() === 0 || _zr.getHeight() === 0) {
  260. console.error('Dom’s width & height should be ready before init.');
  261. }
  262. },
  263. __onevent: function (param) {
  264. param.__echartsId = param.__echartsId || this.id;
  265. var fromMyself = param.__echartsId === this.id;
  266. if (!this._curEventType) {
  267. this._curEventType = param.type;
  268. }
  269. switch (param.type) {
  270. case ecConfig.EVENT.LEGEND_SELECTED:
  271. this._onlegendSelected(param);
  272. break;
  273. case ecConfig.EVENT.DATA_ZOOM:
  274. if (!fromMyself) {
  275. var dz = this.component.dataZoom;
  276. if (dz) {
  277. dz.silence(true);
  278. dz.absoluteZoom(param.zoom);
  279. dz.silence(false);
  280. }
  281. }
  282. this._ondataZoom(param);
  283. break;
  284. case ecConfig.EVENT.DATA_RANGE:
  285. fromMyself && this._ondataRange(param);
  286. break;
  287. case ecConfig.EVENT.MAGIC_TYPE_CHANGED:
  288. if (!fromMyself) {
  289. var tb = this.component.toolbox;
  290. if (tb) {
  291. tb.silence(true);
  292. tb.setMagicType(param.magicType);
  293. tb.silence(false);
  294. }
  295. }
  296. this._onmagicTypeChanged(param);
  297. break;
  298. case ecConfig.EVENT.DATA_VIEW_CHANGED:
  299. fromMyself && this._ondataViewChanged(param);
  300. break;
  301. case ecConfig.EVENT.TOOLTIP_HOVER:
  302. fromMyself && this._tooltipHover(param);
  303. break;
  304. case ecConfig.EVENT.RESTORE:
  305. this._onrestore();
  306. break;
  307. case ecConfig.EVENT.REFRESH:
  308. fromMyself && this._onrefresh(param);
  309. break;
  310. case ecConfig.EVENT.TOOLTIP_IN_GRID:
  311. case ecConfig.EVENT.TOOLTIP_OUT_GRID:
  312. if (!fromMyself) {
  313. var grid = this.component.grid;
  314. if (grid) {
  315. this._zr.trigger('mousemove', {
  316. connectTrigger: true,
  317. zrenderX: grid.getX() + param.x * grid.getWidth(),
  318. zrenderY: grid.getY() + param.y * grid.getHeight()
  319. });
  320. }
  321. } else if (this._connected) {
  322. var grid = this.component.grid;
  323. if (grid) {
  324. param.x = (param.event.zrenderX - grid.getX()) / grid.getWidth();
  325. param.y = (param.event.zrenderY - grid.getY()) / grid.getHeight();
  326. }
  327. }
  328. break;
  329. }
  330. if (this._connected && fromMyself && this._curEventType === param.type) {
  331. for (var c in this._connected) {
  332. this._connected[c].connectedEventHandler(param);
  333. }
  334. this._curEventType = null;
  335. }
  336. if (!fromMyself || !this._connected && fromMyself) {
  337. this._curEventType = null;
  338. }
  339. },
  340. _onclick: function (param) {
  341. callChartListMethodReverse(this, 'onclick', param);
  342. if (param.target) {
  343. var ecData = this._eventPackage(param.target);
  344. if (ecData && ecData.seriesIndex != null) {
  345. this._messageCenter.dispatch(ecConfig.EVENT.CLICK, param.event, ecData, this);
  346. }
  347. }
  348. },
  349. _ondblclick: function (param) {
  350. callChartListMethodReverse(this, 'ondblclick', param);
  351. if (param.target) {
  352. var ecData = this._eventPackage(param.target);
  353. if (ecData && ecData.seriesIndex != null) {
  354. this._messageCenter.dispatch(ecConfig.EVENT.DBLCLICK, param.event, ecData, this);
  355. }
  356. }
  357. },
  358. _onmouseover: function (param) {
  359. if (param.target) {
  360. var ecData = this._eventPackage(param.target);
  361. if (ecData && ecData.seriesIndex != null) {
  362. this._messageCenter.dispatch(ecConfig.EVENT.HOVER, param.event, ecData, this);
  363. }
  364. }
  365. },
  366. _onmouseout: function (param) {
  367. if (param.target) {
  368. var ecData = this._eventPackage(param.target);
  369. if (ecData && ecData.seriesIndex != null) {
  370. this._messageCenter.dispatch(ecConfig.EVENT.MOUSEOUT, param.event, ecData, this);
  371. }
  372. }
  373. },
  374. _ondragstart: function (param) {
  375. this._status = {
  376. dragIn: false,
  377. dragOut: false,
  378. needRefresh: false
  379. };
  380. callChartListMethodReverse(this, 'ondragstart', param);
  381. },
  382. _ondragenter: function (param) {
  383. callChartListMethodReverse(this, 'ondragenter', param);
  384. },
  385. _ondragover: function (param) {
  386. callChartListMethodReverse(this, 'ondragover', param);
  387. },
  388. _ondragleave: function (param) {
  389. callChartListMethodReverse(this, 'ondragleave', param);
  390. },
  391. _ondrop: function (param) {
  392. callChartListMethodReverse(this, 'ondrop', param, this._status);
  393. this._island.ondrop(param, this._status);
  394. },
  395. _ondragend: function (param) {
  396. callChartListMethodReverse(this, 'ondragend', param, this._status);
  397. this._timeline && this._timeline.ondragend(param, this._status);
  398. this._island.ondragend(param, this._status);
  399. if (this._status.needRefresh) {
  400. this._syncBackupData(this._option);
  401. var messageCenter = this._messageCenter;
  402. messageCenter.dispatch(ecConfig.EVENT.DATA_CHANGED, param.event, this._eventPackage(param.target), this);
  403. messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  404. }
  405. },
  406. _onlegendSelected: function (param) {
  407. this._status.needRefresh = false;
  408. callChartListMethodReverse(this, 'onlegendSelected', param, this._status);
  409. if (this._status.needRefresh) {
  410. this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  411. }
  412. },
  413. _ondataZoom: function (param) {
  414. this._status.needRefresh = false;
  415. callChartListMethodReverse(this, 'ondataZoom', param, this._status);
  416. if (this._status.needRefresh) {
  417. this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  418. }
  419. },
  420. _ondataRange: function (param) {
  421. this._clearEffect();
  422. this._status.needRefresh = false;
  423. callChartListMethodReverse(this, 'ondataRange', param, this._status);
  424. if (this._status.needRefresh) {
  425. this._zr.refreshNextFrame();
  426. }
  427. },
  428. _onmagicTypeChanged: function () {
  429. this._clearEffect();
  430. this._render(this._toolbox.getMagicOption());
  431. },
  432. _ondataViewChanged: function (param) {
  433. this._syncBackupData(param.option);
  434. this._messageCenter.dispatch(ecConfig.EVENT.DATA_CHANGED, null, param, this);
  435. this._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this);
  436. },
  437. _tooltipHover: function (param) {
  438. var tipShape = [];
  439. callChartListMethodReverse(this, 'ontooltipHover', param, tipShape);
  440. },
  441. _onrestore: function () {
  442. this.restore();
  443. },
  444. _onrefresh: function (param) {
  445. this._refreshInside = true;
  446. this.refresh(param);
  447. this._refreshInside = false;
  448. },
  449. _syncBackupData: function (curOption) {
  450. this.component.dataZoom && this.component.dataZoom.syncBackupData(curOption);
  451. },
  452. _eventPackage: function (target) {
  453. if (target) {
  454. var ecData = require('./util/ecData');
  455. var seriesIndex = ecData.get(target, 'seriesIndex');
  456. var dataIndex = ecData.get(target, 'dataIndex');
  457. dataIndex = seriesIndex != -1 && this.component.dataZoom ? this.component.dataZoom.getRealDataIndex(seriesIndex, dataIndex) : dataIndex;
  458. return {
  459. seriesIndex: seriesIndex,
  460. seriesName: (ecData.get(target, 'series') || {}).name,
  461. dataIndex: dataIndex,
  462. data: ecData.get(target, 'data'),
  463. name: ecData.get(target, 'name'),
  464. value: ecData.get(target, 'value'),
  465. special: ecData.get(target, 'special')
  466. };
  467. }
  468. return;
  469. },
  470. _noDataCheck: function (magicOption) {
  471. var series = magicOption.series;
  472. for (var i = 0, l = series.length; i < l; i++) {
  473. if (series[i].type == ecConfig.CHART_TYPE_MAP || series[i].data && series[i].data.length > 0 || series[i].markPoint && series[i].markPoint.data && series[i].markPoint.data.length > 0 || series[i].markLine && series[i].markLine.data && series[i].markLine.data.length > 0 || series[i].nodes && series[i].nodes.length > 0 || series[i].links && series[i].links.length > 0 || series[i].matrix && series[i].matrix.length > 0 || series[i].eventList && series[i].eventList.length > 0) {
  474. return false;
  475. }
  476. }
  477. var loadOption = this._option && this._option.noDataLoadingOption || this._themeConfig.noDataLoadingOption || ecConfig.noDataLoadingOption || {
  478. text: this._option && this._option.noDataText || this._themeConfig.noDataText || ecConfig.noDataText,
  479. effect: this._option && this._option.noDataEffect || this._themeConfig.noDataEffect || ecConfig.noDataEffect
  480. };
  481. this.clear();
  482. this.showLoading(loadOption);
  483. return true;
  484. },
  485. _render: function (magicOption) {
  486. this._mergeGlobalConifg(magicOption);
  487. if (this._noDataCheck(magicOption)) {
  488. return;
  489. }
  490. var bgColor = magicOption.backgroundColor;
  491. if (bgColor) {
  492. if (!_canvasSupported && bgColor.indexOf('rgba') != -1) {
  493. var cList = bgColor.split(',');
  494. this.dom.style.filter = 'alpha(opacity=' + cList[3].substring(0, cList[3].lastIndexOf(')')) * 100 + ')';
  495. cList.length = 3;
  496. cList[0] = cList[0].replace('a', '');
  497. this.dom.style.backgroundColor = cList.join(',') + ')';
  498. } else {
  499. this.dom.style.backgroundColor = bgColor;
  500. }
  501. }
  502. this._zr.clearAnimation();
  503. this._chartList = [];
  504. var chartLibrary = require('./chart');
  505. var componentLibrary = require('./component');
  506. if (magicOption.xAxis || magicOption.yAxis) {
  507. magicOption.grid = magicOption.grid || {};
  508. magicOption.dataZoom = magicOption.dataZoom || {};
  509. }
  510. var componentList = [
  511. 'title',
  512. 'legend',
  513. 'tooltip',
  514. 'dataRange',
  515. 'roamController',
  516. 'grid',
  517. 'dataZoom',
  518. 'xAxis',
  519. 'yAxis',
  520. 'polar'
  521. ];
  522. var ComponentClass;
  523. var componentType;
  524. var component;
  525. for (var i = 0, l = componentList.length; i < l; i++) {
  526. componentType = componentList[i];
  527. component = this.component[componentType];
  528. if (magicOption[componentType]) {
  529. if (component) {
  530. component.refresh && component.refresh(magicOption);
  531. } else {
  532. ComponentClass = componentLibrary.get(/^[xy]Axis$/.test(componentType) ? 'axis' : componentType);
  533. component = new ComponentClass(this._themeConfig, this._messageCenter, this._zr, magicOption, this, componentType);
  534. this.component[componentType] = component;
  535. }
  536. this._chartList.push(component);
  537. } else if (component) {
  538. component.dispose();
  539. this.component[componentType] = null;
  540. delete this.component[componentType];
  541. }
  542. }
  543. var ChartClass;
  544. var chartType;
  545. var chart;
  546. var chartMap = {};
  547. for (var i = 0, l = magicOption.series.length; i < l; i++) {
  548. chartType = magicOption.series[i].type;
  549. if (!chartType) {
  550. console.error('series[' + i + '] chart type has not been defined.');
  551. continue;
  552. }
  553. if (!chartMap[chartType]) {
  554. chartMap[chartType] = true;
  555. ChartClass = chartLibrary.get(chartType);
  556. if (ChartClass) {
  557. if (this.chart[chartType]) {
  558. chart = this.chart[chartType];
  559. chart.refresh(magicOption);
  560. } else {
  561. chart = new ChartClass(this._themeConfig, this._messageCenter, this._zr, magicOption, this);
  562. }
  563. this._chartList.push(chart);
  564. this.chart[chartType] = chart;
  565. } else {
  566. console.error(chartType + ' has not been required.');
  567. }
  568. }
  569. }
  570. for (chartType in this.chart) {
  571. if (chartType != ecConfig.CHART_TYPE_ISLAND && !chartMap[chartType]) {
  572. this.chart[chartType].dispose();
  573. this.chart[chartType] = null;
  574. delete this.chart[chartType];
  575. }
  576. }
  577. this.component.grid && this.component.grid.refixAxisShape(this.component);
  578. this._island.refresh(magicOption);
  579. this._toolbox.refresh(magicOption);
  580. magicOption.animation && !magicOption.renderAsImage ? this._zr.refresh() : this._zr.render();
  581. var imgId = 'IMG' + this.id;
  582. var img = document.getElementById(imgId);
  583. if (magicOption.renderAsImage && _canvasSupported) {
  584. if (img) {
  585. img.src = this.getDataURL(magicOption.renderAsImage);
  586. } else {
  587. img = this.getImage(magicOption.renderAsImage);
  588. img.id = imgId;
  589. img.style.position = 'absolute';
  590. img.style.left = 0;
  591. img.style.top = 0;
  592. this.dom.firstChild.appendChild(img);
  593. }
  594. this.un();
  595. this._zr.un();
  596. this._disposeChartList();
  597. this._zr.clear();
  598. } else if (img) {
  599. img.parentNode.removeChild(img);
  600. }
  601. img = null;
  602. this._option = magicOption;
  603. },
  604. restore: function () {
  605. this._clearEffect();
  606. this._option = zrUtil.clone(this._optionRestore);
  607. this._disposeChartList();
  608. this._island.clear();
  609. this._toolbox.reset(this._option, true);
  610. this._render(this._option);
  611. },
  612. refresh: function (param) {
  613. this._clearEffect();
  614. param = param || {};
  615. var magicOption = param.option;
  616. if (!this._refreshInside && magicOption) {
  617. magicOption = this.getOption();
  618. zrUtil.merge(magicOption, param.option, true);
  619. zrUtil.merge(this._optionRestore, param.option, true);
  620. this._toolbox.reset(magicOption);
  621. }
  622. this._island.refresh(magicOption);
  623. this._toolbox.refresh(magicOption);
  624. this._zr.clearAnimation();
  625. for (var i = 0, l = this._chartList.length; i < l; i++) {
  626. this._chartList[i].refresh && this._chartList[i].refresh(magicOption);
  627. }
  628. this.component.grid && this.component.grid.refixAxisShape(this.component);
  629. this._zr.refresh();
  630. },
  631. _disposeChartList: function () {
  632. this._clearEffect();
  633. this._zr.clearAnimation();
  634. var len = this._chartList.length;
  635. while (len--) {
  636. var chart = this._chartList[len];
  637. if (chart) {
  638. var chartType = chart.type;
  639. this.chart[chartType] && delete this.chart[chartType];
  640. this.component[chartType] && delete this.component[chartType];
  641. chart.dispose && chart.dispose();
  642. }
  643. }
  644. this._chartList = [];
  645. },
  646. _mergeGlobalConifg: function (magicOption) {
  647. var mergeList = [
  648. 'backgroundColor',
  649. 'calculable',
  650. 'calculableColor',
  651. 'calculableHolderColor',
  652. 'nameConnector',
  653. 'valueConnector',
  654. 'animation',
  655. 'animationThreshold',
  656. 'animationDuration',
  657. 'animationDurationUpdate',
  658. 'animationEasing',
  659. 'addDataAnimation',
  660. 'symbolList',
  661. 'DRAG_ENABLE_TIME'
  662. ];
  663. var len = mergeList.length;
  664. while (len--) {
  665. var mergeItem = mergeList[len];
  666. if (magicOption[mergeItem] == null) {
  667. magicOption[mergeItem] = this._themeConfig[mergeItem] != null ? this._themeConfig[mergeItem] : ecConfig[mergeItem];
  668. }
  669. }
  670. var themeColor = magicOption.color;
  671. if (!(themeColor && themeColor.length)) {
  672. themeColor = this._themeConfig.color || ecConfig.color;
  673. }
  674. this._zr.getColor = function (idx) {
  675. var zrColor = require('zrender/tool/color');
  676. return zrColor.getColor(idx, themeColor);
  677. };
  678. if (!_canvasSupported) {
  679. magicOption.animation = false;
  680. magicOption.addDataAnimation = false;
  681. }
  682. },
  683. setOption: function (option, notMerge) {
  684. if (!option.timeline) {
  685. return this._setOption(option, notMerge);
  686. } else {
  687. return this._setTimelineOption(option);
  688. }
  689. },
  690. _setOption: function (option, notMerge, keepTimeLine) {
  691. if (!notMerge && this._option) {
  692. this._option = zrUtil.merge(this.getOption(), zrUtil.clone(option), true);
  693. } else {
  694. this._option = zrUtil.clone(option);
  695. !keepTimeLine && this._timeline && this._timeline.dispose();
  696. }
  697. this._optionRestore = zrUtil.clone(this._option);
  698. if (!this._option.series || this._option.series.length === 0) {
  699. this._zr.clear();
  700. return;
  701. }
  702. if (this.component.dataZoom && (this._option.dataZoom || this._option.toolbox && this._option.toolbox.feature && this._option.toolbox.feature.dataZoom && this._option.toolbox.feature.dataZoom.show)) {
  703. this.component.dataZoom.syncOption(this._option);
  704. }
  705. this._toolbox.reset(this._option);
  706. this._render(this._option);
  707. return this;
  708. },
  709. getOption: function () {
  710. var magicOption = zrUtil.clone(this._option);
  711. var self = this;
  712. function restoreOption(prop) {
  713. var restoreSource = self._optionRestore[prop];
  714. if (restoreSource) {
  715. if (restoreSource instanceof Array) {
  716. var len = restoreSource.length;
  717. while (len--) {
  718. magicOption[prop][len].data = zrUtil.clone(restoreSource[len].data);
  719. }
  720. } else {
  721. magicOption[prop].data = zrUtil.clone(restoreSource.data);
  722. }
  723. }
  724. }
  725. restoreOption('xAxis');
  726. restoreOption('yAxis');
  727. restoreOption('series');
  728. return magicOption;
  729. },
  730. setSeries: function (series, notMerge) {
  731. if (!notMerge) {
  732. this.setOption({ series: series });
  733. } else {
  734. this._option.series = series;
  735. this.setOption(this._option, notMerge);
  736. }
  737. return this;
  738. },
  739. getSeries: function () {
  740. return this.getOption().series;
  741. },
  742. _setTimelineOption: function (option) {
  743. this._timeline && this._timeline.dispose();
  744. var Timeline = require('./component/timeline');
  745. var timeline = new Timeline(this._themeConfig, this._messageCenter, this._zr, option, this);
  746. this._timeline = timeline;
  747. this.component.timeline = this._timeline;
  748. return this;
  749. },
  750. addData: function (seriesIdx, data, isHead, dataGrow, additionData) {
  751. var params = seriesIdx instanceof Array ? seriesIdx : [[
  752. seriesIdx,
  753. data,
  754. isHead,
  755. dataGrow,
  756. additionData
  757. ]];
  758. var magicOption = this.getOption();
  759. var optionRestore = this._optionRestore;
  760. var self = this;
  761. for (var i = 0, l = params.length; i < l; i++) {
  762. seriesIdx = params[i][0];
  763. data = params[i][1];
  764. isHead = params[i][2];
  765. dataGrow = params[i][3];
  766. additionData = params[i][4];
  767. var seriesItem = optionRestore.series[seriesIdx];
  768. var inMethod = isHead ? 'unshift' : 'push';
  769. var outMethod = isHead ? 'pop' : 'shift';
  770. if (seriesItem) {
  771. var seriesItemData = seriesItem.data;
  772. var mSeriesItemData = magicOption.series[seriesIdx].data;
  773. seriesItemData[inMethod](data);
  774. mSeriesItemData[inMethod](data);
  775. if (!dataGrow) {
  776. seriesItemData[outMethod]();
  777. data = mSeriesItemData[outMethod]();
  778. }
  779. if (additionData != null) {
  780. var legend;
  781. var legendData;
  782. if (seriesItem.type === ecConfig.CHART_TYPE_PIE && (legend = optionRestore.legend) && (legendData = legend.data)) {
  783. var mLegendData = magicOption.legend.data;
  784. legendData[inMethod](additionData);
  785. mLegendData[inMethod](additionData);
  786. if (!dataGrow) {
  787. var legendDataIdx = zrUtil.indexOf(legendData, data.name);
  788. legendDataIdx != -1 && legendData.splice(legendDataIdx, 1);
  789. legendDataIdx = zrUtil.indexOf(mLegendData, data.name);
  790. legendDataIdx != -1 && mLegendData.splice(legendDataIdx, 1);
  791. }
  792. } else if (optionRestore.xAxis != null && optionRestore.yAxis != null) {
  793. var axisData;
  794. var mAxisData;
  795. var axisIdx = seriesItem.xAxisIndex || 0;
  796. if (optionRestore.xAxis[axisIdx].type == null || optionRestore.xAxis[axisIdx].type === 'category') {
  797. axisData = optionRestore.xAxis[axisIdx].data;
  798. mAxisData = magicOption.xAxis[axisIdx].data;
  799. axisData[inMethod](additionData);
  800. mAxisData[inMethod](additionData);
  801. if (!dataGrow) {
  802. axisData[outMethod]();
  803. mAxisData[outMethod]();
  804. }
  805. }
  806. axisIdx = seriesItem.yAxisIndex || 0;
  807. if (optionRestore.yAxis[axisIdx].type === 'category') {
  808. axisData = optionRestore.yAxis[axisIdx].data;
  809. mAxisData = magicOption.yAxis[axisIdx].data;
  810. axisData[inMethod](additionData);
  811. mAxisData[inMethod](additionData);
  812. if (!dataGrow) {
  813. axisData[outMethod]();
  814. mAxisData[outMethod]();
  815. }
  816. }
  817. }
  818. }
  819. this._option.series[seriesIdx].data = magicOption.series[seriesIdx].data;
  820. }
  821. }
  822. this._zr.clearAnimation();
  823. var chartList = this._chartList;
  824. var chartAnimationCount = 0;
  825. var chartAnimationDone = function () {
  826. chartAnimationCount--;
  827. if (chartAnimationCount === 0) {
  828. animationDone();
  829. }
  830. };
  831. for (var i = 0, l = chartList.length; i < l; i++) {
  832. if (magicOption.addDataAnimation && chartList[i].addDataAnimation) {
  833. chartAnimationCount++;
  834. chartList[i].addDataAnimation(params, chartAnimationDone);
  835. }
  836. }
  837. this.component.dataZoom && this.component.dataZoom.syncOption(magicOption);
  838. this._option = magicOption;
  839. function animationDone() {
  840. if (!self._zr) {
  841. return;
  842. }
  843. self._zr.clearAnimation();
  844. for (var i = 0, l = chartList.length; i < l; i++) {
  845. chartList[i].motionlessOnce = magicOption.addDataAnimation && chartList[i].addDataAnimation;
  846. }
  847. self._messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, { option: magicOption }, self);
  848. }
  849. if (!magicOption.addDataAnimation) {
  850. setTimeout(animationDone, 0);
  851. }
  852. return this;
  853. },
  854. addMarkPoint: function (seriesIdx, markData) {
  855. return this._addMark(seriesIdx, markData, 'markPoint');
  856. },
  857. addMarkLine: function (seriesIdx, markData) {
  858. return this._addMark(seriesIdx, markData, 'markLine');
  859. },
  860. _addMark: function (seriesIdx, markData, markType) {
  861. var series = this._option.series;
  862. var seriesItem;
  863. if (series && (seriesItem = series[seriesIdx])) {
  864. var seriesR = this._optionRestore.series;
  865. var seriesRItem = seriesR[seriesIdx];
  866. var markOpt = seriesItem[markType];
  867. var markOptR = seriesRItem[markType];
  868. markOpt = seriesItem[markType] = markOpt || { data: [] };
  869. markOptR = seriesRItem[markType] = markOptR || { data: [] };
  870. for (var key in markData) {
  871. if (key === 'data') {
  872. markOpt.data = markOpt.data.concat(markData.data);
  873. markOptR.data = markOptR.data.concat(markData.data);
  874. } else if (typeof markData[key] != 'object' || markOpt[key] == null) {
  875. markOpt[key] = markOptR[key] = markData[key];
  876. } else {
  877. zrUtil.merge(markOpt[key], markData[key], true);
  878. zrUtil.merge(markOptR[key], markData[key], true);
  879. }
  880. }
  881. var chart = this.chart[seriesItem.type];
  882. chart && chart.addMark(seriesIdx, markData, markType);
  883. }
  884. return this;
  885. },
  886. delMarkPoint: function (seriesIdx, markName) {
  887. return this._delMark(seriesIdx, markName, 'markPoint');
  888. },
  889. delMarkLine: function (seriesIdx, markName) {
  890. return this._delMark(seriesIdx, markName, 'markLine');
  891. },
  892. _delMark: function (seriesIdx, markName, markType) {
  893. var series = this._option.series;
  894. var seriesItem;
  895. var mark;
  896. var dataArray;
  897. if (!(series && (seriesItem = series[seriesIdx]) && (mark = seriesItem[markType]) && (dataArray = mark.data))) {
  898. return this;
  899. }
  900. markName = markName.split(' > ');
  901. var targetIndex = -1;
  902. for (var i = 0, l = dataArray.length; i < l; i++) {
  903. var dataItem = dataArray[i];
  904. if (dataItem instanceof Array) {
  905. if (dataItem[0].name === markName[0] && dataItem[1].name === markName[1]) {
  906. targetIndex = i;
  907. break;
  908. }
  909. } else if (dataItem.name === markName[0]) {
  910. targetIndex = i;
  911. break;
  912. }
  913. }
  914. if (targetIndex > -1) {
  915. dataArray.splice(targetIndex, 1);
  916. this._optionRestore.series[seriesIdx][markType].data.splice(targetIndex, 1);
  917. var chart = this.chart[seriesItem.type];
  918. chart && chart.delMark(seriesIdx, markName.join(' > '), markType);
  919. }
  920. return this;
  921. },
  922. getDom: function () {
  923. return this.dom;
  924. },
  925. getZrender: function () {
  926. return this._zr;
  927. },
  928. getDataURL: function (imgType) {
  929. if (!_canvasSupported) {
  930. return '';
  931. }
  932. if (this._chartList.length === 0) {
  933. var imgId = 'IMG' + this.id;
  934. var img = document.getElementById(imgId);
  935. if (img) {
  936. return img.src;
  937. }
  938. }
  939. var tooltip = this.component.tooltip;
  940. tooltip && tooltip.hideTip();
  941. switch (imgType) {
  942. case 'jpeg':
  943. break;
  944. default:
  945. imgType = 'png';
  946. }
  947. var bgColor = this._option.backgroundColor;
  948. if (bgColor && bgColor.replace(' ', '') === 'rgba(0,0,0,0)') {
  949. bgColor = '#fff';
  950. }
  951. return this._zr.toDataURL('image/' + imgType, bgColor);
  952. },
  953. getImage: function (imgType) {
  954. var title = this._optionRestore.title;
  955. var imgDom = document.createElement('img');
  956. imgDom.src = this.getDataURL(imgType);
  957. imgDom.title = title && title.text || 'ECharts';
  958. return imgDom;
  959. },
  960. getConnectedDataURL: function (imgType) {
  961. if (!this.isConnected()) {
  962. return this.getDataURL(imgType);
  963. }
  964. var tempDom = this.dom;
  965. var imgList = {
  966. 'self': {
  967. img: this.getDataURL(imgType),
  968. left: tempDom.offsetLeft,
  969. top: tempDom.offsetTop,
  970. right: tempDom.offsetLeft + tempDom.offsetWidth,
  971. bottom: tempDom.offsetTop + tempDom.offsetHeight
  972. }
  973. };
  974. var minLeft = imgList.self.left;
  975. var minTop = imgList.self.top;
  976. var maxRight = imgList.self.right;
  977. var maxBottom = imgList.self.bottom;
  978. for (var c in this._connected) {
  979. tempDom = this._connected[c].getDom();
  980. imgList[c] = {
  981. img: this._connected[c].getDataURL(imgType),
  982. left: tempDom.offsetLeft,
  983. top: tempDom.offsetTop,
  984. right: tempDom.offsetLeft + tempDom.offsetWidth,
  985. bottom: tempDom.offsetTop + tempDom.offsetHeight
  986. };
  987. minLeft = Math.min(minLeft, imgList[c].left);
  988. minTop = Math.min(minTop, imgList[c].top);
  989. maxRight = Math.max(maxRight, imgList[c].right);
  990. maxBottom = Math.max(maxBottom, imgList[c].bottom);
  991. }
  992. var zrDom = document.createElement('div');
  993. zrDom.style.position = 'absolute';
  994. zrDom.style.left = '-4000px';
  995. zrDom.style.width = maxRight - minLeft + 'px';
  996. zrDom.style.height = maxBottom - minTop + 'px';
  997. document.body.appendChild(zrDom);
  998. var zrImg = require('zrender').init(zrDom);
  999. var ImageShape = require('zrender/shape/Image');
  1000. for (var c in imgList) {
  1001. zrImg.addShape(new ImageShape({
  1002. style: {
  1003. x: imgList[c].left - minLeft,
  1004. y: imgList[c].top - minTop,
  1005. image: imgList[c].img
  1006. }
  1007. }));
  1008. }
  1009. zrImg.render();
  1010. var bgColor = this._option.backgroundColor;
  1011. if (bgColor && bgColor.replace(/ /g, '') === 'rgba(0,0,0,0)') {
  1012. bgColor = '#fff';
  1013. }
  1014. var image = zrImg.toDataURL('image/png', bgColor);
  1015. setTimeout(function () {
  1016. zrImg.dispose();
  1017. zrDom.parentNode.removeChild(zrDom);
  1018. zrDom = null;
  1019. }, 100);
  1020. return image;
  1021. },
  1022. getConnectedImage: function (imgType) {
  1023. var title = this._optionRestore.title;
  1024. var imgDom = document.createElement('img');
  1025. imgDom.src = this.getConnectedDataURL(imgType);
  1026. imgDom.title = title && title.text || 'ECharts';
  1027. return imgDom;
  1028. },
  1029. on: function (eventName, eventListener) {
  1030. this._messageCenterOutSide.bind(eventName, eventListener, this);
  1031. return this;
  1032. },
  1033. un: function (eventName, eventListener) {
  1034. this._messageCenterOutSide.unbind(eventName, eventListener);
  1035. return this;
  1036. },
  1037. connect: function (connectTarget) {
  1038. if (!connectTarget) {
  1039. return this;
  1040. }
  1041. if (!this._connected) {
  1042. this._connected = {};
  1043. }
  1044. if (connectTarget instanceof Array) {
  1045. for (var i = 0, l = connectTarget.length; i < l; i++) {
  1046. this._connected[connectTarget[i].id] = connectTarget[i];
  1047. }
  1048. } else {
  1049. this._connected[connectTarget.id] = connectTarget;
  1050. }
  1051. return this;
  1052. },
  1053. disConnect: function (connectTarget) {
  1054. if (!connectTarget || !this._connected) {
  1055. return this;
  1056. }
  1057. if (connectTarget instanceof Array) {
  1058. for (var i = 0, l = connectTarget.length; i < l; i++) {
  1059. delete this._connected[connectTarget[i].id];
  1060. }
  1061. } else {
  1062. delete this._connected[connectTarget.id];
  1063. }
  1064. for (var k in this._connected) {
  1065. return k, this;
  1066. }
  1067. this._connected = false;
  1068. return this;
  1069. },
  1070. connectedEventHandler: function (param) {
  1071. if (param.__echartsId != this.id) {
  1072. this._onevent(param);
  1073. }
  1074. },
  1075. isConnected: function () {
  1076. return !!this._connected;
  1077. },
  1078. showLoading: function (loadingOption) {
  1079. var effectList = {
  1080. bar: require('zrender/loadingEffect/Bar'),
  1081. bubble: require('zrender/loadingEffect/Bubble'),
  1082. dynamicLine: require('zrender/loadingEffect/DynamicLine'),
  1083. ring: require('zrender/loadingEffect/Ring'),
  1084. spin: require('zrender/loadingEffect/Spin'),
  1085. whirling: require('zrender/loadingEffect/Whirling')
  1086. };
  1087. this._toolbox.hideDataView();
  1088. loadingOption = loadingOption || {};
  1089. var textStyle = loadingOption.textStyle || {};
  1090. loadingOption.textStyle = textStyle;
  1091. var finalTextStyle = zrUtil.merge(zrUtil.merge(zrUtil.clone(textStyle), this._themeConfig.textStyle), ecConfig.textStyle);
  1092. textStyle.textFont = finalTextStyle.fontStyle + ' ' + finalTextStyle.fontWeight + ' ' + finalTextStyle.fontSize + 'px ' + finalTextStyle.fontFamily;
  1093. textStyle.text = loadingOption.text || this._option && this._option.loadingText || this._themeConfig.loadingText || ecConfig.loadingText;
  1094. if (loadingOption.x != null) {
  1095. textStyle.x = loadingOption.x;
  1096. }
  1097. if (loadingOption.y != null) {
  1098. textStyle.y = loadingOption.y;
  1099. }
  1100. loadingOption.effectOption = loadingOption.effectOption || {};
  1101. loadingOption.effectOption.textStyle = textStyle;
  1102. var Effect = loadingOption.effect;
  1103. if (typeof Effect === 'string' || Effect == null) {
  1104. Effect = effectList[loadingOption.effect || this._option && this._option.loadingEffect || this._themeConfig.loadingEffect || ecConfig.loadingEffect] || effectList.spin;
  1105. }
  1106. this._zr.showLoading(new Effect(loadingOption.effectOption));
  1107. return this;
  1108. },
  1109. hideLoading: function () {
  1110. this._zr.hideLoading();
  1111. return this;
  1112. },
  1113. setTheme: function (theme) {
  1114. if (theme) {
  1115. if (typeof theme === 'string') {
  1116. switch (theme) {
  1117. case 'macarons':
  1118. theme = require('./theme/macarons');
  1119. break;
  1120. case 'infographic':
  1121. theme = require('./theme/infographic');
  1122. break;
  1123. default:
  1124. theme = {};
  1125. }
  1126. } else {
  1127. theme = theme || {};
  1128. }
  1129. this._themeConfig = theme;
  1130. }
  1131. if (!_canvasSupported) {
  1132. var textStyle = this._themeConfig.textStyle;
  1133. textStyle && textStyle.fontFamily && textStyle.fontFamily2 && (textStyle.fontFamily = textStyle.fontFamily2);
  1134. textStyle = ecConfig.textStyle;
  1135. textStyle.fontFamily = textStyle.fontFamily2;
  1136. }
  1137. this._timeline && this._timeline.setTheme(true);
  1138. this._optionRestore && this.restore();
  1139. },
  1140. resize: function () {
  1141. var self = this;
  1142. return function () {
  1143. self._clearEffect();
  1144. self._zr.resize();
  1145. if (self._option && self._option.renderAsImage && _canvasSupported) {
  1146. self._render(self._option);
  1147. return self;
  1148. }
  1149. self._zr.clearAnimation();
  1150. self._island.resize();
  1151. self._toolbox.resize();
  1152. self._timeline && self._timeline.resize();
  1153. for (var i = 0, l = self._chartList.length; i < l; i++) {
  1154. self._chartList[i].resize && self._chartList[i].resize();
  1155. }
  1156. self.component.grid && self.component.grid.refixAxisShape(self.component);
  1157. self._zr.refresh();
  1158. self._messageCenter.dispatch(ecConfig.EVENT.RESIZE, null, null, self);
  1159. return self;
  1160. };
  1161. },
  1162. _clearEffect: function () {
  1163. this._zr.modLayer(ecConfig.EFFECT_ZLEVEL, { motionBlur: false });
  1164. this._zr.painter.clearLayer(ecConfig.EFFECT_ZLEVEL);
  1165. },
  1166. clear: function () {
  1167. this._disposeChartList();
  1168. this._zr.clear();
  1169. this._option = {};
  1170. this._optionRestore = {};
  1171. this.dom.style.backgroundColor = null;
  1172. return this;
  1173. },
  1174. dispose: function () {
  1175. var key = this.dom.getAttribute(DOM_ATTRIBUTE_KEY);
  1176. key && delete _instances[key];
  1177. this._island.dispose();
  1178. this._toolbox.dispose();
  1179. this._timeline && this._timeline.dispose();
  1180. this._messageCenter.unbind();
  1181. this.clear();
  1182. this._zr.dispose();
  1183. this._zr = null;
  1184. }
  1185. };
  1186. return self;
  1187. });define('echarts/config', [], function () {
  1188. var config = {
  1189. CHART_TYPE_LINE: 'line',
  1190. CHART_TYPE_BAR: 'bar',
  1191. CHART_TYPE_SCATTER: 'scatter',
  1192. CHART_TYPE_PIE: 'pie',
  1193. CHART_TYPE_RADAR: 'radar',
  1194. CHART_TYPE_VENN: 'venn',
  1195. CHART_TYPE_TREEMAP: 'treemap',
  1196. CHART_TYPE_TREE: 'tree',
  1197. CHART_TYPE_MAP: 'map',
  1198. CHART_TYPE_K: 'k',
  1199. CHART_TYPE_ISLAND: 'island',
  1200. CHART_TYPE_FORCE: 'force',
  1201. CHART_TYPE_CHORD: 'chord',
  1202. CHART_TYPE_GAUGE: 'gauge',
  1203. CHART_TYPE_FUNNEL: 'funnel',
  1204. CHART_TYPE_EVENTRIVER: 'eventRiver',
  1205. CHART_TYPE_WORDCLOUD: 'wordCloud',
  1206. CHART_TYPE_HEATMAP: 'heatmap',
  1207. COMPONENT_TYPE_TITLE: 'title',
  1208. COMPONENT_TYPE_LEGEND: 'legend',
  1209. COMPONENT_TYPE_DATARANGE: 'dataRange',
  1210. COMPONENT_TYPE_DATAVIEW: 'dataView',
  1211. COMPONENT_TYPE_DATAZOOM: 'dataZoom',
  1212. COMPONENT_TYPE_TOOLBOX: 'toolbox',
  1213. COMPONENT_TYPE_TOOLTIP: 'tooltip',
  1214. COMPONENT_TYPE_GRID: 'grid',
  1215. COMPONENT_TYPE_AXIS: 'axis',
  1216. COMPONENT_TYPE_POLAR: 'polar',
  1217. COMPONENT_TYPE_X_AXIS: 'xAxis',
  1218. COMPONENT_TYPE_Y_AXIS: 'yAxis',
  1219. COMPONENT_TYPE_AXIS_CATEGORY: 'categoryAxis',
  1220. COMPONENT_TYPE_AXIS_VALUE: 'valueAxis',
  1221. COMPONENT_TYPE_TIMELINE: 'timeline',
  1222. COMPONENT_TYPE_ROAMCONTROLLER: 'roamController',
  1223. backgroundColor: 'rgba(0,0,0,0)',
  1224. color: [
  1225. '#ff7f50',
  1226. '#87cefa',
  1227. '#da70d6',
  1228. '#32cd32',
  1229. '#6495ed',
  1230. '#ff69b4',
  1231. '#ba55d3',
  1232. '#cd5c5c',
  1233. '#ffa500',
  1234. '#40e0d0',
  1235. '#1e90ff',
  1236. '#ff6347',
  1237. '#7b68ee',
  1238. '#00fa9a',
  1239. '#ffd700',
  1240. '#6699FF',
  1241. '#ff6666',
  1242. '#3cb371',
  1243. '#b8860b',
  1244. '#30e0e0'
  1245. ],
  1246. markPoint: {
  1247. clickable: true,
  1248. symbol: 'pin',
  1249. symbolSize: 10,
  1250. large: false,
  1251. effect: {
  1252. show: false,
  1253. loop: true,
  1254. period: 15,
  1255. type: 'scale',
  1256. scaleSize: 2,
  1257. bounceDistance: 10
  1258. },
  1259. itemStyle: {
  1260. normal: {
  1261. borderWidth: 2,
  1262. label: {
  1263. show: true,
  1264. position: 'inside'
  1265. }
  1266. },
  1267. emphasis: { label: { show: true } }
  1268. }
  1269. },
  1270. markLine: {
  1271. clickable: true,
  1272. symbol: [
  1273. 'circle',
  1274. 'arrow'
  1275. ],
  1276. symbolSize: [
  1277. 2,
  1278. 4
  1279. ],
  1280. smoothness: 0.2,
  1281. precision: 2,
  1282. effect: {
  1283. show: false,
  1284. loop: true,
  1285. period: 15,
  1286. scaleSize: 2
  1287. },
  1288. bundling: {
  1289. enable: false,
  1290. maxTurningAngle: 45
  1291. },
  1292. itemStyle: {
  1293. normal: {
  1294. borderWidth: 1.5,
  1295. label: {
  1296. show: true,
  1297. position: 'end'
  1298. },
  1299. lineStyle: { type: 'dashed' }
  1300. },
  1301. emphasis: {
  1302. label: { show: false },
  1303. lineStyle: {}
  1304. }
  1305. }
  1306. },
  1307. textStyle: {
  1308. decoration: 'none',
  1309. fontFamily: 'Arial, Verdana, sans-serif',
  1310. fontFamily2: '微软雅黑',
  1311. fontSize: 12,
  1312. fontStyle: 'normal',
  1313. fontWeight: 'normal'
  1314. },
  1315. EVENT: {
  1316. REFRESH: 'refresh',
  1317. RESTORE: 'restore',
  1318. RESIZE: 'resize',
  1319. CLICK: 'click',
  1320. DBLCLICK: 'dblclick',
  1321. HOVER: 'hover',
  1322. MOUSEOUT: 'mouseout',
  1323. DATA_CHANGED: 'dataChanged',
  1324. DATA_ZOOM: 'dataZoom',
  1325. DATA_RANGE: 'dataRange',
  1326. DATA_RANGE_SELECTED: 'dataRangeSelected',
  1327. DATA_RANGE_HOVERLINK: 'dataRangeHoverLink',
  1328. LEGEND_SELECTED: 'legendSelected',
  1329. LEGEND_HOVERLINK: 'legendHoverLink',
  1330. MAP_SELECTED: 'mapSelected',
  1331. PIE_SELECTED: 'pieSelected',
  1332. MAGIC_TYPE_CHANGED: 'magicTypeChanged',
  1333. DATA_VIEW_CHANGED: 'dataViewChanged',
  1334. TIMELINE_CHANGED: 'timelineChanged',
  1335. MAP_ROAM: 'mapRoam',
  1336. FORCE_LAYOUT_END: 'forceLayoutEnd',
  1337. TOOLTIP_HOVER: 'tooltipHover',
  1338. TOOLTIP_IN_GRID: 'tooltipInGrid',
  1339. TOOLTIP_OUT_GRID: 'tooltipOutGrid',
  1340. ROAMCONTROLLER: 'roamController'
  1341. },
  1342. DRAG_ENABLE_TIME: 120,
  1343. EFFECT_ZLEVEL: 10,
  1344. effectBlendAlpha: 0.95,
  1345. symbolList: [
  1346. 'circle',
  1347. 'rectangle',
  1348. 'triangle',
  1349. 'diamond',
  1350. 'emptyCircle',
  1351. 'emptyRectangle',
  1352. 'emptyTriangle',
  1353. 'emptyDiamond'
  1354. ],
  1355. loadingEffect: 'spin',
  1356. loadingText: '数据读取中...',
  1357. noDataEffect: 'bubble',
  1358. noDataText: '暂无数据',
  1359. calculable: false,
  1360. calculableColor: 'rgba(255,165,0,0.6)',
  1361. calculableHolderColor: '#ccc',
  1362. nameConnector: ' & ',
  1363. valueConnector: ': ',
  1364. animation: true,
  1365. addDataAnimation: true,
  1366. animationThreshold: 2000,
  1367. animationDuration: 2000,
  1368. animationDurationUpdate: 500,
  1369. animationEasing: 'ExponentialOut'
  1370. };
  1371. return config;
  1372. });define('zrender/tool/util', [
  1373. 'require',
  1374. '../dep/excanvas'
  1375. ], function (require) {
  1376. var ArrayProto = Array.prototype;
  1377. var nativeForEach = ArrayProto.forEach;
  1378. var nativeMap = ArrayProto.map;
  1379. var nativeFilter = ArrayProto.filter;
  1380. var BUILTIN_OBJECT = {
  1381. '[object Function]': 1,
  1382. '[object RegExp]': 1,
  1383. '[object Date]': 1,
  1384. '[object Error]': 1,
  1385. '[object CanvasGradient]': 1
  1386. };
  1387. var objToString = Object.prototype.toString;
  1388. function isDom(obj) {
  1389. return obj && obj.nodeType === 1 && typeof obj.nodeName == 'string';
  1390. }
  1391. function clone(source) {
  1392. if (typeof source == 'object' && source !== null) {
  1393. var result = source;
  1394. if (source instanceof Array) {
  1395. result = [];
  1396. for (var i = 0, len = source.length; i < len; i++) {
  1397. result[i] = clone(source[i]);
  1398. }
  1399. } else if (!BUILTIN_OBJECT[objToString.call(source)] && !isDom(source)) {
  1400. result = {};
  1401. for (var key in source) {
  1402. if (source.hasOwnProperty(key)) {
  1403. result[key] = clone(source[key]);
  1404. }
  1405. }
  1406. }
  1407. return result;
  1408. }
  1409. return source;
  1410. }
  1411. function mergeItem(target, source, key, overwrite) {
  1412. if (source.hasOwnProperty(key)) {
  1413. var targetProp = target[key];
  1414. if (typeof targetProp == 'object' && !BUILTIN_OBJECT[objToString.call(targetProp)] && !isDom(targetProp)) {
  1415. merge(target[key], source[key], overwrite);
  1416. } else if (overwrite || !(key in target)) {
  1417. target[key] = source[key];
  1418. }
  1419. }
  1420. }
  1421. function merge(target, source, overwrite) {
  1422. for (var i in source) {
  1423. mergeItem(target, source, i, overwrite);
  1424. }
  1425. return target;
  1426. }
  1427. var _ctx;
  1428. function getContext() {
  1429. if (!_ctx) {
  1430. require('../dep/excanvas');
  1431. if (window['G_vmlCanvasManager']) {
  1432. var _div = document.createElement('div');
  1433. _div.style.position = 'absolute';
  1434. _div.style.top = '-1000px';
  1435. document.body.appendChild(_div);
  1436. _ctx = G_vmlCanvasManager.initElement(_div).getContext('2d');
  1437. } else {
  1438. _ctx = document.createElement('canvas').getContext('2d');
  1439. }
  1440. }
  1441. return _ctx;
  1442. }
  1443. function indexOf(array, value) {
  1444. if (array.indexOf) {
  1445. return array.indexOf(value);
  1446. }
  1447. for (var i = 0, len = array.length; i < len; i++) {
  1448. if (array[i] === value) {
  1449. return i;
  1450. }
  1451. }
  1452. return -1;
  1453. }
  1454. function inherits(clazz, baseClazz) {
  1455. var clazzPrototype = clazz.prototype;
  1456. function F() {
  1457. }
  1458. F.prototype = baseClazz.prototype;
  1459. clazz.prototype = new F();
  1460. for (var prop in clazzPrototype) {
  1461. clazz.prototype[prop] = clazzPrototype[prop];
  1462. }
  1463. clazz.constructor = clazz;
  1464. }
  1465. function each(obj, cb, context) {
  1466. if (!(obj && cb)) {
  1467. return;
  1468. }
  1469. if (obj.forEach && obj.forEach === nativeForEach) {
  1470. obj.forEach(cb, context);
  1471. } else if (obj.length === +obj.length) {
  1472. for (var i = 0, len = obj.length; i < len; i++) {
  1473. cb.call(context, obj[i], i, obj);
  1474. }
  1475. } else {
  1476. for (var key in obj) {
  1477. if (obj.hasOwnProperty(key)) {
  1478. cb.call(context, obj[key], key, obj);
  1479. }
  1480. }
  1481. }
  1482. }
  1483. function map(obj, cb, context) {
  1484. if (!(obj && cb)) {
  1485. return;
  1486. }
  1487. if (obj.map && obj.map === nativeMap) {
  1488. return obj.map(cb, context);
  1489. } else {
  1490. var result = [];
  1491. for (var i = 0, len = obj.length; i < len; i++) {
  1492. result.push(cb.call(context, obj[i], i, obj));
  1493. }
  1494. return result;
  1495. }
  1496. }
  1497. function filter(obj, cb, context) {
  1498. if (!(obj && cb)) {
  1499. return;
  1500. }
  1501. if (obj.filter && obj.filter === nativeFilter) {
  1502. return obj.filter(cb, context);
  1503. } else {
  1504. var result = [];
  1505. for (var i = 0, len = obj.length; i < len; i++) {
  1506. if (cb.call(context, obj[i], i, obj)) {
  1507. result.push(obj[i]);
  1508. }
  1509. }
  1510. return result;
  1511. }
  1512. }
  1513. function bind(func, context) {
  1514. return function () {
  1515. func.apply(context, arguments);
  1516. };
  1517. }
  1518. return {
  1519. inherits: inherits,
  1520. clone: clone,
  1521. merge: merge,
  1522. getContext: getContext,
  1523. indexOf: indexOf,
  1524. each: each,
  1525. map: map,
  1526. filter: filter,
  1527. bind: bind
  1528. };
  1529. });define('zrender/tool/event', [
  1530. 'require',
  1531. '../mixin/Eventful'
  1532. ], function (require) {
  1533. 'use strict';
  1534. var Eventful = require('../mixin/Eventful');
  1535. function getX(e) {
  1536. return typeof e.zrenderX != 'undefined' && e.zrenderX || typeof e.offsetX != 'undefined' && e.offsetX || typeof e.layerX != 'undefined' && e.layerX || typeof e.clientX != 'undefined' && e.clientX;
  1537. }
  1538. function getY(e) {
  1539. return typeof e.zrenderY != 'undefined' && e.zrenderY || typeof e.offsetY != 'undefined' && e.offsetY || typeof e.layerY != 'undefined' && e.layerY || typeof e.clientY != 'undefined' && e.clientY;
  1540. }
  1541. function getDelta(e) {
  1542. return typeof e.zrenderDelta != 'undefined' && e.zrenderDelta || typeof e.wheelDelta != 'undefined' && e.wheelDelta || typeof e.detail != 'undefined' && -e.detail;
  1543. }
  1544. var stop = typeof window.addEventListener === 'function' ? function (e) {
  1545. e.preventDefault();
  1546. e.stopPropagation();
  1547. e.cancelBubble = true;
  1548. } : function (e) {
  1549. e.returnValue = false;
  1550. e.cancelBubble = true;
  1551. };
  1552. return {
  1553. getX: getX,
  1554. getY: getY,
  1555. getDelta: getDelta,
  1556. stop: stop,
  1557. Dispatcher: Eventful
  1558. };
  1559. });define('zrender/tool/env', [], function () {
  1560. function detect(ua) {
  1561. var os = this.os = {};
  1562. var browser = this.browser = {};
  1563. var webkit = ua.match(/Web[kK]it[\/]{0,1}([\d.]+)/);
  1564. var android = ua.match(/(Android);?[\s\/]+([\d.]+)?/);
  1565. var ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
  1566. var ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
  1567. var iphone = !ipad && ua.match(/(iPhone\sOS)\s([\d_]+)/);
  1568. var webos = ua.match(/(webOS|hpwOS)[\s\/]([\d.]+)/);
  1569. var touchpad = webos && ua.match(/TouchPad/);
  1570. var kindle = ua.match(/Kindle\/([\d.]+)/);
  1571. var silk = ua.match(/Silk\/([\d._]+)/);
  1572. var blackberry = ua.match(/(BlackBerry).*Version\/([\d.]+)/);
  1573. var bb10 = ua.match(/(BB10).*Version\/([\d.]+)/);
  1574. var rimtabletos = ua.match(/(RIM\sTablet\sOS)\s([\d.]+)/);
  1575. var playbook = ua.match(/PlayBook/);
  1576. var chrome = ua.match(/Chrome\/([\d.]+)/) || ua.match(/CriOS\/([\d.]+)/);
  1577. var firefox = ua.match(/Firefox\/([\d.]+)/);
  1578. var ie = ua.match(/MSIE ([\d.]+)/);
  1579. var safari = webkit && ua.match(/Mobile\//) && !chrome;
  1580. var webview = ua.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/) && !chrome;
  1581. var ie = ua.match(/MSIE\s([\d.]+)/);
  1582. if (browser.webkit = !!webkit)
  1583. browser.version = webkit[1];
  1584. if (android)
  1585. os.android = true, os.version = android[2];
  1586. if (iphone && !ipod)
  1587. os.ios = os.iphone = true, os.version = iphone[2].replace(/_/g, '.');
  1588. if (ipad)
  1589. os.ios = os.ipad = true, os.version = ipad[2].replace(/_/g, '.');
  1590. if (ipod)
  1591. os.ios = os.ipod = true, os.version = ipod[3] ? ipod[3].replace(/_/g, '.') : null;
  1592. if (webos)
  1593. os.webos = true, os.version = webos[2];
  1594. if (touchpad)
  1595. os.touchpad = true;
  1596. if (blackberry)
  1597. os.blackberry = true, os.version = blackberry[2];
  1598. if (bb10)
  1599. os.bb10 = true, os.version = bb10[2];
  1600. if (rimtabletos)
  1601. os.rimtabletos = true, os.version = rimtabletos[2];
  1602. if (playbook)
  1603. browser.playbook = true;
  1604. if (kindle)
  1605. os.kindle = true, os.version = kindle[1];
  1606. if (silk)
  1607. browser.silk = true, browser.version = silk[1];
  1608. if (!silk && os.android && ua.match(/Kindle Fire/))
  1609. browser.silk = true;
  1610. if (chrome)
  1611. browser.chrome = true, browser.version = chrome[1];
  1612. if (firefox)
  1613. browser.firefox = true, browser.version = firefox[1];
  1614. if (ie)
  1615. browser.ie = true, browser.version = ie[1];
  1616. if (safari && (ua.match(/Safari/) || !!os.ios))
  1617. browser.safari = true;
  1618. if (webview)
  1619. browser.webview = true;
  1620. if (ie)
  1621. browser.ie = true, browser.version = ie[1];
  1622. os.tablet = !!(ipad || playbook || android && !ua.match(/Mobile/) || firefox && ua.match(/Tablet/) || ie && !ua.match(/Phone/) && ua.match(/Touch/));
  1623. os.phone = !!(!os.tablet && !os.ipod && (android || iphone || webos || blackberry || bb10 || chrome && ua.match(/Android/) || chrome && ua.match(/CriOS\/([\d.]+)/) || firefox && ua.match(/Mobile/) || ie && ua.match(/Touch/)));
  1624. return {
  1625. browser: browser,
  1626. os: os,
  1627. canvasSupported: document.createElement('canvas').getContext ? true : false
  1628. };
  1629. }
  1630. return detect(navigator.userAgent);
  1631. });define('zrender', ['zrender/zrender'], function (main) {return main;});
  1632. define('zrender/zrender', [
  1633. 'require',
  1634. './dep/excanvas',
  1635. './tool/util',
  1636. './tool/log',
  1637. './tool/guid',
  1638. './Handler',
  1639. './Painter',
  1640. './Storage',
  1641. './animation/Animation',
  1642. './tool/env'
  1643. ], function (require) {
  1644. require('./dep/excanvas');
  1645. var util = require('./tool/util');
  1646. var log = require('./tool/log');
  1647. var guid = require('./tool/guid');
  1648. var Handler = require('./Handler');
  1649. var Painter = require('./Painter');
  1650. var Storage = require('./Storage');
  1651. var Animation = require('./animation/Animation');
  1652. var _instances = {};
  1653. var zrender = {};
  1654. zrender.version = '2.1.1';
  1655. zrender.init = function (dom) {
  1656. var zr = new ZRender(guid(), dom);
  1657. _instances[zr.id] = zr;
  1658. return zr;
  1659. };
  1660. zrender.dispose = function (zr) {
  1661. if (zr) {
  1662. zr.dispose();
  1663. } else {
  1664. for (var key in _instances) {
  1665. _instances[key].dispose();
  1666. }
  1667. _instances = {};
  1668. }
  1669. return zrender;
  1670. };
  1671. zrender.getInstance = function (id) {
  1672. return _instances[id];
  1673. };
  1674. zrender.delInstance = function (id) {
  1675. delete _instances[id];
  1676. return zrender;
  1677. };
  1678. function getFrameCallback(zrInstance) {
  1679. return function () {
  1680. if (zrInstance._needsRefreshNextFrame) {
  1681. zrInstance.refresh();
  1682. }
  1683. };
  1684. }
  1685. var ZRender = function (id, dom) {
  1686. this.id = id;
  1687. this.env = require('./tool/env');
  1688. this.storage = new Storage();
  1689. this.painter = new Painter(dom, this.storage);
  1690. this.handler = new Handler(dom, this.storage, this.painter);
  1691. this.animation = new Animation({ stage: { update: getFrameCallback(this) } });
  1692. this.animation.start();
  1693. var self = this;
  1694. this.painter.refreshNextFrame = function () {
  1695. self.refreshNextFrame();
  1696. };
  1697. this._needsRefreshNextFrame = false;
  1698. var self = this;
  1699. var storage = this.storage;
  1700. var oldDelFromMap = storage.delFromMap;
  1701. storage.delFromMap = function (elId) {
  1702. var el = storage.get(elId);
  1703. self.stopAnimation(el);
  1704. oldDelFromMap.call(storage, elId);
  1705. };
  1706. };
  1707. ZRender.prototype.getId = function () {
  1708. return this.id;
  1709. };
  1710. ZRender.prototype.addShape = function (shape) {
  1711. this.addElement(shape);
  1712. return this;
  1713. };
  1714. ZRender.prototype.addGroup = function (group) {
  1715. this.addElement(group);
  1716. return this;
  1717. };
  1718. ZRender.prototype.delShape = function (shapeId) {
  1719. this.delElement(shapeId);
  1720. return this;
  1721. };
  1722. ZRender.prototype.delGroup = function (groupId) {
  1723. this.delElement(groupId);
  1724. return this;
  1725. };
  1726. ZRender.prototype.modShape = function (shapeId, shape) {
  1727. this.modElement(shapeId, shape);
  1728. return this;
  1729. };
  1730. ZRender.prototype.modGroup = function (groupId, group) {
  1731. this.modElement(groupId, group);
  1732. return this;
  1733. };
  1734. ZRender.prototype.addElement = function (el) {
  1735. this.storage.addRoot(el);
  1736. this._needsRefreshNextFrame = true;
  1737. return this;
  1738. };
  1739. ZRender.prototype.delElement = function (el) {
  1740. this.storage.delRoot(el);
  1741. this._needsRefreshNextFrame = true;
  1742. return this;
  1743. };
  1744. ZRender.prototype.modElement = function (el, params) {
  1745. this.storage.mod(el, params);
  1746. this._needsRefreshNextFrame = true;
  1747. return this;
  1748. };
  1749. ZRender.prototype.modLayer = function (zLevel, config) {
  1750. this.painter.modLayer(zLevel, config);
  1751. this._needsRefreshNextFrame = true;
  1752. return this;
  1753. };
  1754. ZRender.prototype.addHoverShape = function (shape) {
  1755. this.storage.addHover(shape);
  1756. return this;
  1757. };
  1758. ZRender.prototype.render = function (callback) {
  1759. this.painter.render(callback);
  1760. this._needsRefreshNextFrame = false;
  1761. return this;
  1762. };
  1763. ZRender.prototype.refresh = function (callback) {
  1764. this.painter.refresh(callback);
  1765. this._needsRefreshNextFrame = false;
  1766. return this;
  1767. };
  1768. ZRender.prototype.refreshNextFrame = function () {
  1769. this._needsRefreshNextFrame = true;
  1770. return this;
  1771. };
  1772. ZRender.prototype.refreshHover = function (callback) {
  1773. this.painter.refreshHover(callback);
  1774. return this;
  1775. };
  1776. ZRender.prototype.refreshShapes = function (shapeList, callback) {
  1777. this.painter.refreshShapes(shapeList, callback);
  1778. return this;
  1779. };
  1780. ZRender.prototype.resize = function () {
  1781. this.painter.resize();
  1782. return this;
  1783. };
  1784. ZRender.prototype.animate = function (el, path, loop) {
  1785. var self = this;
  1786. if (typeof el === 'string') {
  1787. el = this.storage.get(el);
  1788. }
  1789. if (el) {
  1790. var target;
  1791. if (path) {
  1792. var pathSplitted = path.split('.');
  1793. var prop = el;
  1794. for (var i = 0, l = pathSplitted.length; i < l; i++) {
  1795. if (!prop) {
  1796. continue;
  1797. }
  1798. prop = prop[pathSplitted[i]];
  1799. }
  1800. if (prop) {
  1801. target = prop;
  1802. }
  1803. } else {
  1804. target = el;
  1805. }
  1806. if (!target) {
  1807. log('Property "' + path + '" is not existed in element ' + el.id);
  1808. return;
  1809. }
  1810. if (el.__animators == null) {
  1811. el.__animators = [];
  1812. }
  1813. var animators = el.__animators;
  1814. var animator = this.animation.animate(target, { loop: loop }).during(function () {
  1815. self.modShape(el);
  1816. }).done(function () {
  1817. var idx = util.indexOf(el.__animators, animator);
  1818. if (idx >= 0) {
  1819. animators.splice(idx, 1);
  1820. }
  1821. });
  1822. animators.push(animator);
  1823. return animator;
  1824. } else {
  1825. log('Element not existed');
  1826. }
  1827. };
  1828. ZRender.prototype.stopAnimation = function (el) {
  1829. if (el.__animators) {
  1830. var animators = el.__animators;
  1831. var len = animators.length;
  1832. for (var i = 0; i < len; i++) {
  1833. animators[i].stop();
  1834. }
  1835. animators.length = 0;
  1836. }
  1837. return this;
  1838. };
  1839. ZRender.prototype.clearAnimation = function () {
  1840. this.animation.clear();
  1841. return this;
  1842. };
  1843. ZRender.prototype.showLoading = function (loadingEffect) {
  1844. this.painter.showLoading(loadingEffect);
  1845. return this;
  1846. };
  1847. ZRender.prototype.hideLoading = function () {
  1848. this.painter.hideLoading();
  1849. return this;
  1850. };
  1851. ZRender.prototype.getWidth = function () {
  1852. return this.painter.getWidth();
  1853. };
  1854. ZRender.prototype.getHeight = function () {
  1855. return this.painter.getHeight();
  1856. };
  1857. ZRender.prototype.toDataURL = function (type, backgroundColor, args) {
  1858. return this.painter.toDataURL(type, backgroundColor, args);
  1859. };
  1860. ZRender.prototype.shapeToImage = function (e, width, height) {
  1861. var id = guid();
  1862. return this.painter.shapeToImage(id, e, width, height);
  1863. };
  1864. ZRender.prototype.on = function (eventName, eventHandler, context) {
  1865. this.handler.on(eventName, eventHandler, context);
  1866. return this;
  1867. };
  1868. ZRender.prototype.un = function (eventName, eventHandler) {
  1869. this.handler.un(eventName, eventHandler);
  1870. return this;
  1871. };
  1872. ZRender.prototype.trigger = function (eventName, event) {
  1873. this.handler.trigger(eventName, event);
  1874. return this;
  1875. };
  1876. ZRender.prototype.clear = function () {
  1877. this.storage.delRoot();
  1878. this.painter.clear();
  1879. return this;
  1880. };
  1881. ZRender.prototype.dispose = function () {
  1882. this.animation.stop();
  1883. this.clear();
  1884. this.storage.dispose();
  1885. this.painter.dispose();
  1886. this.handler.dispose();
  1887. this.animation = this.storage = this.painter = this.handler = null;
  1888. zrender.delInstance(this.id);
  1889. };
  1890. return zrender;
  1891. });define('zrender/config', [], function () {
  1892. var config = {
  1893. EVENT: {
  1894. RESIZE: 'resize',
  1895. CLICK: 'click',
  1896. DBLCLICK: 'dblclick',
  1897. MOUSEWHEEL: 'mousewheel',
  1898. MOUSEMOVE: 'mousemove',
  1899. MOUSEOVER: 'mouseover',
  1900. MOUSEOUT: 'mouseout',
  1901. MOUSEDOWN: 'mousedown',
  1902. MOUSEUP: 'mouseup',
  1903. GLOBALOUT: 'globalout',
  1904. DRAGSTART: 'dragstart',
  1905. DRAGEND: 'dragend',
  1906. DRAGENTER: 'dragenter',
  1907. DRAGOVER: 'dragover',
  1908. DRAGLEAVE: 'dragleave',
  1909. DROP: 'drop',
  1910. touchClickDelay: 300
  1911. },
  1912. elementClassName: 'zr-element',
  1913. catchBrushException: false,
  1914. debugMode: 0,
  1915. devicePixelRatio: Math.max(window.devicePixelRatio || 1, 1)
  1916. };
  1917. return config;
  1918. });define('echarts/chart/island', [
  1919. 'require',
  1920. './base',
  1921. 'zrender/shape/Circle',
  1922. '../config',
  1923. '../util/ecData',
  1924. 'zrender/tool/util',
  1925. 'zrender/tool/event',
  1926. 'zrender/tool/color',
  1927. '../util/accMath',
  1928. '../chart'
  1929. ], function (require) {
  1930. var ChartBase = require('./base');
  1931. var CircleShape = require('zrender/shape/Circle');
  1932. var ecConfig = require('../config');
  1933. ecConfig.island = {
  1934. zlevel: 0,
  1935. z: 5,
  1936. r: 15,
  1937. calculateStep: 0.1
  1938. };
  1939. var ecData = require('../util/ecData');
  1940. var zrUtil = require('zrender/tool/util');
  1941. var zrEvent = require('zrender/tool/event');
  1942. function Island(ecTheme, messageCenter, zr, option, myChart) {
  1943. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  1944. this._nameConnector;
  1945. this._valueConnector;
  1946. this._zrHeight = this.zr.getHeight();
  1947. this._zrWidth = this.zr.getWidth();
  1948. var self = this;
  1949. self.shapeHandler.onmousewheel = function (param) {
  1950. var shape = param.target;
  1951. var event = param.event;
  1952. var delta = zrEvent.getDelta(event);
  1953. delta = delta > 0 ? -1 : 1;
  1954. shape.style.r -= delta;
  1955. shape.style.r = shape.style.r < 5 ? 5 : shape.style.r;
  1956. var value = ecData.get(shape, 'value');
  1957. var dvalue = value * self.option.island.calculateStep;
  1958. value = dvalue > 1 ? Math.round(value - dvalue * delta) : +(value - dvalue * delta).toFixed(2);
  1959. var name = ecData.get(shape, 'name');
  1960. shape.style.text = name + ':' + value;
  1961. ecData.set(shape, 'value', value);
  1962. ecData.set(shape, 'name', name);
  1963. self.zr.modShape(shape.id);
  1964. self.zr.refreshNextFrame();
  1965. zrEvent.stop(event);
  1966. };
  1967. }
  1968. Island.prototype = {
  1969. type: ecConfig.CHART_TYPE_ISLAND,
  1970. _combine: function (tarShape, srcShape) {
  1971. var zrColor = require('zrender/tool/color');
  1972. var accMath = require('../util/accMath');
  1973. var value = accMath.accAdd(ecData.get(tarShape, 'value'), ecData.get(srcShape, 'value'));
  1974. var name = ecData.get(tarShape, 'name') + this._nameConnector + ecData.get(srcShape, 'name');
  1975. tarShape.style.text = name + this._valueConnector + value;
  1976. ecData.set(tarShape, 'value', value);
  1977. ecData.set(tarShape, 'name', name);
  1978. tarShape.style.r = this.option.island.r;
  1979. tarShape.style.color = zrColor.mix(tarShape.style.color, srcShape.style.color);
  1980. },
  1981. refresh: function (newOption) {
  1982. if (newOption) {
  1983. newOption.island = this.reformOption(newOption.island);
  1984. this.option = newOption;
  1985. this._nameConnector = this.option.nameConnector;
  1986. this._valueConnector = this.option.valueConnector;
  1987. }
  1988. },
  1989. getOption: function () {
  1990. return this.option;
  1991. },
  1992. resize: function () {
  1993. var newWidth = this.zr.getWidth();
  1994. var newHieght = this.zr.getHeight();
  1995. var xScale = newWidth / (this._zrWidth || newWidth);
  1996. var yScale = newHieght / (this._zrHeight || newHieght);
  1997. if (xScale === 1 && yScale === 1) {
  1998. return;
  1999. }
  2000. this._zrWidth = newWidth;
  2001. this._zrHeight = newHieght;
  2002. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  2003. this.zr.modShape(this.shapeList[i].id, {
  2004. style: {
  2005. x: Math.round(this.shapeList[i].style.x * xScale),
  2006. y: Math.round(this.shapeList[i].style.y * yScale)
  2007. }
  2008. });
  2009. }
  2010. },
  2011. add: function (shape) {
  2012. var name = ecData.get(shape, 'name');
  2013. var value = ecData.get(shape, 'value');
  2014. var seriesName = ecData.get(shape, 'series') != null ? ecData.get(shape, 'series').name : '';
  2015. var font = this.getFont(this.option.island.textStyle);
  2016. var islandOption = this.option.island;
  2017. var islandShape = {
  2018. zlevel: islandOption.zlevel,
  2019. z: islandOption.z,
  2020. style: {
  2021. x: shape.style.x,
  2022. y: shape.style.y,
  2023. r: this.option.island.r,
  2024. color: shape.style.color || shape.style.strokeColor,
  2025. text: name + this._valueConnector + value,
  2026. textFont: font
  2027. },
  2028. draggable: true,
  2029. hoverable: true,
  2030. onmousewheel: this.shapeHandler.onmousewheel,
  2031. _type: 'island'
  2032. };
  2033. if (islandShape.style.color === '#fff') {
  2034. islandShape.style.color = shape.style.strokeColor;
  2035. }
  2036. this.setCalculable(islandShape);
  2037. islandShape.dragEnableTime = 0;
  2038. ecData.pack(islandShape, { name: seriesName }, -1, value, -1, name);
  2039. islandShape = new CircleShape(islandShape);
  2040. this.shapeList.push(islandShape);
  2041. this.zr.addShape(islandShape);
  2042. },
  2043. del: function (shape) {
  2044. this.zr.delShape(shape.id);
  2045. var newShapeList = [];
  2046. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  2047. if (this.shapeList[i].id != shape.id) {
  2048. newShapeList.push(this.shapeList[i]);
  2049. }
  2050. }
  2051. this.shapeList = newShapeList;
  2052. },
  2053. ondrop: function (param, status) {
  2054. if (!this.isDrop || !param.target) {
  2055. return;
  2056. }
  2057. var target = param.target;
  2058. var dragged = param.dragged;
  2059. this._combine(target, dragged);
  2060. this.zr.modShape(target.id);
  2061. status.dragIn = true;
  2062. this.isDrop = false;
  2063. return;
  2064. },
  2065. ondragend: function (param, status) {
  2066. var target = param.target;
  2067. if (!this.isDragend) {
  2068. if (!status.dragIn) {
  2069. target.style.x = zrEvent.getX(param.event);
  2070. target.style.y = zrEvent.getY(param.event);
  2071. this.add(target);
  2072. status.needRefresh = true;
  2073. }
  2074. } else {
  2075. if (status.dragIn) {
  2076. this.del(target);
  2077. status.needRefresh = true;
  2078. }
  2079. }
  2080. this.isDragend = false;
  2081. return;
  2082. }
  2083. };
  2084. zrUtil.inherits(Island, ChartBase);
  2085. require('../chart').define('island', Island);
  2086. return Island;
  2087. });define('echarts/component/toolbox', [
  2088. 'require',
  2089. './base',
  2090. 'zrender/shape/Line',
  2091. 'zrender/shape/Image',
  2092. 'zrender/shape/Rectangle',
  2093. '../util/shape/Icon',
  2094. '../config',
  2095. 'zrender/tool/util',
  2096. 'zrender/config',
  2097. 'zrender/tool/event',
  2098. './dataView',
  2099. '../component'
  2100. ], function (require) {
  2101. var Base = require('./base');
  2102. var LineShape = require('zrender/shape/Line');
  2103. var ImageShape = require('zrender/shape/Image');
  2104. var RectangleShape = require('zrender/shape/Rectangle');
  2105. var IconShape = require('../util/shape/Icon');
  2106. var ecConfig = require('../config');
  2107. ecConfig.toolbox = {
  2108. zlevel: 0,
  2109. z: 6,
  2110. show: false,
  2111. orient: 'horizontal',
  2112. x: 'right',
  2113. y: 'top',
  2114. color: [
  2115. '#1e90ff',
  2116. '#22bb22',
  2117. '#4b0082',
  2118. '#d2691e'
  2119. ],
  2120. disableColor: '#ddd',
  2121. effectiveColor: 'red',
  2122. backgroundColor: 'rgba(0,0,0,0)',
  2123. borderColor: '#ccc',
  2124. borderWidth: 0,
  2125. padding: 5,
  2126. itemGap: 10,
  2127. itemSize: 16,
  2128. showTitle: true,
  2129. feature: {
  2130. mark: {
  2131. show: false,
  2132. title: {
  2133. mark: '辅助线开关',
  2134. markUndo: '删除辅助线',
  2135. markClear: '清空辅助线'
  2136. },
  2137. lineStyle: {
  2138. width: 1,
  2139. color: '#1e90ff',
  2140. type: 'dashed'
  2141. }
  2142. },
  2143. dataZoom: {
  2144. show: false,
  2145. title: {
  2146. dataZoom: '区域缩放',
  2147. dataZoomReset: '区域缩放后退'
  2148. }
  2149. },
  2150. dataView: {
  2151. show: false,
  2152. title: '数据视图',
  2153. readOnly: false,
  2154. lang: [
  2155. '数据视图',
  2156. '关闭',
  2157. '刷新'
  2158. ]
  2159. },
  2160. magicType: {
  2161. show: false,
  2162. title: {
  2163. line: '折线图切换',
  2164. bar: '柱形图切换',
  2165. stack: '堆积',
  2166. tiled: '平铺',
  2167. force: '力导向布局图切换',
  2168. chord: '和弦图切换',
  2169. pie: '饼图切换',
  2170. funnel: '漏斗图切换'
  2171. },
  2172. type: []
  2173. },
  2174. restore: {
  2175. show: false,
  2176. title: '还原'
  2177. },
  2178. saveAsImage: {
  2179. show: false,
  2180. title: '保存为图片',
  2181. type: 'png',
  2182. lang: ['点击保存']
  2183. }
  2184. }
  2185. };
  2186. var zrUtil = require('zrender/tool/util');
  2187. var zrConfig = require('zrender/config');
  2188. var zrEvent = require('zrender/tool/event');
  2189. var _MAGICTYPE_STACK = 'stack';
  2190. var _MAGICTYPE_TILED = 'tiled';
  2191. function Toolbox(ecTheme, messageCenter, zr, option, myChart) {
  2192. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  2193. this.dom = myChart.dom;
  2194. this._magicType = {};
  2195. this._magicMap = {};
  2196. this._isSilence = false;
  2197. this._iconList;
  2198. this._iconShapeMap = {};
  2199. this._featureTitle = {};
  2200. this._featureIcon = {};
  2201. this._featureColor = {};
  2202. this._featureOption = {};
  2203. this._enableColor = 'red';
  2204. this._disableColor = '#ccc';
  2205. this._markShapeList = [];
  2206. var self = this;
  2207. self._onMark = function (param) {
  2208. self.__onMark(param);
  2209. };
  2210. self._onMarkUndo = function (param) {
  2211. self.__onMarkUndo(param);
  2212. };
  2213. self._onMarkClear = function (param) {
  2214. self.__onMarkClear(param);
  2215. };
  2216. self._onDataZoom = function (param) {
  2217. self.__onDataZoom(param);
  2218. };
  2219. self._onDataZoomReset = function (param) {
  2220. self.__onDataZoomReset(param);
  2221. };
  2222. self._onDataView = function (param) {
  2223. self.__onDataView(param);
  2224. };
  2225. self._onRestore = function (param) {
  2226. self.__onRestore(param);
  2227. };
  2228. self._onSaveAsImage = function (param) {
  2229. self.__onSaveAsImage(param);
  2230. };
  2231. self._onMagicType = function (param) {
  2232. self.__onMagicType(param);
  2233. };
  2234. self._onCustomHandler = function (param) {
  2235. self.__onCustomHandler(param);
  2236. };
  2237. self._onmousemove = function (param) {
  2238. return self.__onmousemove(param);
  2239. };
  2240. self._onmousedown = function (param) {
  2241. return self.__onmousedown(param);
  2242. };
  2243. self._onmouseup = function (param) {
  2244. return self.__onmouseup(param);
  2245. };
  2246. self._onclick = function (param) {
  2247. return self.__onclick(param);
  2248. };
  2249. }
  2250. Toolbox.prototype = {
  2251. type: ecConfig.COMPONENT_TYPE_TOOLBOX,
  2252. _buildShape: function () {
  2253. this._iconList = [];
  2254. var toolboxOption = this.option.toolbox;
  2255. this._enableColor = toolboxOption.effectiveColor;
  2256. this._disableColor = toolboxOption.disableColor;
  2257. var feature = toolboxOption.feature;
  2258. var iconName = [];
  2259. for (var key in feature) {
  2260. if (feature[key].show) {
  2261. switch (key) {
  2262. case 'mark':
  2263. iconName.push({
  2264. key: key,
  2265. name: 'mark'
  2266. });
  2267. iconName.push({
  2268. key: key,
  2269. name: 'markUndo'
  2270. });
  2271. iconName.push({
  2272. key: key,
  2273. name: 'markClear'
  2274. });
  2275. break;
  2276. case 'magicType':
  2277. for (var i = 0, l = feature[key].type.length; i < l; i++) {
  2278. feature[key].title[feature[key].type[i] + 'Chart'] = feature[key].title[feature[key].type[i]];
  2279. if (feature[key].option) {
  2280. feature[key].option[feature[key].type[i] + 'Chart'] = feature[key].option[feature[key].type[i]];
  2281. }
  2282. iconName.push({
  2283. key: key,
  2284. name: feature[key].type[i] + 'Chart'
  2285. });
  2286. }
  2287. break;
  2288. case 'dataZoom':
  2289. iconName.push({
  2290. key: key,
  2291. name: 'dataZoom'
  2292. });
  2293. iconName.push({
  2294. key: key,
  2295. name: 'dataZoomReset'
  2296. });
  2297. break;
  2298. case 'saveAsImage':
  2299. if (this.canvasSupported) {
  2300. iconName.push({
  2301. key: key,
  2302. name: 'saveAsImage'
  2303. });
  2304. }
  2305. break;
  2306. default:
  2307. iconName.push({
  2308. key: key,
  2309. name: key
  2310. });
  2311. break;
  2312. }
  2313. }
  2314. }
  2315. if (iconName.length > 0) {
  2316. var name;
  2317. var key;
  2318. for (var i = 0, l = iconName.length; i < l; i++) {
  2319. name = iconName[i].name;
  2320. key = iconName[i].key;
  2321. this._iconList.push(name);
  2322. this._featureTitle[name] = feature[key].title[name] || feature[key].title;
  2323. if (feature[key].icon) {
  2324. this._featureIcon[name] = feature[key].icon[name] || feature[key].icon;
  2325. }
  2326. if (feature[key].color) {
  2327. this._featureColor[name] = feature[key].color[name] || feature[key].color;
  2328. }
  2329. if (feature[key].option) {
  2330. this._featureOption[name] = feature[key].option[name] || feature[key].option;
  2331. }
  2332. }
  2333. this._itemGroupLocation = this._getItemGroupLocation();
  2334. this._buildBackground();
  2335. this._buildItem();
  2336. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  2337. this.zr.addShape(this.shapeList[i]);
  2338. }
  2339. if (this._iconShapeMap['mark']) {
  2340. this._iconDisable(this._iconShapeMap['markUndo']);
  2341. this._iconDisable(this._iconShapeMap['markClear']);
  2342. }
  2343. if (this._iconShapeMap['dataZoomReset'] && this._zoomQueue.length === 0) {
  2344. this._iconDisable(this._iconShapeMap['dataZoomReset']);
  2345. }
  2346. }
  2347. },
  2348. _buildItem: function () {
  2349. var toolboxOption = this.option.toolbox;
  2350. var iconLength = this._iconList.length;
  2351. var lastX = this._itemGroupLocation.x;
  2352. var lastY = this._itemGroupLocation.y;
  2353. var itemSize = toolboxOption.itemSize;
  2354. var itemGap = toolboxOption.itemGap;
  2355. var itemShape;
  2356. var color = toolboxOption.color instanceof Array ? toolboxOption.color : [toolboxOption.color];
  2357. var textFont = this.getFont(toolboxOption.textStyle);
  2358. var textPosition;
  2359. var textAlign;
  2360. var textBaseline;
  2361. if (toolboxOption.orient === 'horizontal') {
  2362. textPosition = this._itemGroupLocation.y / this.zr.getHeight() < 0.5 ? 'bottom' : 'top';
  2363. textAlign = this._itemGroupLocation.x / this.zr.getWidth() < 0.5 ? 'left' : 'right';
  2364. textBaseline = this._itemGroupLocation.y / this.zr.getHeight() < 0.5 ? 'top' : 'bottom';
  2365. } else {
  2366. textPosition = this._itemGroupLocation.x / this.zr.getWidth() < 0.5 ? 'right' : 'left';
  2367. }
  2368. this._iconShapeMap = {};
  2369. var self = this;
  2370. for (var i = 0; i < iconLength; i++) {
  2371. itemShape = {
  2372. type: 'icon',
  2373. zlevel: this.getZlevelBase(),
  2374. z: this.getZBase(),
  2375. style: {
  2376. x: lastX,
  2377. y: lastY,
  2378. width: itemSize,
  2379. height: itemSize,
  2380. iconType: this._iconList[i],
  2381. lineWidth: 1,
  2382. strokeColor: this._featureColor[this._iconList[i]] || color[i % color.length],
  2383. brushType: 'stroke'
  2384. },
  2385. highlightStyle: {
  2386. lineWidth: 1,
  2387. text: toolboxOption.showTitle ? this._featureTitle[this._iconList[i]] : undefined,
  2388. textFont: textFont,
  2389. textPosition: textPosition,
  2390. strokeColor: this._featureColor[this._iconList[i]] || color[i % color.length]
  2391. },
  2392. hoverable: true,
  2393. clickable: true
  2394. };
  2395. if (this._featureIcon[this._iconList[i]]) {
  2396. itemShape.style.image = this._featureIcon[this._iconList[i]].replace(new RegExp('^image:\\/\\/'), '');
  2397. itemShape.style.opacity = 0.8;
  2398. itemShape.highlightStyle.opacity = 1;
  2399. itemShape.type = 'image';
  2400. }
  2401. if (toolboxOption.orient === 'horizontal') {
  2402. if (i === 0 && textAlign === 'left') {
  2403. itemShape.highlightStyle.textPosition = 'specific';
  2404. itemShape.highlightStyle.textAlign = textAlign;
  2405. itemShape.highlightStyle.textBaseline = textBaseline;
  2406. itemShape.highlightStyle.textX = lastX;
  2407. itemShape.highlightStyle.textY = textBaseline === 'top' ? lastY + itemSize + 10 : lastY - 10;
  2408. }
  2409. if (i === iconLength - 1 && textAlign === 'right') {
  2410. itemShape.highlightStyle.textPosition = 'specific';
  2411. itemShape.highlightStyle.textAlign = textAlign;
  2412. itemShape.highlightStyle.textBaseline = textBaseline;
  2413. itemShape.highlightStyle.textX = lastX + itemSize;
  2414. itemShape.highlightStyle.textY = textBaseline === 'top' ? lastY + itemSize + 10 : lastY - 10;
  2415. }
  2416. }
  2417. switch (this._iconList[i]) {
  2418. case 'mark':
  2419. itemShape.onclick = self._onMark;
  2420. break;
  2421. case 'markUndo':
  2422. itemShape.onclick = self._onMarkUndo;
  2423. break;
  2424. case 'markClear':
  2425. itemShape.onclick = self._onMarkClear;
  2426. break;
  2427. case 'dataZoom':
  2428. itemShape.onclick = self._onDataZoom;
  2429. break;
  2430. case 'dataZoomReset':
  2431. itemShape.onclick = self._onDataZoomReset;
  2432. break;
  2433. case 'dataView':
  2434. if (!this._dataView) {
  2435. var DataView = require('./dataView');
  2436. this._dataView = new DataView(this.ecTheme, this.messageCenter, this.zr, this.option, this.myChart);
  2437. }
  2438. itemShape.onclick = self._onDataView;
  2439. break;
  2440. case 'restore':
  2441. itemShape.onclick = self._onRestore;
  2442. break;
  2443. case 'saveAsImage':
  2444. itemShape.onclick = self._onSaveAsImage;
  2445. break;
  2446. default:
  2447. if (this._iconList[i].match('Chart')) {
  2448. itemShape._name = this._iconList[i].replace('Chart', '');
  2449. itemShape.onclick = self._onMagicType;
  2450. } else {
  2451. itemShape.onclick = self._onCustomHandler;
  2452. }
  2453. break;
  2454. }
  2455. if (itemShape.type === 'icon') {
  2456. itemShape = new IconShape(itemShape);
  2457. } else if (itemShape.type === 'image') {
  2458. itemShape = new ImageShape(itemShape);
  2459. }
  2460. this.shapeList.push(itemShape);
  2461. this._iconShapeMap[this._iconList[i]] = itemShape;
  2462. if (toolboxOption.orient === 'horizontal') {
  2463. lastX += itemSize + itemGap;
  2464. } else {
  2465. lastY += itemSize + itemGap;
  2466. }
  2467. }
  2468. },
  2469. _buildBackground: function () {
  2470. var toolboxOption = this.option.toolbox;
  2471. var padding = this.reformCssArray(this.option.toolbox.padding);
  2472. this.shapeList.push(new RectangleShape({
  2473. zlevel: this.getZlevelBase(),
  2474. z: this.getZBase(),
  2475. hoverable: false,
  2476. style: {
  2477. x: this._itemGroupLocation.x - padding[3],
  2478. y: this._itemGroupLocation.y - padding[0],
  2479. width: this._itemGroupLocation.width + padding[3] + padding[1],
  2480. height: this._itemGroupLocation.height + padding[0] + padding[2],
  2481. brushType: toolboxOption.borderWidth === 0 ? 'fill' : 'both',
  2482. color: toolboxOption.backgroundColor,
  2483. strokeColor: toolboxOption.borderColor,
  2484. lineWidth: toolboxOption.borderWidth
  2485. }
  2486. }));
  2487. },
  2488. _getItemGroupLocation: function () {
  2489. var toolboxOption = this.option.toolbox;
  2490. var padding = this.reformCssArray(this.option.toolbox.padding);
  2491. var iconLength = this._iconList.length;
  2492. var itemGap = toolboxOption.itemGap;
  2493. var itemSize = toolboxOption.itemSize;
  2494. var totalWidth = 0;
  2495. var totalHeight = 0;
  2496. if (toolboxOption.orient === 'horizontal') {
  2497. totalWidth = (itemSize + itemGap) * iconLength - itemGap;
  2498. totalHeight = itemSize;
  2499. } else {
  2500. totalHeight = (itemSize + itemGap) * iconLength - itemGap;
  2501. totalWidth = itemSize;
  2502. }
  2503. var x;
  2504. var zrWidth = this.zr.getWidth();
  2505. switch (toolboxOption.x) {
  2506. case 'center':
  2507. x = Math.floor((zrWidth - totalWidth) / 2);
  2508. break;
  2509. case 'left':
  2510. x = padding[3] + toolboxOption.borderWidth;
  2511. break;
  2512. case 'right':
  2513. x = zrWidth - totalWidth - padding[1] - toolboxOption.borderWidth;
  2514. break;
  2515. default:
  2516. x = toolboxOption.x - 0;
  2517. x = isNaN(x) ? 0 : x;
  2518. break;
  2519. }
  2520. var y;
  2521. var zrHeight = this.zr.getHeight();
  2522. switch (toolboxOption.y) {
  2523. case 'top':
  2524. y = padding[0] + toolboxOption.borderWidth;
  2525. break;
  2526. case 'bottom':
  2527. y = zrHeight - totalHeight - padding[2] - toolboxOption.borderWidth;
  2528. break;
  2529. case 'center':
  2530. y = Math.floor((zrHeight - totalHeight) / 2);
  2531. break;
  2532. default:
  2533. y = toolboxOption.y - 0;
  2534. y = isNaN(y) ? 0 : y;
  2535. break;
  2536. }
  2537. return {
  2538. x: x,
  2539. y: y,
  2540. width: totalWidth,
  2541. height: totalHeight
  2542. };
  2543. },
  2544. __onmousemove: function (param) {
  2545. if (this._marking) {
  2546. this._markShape.style.xEnd = zrEvent.getX(param.event);
  2547. this._markShape.style.yEnd = zrEvent.getY(param.event);
  2548. this.zr.addHoverShape(this._markShape);
  2549. }
  2550. if (this._zooming) {
  2551. this._zoomShape.style.width = zrEvent.getX(param.event) - this._zoomShape.style.x;
  2552. this._zoomShape.style.height = zrEvent.getY(param.event) - this._zoomShape.style.y;
  2553. this.zr.addHoverShape(this._zoomShape);
  2554. this.dom.style.cursor = 'crosshair';
  2555. zrEvent.stop(param.event);
  2556. }
  2557. if (this._zoomStart && (this.dom.style.cursor != 'pointer' && this.dom.style.cursor != 'move')) {
  2558. this.dom.style.cursor = 'crosshair';
  2559. }
  2560. },
  2561. __onmousedown: function (param) {
  2562. if (param.target) {
  2563. return;
  2564. }
  2565. this._zooming = true;
  2566. var x = zrEvent.getX(param.event);
  2567. var y = zrEvent.getY(param.event);
  2568. var zoomOption = this.option.dataZoom || {};
  2569. this._zoomShape = new RectangleShape({
  2570. zlevel: this.getZlevelBase(),
  2571. z: this.getZBase(),
  2572. style: {
  2573. x: x,
  2574. y: y,
  2575. width: 1,
  2576. height: 1,
  2577. brushType: 'both'
  2578. },
  2579. highlightStyle: {
  2580. lineWidth: 2,
  2581. color: zoomOption.fillerColor || ecConfig.dataZoom.fillerColor,
  2582. strokeColor: zoomOption.handleColor || ecConfig.dataZoom.handleColor,
  2583. brushType: 'both'
  2584. }
  2585. });
  2586. this.zr.addHoverShape(this._zoomShape);
  2587. return true;
  2588. },
  2589. __onmouseup: function () {
  2590. if (!this._zoomShape || Math.abs(this._zoomShape.style.width) < 10 || Math.abs(this._zoomShape.style.height) < 10) {
  2591. this._zooming = false;
  2592. return true;
  2593. }
  2594. if (this._zooming && this.component.dataZoom) {
  2595. this._zooming = false;
  2596. var zoom = this.component.dataZoom.rectZoom(this._zoomShape.style);
  2597. if (zoom) {
  2598. this._zoomQueue.push({
  2599. start: zoom.start,
  2600. end: zoom.end,
  2601. start2: zoom.start2,
  2602. end2: zoom.end2
  2603. });
  2604. this._iconEnable(this._iconShapeMap['dataZoomReset']);
  2605. this.zr.refreshNextFrame();
  2606. }
  2607. }
  2608. return true;
  2609. },
  2610. __onclick: function (param) {
  2611. if (param.target) {
  2612. return;
  2613. }
  2614. if (this._marking) {
  2615. this._marking = false;
  2616. this._markShapeList.push(this._markShape);
  2617. this._iconEnable(this._iconShapeMap['markUndo']);
  2618. this._iconEnable(this._iconShapeMap['markClear']);
  2619. this.zr.addShape(this._markShape);
  2620. this.zr.refreshNextFrame();
  2621. } else if (this._markStart) {
  2622. this._marking = true;
  2623. var x = zrEvent.getX(param.event);
  2624. var y = zrEvent.getY(param.event);
  2625. this._markShape = new LineShape({
  2626. zlevel: this.getZlevelBase(),
  2627. z: this.getZBase(),
  2628. style: {
  2629. xStart: x,
  2630. yStart: y,
  2631. xEnd: x,
  2632. yEnd: y,
  2633. lineWidth: this.query(this.option, 'toolbox.feature.mark.lineStyle.width'),
  2634. strokeColor: this.query(this.option, 'toolbox.feature.mark.lineStyle.color'),
  2635. lineType: this.query(this.option, 'toolbox.feature.mark.lineStyle.type')
  2636. }
  2637. });
  2638. this.zr.addHoverShape(this._markShape);
  2639. }
  2640. },
  2641. __onMark: function (param) {
  2642. var target = param.target;
  2643. if (this._marking || this._markStart) {
  2644. this._resetMark();
  2645. this.zr.refreshNextFrame();
  2646. } else {
  2647. this._resetZoom();
  2648. this.zr.modShape(target.id, { style: { strokeColor: this._enableColor } });
  2649. this.zr.refreshNextFrame();
  2650. this._markStart = true;
  2651. var self = this;
  2652. setTimeout(function () {
  2653. self.zr && self.zr.on(zrConfig.EVENT.CLICK, self._onclick) && self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  2654. }, 10);
  2655. }
  2656. return true;
  2657. },
  2658. __onMarkUndo: function () {
  2659. if (this._marking) {
  2660. this._marking = false;
  2661. } else {
  2662. var len = this._markShapeList.length;
  2663. if (len >= 1) {
  2664. var target = this._markShapeList[len - 1];
  2665. this.zr.delShape(target.id);
  2666. this.zr.refreshNextFrame();
  2667. this._markShapeList.pop();
  2668. if (len === 1) {
  2669. this._iconDisable(this._iconShapeMap['markUndo']);
  2670. this._iconDisable(this._iconShapeMap['markClear']);
  2671. }
  2672. }
  2673. }
  2674. return true;
  2675. },
  2676. __onMarkClear: function () {
  2677. if (this._marking) {
  2678. this._marking = false;
  2679. }
  2680. var len = this._markShapeList.length;
  2681. if (len > 0) {
  2682. while (len--) {
  2683. this.zr.delShape(this._markShapeList.pop().id);
  2684. }
  2685. this._iconDisable(this._iconShapeMap['markUndo']);
  2686. this._iconDisable(this._iconShapeMap['markClear']);
  2687. this.zr.refreshNextFrame();
  2688. }
  2689. return true;
  2690. },
  2691. __onDataZoom: function (param) {
  2692. var target = param.target;
  2693. if (this._zooming || this._zoomStart) {
  2694. this._resetZoom();
  2695. this.zr.refreshNextFrame();
  2696. this.dom.style.cursor = 'default';
  2697. } else {
  2698. this._resetMark();
  2699. this.zr.modShape(target.id, { style: { strokeColor: this._enableColor } });
  2700. this.zr.refreshNextFrame();
  2701. this._zoomStart = true;
  2702. var self = this;
  2703. setTimeout(function () {
  2704. self.zr && self.zr.on(zrConfig.EVENT.MOUSEDOWN, self._onmousedown) && self.zr.on(zrConfig.EVENT.MOUSEUP, self._onmouseup) && self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  2705. }, 10);
  2706. this.dom.style.cursor = 'crosshair';
  2707. }
  2708. return true;
  2709. },
  2710. __onDataZoomReset: function () {
  2711. if (this._zooming) {
  2712. this._zooming = false;
  2713. }
  2714. this._zoomQueue.pop();
  2715. if (this._zoomQueue.length > 0) {
  2716. this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length - 1]);
  2717. } else {
  2718. this.component.dataZoom.rectZoom();
  2719. this._iconDisable(this._iconShapeMap['dataZoomReset']);
  2720. this.zr.refreshNextFrame();
  2721. }
  2722. return true;
  2723. },
  2724. _resetMark: function () {
  2725. this._marking = false;
  2726. if (this._markStart) {
  2727. this._markStart = false;
  2728. if (this._iconShapeMap['mark']) {
  2729. this.zr.modShape(this._iconShapeMap['mark'].id, { style: { strokeColor: this._iconShapeMap['mark'].highlightStyle.strokeColor } });
  2730. }
  2731. this.zr.un(zrConfig.EVENT.CLICK, this._onclick);
  2732. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
  2733. }
  2734. },
  2735. _resetZoom: function () {
  2736. this._zooming = false;
  2737. if (this._zoomStart) {
  2738. this._zoomStart = false;
  2739. if (this._iconShapeMap['dataZoom']) {
  2740. this.zr.modShape(this._iconShapeMap['dataZoom'].id, { style: { strokeColor: this._iconShapeMap['dataZoom'].highlightStyle.strokeColor } });
  2741. }
  2742. this.zr.un(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
  2743. this.zr.un(zrConfig.EVENT.MOUSEUP, this._onmouseup);
  2744. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
  2745. }
  2746. },
  2747. _iconDisable: function (target) {
  2748. if (target.type != 'image') {
  2749. this.zr.modShape(target.id, {
  2750. hoverable: false,
  2751. clickable: false,
  2752. style: { strokeColor: this._disableColor }
  2753. });
  2754. } else {
  2755. this.zr.modShape(target.id, {
  2756. hoverable: false,
  2757. clickable: false,
  2758. style: { opacity: 0.3 }
  2759. });
  2760. }
  2761. },
  2762. _iconEnable: function (target) {
  2763. if (target.type != 'image') {
  2764. this.zr.modShape(target.id, {
  2765. hoverable: true,
  2766. clickable: true,
  2767. style: { strokeColor: target.highlightStyle.strokeColor }
  2768. });
  2769. } else {
  2770. this.zr.modShape(target.id, {
  2771. hoverable: true,
  2772. clickable: true,
  2773. style: { opacity: 0.8 }
  2774. });
  2775. }
  2776. },
  2777. __onDataView: function () {
  2778. this._dataView.show(this.option);
  2779. return true;
  2780. },
  2781. __onRestore: function () {
  2782. this._resetMark();
  2783. this._resetZoom();
  2784. this.messageCenter.dispatch(ecConfig.EVENT.RESTORE, null, null, this.myChart);
  2785. return true;
  2786. },
  2787. __onSaveAsImage: function () {
  2788. var saveOption = this.option.toolbox.feature.saveAsImage;
  2789. var imgType = saveOption.type || 'png';
  2790. if (imgType != 'png' && imgType != 'jpeg') {
  2791. imgType = 'png';
  2792. }
  2793. var image;
  2794. if (!this.myChart.isConnected()) {
  2795. image = this.zr.toDataURL('image/' + imgType, this.option.backgroundColor && this.option.backgroundColor.replace(' ', '') === 'rgba(0,0,0,0)' ? '#fff' : this.option.backgroundColor);
  2796. } else {
  2797. image = this.myChart.getConnectedDataURL(imgType);
  2798. }
  2799. var downloadDiv = document.createElement('div');
  2800. downloadDiv.id = '__echarts_download_wrap__';
  2801. downloadDiv.style.cssText = 'position:fixed;' + 'z-index:99999;' + 'display:block;' + 'top:0;left:0;' + 'background-color:rgba(33,33,33,0.5);' + 'text-align:center;' + 'width:100%;' + 'height:100%;' + 'line-height:' + document.documentElement.clientHeight + 'px;';
  2802. var downloadLink = document.createElement('a');
  2803. downloadLink.href = image;
  2804. downloadLink.setAttribute('download', (saveOption.name ? saveOption.name : this.option.title && (this.option.title.text || this.option.title.subtext) ? this.option.title.text || this.option.title.subtext : 'ECharts') + '.' + imgType);
  2805. downloadLink.innerHTML = '<img style="vertical-align:middle" src="' + image + '" title="' + (!!window.ActiveXObject || 'ActiveXObject' in window ? '右键->图片另存为' : saveOption.lang ? saveOption.lang[0] : '点击保存') + '"/>';
  2806. downloadDiv.appendChild(downloadLink);
  2807. document.body.appendChild(downloadDiv);
  2808. downloadLink = null;
  2809. downloadDiv = null;
  2810. setTimeout(function () {
  2811. var _d = document.getElementById('__echarts_download_wrap__');
  2812. if (_d) {
  2813. _d.onclick = function () {
  2814. var d = document.getElementById('__echarts_download_wrap__');
  2815. d.onclick = null;
  2816. d.innerHTML = '';
  2817. document.body.removeChild(d);
  2818. d = null;
  2819. };
  2820. _d = null;
  2821. }
  2822. }, 500);
  2823. return;
  2824. },
  2825. __onMagicType: function (param) {
  2826. this._resetMark();
  2827. var itemName = param.target._name;
  2828. if (!this._magicType[itemName]) {
  2829. this._magicType[itemName] = true;
  2830. if (itemName === ecConfig.CHART_TYPE_LINE) {
  2831. this._magicType[ecConfig.CHART_TYPE_BAR] = false;
  2832. } else if (itemName === ecConfig.CHART_TYPE_BAR) {
  2833. this._magicType[ecConfig.CHART_TYPE_LINE] = false;
  2834. }
  2835. if (itemName === ecConfig.CHART_TYPE_PIE) {
  2836. this._magicType[ecConfig.CHART_TYPE_FUNNEL] = false;
  2837. } else if (itemName === ecConfig.CHART_TYPE_FUNNEL) {
  2838. this._magicType[ecConfig.CHART_TYPE_PIE] = false;
  2839. }
  2840. if (itemName === ecConfig.CHART_TYPE_FORCE) {
  2841. this._magicType[ecConfig.CHART_TYPE_CHORD] = false;
  2842. } else if (itemName === ecConfig.CHART_TYPE_CHORD) {
  2843. this._magicType[ecConfig.CHART_TYPE_FORCE] = false;
  2844. }
  2845. if (itemName === _MAGICTYPE_STACK) {
  2846. this._magicType[_MAGICTYPE_TILED] = false;
  2847. } else if (itemName === _MAGICTYPE_TILED) {
  2848. this._magicType[_MAGICTYPE_STACK] = false;
  2849. }
  2850. this.messageCenter.dispatch(ecConfig.EVENT.MAGIC_TYPE_CHANGED, param.event, { magicType: this._magicType }, this.myChart);
  2851. }
  2852. return true;
  2853. },
  2854. setMagicType: function (magicType) {
  2855. this._resetMark();
  2856. this._magicType = magicType;
  2857. !this._isSilence && this.messageCenter.dispatch(ecConfig.EVENT.MAGIC_TYPE_CHANGED, null, { magicType: this._magicType }, this.myChart);
  2858. },
  2859. __onCustomHandler: function (param) {
  2860. var target = param.target.style.iconType;
  2861. var featureHandler = this.option.toolbox.feature[target].onclick;
  2862. if (typeof featureHandler === 'function') {
  2863. featureHandler.call(this, this.option);
  2864. }
  2865. },
  2866. reset: function (newOption, isRestore) {
  2867. isRestore && this.clear();
  2868. if (this.query(newOption, 'toolbox.show') && this.query(newOption, 'toolbox.feature.magicType.show')) {
  2869. var magicType = newOption.toolbox.feature.magicType.type;
  2870. var len = magicType.length;
  2871. this._magicMap = {};
  2872. while (len--) {
  2873. this._magicMap[magicType[len]] = true;
  2874. }
  2875. len = newOption.series.length;
  2876. var oriType;
  2877. var axis;
  2878. while (len--) {
  2879. oriType = newOption.series[len].type;
  2880. if (this._magicMap[oriType]) {
  2881. axis = newOption.xAxis instanceof Array ? newOption.xAxis[newOption.series[len].xAxisIndex || 0] : newOption.xAxis;
  2882. if (axis && (axis.type || 'category') === 'category') {
  2883. axis.__boundaryGap = axis.boundaryGap != null ? axis.boundaryGap : true;
  2884. }
  2885. axis = newOption.yAxis instanceof Array ? newOption.yAxis[newOption.series[len].yAxisIndex || 0] : newOption.yAxis;
  2886. if (axis && axis.type === 'category') {
  2887. axis.__boundaryGap = axis.boundaryGap != null ? axis.boundaryGap : true;
  2888. }
  2889. newOption.series[len].__type = oriType;
  2890. newOption.series[len].__itemStyle = zrUtil.clone(newOption.series[len].itemStyle || {});
  2891. }
  2892. if (this._magicMap[_MAGICTYPE_STACK] || this._magicMap[_MAGICTYPE_TILED]) {
  2893. newOption.series[len].__stack = newOption.series[len].stack;
  2894. }
  2895. }
  2896. }
  2897. this._magicType = isRestore ? {} : this._magicType || {};
  2898. for (var itemName in this._magicType) {
  2899. if (this._magicType[itemName]) {
  2900. this.option = newOption;
  2901. this.getMagicOption();
  2902. break;
  2903. }
  2904. }
  2905. var zoomOption = newOption.dataZoom;
  2906. if (zoomOption && zoomOption.show) {
  2907. var start = zoomOption.start != null && zoomOption.start >= 0 && zoomOption.start <= 100 ? zoomOption.start : 0;
  2908. var end = zoomOption.end != null && zoomOption.end >= 0 && zoomOption.end <= 100 ? zoomOption.end : 100;
  2909. if (start > end) {
  2910. start = start + end;
  2911. end = start - end;
  2912. start = start - end;
  2913. }
  2914. this._zoomQueue = [{
  2915. start: start,
  2916. end: end,
  2917. start2: 0,
  2918. end2: 100
  2919. }];
  2920. } else {
  2921. this._zoomQueue = [];
  2922. }
  2923. },
  2924. getMagicOption: function () {
  2925. var axis;
  2926. var chartType;
  2927. if (this._magicType[ecConfig.CHART_TYPE_LINE] || this._magicType[ecConfig.CHART_TYPE_BAR]) {
  2928. var boundaryGap = this._magicType[ecConfig.CHART_TYPE_LINE] ? false : true;
  2929. for (var i = 0, l = this.option.series.length; i < l; i++) {
  2930. chartType = this.option.series[i].type;
  2931. if (chartType == ecConfig.CHART_TYPE_LINE || chartType == ecConfig.CHART_TYPE_BAR) {
  2932. axis = this.option.xAxis instanceof Array ? this.option.xAxis[this.option.series[i].xAxisIndex || 0] : this.option.xAxis;
  2933. if (axis && (axis.type || 'category') === 'category') {
  2934. axis.boundaryGap = boundaryGap ? true : axis.__boundaryGap;
  2935. }
  2936. axis = this.option.yAxis instanceof Array ? this.option.yAxis[this.option.series[i].yAxisIndex || 0] : this.option.yAxis;
  2937. if (axis && axis.type === 'category') {
  2938. axis.boundaryGap = boundaryGap ? true : axis.__boundaryGap;
  2939. }
  2940. }
  2941. }
  2942. this._defaultMagic(ecConfig.CHART_TYPE_LINE, ecConfig.CHART_TYPE_BAR);
  2943. }
  2944. this._defaultMagic(ecConfig.CHART_TYPE_CHORD, ecConfig.CHART_TYPE_FORCE);
  2945. this._defaultMagic(ecConfig.CHART_TYPE_PIE, ecConfig.CHART_TYPE_FUNNEL);
  2946. if (this._magicType[_MAGICTYPE_STACK] || this._magicType[_MAGICTYPE_TILED]) {
  2947. for (var i = 0, l = this.option.series.length; i < l; i++) {
  2948. if (this._magicType[_MAGICTYPE_STACK]) {
  2949. this.option.series[i].stack = '_ECHARTS_STACK_KENER_2014_';
  2950. chartType = _MAGICTYPE_STACK;
  2951. } else if (this._magicType[_MAGICTYPE_TILED]) {
  2952. this.option.series[i].stack = null;
  2953. chartType = _MAGICTYPE_TILED;
  2954. }
  2955. if (this._featureOption[chartType + 'Chart']) {
  2956. zrUtil.merge(this.option.series[i], this._featureOption[chartType + 'Chart'] || {}, true);
  2957. }
  2958. }
  2959. }
  2960. return this.option;
  2961. },
  2962. _defaultMagic: function (cType1, cType2) {
  2963. if (this._magicType[cType1] || this._magicType[cType2]) {
  2964. for (var i = 0, l = this.option.series.length; i < l; i++) {
  2965. var chartType = this.option.series[i].type;
  2966. if (chartType == cType1 || chartType == cType2) {
  2967. this.option.series[i].type = this._magicType[cType1] ? cType1 : cType2;
  2968. this.option.series[i].itemStyle = zrUtil.clone(this.option.series[i].__itemStyle);
  2969. chartType = this.option.series[i].type;
  2970. if (this._featureOption[chartType + 'Chart']) {
  2971. zrUtil.merge(this.option.series[i], this._featureOption[chartType + 'Chart'] || {}, true);
  2972. }
  2973. }
  2974. }
  2975. }
  2976. },
  2977. silence: function (s) {
  2978. this._isSilence = s;
  2979. },
  2980. resize: function () {
  2981. this._resetMark();
  2982. this.clear();
  2983. if (this.option && this.option.toolbox && this.option.toolbox.show) {
  2984. this._buildShape();
  2985. }
  2986. if (this._dataView) {
  2987. this._dataView.resize();
  2988. }
  2989. },
  2990. hideDataView: function () {
  2991. if (this._dataView) {
  2992. this._dataView.hide();
  2993. }
  2994. },
  2995. clear: function (notMark) {
  2996. if (this.zr) {
  2997. this.zr.delShape(this.shapeList);
  2998. this.shapeList = [];
  2999. if (!notMark) {
  3000. this.zr.delShape(this._markShapeList);
  3001. this._markShapeList = [];
  3002. }
  3003. }
  3004. },
  3005. onbeforDispose: function () {
  3006. if (this._dataView) {
  3007. this._dataView.dispose();
  3008. this._dataView = null;
  3009. }
  3010. this._markShapeList = null;
  3011. },
  3012. refresh: function (newOption) {
  3013. if (newOption) {
  3014. this._resetMark();
  3015. this._resetZoom();
  3016. newOption.toolbox = this.reformOption(newOption.toolbox);
  3017. this.option = newOption;
  3018. this.clear(true);
  3019. if (newOption.toolbox.show) {
  3020. this._buildShape();
  3021. }
  3022. this.hideDataView();
  3023. }
  3024. }
  3025. };
  3026. zrUtil.inherits(Toolbox, Base);
  3027. require('../component').define('toolbox', Toolbox);
  3028. return Toolbox;
  3029. });define('echarts/component', [], function () {
  3030. var self = {};
  3031. var _componentLibrary = {};
  3032. self.define = function (name, clazz) {
  3033. _componentLibrary[name] = clazz;
  3034. return self;
  3035. };
  3036. self.get = function (name) {
  3037. return _componentLibrary[name];
  3038. };
  3039. return self;
  3040. });define('echarts/component/title', [
  3041. 'require',
  3042. './base',
  3043. 'zrender/shape/Text',
  3044. 'zrender/shape/Rectangle',
  3045. '../config',
  3046. 'zrender/tool/util',
  3047. 'zrender/tool/area',
  3048. 'zrender/tool/color',
  3049. '../component'
  3050. ], function (require) {
  3051. var Base = require('./base');
  3052. var TextShape = require('zrender/shape/Text');
  3053. var RectangleShape = require('zrender/shape/Rectangle');
  3054. var ecConfig = require('../config');
  3055. ecConfig.title = {
  3056. zlevel: 0,
  3057. z: 6,
  3058. show: true,
  3059. text: '',
  3060. subtext: '',
  3061. x: 'left',
  3062. y: 'top',
  3063. backgroundColor: 'rgba(0,0,0,0)',
  3064. borderColor: '#ccc',
  3065. borderWidth: 0,
  3066. padding: 5,
  3067. itemGap: 5,
  3068. textStyle: {
  3069. fontSize: 18,
  3070. fontWeight: 'bolder',
  3071. color: '#333'
  3072. },
  3073. subtextStyle: { color: '#aaa' }
  3074. };
  3075. var zrUtil = require('zrender/tool/util');
  3076. var zrArea = require('zrender/tool/area');
  3077. var zrColor = require('zrender/tool/color');
  3078. function Title(ecTheme, messageCenter, zr, option, myChart) {
  3079. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  3080. this.refresh(option);
  3081. }
  3082. Title.prototype = {
  3083. type: ecConfig.COMPONENT_TYPE_TITLE,
  3084. _buildShape: function () {
  3085. if (!this.titleOption.show) {
  3086. return;
  3087. }
  3088. this._itemGroupLocation = this._getItemGroupLocation();
  3089. this._buildBackground();
  3090. this._buildItem();
  3091. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  3092. this.zr.addShape(this.shapeList[i]);
  3093. }
  3094. },
  3095. _buildItem: function () {
  3096. var text = this.titleOption.text;
  3097. var link = this.titleOption.link;
  3098. var target = this.titleOption.target;
  3099. var subtext = this.titleOption.subtext;
  3100. var sublink = this.titleOption.sublink;
  3101. var subtarget = this.titleOption.subtarget;
  3102. var font = this.getFont(this.titleOption.textStyle);
  3103. var subfont = this.getFont(this.titleOption.subtextStyle);
  3104. var x = this._itemGroupLocation.x;
  3105. var y = this._itemGroupLocation.y;
  3106. var width = this._itemGroupLocation.width;
  3107. var height = this._itemGroupLocation.height;
  3108. var textShape = {
  3109. zlevel: this.getZlevelBase(),
  3110. z: this.getZBase(),
  3111. style: {
  3112. y: y,
  3113. color: this.titleOption.textStyle.color,
  3114. text: text,
  3115. textFont: font,
  3116. textBaseline: 'top'
  3117. },
  3118. highlightStyle: {
  3119. color: zrColor.lift(this.titleOption.textStyle.color, 1),
  3120. brushType: 'fill'
  3121. },
  3122. hoverable: false
  3123. };
  3124. if (link) {
  3125. textShape.hoverable = true;
  3126. textShape.clickable = true;
  3127. textShape.onclick = function () {
  3128. if (!target || target != 'self') {
  3129. window.open(link);
  3130. } else {
  3131. window.location = link;
  3132. }
  3133. };
  3134. }
  3135. var subtextShape = {
  3136. zlevel: this.getZlevelBase(),
  3137. z: this.getZBase(),
  3138. style: {
  3139. y: y + height,
  3140. color: this.titleOption.subtextStyle.color,
  3141. text: subtext,
  3142. textFont: subfont,
  3143. textBaseline: 'bottom'
  3144. },
  3145. highlightStyle: {
  3146. color: zrColor.lift(this.titleOption.subtextStyle.color, 1),
  3147. brushType: 'fill'
  3148. },
  3149. hoverable: false
  3150. };
  3151. if (sublink) {
  3152. subtextShape.hoverable = true;
  3153. subtextShape.clickable = true;
  3154. subtextShape.onclick = function () {
  3155. if (!subtarget || subtarget != 'self') {
  3156. window.open(sublink);
  3157. } else {
  3158. window.location = sublink;
  3159. }
  3160. };
  3161. }
  3162. switch (this.titleOption.x) {
  3163. case 'center':
  3164. textShape.style.x = subtextShape.style.x = x + width / 2;
  3165. textShape.style.textAlign = subtextShape.style.textAlign = 'center';
  3166. break;
  3167. case 'left':
  3168. textShape.style.x = subtextShape.style.x = x;
  3169. textShape.style.textAlign = subtextShape.style.textAlign = 'left';
  3170. break;
  3171. case 'right':
  3172. textShape.style.x = subtextShape.style.x = x + width;
  3173. textShape.style.textAlign = subtextShape.style.textAlign = 'right';
  3174. break;
  3175. default:
  3176. x = this.titleOption.x - 0;
  3177. x = isNaN(x) ? 0 : x;
  3178. textShape.style.x = subtextShape.style.x = x;
  3179. break;
  3180. }
  3181. if (this.titleOption.textAlign) {
  3182. textShape.style.textAlign = subtextShape.style.textAlign = this.titleOption.textAlign;
  3183. }
  3184. this.shapeList.push(new TextShape(textShape));
  3185. subtext !== '' && this.shapeList.push(new TextShape(subtextShape));
  3186. },
  3187. _buildBackground: function () {
  3188. var padding = this.reformCssArray(this.titleOption.padding);
  3189. this.shapeList.push(new RectangleShape({
  3190. zlevel: this.getZlevelBase(),
  3191. z: this.getZBase(),
  3192. hoverable: false,
  3193. style: {
  3194. x: this._itemGroupLocation.x - padding[3],
  3195. y: this._itemGroupLocation.y - padding[0],
  3196. width: this._itemGroupLocation.width + padding[3] + padding[1],
  3197. height: this._itemGroupLocation.height + padding[0] + padding[2],
  3198. brushType: this.titleOption.borderWidth === 0 ? 'fill' : 'both',
  3199. color: this.titleOption.backgroundColor,
  3200. strokeColor: this.titleOption.borderColor,
  3201. lineWidth: this.titleOption.borderWidth
  3202. }
  3203. }));
  3204. },
  3205. _getItemGroupLocation: function () {
  3206. var padding = this.reformCssArray(this.titleOption.padding);
  3207. var text = this.titleOption.text;
  3208. var subtext = this.titleOption.subtext;
  3209. var font = this.getFont(this.titleOption.textStyle);
  3210. var subfont = this.getFont(this.titleOption.subtextStyle);
  3211. var totalWidth = Math.max(zrArea.getTextWidth(text, font), zrArea.getTextWidth(subtext, subfont));
  3212. var totalHeight = zrArea.getTextHeight(text, font) + (subtext === '' ? 0 : this.titleOption.itemGap + zrArea.getTextHeight(subtext, subfont));
  3213. var x;
  3214. var zrWidth = this.zr.getWidth();
  3215. switch (this.titleOption.x) {
  3216. case 'center':
  3217. x = Math.floor((zrWidth - totalWidth) / 2);
  3218. break;
  3219. case 'left':
  3220. x = padding[3] + this.titleOption.borderWidth;
  3221. break;
  3222. case 'right':
  3223. x = zrWidth - totalWidth - padding[1] - this.titleOption.borderWidth;
  3224. break;
  3225. default:
  3226. x = this.titleOption.x - 0;
  3227. x = isNaN(x) ? 0 : x;
  3228. break;
  3229. }
  3230. var y;
  3231. var zrHeight = this.zr.getHeight();
  3232. switch (this.titleOption.y) {
  3233. case 'top':
  3234. y = padding[0] + this.titleOption.borderWidth;
  3235. break;
  3236. case 'bottom':
  3237. y = zrHeight - totalHeight - padding[2] - this.titleOption.borderWidth;
  3238. break;
  3239. case 'center':
  3240. y = Math.floor((zrHeight - totalHeight) / 2);
  3241. break;
  3242. default:
  3243. y = this.titleOption.y - 0;
  3244. y = isNaN(y) ? 0 : y;
  3245. break;
  3246. }
  3247. return {
  3248. x: x,
  3249. y: y,
  3250. width: totalWidth,
  3251. height: totalHeight
  3252. };
  3253. },
  3254. refresh: function (newOption) {
  3255. if (newOption) {
  3256. this.option = newOption;
  3257. this.option.title = this.reformOption(this.option.title);
  3258. this.titleOption = this.option.title;
  3259. this.titleOption.textStyle = this.getTextStyle(this.titleOption.textStyle);
  3260. this.titleOption.subtextStyle = this.getTextStyle(this.titleOption.subtextStyle);
  3261. }
  3262. this.clear();
  3263. this._buildShape();
  3264. }
  3265. };
  3266. zrUtil.inherits(Title, Base);
  3267. require('../component').define('title', Title);
  3268. return Title;
  3269. });define('echarts/component/tooltip', [
  3270. 'require',
  3271. './base',
  3272. '../util/shape/Cross',
  3273. 'zrender/shape/Line',
  3274. 'zrender/shape/Rectangle',
  3275. '../config',
  3276. '../util/ecData',
  3277. 'zrender/config',
  3278. 'zrender/tool/event',
  3279. 'zrender/tool/area',
  3280. 'zrender/tool/color',
  3281. 'zrender/tool/util',
  3282. 'zrender/shape/Base',
  3283. '../component'
  3284. ], function (require) {
  3285. var Base = require('./base');
  3286. var CrossShape = require('../util/shape/Cross');
  3287. var LineShape = require('zrender/shape/Line');
  3288. var RectangleShape = require('zrender/shape/Rectangle');
  3289. var rectangleInstance = new RectangleShape({});
  3290. var ecConfig = require('../config');
  3291. ecConfig.tooltip = {
  3292. zlevel: 1,
  3293. z: 8,
  3294. show: true,
  3295. showContent: true,
  3296. trigger: 'item',
  3297. islandFormatter: '{a} <br/>{b} : {c}',
  3298. showDelay: 20,
  3299. hideDelay: 100,
  3300. transitionDuration: 0.4,
  3301. enterable: false,
  3302. backgroundColor: 'rgba(0,0,0,0.7)',
  3303. borderColor: '#333',
  3304. borderRadius: 4,
  3305. borderWidth: 0,
  3306. padding: 5,
  3307. axisPointer: {
  3308. type: 'line',
  3309. lineStyle: {
  3310. color: '#48b',
  3311. width: 2,
  3312. type: 'solid'
  3313. },
  3314. crossStyle: {
  3315. color: '#1e90ff',
  3316. width: 1,
  3317. type: 'dashed'
  3318. },
  3319. shadowStyle: {
  3320. color: 'rgba(150,150,150,0.3)',
  3321. width: 'auto',
  3322. type: 'default'
  3323. }
  3324. },
  3325. textStyle: { color: '#fff' }
  3326. };
  3327. var ecData = require('../util/ecData');
  3328. var zrConfig = require('zrender/config');
  3329. var zrEvent = require('zrender/tool/event');
  3330. var zrArea = require('zrender/tool/area');
  3331. var zrColor = require('zrender/tool/color');
  3332. var zrUtil = require('zrender/tool/util');
  3333. var zrShapeBase = require('zrender/shape/Base');
  3334. function Tooltip(ecTheme, messageCenter, zr, option, myChart) {
  3335. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  3336. this.dom = myChart.dom;
  3337. var self = this;
  3338. self._onmousemove = function (param) {
  3339. return self.__onmousemove(param);
  3340. };
  3341. self._onglobalout = function (param) {
  3342. return self.__onglobalout(param);
  3343. };
  3344. this.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  3345. this.zr.on(zrConfig.EVENT.GLOBALOUT, self._onglobalout);
  3346. self._hide = function (param) {
  3347. return self.__hide(param);
  3348. };
  3349. self._tryShow = function (param) {
  3350. return self.__tryShow(param);
  3351. };
  3352. self._refixed = function (param) {
  3353. return self.__refixed(param);
  3354. };
  3355. self._setContent = function (ticket, res) {
  3356. return self.__setContent(ticket, res);
  3357. };
  3358. this._tDom = this._tDom || document.createElement('div');
  3359. this._tDom.onselectstart = function () {
  3360. return false;
  3361. };
  3362. this._tDom.onmouseover = function () {
  3363. self._mousein = true;
  3364. };
  3365. this._tDom.onmouseout = function () {
  3366. self._mousein = false;
  3367. };
  3368. this._tDom.className = 'echarts-tooltip';
  3369. this._tDom.style.position = 'absolute';
  3370. this.hasAppend = false;
  3371. this._axisLineShape && this.zr.delShape(this._axisLineShape.id);
  3372. this._axisLineShape = new LineShape({
  3373. zlevel: this.getZlevelBase(),
  3374. z: this.getZBase(),
  3375. invisible: true,
  3376. hoverable: false
  3377. });
  3378. this.shapeList.push(this._axisLineShape);
  3379. this.zr.addShape(this._axisLineShape);
  3380. this._axisShadowShape && this.zr.delShape(this._axisShadowShape.id);
  3381. this._axisShadowShape = new LineShape({
  3382. zlevel: this.getZlevelBase(),
  3383. z: 1,
  3384. invisible: true,
  3385. hoverable: false
  3386. });
  3387. this.shapeList.push(this._axisShadowShape);
  3388. this.zr.addShape(this._axisShadowShape);
  3389. this._axisCrossShape && this.zr.delShape(this._axisCrossShape.id);
  3390. this._axisCrossShape = new CrossShape({
  3391. zlevel: this.getZlevelBase(),
  3392. z: this.getZBase(),
  3393. invisible: true,
  3394. hoverable: false
  3395. });
  3396. this.shapeList.push(this._axisCrossShape);
  3397. this.zr.addShape(this._axisCrossShape);
  3398. this.showing = false;
  3399. this.refresh(option);
  3400. }
  3401. Tooltip.prototype = {
  3402. type: ecConfig.COMPONENT_TYPE_TOOLTIP,
  3403. _gCssText: 'position:absolute;display:block;border-style:solid;white-space:nowrap;',
  3404. _style: function (opt) {
  3405. if (!opt) {
  3406. return '';
  3407. }
  3408. var cssText = [];
  3409. if (opt.transitionDuration) {
  3410. var transitionText = 'left ' + opt.transitionDuration + 's,' + 'top ' + opt.transitionDuration + 's';
  3411. cssText.push('transition:' + transitionText);
  3412. cssText.push('-moz-transition:' + transitionText);
  3413. cssText.push('-webkit-transition:' + transitionText);
  3414. cssText.push('-o-transition:' + transitionText);
  3415. }
  3416. if (opt.backgroundColor) {
  3417. cssText.push('background-Color:' + zrColor.toHex(opt.backgroundColor));
  3418. cssText.push('filter:alpha(opacity=70)');
  3419. cssText.push('background-Color:' + opt.backgroundColor);
  3420. }
  3421. if (opt.borderWidth != null) {
  3422. cssText.push('border-width:' + opt.borderWidth + 'px');
  3423. }
  3424. if (opt.borderColor != null) {
  3425. cssText.push('border-color:' + opt.borderColor);
  3426. }
  3427. if (opt.borderRadius != null) {
  3428. cssText.push('border-radius:' + opt.borderRadius + 'px');
  3429. cssText.push('-moz-border-radius:' + opt.borderRadius + 'px');
  3430. cssText.push('-webkit-border-radius:' + opt.borderRadius + 'px');
  3431. cssText.push('-o-border-radius:' + opt.borderRadius + 'px');
  3432. }
  3433. var textStyle = opt.textStyle;
  3434. if (textStyle) {
  3435. textStyle.color && cssText.push('color:' + textStyle.color);
  3436. textStyle.decoration && cssText.push('text-decoration:' + textStyle.decoration);
  3437. textStyle.align && cssText.push('text-align:' + textStyle.align);
  3438. textStyle.fontFamily && cssText.push('font-family:' + textStyle.fontFamily);
  3439. textStyle.fontSize && cssText.push('font-size:' + textStyle.fontSize + 'px');
  3440. textStyle.fontSize && cssText.push('line-height:' + Math.round(textStyle.fontSize * 3 / 2) + 'px');
  3441. textStyle.fontStyle && cssText.push('font-style:' + textStyle.fontStyle);
  3442. textStyle.fontWeight && cssText.push('font-weight:' + textStyle.fontWeight);
  3443. }
  3444. var padding = opt.padding;
  3445. if (padding != null) {
  3446. padding = this.reformCssArray(padding);
  3447. cssText.push('padding:' + padding[0] + 'px ' + padding[1] + 'px ' + padding[2] + 'px ' + padding[3] + 'px');
  3448. }
  3449. cssText = cssText.join(';') + ';';
  3450. return cssText;
  3451. },
  3452. __hide: function () {
  3453. this._lastDataIndex = -1;
  3454. this._lastSeriesIndex = -1;
  3455. this._lastItemTriggerId = -1;
  3456. if (this._tDom) {
  3457. this._tDom.style.display = 'none';
  3458. }
  3459. var needRefresh = false;
  3460. if (!this._axisLineShape.invisible) {
  3461. this._axisLineShape.invisible = true;
  3462. this.zr.modShape(this._axisLineShape.id);
  3463. needRefresh = true;
  3464. }
  3465. if (!this._axisShadowShape.invisible) {
  3466. this._axisShadowShape.invisible = true;
  3467. this.zr.modShape(this._axisShadowShape.id);
  3468. needRefresh = true;
  3469. }
  3470. if (!this._axisCrossShape.invisible) {
  3471. this._axisCrossShape.invisible = true;
  3472. this.zr.modShape(this._axisCrossShape.id);
  3473. needRefresh = true;
  3474. }
  3475. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  3476. this.zr.delShape(this._lastTipShape.tipShape);
  3477. this._lastTipShape = false;
  3478. this.shapeList.length = 2;
  3479. }
  3480. needRefresh && this.zr.refreshNextFrame();
  3481. this.showing = false;
  3482. },
  3483. _show: function (position, x, y, specialCssText) {
  3484. var domHeight = this._tDom.offsetHeight;
  3485. var domWidth = this._tDom.offsetWidth;
  3486. if (position) {
  3487. if (typeof position === 'function') {
  3488. position = position([
  3489. x,
  3490. y
  3491. ]);
  3492. }
  3493. if (position instanceof Array) {
  3494. x = position[0];
  3495. y = position[1];
  3496. }
  3497. }
  3498. if (x + domWidth > this._zrWidth) {
  3499. x -= domWidth + 40;
  3500. }
  3501. if (y + domHeight > this._zrHeight) {
  3502. y -= domHeight - 20;
  3503. }
  3504. if (y < 20) {
  3505. y = 0;
  3506. }
  3507. this._tDom.style.cssText = this._gCssText + this._defaultCssText + (specialCssText ? specialCssText : '') + 'left:' + x + 'px;top:' + y + 'px;';
  3508. if (domHeight < 10 || domWidth < 10) {
  3509. setTimeout(this._refixed, 20);
  3510. }
  3511. this.showing = true;
  3512. },
  3513. __refixed: function () {
  3514. if (this._tDom) {
  3515. var cssText = '';
  3516. var domHeight = this._tDom.offsetHeight;
  3517. var domWidth = this._tDom.offsetWidth;
  3518. if (this._tDom.offsetLeft + domWidth > this._zrWidth) {
  3519. cssText += 'left:' + (this._zrWidth - domWidth - 20) + 'px;';
  3520. }
  3521. if (this._tDom.offsetTop + domHeight > this._zrHeight) {
  3522. cssText += 'top:' + (this._zrHeight - domHeight - 10) + 'px;';
  3523. }
  3524. if (cssText !== '') {
  3525. this._tDom.style.cssText += cssText;
  3526. }
  3527. }
  3528. },
  3529. __tryShow: function () {
  3530. var needShow;
  3531. var trigger;
  3532. if (!this._curTarget) {
  3533. this._findPolarTrigger() || this._findAxisTrigger();
  3534. } else {
  3535. if (this._curTarget._type === 'island' && this.option.tooltip.show) {
  3536. this._showItemTrigger();
  3537. return;
  3538. }
  3539. var serie = ecData.get(this._curTarget, 'series');
  3540. var data = ecData.get(this._curTarget, 'data');
  3541. needShow = this.deepQuery([
  3542. data,
  3543. serie,
  3544. this.option
  3545. ], 'tooltip.show');
  3546. if (serie == null || data == null || !needShow) {
  3547. clearTimeout(this._hidingTicket);
  3548. clearTimeout(this._showingTicket);
  3549. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  3550. } else {
  3551. trigger = this.deepQuery([
  3552. data,
  3553. serie,
  3554. this.option
  3555. ], 'tooltip.trigger');
  3556. trigger === 'axis' ? this._showAxisTrigger(serie.xAxisIndex, serie.yAxisIndex, ecData.get(this._curTarget, 'dataIndex')) : this._showItemTrigger();
  3557. }
  3558. }
  3559. },
  3560. _findAxisTrigger: function () {
  3561. if (!this.component.xAxis || !this.component.yAxis) {
  3562. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  3563. return;
  3564. }
  3565. var series = this.option.series;
  3566. var xAxisIndex;
  3567. var yAxisIndex;
  3568. for (var i = 0, l = series.length; i < l; i++) {
  3569. if (this.deepQuery([
  3570. series[i],
  3571. this.option
  3572. ], 'tooltip.trigger') === 'axis') {
  3573. xAxisIndex = series[i].xAxisIndex || 0;
  3574. yAxisIndex = series[i].yAxisIndex || 0;
  3575. if (this.component.xAxis.getAxis(xAxisIndex) && this.component.xAxis.getAxis(xAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  3576. this._showAxisTrigger(xAxisIndex, yAxisIndex, this._getNearestDataIndex('x', this.component.xAxis.getAxis(xAxisIndex)));
  3577. return;
  3578. } else if (this.component.yAxis.getAxis(yAxisIndex) && this.component.yAxis.getAxis(yAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  3579. this._showAxisTrigger(xAxisIndex, yAxisIndex, this._getNearestDataIndex('y', this.component.yAxis.getAxis(yAxisIndex)));
  3580. return;
  3581. } else {
  3582. this._showAxisTrigger(xAxisIndex, yAxisIndex, -1);
  3583. return;
  3584. }
  3585. }
  3586. }
  3587. if (this.option.tooltip.axisPointer.type === 'cross') {
  3588. this._showAxisTrigger(-1, -1, -1);
  3589. }
  3590. },
  3591. _findPolarTrigger: function () {
  3592. if (!this.component.polar) {
  3593. return false;
  3594. }
  3595. var x = zrEvent.getX(this._event);
  3596. var y = zrEvent.getY(this._event);
  3597. var polarIndex = this.component.polar.getNearestIndex([
  3598. x,
  3599. y
  3600. ]);
  3601. var valueIndex;
  3602. if (polarIndex) {
  3603. valueIndex = polarIndex.valueIndex;
  3604. polarIndex = polarIndex.polarIndex;
  3605. } else {
  3606. polarIndex = -1;
  3607. }
  3608. if (polarIndex != -1) {
  3609. return this._showPolarTrigger(polarIndex, valueIndex);
  3610. }
  3611. return false;
  3612. },
  3613. _getNearestDataIndex: function (direction, categoryAxis) {
  3614. var dataIndex = -1;
  3615. var x = zrEvent.getX(this._event);
  3616. var y = zrEvent.getY(this._event);
  3617. if (direction === 'x') {
  3618. var left;
  3619. var right;
  3620. var xEnd = this.component.grid.getXend();
  3621. var curCoord = categoryAxis.getCoordByIndex(dataIndex);
  3622. while (curCoord < xEnd) {
  3623. right = curCoord;
  3624. if (curCoord <= x) {
  3625. left = curCoord;
  3626. } else {
  3627. break;
  3628. }
  3629. curCoord = categoryAxis.getCoordByIndex(++dataIndex);
  3630. }
  3631. if (dataIndex <= 0) {
  3632. dataIndex = 0;
  3633. } else if (x - left <= right - x) {
  3634. dataIndex -= 1;
  3635. } else {
  3636. if (categoryAxis.getNameByIndex(dataIndex) == null) {
  3637. dataIndex -= 1;
  3638. }
  3639. }
  3640. return dataIndex;
  3641. } else {
  3642. var top;
  3643. var bottom;
  3644. var yStart = this.component.grid.getY();
  3645. var curCoord = categoryAxis.getCoordByIndex(dataIndex);
  3646. while (curCoord > yStart) {
  3647. top = curCoord;
  3648. if (curCoord >= y) {
  3649. bottom = curCoord;
  3650. } else {
  3651. break;
  3652. }
  3653. curCoord = categoryAxis.getCoordByIndex(++dataIndex);
  3654. }
  3655. if (dataIndex <= 0) {
  3656. dataIndex = 0;
  3657. } else if (y - top >= bottom - y) {
  3658. dataIndex -= 1;
  3659. } else {
  3660. if (categoryAxis.getNameByIndex(dataIndex) == null) {
  3661. dataIndex -= 1;
  3662. }
  3663. }
  3664. return dataIndex;
  3665. }
  3666. return -1;
  3667. },
  3668. _showAxisTrigger: function (xAxisIndex, yAxisIndex, dataIndex) {
  3669. !this._event.connectTrigger && this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_IN_GRID, this._event, null, this.myChart);
  3670. if (this.component.xAxis == null || this.component.yAxis == null || xAxisIndex == null || yAxisIndex == null) {
  3671. clearTimeout(this._hidingTicket);
  3672. clearTimeout(this._showingTicket);
  3673. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  3674. return;
  3675. }
  3676. var series = this.option.series;
  3677. var seriesArray = [];
  3678. var seriesIndex = [];
  3679. var categoryAxis;
  3680. var formatter;
  3681. var position;
  3682. var showContent;
  3683. var specialCssText = '';
  3684. if (this.option.tooltip.trigger === 'axis') {
  3685. if (!this.option.tooltip.show) {
  3686. return;
  3687. }
  3688. formatter = this.option.tooltip.formatter;
  3689. position = this.option.tooltip.position;
  3690. }
  3691. var axisLayout = xAxisIndex != -1 && this.component.xAxis.getAxis(xAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY ? 'xAxis' : yAxisIndex != -1 && this.component.yAxis.getAxis(yAxisIndex).type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY ? 'yAxis' : false;
  3692. var x;
  3693. var y;
  3694. if (axisLayout) {
  3695. var axisIndex = axisLayout == 'xAxis' ? xAxisIndex : yAxisIndex;
  3696. categoryAxis = this.component[axisLayout].getAxis(axisIndex);
  3697. for (var i = 0, l = series.length; i < l; i++) {
  3698. if (!this._isSelected(series[i].name)) {
  3699. continue;
  3700. }
  3701. if (series[i][axisLayout + 'Index'] === axisIndex && this.deepQuery([
  3702. series[i],
  3703. this.option
  3704. ], 'tooltip.trigger') === 'axis') {
  3705. showContent = this.query(series[i], 'tooltip.showContent') || showContent;
  3706. formatter = this.query(series[i], 'tooltip.formatter') || formatter;
  3707. position = this.query(series[i], 'tooltip.position') || position;
  3708. specialCssText += this._style(this.query(series[i], 'tooltip'));
  3709. if (series[i].stack != null && axisLayout == 'xAxis') {
  3710. seriesArray.unshift(series[i]);
  3711. seriesIndex.unshift(i);
  3712. } else {
  3713. seriesArray.push(series[i]);
  3714. seriesIndex.push(i);
  3715. }
  3716. }
  3717. }
  3718. this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_HOVER, this._event, {
  3719. seriesIndex: seriesIndex,
  3720. dataIndex: dataIndex
  3721. }, this.myChart);
  3722. var rect;
  3723. if (axisLayout == 'xAxis') {
  3724. x = this.subPixelOptimize(categoryAxis.getCoordByIndex(dataIndex), this._axisLineWidth);
  3725. y = zrEvent.getY(this._event);
  3726. rect = [
  3727. x,
  3728. this.component.grid.getY(),
  3729. x,
  3730. this.component.grid.getYend()
  3731. ];
  3732. } else {
  3733. x = zrEvent.getX(this._event);
  3734. y = this.subPixelOptimize(categoryAxis.getCoordByIndex(dataIndex), this._axisLineWidth);
  3735. rect = [
  3736. this.component.grid.getX(),
  3737. y,
  3738. this.component.grid.getXend(),
  3739. y
  3740. ];
  3741. }
  3742. this._styleAxisPointer(seriesArray, rect[0], rect[1], rect[2], rect[3], categoryAxis.getGap(), x, y);
  3743. } else {
  3744. x = zrEvent.getX(this._event);
  3745. y = zrEvent.getY(this._event);
  3746. this._styleAxisPointer(series, this.component.grid.getX(), y, this.component.grid.getXend(), y, 0, x, y);
  3747. if (dataIndex >= 0) {
  3748. this._showItemTrigger(true);
  3749. } else {
  3750. clearTimeout(this._hidingTicket);
  3751. clearTimeout(this._showingTicket);
  3752. this._tDom.style.display = 'none';
  3753. }
  3754. }
  3755. if (seriesArray.length > 0) {
  3756. this._lastItemTriggerId = -1;
  3757. if (this._lastDataIndex != dataIndex || this._lastSeriesIndex != seriesIndex[0]) {
  3758. this._lastDataIndex = dataIndex;
  3759. this._lastSeriesIndex = seriesIndex[0];
  3760. var data;
  3761. var value;
  3762. if (typeof formatter === 'function') {
  3763. var params = [];
  3764. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3765. data = seriesArray[i].data[dataIndex];
  3766. value = this.getDataFromOption(data, '-');
  3767. params.push({
  3768. seriesIndex: seriesIndex[i],
  3769. seriesName: seriesArray[i].name || '',
  3770. series: seriesArray[i],
  3771. dataIndex: dataIndex,
  3772. data: data,
  3773. name: categoryAxis.getNameByIndex(dataIndex),
  3774. value: value,
  3775. 0: seriesArray[i].name || '',
  3776. 1: categoryAxis.getNameByIndex(dataIndex),
  3777. 2: value,
  3778. 3: data
  3779. });
  3780. }
  3781. this._curTicket = 'axis:' + dataIndex;
  3782. this._tDom.innerHTML = formatter.call(this.myChart, params, this._curTicket, this._setContent);
  3783. } else if (typeof formatter === 'string') {
  3784. this._curTicket = NaN;
  3785. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
  3786. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3787. formatter = formatter.replace('{a' + i + '}', this._encodeHTML(seriesArray[i].name || ''));
  3788. formatter = formatter.replace('{b' + i + '}', this._encodeHTML(categoryAxis.getNameByIndex(dataIndex)));
  3789. data = seriesArray[i].data[dataIndex];
  3790. data = this.getDataFromOption(data, '-');
  3791. formatter = formatter.replace('{c' + i + '}', data instanceof Array ? data : this.numAddCommas(data));
  3792. }
  3793. this._tDom.innerHTML = formatter;
  3794. } else {
  3795. this._curTicket = NaN;
  3796. formatter = this._encodeHTML(categoryAxis.getNameByIndex(dataIndex));
  3797. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3798. formatter += '<br/>' + this._encodeHTML(seriesArray[i].name || '') + ' : ';
  3799. data = seriesArray[i].data[dataIndex];
  3800. data = this.getDataFromOption(data, '-');
  3801. formatter += data instanceof Array ? data : this.numAddCommas(data);
  3802. }
  3803. this._tDom.innerHTML = formatter;
  3804. }
  3805. }
  3806. if (showContent === false || !this.option.tooltip.showContent) {
  3807. return;
  3808. }
  3809. if (!this.hasAppend) {
  3810. this._tDom.style.left = this._zrWidth / 2 + 'px';
  3811. this._tDom.style.top = this._zrHeight / 2 + 'px';
  3812. this.dom.firstChild.appendChild(this._tDom);
  3813. this.hasAppend = true;
  3814. }
  3815. this._show(position, x + 10, y + 10, specialCssText);
  3816. }
  3817. },
  3818. _showPolarTrigger: function (polarIndex, dataIndex) {
  3819. if (this.component.polar == null || polarIndex == null || dataIndex == null || dataIndex < 0) {
  3820. return false;
  3821. }
  3822. var series = this.option.series;
  3823. var seriesArray = [];
  3824. var seriesIndex = [];
  3825. var formatter;
  3826. var position;
  3827. var showContent;
  3828. var specialCssText = '';
  3829. if (this.option.tooltip.trigger === 'axis') {
  3830. if (!this.option.tooltip.show) {
  3831. return false;
  3832. }
  3833. formatter = this.option.tooltip.formatter;
  3834. position = this.option.tooltip.position;
  3835. }
  3836. var indicatorName = this.option.polar[polarIndex].indicator[dataIndex].text;
  3837. for (var i = 0, l = series.length; i < l; i++) {
  3838. if (!this._isSelected(series[i].name)) {
  3839. continue;
  3840. }
  3841. if (series[i].polarIndex === polarIndex && this.deepQuery([
  3842. series[i],
  3843. this.option
  3844. ], 'tooltip.trigger') === 'axis') {
  3845. showContent = this.query(series[i], 'tooltip.showContent') || showContent;
  3846. formatter = this.query(series[i], 'tooltip.formatter') || formatter;
  3847. position = this.query(series[i], 'tooltip.position') || position;
  3848. specialCssText += this._style(this.query(series[i], 'tooltip'));
  3849. seriesArray.push(series[i]);
  3850. seriesIndex.push(i);
  3851. }
  3852. }
  3853. if (seriesArray.length > 0) {
  3854. var polarData;
  3855. var data;
  3856. var value;
  3857. var params = [];
  3858. for (var i = 0, l = seriesArray.length; i < l; i++) {
  3859. polarData = seriesArray[i].data;
  3860. for (var j = 0, k = polarData.length; j < k; j++) {
  3861. data = polarData[j];
  3862. if (!this._isSelected(data.name)) {
  3863. continue;
  3864. }
  3865. data = data != null ? data : {
  3866. name: '',
  3867. value: { dataIndex: '-' }
  3868. };
  3869. value = this.getDataFromOption(data.value[dataIndex]);
  3870. params.push({
  3871. seriesIndex: seriesIndex[i],
  3872. seriesName: seriesArray[i].name || '',
  3873. series: seriesArray[i],
  3874. dataIndex: dataIndex,
  3875. data: data,
  3876. name: data.name,
  3877. indicator: indicatorName,
  3878. value: value,
  3879. 0: seriesArray[i].name || '',
  3880. 1: data.name,
  3881. 2: value,
  3882. 3: indicatorName
  3883. });
  3884. }
  3885. }
  3886. if (params.length <= 0) {
  3887. return;
  3888. }
  3889. this._lastItemTriggerId = -1;
  3890. if (this._lastDataIndex != dataIndex || this._lastSeriesIndex != seriesIndex[0]) {
  3891. this._lastDataIndex = dataIndex;
  3892. this._lastSeriesIndex = seriesIndex[0];
  3893. if (typeof formatter === 'function') {
  3894. this._curTicket = 'axis:' + dataIndex;
  3895. this._tDom.innerHTML = formatter.call(this.myChart, params, this._curTicket, this._setContent);
  3896. } else if (typeof formatter === 'string') {
  3897. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}');
  3898. for (var i = 0, l = params.length; i < l; i++) {
  3899. formatter = formatter.replace('{a' + i + '}', this._encodeHTML(params[i].seriesName));
  3900. formatter = formatter.replace('{b' + i + '}', this._encodeHTML(params[i].name));
  3901. formatter = formatter.replace('{c' + i + '}', this.numAddCommas(params[i].value));
  3902. formatter = formatter.replace('{d' + i + '}', this._encodeHTML(params[i].indicator));
  3903. }
  3904. this._tDom.innerHTML = formatter;
  3905. } else {
  3906. formatter = this._encodeHTML(params[0].name) + '<br/>' + this._encodeHTML(params[0].indicator) + ' : ' + this.numAddCommas(params[0].value);
  3907. for (var i = 1, l = params.length; i < l; i++) {
  3908. formatter += '<br/>' + this._encodeHTML(params[i].name) + '<br/>';
  3909. formatter += this._encodeHTML(params[i].indicator) + ' : ' + this.numAddCommas(params[i].value);
  3910. }
  3911. this._tDom.innerHTML = formatter;
  3912. }
  3913. }
  3914. if (showContent === false || !this.option.tooltip.showContent) {
  3915. return;
  3916. }
  3917. if (!this.hasAppend) {
  3918. this._tDom.style.left = this._zrWidth / 2 + 'px';
  3919. this._tDom.style.top = this._zrHeight / 2 + 'px';
  3920. this.dom.firstChild.appendChild(this._tDom);
  3921. this.hasAppend = true;
  3922. }
  3923. this._show(position, zrEvent.getX(this._event), zrEvent.getY(this._event), specialCssText);
  3924. return true;
  3925. }
  3926. },
  3927. _showItemTrigger: function (axisTrigger) {
  3928. if (!this._curTarget) {
  3929. return;
  3930. }
  3931. var serie = ecData.get(this._curTarget, 'series');
  3932. var seriesIndex = ecData.get(this._curTarget, 'seriesIndex');
  3933. var data = ecData.get(this._curTarget, 'data');
  3934. var dataIndex = ecData.get(this._curTarget, 'dataIndex');
  3935. var name = ecData.get(this._curTarget, 'name');
  3936. var value = ecData.get(this._curTarget, 'value');
  3937. var special = ecData.get(this._curTarget, 'special');
  3938. var special2 = ecData.get(this._curTarget, 'special2');
  3939. var queryTarget = [
  3940. data,
  3941. serie,
  3942. this.option
  3943. ];
  3944. var formatter;
  3945. var position;
  3946. var showContent;
  3947. var specialCssText = '';
  3948. if (this._curTarget._type != 'island') {
  3949. var trigger = axisTrigger ? 'axis' : 'item';
  3950. if (this.option.tooltip.trigger === trigger) {
  3951. formatter = this.option.tooltip.formatter;
  3952. position = this.option.tooltip.position;
  3953. }
  3954. if (this.query(serie, 'tooltip.trigger') === trigger) {
  3955. showContent = this.query(serie, 'tooltip.showContent') || showContent;
  3956. formatter = this.query(serie, 'tooltip.formatter') || formatter;
  3957. position = this.query(serie, 'tooltip.position') || position;
  3958. specialCssText += this._style(this.query(serie, 'tooltip'));
  3959. }
  3960. showContent = this.query(data, 'tooltip.showContent') || showContent;
  3961. formatter = this.query(data, 'tooltip.formatter') || formatter;
  3962. position = this.query(data, 'tooltip.position') || position;
  3963. specialCssText += this._style(this.query(data, 'tooltip'));
  3964. } else {
  3965. this._lastItemTriggerId = NaN;
  3966. showContent = this.deepQuery(queryTarget, 'tooltip.showContent');
  3967. formatter = this.deepQuery(queryTarget, 'tooltip.islandFormatter');
  3968. position = this.deepQuery(queryTarget, 'tooltip.islandPosition');
  3969. }
  3970. this._lastDataIndex = -1;
  3971. this._lastSeriesIndex = -1;
  3972. if (this._lastItemTriggerId !== this._curTarget.id) {
  3973. this._lastItemTriggerId = this._curTarget.id;
  3974. if (typeof formatter === 'function') {
  3975. this._curTicket = (serie.name || '') + ':' + dataIndex;
  3976. this._tDom.innerHTML = formatter.call(this.myChart, {
  3977. seriesIndex: seriesIndex,
  3978. seriesName: serie.name || '',
  3979. series: serie,
  3980. dataIndex: dataIndex,
  3981. data: data,
  3982. name: name,
  3983. value: value,
  3984. percent: special,
  3985. indicator: special,
  3986. value2: special2,
  3987. indicator2: special2,
  3988. 0: serie.name || '',
  3989. 1: name,
  3990. 2: value,
  3991. 3: special,
  3992. 4: special2,
  3993. 5: data,
  3994. 6: seriesIndex,
  3995. 7: dataIndex
  3996. }, this._curTicket, this._setContent);
  3997. } else if (typeof formatter === 'string') {
  3998. this._curTicket = NaN;
  3999. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
  4000. formatter = formatter.replace('{a0}', this._encodeHTML(serie.name || '')).replace('{b0}', this._encodeHTML(name)).replace('{c0}', value instanceof Array ? value : this.numAddCommas(value));
  4001. formatter = formatter.replace('{d}', '{d0}').replace('{d0}', special || '');
  4002. formatter = formatter.replace('{e}', '{e0}').replace('{e0}', ecData.get(this._curTarget, 'special2') || '');
  4003. this._tDom.innerHTML = formatter;
  4004. } else {
  4005. this._curTicket = NaN;
  4006. if (serie.type === ecConfig.CHART_TYPE_RADAR && special) {
  4007. this._tDom.innerHTML = this._itemFormatter.radar.call(this, serie, name, value, special);
  4008. } else if (serie.type === ecConfig.CHART_TYPE_EVENTRIVER) {
  4009. this._tDom.innerHTML = this._itemFormatter.eventRiver.call(this, serie, name, value, data);
  4010. } else {
  4011. this._tDom.innerHTML = '' + (serie.name != null ? this._encodeHTML(serie.name) + '<br/>' : '') + (name === '' ? '' : this._encodeHTML(name) + ' : ') + (value instanceof Array ? value : this.numAddCommas(value));
  4012. }
  4013. }
  4014. }
  4015. var x = zrEvent.getX(this._event);
  4016. var y = zrEvent.getY(this._event);
  4017. if (this.deepQuery(queryTarget, 'tooltip.axisPointer.show') && this.component.grid) {
  4018. this._styleAxisPointer([serie], this.component.grid.getX(), y, this.component.grid.getXend(), y, 0, x, y);
  4019. } else {
  4020. this._hide();
  4021. }
  4022. if (showContent === false || !this.option.tooltip.showContent) {
  4023. return;
  4024. }
  4025. if (!this.hasAppend) {
  4026. this._tDom.style.left = this._zrWidth / 2 + 'px';
  4027. this._tDom.style.top = this._zrHeight / 2 + 'px';
  4028. this.dom.firstChild.appendChild(this._tDom);
  4029. this.hasAppend = true;
  4030. }
  4031. this._show(position, x + 20, y - 20, specialCssText);
  4032. },
  4033. _itemFormatter: {
  4034. radar: function (serie, name, value, indicator) {
  4035. var html = '';
  4036. html += this._encodeHTML(name === '' ? serie.name || '' : name);
  4037. html += html === '' ? '' : '<br />';
  4038. for (var i = 0; i < indicator.length; i++) {
  4039. html += this._encodeHTML(indicator[i].text) + ' : ' + this.numAddCommas(value[i]) + '<br />';
  4040. }
  4041. return html;
  4042. },
  4043. chord: function (serie, name, value, special, special2) {
  4044. if (special2 == null) {
  4045. return this._encodeHTML(name) + ' (' + this.numAddCommas(value) + ')';
  4046. } else {
  4047. var name1 = this._encodeHTML(name);
  4048. var name2 = this._encodeHTML(special);
  4049. return '' + (serie.name != null ? this._encodeHTML(serie.name) + '<br/>' : '') + name1 + ' -> ' + name2 + ' (' + this.numAddCommas(value) + ')' + '<br />' + name2 + ' -> ' + name1 + ' (' + this.numAddCommas(special2) + ')';
  4050. }
  4051. },
  4052. eventRiver: function (serie, name, value, data) {
  4053. var html = '';
  4054. html += this._encodeHTML(serie.name === '' ? '' : serie.name + ' : ');
  4055. html += this._encodeHTML(name);
  4056. html += html === '' ? '' : '<br />';
  4057. data = data.evolution;
  4058. for (var i = 0, l = data.length; i < l; i++) {
  4059. html += '<div style="padding-top:5px;">';
  4060. if (!data[i].detail) {
  4061. continue;
  4062. }
  4063. if (data[i].detail.img) {
  4064. html += '<img src="' + data[i].detail.img + '" style="float:left;width:40px;height:40px;">';
  4065. }
  4066. html += '<div style="margin-left:45px;">' + data[i].time + '<br/>';
  4067. html += '<a href="' + data[i].detail.link + '" target="_blank">';
  4068. html += data[i].detail.text + '</a></div>';
  4069. html += '</div>';
  4070. }
  4071. return html;
  4072. }
  4073. },
  4074. _styleAxisPointer: function (seriesArray, xStart, yStart, xEnd, yEnd, gap, x, y) {
  4075. if (seriesArray.length > 0) {
  4076. var queryTarget;
  4077. var curType;
  4078. var axisPointer = this.option.tooltip.axisPointer;
  4079. var pointType = axisPointer.type;
  4080. var style = {
  4081. line: {},
  4082. cross: {},
  4083. shadow: {}
  4084. };
  4085. for (var pType in style) {
  4086. style[pType].color = axisPointer[pType + 'Style'].color;
  4087. style[pType].width = axisPointer[pType + 'Style'].width;
  4088. style[pType].type = axisPointer[pType + 'Style'].type;
  4089. }
  4090. for (var i = 0, l = seriesArray.length; i < l; i++) {
  4091. queryTarget = seriesArray[i];
  4092. curType = this.query(queryTarget, 'tooltip.axisPointer.type');
  4093. pointType = curType || pointType;
  4094. if (curType) {
  4095. style[curType].color = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.color') || style[curType].color;
  4096. style[curType].width = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.width') || style[curType].width;
  4097. style[curType].type = this.query(queryTarget, 'tooltip.axisPointer.' + curType + 'Style.type') || style[curType].type;
  4098. }
  4099. }
  4100. if (pointType === 'line') {
  4101. var lineWidth = style.line.width;
  4102. var isVertical = xStart == xEnd;
  4103. this._axisLineShape.style = {
  4104. xStart: isVertical ? this.subPixelOptimize(xStart, lineWidth) : xStart,
  4105. yStart: isVertical ? yStart : this.subPixelOptimize(yStart, lineWidth),
  4106. xEnd: isVertical ? this.subPixelOptimize(xEnd, lineWidth) : xEnd,
  4107. yEnd: isVertical ? yEnd : this.subPixelOptimize(yEnd, lineWidth),
  4108. strokeColor: style.line.color,
  4109. lineWidth: lineWidth,
  4110. lineType: style.line.type
  4111. };
  4112. this._axisLineShape.invisible = false;
  4113. this.zr.modShape(this._axisLineShape.id);
  4114. } else if (pointType === 'cross') {
  4115. var crossWidth = style.cross.width;
  4116. this._axisCrossShape.style = {
  4117. brushType: 'stroke',
  4118. rect: this.component.grid.getArea(),
  4119. x: this.subPixelOptimize(x, crossWidth),
  4120. y: this.subPixelOptimize(y, crossWidth),
  4121. text: ('( ' + this.component.xAxis.getAxis(0).getValueFromCoord(x) + ' , ' + this.component.yAxis.getAxis(0).getValueFromCoord(y) + ' )').replace(' , ', ' ').replace(' , ', ' '),
  4122. textPosition: 'specific',
  4123. strokeColor: style.cross.color,
  4124. lineWidth: crossWidth,
  4125. lineType: style.cross.type
  4126. };
  4127. if (this.component.grid.getXend() - x > 100) {
  4128. this._axisCrossShape.style.textAlign = 'left';
  4129. this._axisCrossShape.style.textX = x + 10;
  4130. } else {
  4131. this._axisCrossShape.style.textAlign = 'right';
  4132. this._axisCrossShape.style.textX = x - 10;
  4133. }
  4134. if (y - this.component.grid.getY() > 50) {
  4135. this._axisCrossShape.style.textBaseline = 'bottom';
  4136. this._axisCrossShape.style.textY = y - 10;
  4137. } else {
  4138. this._axisCrossShape.style.textBaseline = 'top';
  4139. this._axisCrossShape.style.textY = y + 10;
  4140. }
  4141. this._axisCrossShape.invisible = false;
  4142. this.zr.modShape(this._axisCrossShape.id);
  4143. } else if (pointType === 'shadow') {
  4144. if (style.shadow.width == null || style.shadow.width === 'auto' || isNaN(style.shadow.width)) {
  4145. style.shadow.width = gap;
  4146. }
  4147. if (xStart === xEnd) {
  4148. if (Math.abs(this.component.grid.getX() - xStart) < 2) {
  4149. style.shadow.width /= 2;
  4150. xStart = xEnd = xEnd + style.shadow.width / 2;
  4151. } else if (Math.abs(this.component.grid.getXend() - xStart) < 2) {
  4152. style.shadow.width /= 2;
  4153. xStart = xEnd = xEnd - style.shadow.width / 2;
  4154. }
  4155. } else if (yStart === yEnd) {
  4156. if (Math.abs(this.component.grid.getY() - yStart) < 2) {
  4157. style.shadow.width /= 2;
  4158. yStart = yEnd = yEnd + style.shadow.width / 2;
  4159. } else if (Math.abs(this.component.grid.getYend() - yStart) < 2) {
  4160. style.shadow.width /= 2;
  4161. yStart = yEnd = yEnd - style.shadow.width / 2;
  4162. }
  4163. }
  4164. this._axisShadowShape.style = {
  4165. xStart: xStart,
  4166. yStart: yStart,
  4167. xEnd: xEnd,
  4168. yEnd: yEnd,
  4169. strokeColor: style.shadow.color,
  4170. lineWidth: style.shadow.width
  4171. };
  4172. this._axisShadowShape.invisible = false;
  4173. this.zr.modShape(this._axisShadowShape.id);
  4174. }
  4175. this.zr.refreshNextFrame();
  4176. }
  4177. },
  4178. __onmousemove: function (param) {
  4179. clearTimeout(this._hidingTicket);
  4180. clearTimeout(this._showingTicket);
  4181. if (this._mousein && this._enterable) {
  4182. return;
  4183. }
  4184. var target = param.target;
  4185. var mx = zrEvent.getX(param.event);
  4186. var my = zrEvent.getY(param.event);
  4187. if (!target) {
  4188. this._curTarget = false;
  4189. this._event = param.event;
  4190. this._event.zrenderX = mx;
  4191. this._event.zrenderY = my;
  4192. if (this._needAxisTrigger && this.component.grid && zrArea.isInside(rectangleInstance, this.component.grid.getArea(), mx, my)) {
  4193. this._showingTicket = setTimeout(this._tryShow, this._showDelay);
  4194. } else if (this._needAxisTrigger && this.component.polar && this.component.polar.isInside([
  4195. mx,
  4196. my
  4197. ]) != -1) {
  4198. this._showingTicket = setTimeout(this._tryShow, this._showDelay);
  4199. } else {
  4200. !this._event.connectTrigger && this.messageCenter.dispatch(ecConfig.EVENT.TOOLTIP_OUT_GRID, this._event, null, this.myChart);
  4201. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  4202. }
  4203. } else {
  4204. this._curTarget = target;
  4205. this._event = param.event;
  4206. this._event.zrenderX = mx;
  4207. this._event.zrenderY = my;
  4208. var polarIndex;
  4209. if (this._needAxisTrigger && this.component.polar && (polarIndex = this.component.polar.isInside([
  4210. mx,
  4211. my
  4212. ])) != -1) {
  4213. var series = this.option.series;
  4214. for (var i = 0, l = series.length; i < l; i++) {
  4215. if (series[i].polarIndex === polarIndex && this.deepQuery([
  4216. series[i],
  4217. this.option
  4218. ], 'tooltip.trigger') === 'axis') {
  4219. this._curTarget = null;
  4220. break;
  4221. }
  4222. }
  4223. }
  4224. this._showingTicket = setTimeout(this._tryShow, this._showDelay);
  4225. }
  4226. },
  4227. __onglobalout: function () {
  4228. clearTimeout(this._hidingTicket);
  4229. clearTimeout(this._showingTicket);
  4230. this._hidingTicket = setTimeout(this._hide, this._hideDelay);
  4231. },
  4232. __setContent: function (ticket, content) {
  4233. if (!this._tDom) {
  4234. return;
  4235. }
  4236. if (ticket === this._curTicket) {
  4237. this._tDom.innerHTML = content;
  4238. }
  4239. setTimeout(this._refixed, 20);
  4240. },
  4241. ontooltipHover: function (param, tipShape) {
  4242. if (!this._lastTipShape || this._lastTipShape && this._lastTipShape.dataIndex != param.dataIndex) {
  4243. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  4244. this.zr.delShape(this._lastTipShape.tipShape);
  4245. this.shapeList.length = 2;
  4246. }
  4247. for (var i = 0, l = tipShape.length; i < l; i++) {
  4248. tipShape[i].zlevel = this.getZlevelBase();
  4249. tipShape[i].z = this.getZBase();
  4250. tipShape[i].style = zrShapeBase.prototype.getHighlightStyle(tipShape[i].style, tipShape[i].highlightStyle);
  4251. tipShape[i].draggable = false;
  4252. tipShape[i].hoverable = false;
  4253. tipShape[i].clickable = false;
  4254. tipShape[i].ondragend = null;
  4255. tipShape[i].ondragover = null;
  4256. tipShape[i].ondrop = null;
  4257. this.shapeList.push(tipShape[i]);
  4258. this.zr.addShape(tipShape[i]);
  4259. }
  4260. this._lastTipShape = {
  4261. dataIndex: param.dataIndex,
  4262. tipShape: tipShape
  4263. };
  4264. }
  4265. },
  4266. ondragend: function () {
  4267. this._hide();
  4268. },
  4269. onlegendSelected: function (param) {
  4270. this._selectedMap = param.selected;
  4271. },
  4272. _setSelectedMap: function () {
  4273. if (this.component.legend) {
  4274. this._selectedMap = zrUtil.clone(this.component.legend.getSelectedMap());
  4275. } else {
  4276. this._selectedMap = {};
  4277. }
  4278. },
  4279. _isSelected: function (itemName) {
  4280. if (this._selectedMap[itemName] != null) {
  4281. return this._selectedMap[itemName];
  4282. } else {
  4283. return true;
  4284. }
  4285. },
  4286. showTip: function (params) {
  4287. if (!params) {
  4288. return;
  4289. }
  4290. var seriesIndex;
  4291. var series = this.option.series;
  4292. if (params.seriesIndex != null) {
  4293. seriesIndex = params.seriesIndex;
  4294. } else {
  4295. var seriesName = params.seriesName;
  4296. for (var i = 0, l = series.length; i < l; i++) {
  4297. if (series[i].name === seriesName) {
  4298. seriesIndex = i;
  4299. break;
  4300. }
  4301. }
  4302. }
  4303. var serie = series[seriesIndex];
  4304. if (serie == null) {
  4305. return;
  4306. }
  4307. var chart = this.myChart.chart[serie.type];
  4308. var isAxisTrigger = this.deepQuery([
  4309. serie,
  4310. this.option
  4311. ], 'tooltip.trigger') === 'axis';
  4312. if (!chart) {
  4313. return;
  4314. }
  4315. if (isAxisTrigger) {
  4316. var dataIndex = params.dataIndex;
  4317. switch (chart.type) {
  4318. case ecConfig.CHART_TYPE_LINE:
  4319. case ecConfig.CHART_TYPE_BAR:
  4320. case ecConfig.CHART_TYPE_K:
  4321. case ecConfig.CHART_TYPE_RADAR:
  4322. if (this.component.polar == null || serie.data[0].value.length <= dataIndex) {
  4323. return;
  4324. }
  4325. var polarIndex = serie.polarIndex || 0;
  4326. var vector = this.component.polar.getVector(polarIndex, dataIndex, 'max');
  4327. this._event = {
  4328. zrenderX: vector[0],
  4329. zrenderY: vector[1]
  4330. };
  4331. this._showPolarTrigger(polarIndex, dataIndex);
  4332. break;
  4333. }
  4334. } else {
  4335. var shapeList = chart.shapeList;
  4336. var x;
  4337. var y;
  4338. switch (chart.type) {
  4339. case ecConfig.CHART_TYPE_LINE:
  4340. case ecConfig.CHART_TYPE_BAR:
  4341. case ecConfig.CHART_TYPE_K:
  4342. case ecConfig.CHART_TYPE_TREEMAP:
  4343. case ecConfig.CHART_TYPE_SCATTER:
  4344. var dataIndex = params.dataIndex;
  4345. for (var i = 0, l = shapeList.length; i < l; i++) {
  4346. if (shapeList[i]._mark == null && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'dataIndex') == dataIndex) {
  4347. this._curTarget = shapeList[i];
  4348. x = shapeList[i].style.x;
  4349. y = chart.type != ecConfig.CHART_TYPE_K ? shapeList[i].style.y : shapeList[i].style.y[0];
  4350. break;
  4351. }
  4352. }
  4353. break;
  4354. case ecConfig.CHART_TYPE_RADAR:
  4355. var dataIndex = params.dataIndex;
  4356. for (var i = 0, l = shapeList.length; i < l; i++) {
  4357. if (shapeList[i].type === 'polygon' && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'dataIndex') == dataIndex) {
  4358. this._curTarget = shapeList[i];
  4359. var vector = this.component.polar.getCenter(serie.polarIndex || 0);
  4360. x = vector[0];
  4361. y = vector[1];
  4362. break;
  4363. }
  4364. }
  4365. break;
  4366. case ecConfig.CHART_TYPE_PIE:
  4367. var name = params.name;
  4368. for (var i = 0, l = shapeList.length; i < l; i++) {
  4369. if (shapeList[i].type === 'sector' && ecData.get(shapeList[i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[i], 'name') == name) {
  4370. this._curTarget = shapeList[i];
  4371. var style = this._curTarget.style;
  4372. var midAngle = (style.startAngle + style.endAngle) / 2 * Math.PI / 180;
  4373. x = this._curTarget.style.x + Math.cos(midAngle) * style.r / 1.5;
  4374. y = this._curTarget.style.y - Math.sin(midAngle) * style.r / 1.5;
  4375. break;
  4376. }
  4377. }
  4378. break;
  4379. case ecConfig.CHART_TYPE_MAP:
  4380. var name = params.name;
  4381. var mapType = serie.mapType;
  4382. for (var i = 0, l = shapeList.length; i < l; i++) {
  4383. if (shapeList[i].type === 'text' && shapeList[i]._mapType === mapType && shapeList[i].style._name === name) {
  4384. this._curTarget = shapeList[i];
  4385. x = this._curTarget.style.x + this._curTarget.position[0];
  4386. y = this._curTarget.style.y + this._curTarget.position[1];
  4387. break;
  4388. }
  4389. }
  4390. break;
  4391. case ecConfig.CHART_TYPE_CHORD:
  4392. var name = params.name;
  4393. for (var i = 0, l = shapeList.length; i < l; i++) {
  4394. if (shapeList[i].type === 'sector' && ecData.get(shapeList[i], 'name') == name) {
  4395. this._curTarget = shapeList[i];
  4396. var style = this._curTarget.style;
  4397. var midAngle = (style.startAngle + style.endAngle) / 2 * Math.PI / 180;
  4398. x = this._curTarget.style.x + Math.cos(midAngle) * (style.r - 2);
  4399. y = this._curTarget.style.y - Math.sin(midAngle) * (style.r - 2);
  4400. this.zr.trigger(zrConfig.EVENT.MOUSEMOVE, {
  4401. zrenderX: x,
  4402. zrenderY: y
  4403. });
  4404. return;
  4405. }
  4406. }
  4407. break;
  4408. case ecConfig.CHART_TYPE_FORCE:
  4409. var name = params.name;
  4410. for (var i = 0, l = shapeList.length; i < l; i++) {
  4411. if (shapeList[i].type === 'circle' && ecData.get(shapeList[i], 'name') == name) {
  4412. this._curTarget = shapeList[i];
  4413. x = this._curTarget.position[0];
  4414. y = this._curTarget.position[1];
  4415. break;
  4416. }
  4417. }
  4418. break;
  4419. }
  4420. if (x != null && y != null) {
  4421. this._event = {
  4422. zrenderX: x,
  4423. zrenderY: y
  4424. };
  4425. this.zr.addHoverShape(this._curTarget);
  4426. this.zr.refreshHover();
  4427. this._showItemTrigger();
  4428. }
  4429. }
  4430. },
  4431. hideTip: function () {
  4432. this._hide();
  4433. },
  4434. refresh: function (newOption) {
  4435. this._zrHeight = this.zr.getHeight();
  4436. this._zrWidth = this.zr.getWidth();
  4437. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  4438. this.zr.delShape(this._lastTipShape.tipShape);
  4439. }
  4440. this._lastTipShape = false;
  4441. this.shapeList.length = 2;
  4442. this._lastDataIndex = -1;
  4443. this._lastSeriesIndex = -1;
  4444. this._lastItemTriggerId = -1;
  4445. if (newOption) {
  4446. this.option = newOption;
  4447. this.option.tooltip = this.reformOption(this.option.tooltip);
  4448. this.option.tooltip.textStyle = zrUtil.merge(this.option.tooltip.textStyle, this.ecTheme.textStyle);
  4449. this._needAxisTrigger = false;
  4450. if (this.option.tooltip.trigger === 'axis') {
  4451. this._needAxisTrigger = true;
  4452. }
  4453. var series = this.option.series;
  4454. for (var i = 0, l = series.length; i < l; i++) {
  4455. if (this.query(series[i], 'tooltip.trigger') === 'axis') {
  4456. this._needAxisTrigger = true;
  4457. break;
  4458. }
  4459. }
  4460. this._showDelay = this.option.tooltip.showDelay;
  4461. this._hideDelay = this.option.tooltip.hideDelay;
  4462. this._defaultCssText = this._style(this.option.tooltip);
  4463. this._setSelectedMap();
  4464. this._axisLineWidth = this.option.tooltip.axisPointer.lineStyle.width;
  4465. this._enterable = this.option.tooltip.enterable;
  4466. if (!this._enterable && this._tDom.className.indexOf(zrConfig.elementClassName) < 0) {
  4467. this._tDom.className += ' ' + zrConfig.elementClassName;
  4468. }
  4469. }
  4470. if (this.showing) {
  4471. var self = this;
  4472. setTimeout(function () {
  4473. self.zr.trigger(zrConfig.EVENT.MOUSEMOVE, self.zr.handler._event);
  4474. }, 50);
  4475. }
  4476. },
  4477. onbeforDispose: function () {
  4478. if (this._lastTipShape && this._lastTipShape.tipShape.length > 0) {
  4479. this.zr.delShape(this._lastTipShape.tipShape);
  4480. }
  4481. clearTimeout(this._hidingTicket);
  4482. clearTimeout(this._showingTicket);
  4483. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this._onmousemove);
  4484. this.zr.un(zrConfig.EVENT.GLOBALOUT, this._onglobalout);
  4485. if (this.hasAppend && !!this.dom.firstChild) {
  4486. this.dom.firstChild.removeChild(this._tDom);
  4487. }
  4488. this._tDom = null;
  4489. },
  4490. _encodeHTML: function (source) {
  4491. return String(source).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');
  4492. }
  4493. };
  4494. zrUtil.inherits(Tooltip, Base);
  4495. require('../component').define('tooltip', Tooltip);
  4496. return Tooltip;
  4497. });define('echarts/component/legend', [
  4498. 'require',
  4499. './base',
  4500. 'zrender/shape/Text',
  4501. 'zrender/shape/Rectangle',
  4502. 'zrender/shape/Sector',
  4503. '../util/shape/Icon',
  4504. '../util/shape/Candle',
  4505. '../config',
  4506. 'zrender/tool/util',
  4507. 'zrender/tool/area',
  4508. '../component'
  4509. ], function (require) {
  4510. var Base = require('./base');
  4511. var TextShape = require('zrender/shape/Text');
  4512. var RectangleShape = require('zrender/shape/Rectangle');
  4513. var SectorShape = require('zrender/shape/Sector');
  4514. var IconShape = require('../util/shape/Icon');
  4515. var CandleShape = require('../util/shape/Candle');
  4516. var ecConfig = require('../config');
  4517. ecConfig.legend = {
  4518. zlevel: 0,
  4519. z: 4,
  4520. show: true,
  4521. orient: 'horizontal',
  4522. x: 'center',
  4523. y: 'top',
  4524. backgroundColor: 'rgba(0,0,0,0)',
  4525. borderColor: '#ccc',
  4526. borderWidth: 0,
  4527. padding: 5,
  4528. itemGap: 10,
  4529. itemWidth: 20,
  4530. itemHeight: 14,
  4531. textStyle: { color: '#333' },
  4532. selectedMode: true
  4533. };
  4534. var zrUtil = require('zrender/tool/util');
  4535. var zrArea = require('zrender/tool/area');
  4536. function Legend(ecTheme, messageCenter, zr, option, myChart) {
  4537. if (!this.query(option, 'legend.data')) {
  4538. console.error('option.legend.data has not been defined.');
  4539. return;
  4540. }
  4541. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  4542. var self = this;
  4543. self._legendSelected = function (param) {
  4544. self.__legendSelected(param);
  4545. };
  4546. self._dispatchHoverLink = function (param) {
  4547. return self.__dispatchHoverLink(param);
  4548. };
  4549. this._colorIndex = 0;
  4550. this._colorMap = {};
  4551. this._selectedMap = {};
  4552. this._hasDataMap = {};
  4553. this.refresh(option);
  4554. }
  4555. Legend.prototype = {
  4556. type: ecConfig.COMPONENT_TYPE_LEGEND,
  4557. _buildShape: function () {
  4558. if (!this.legendOption.show) {
  4559. return;
  4560. }
  4561. this._itemGroupLocation = this._getItemGroupLocation();
  4562. this._buildBackground();
  4563. this._buildItem();
  4564. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  4565. this.zr.addShape(this.shapeList[i]);
  4566. }
  4567. },
  4568. _buildItem: function () {
  4569. var data = this.legendOption.data;
  4570. var dataLength = data.length;
  4571. var itemName;
  4572. var itemType;
  4573. var itemShape;
  4574. var textShape;
  4575. var textStyle = this.legendOption.textStyle;
  4576. var dataTextStyle;
  4577. var dataFont;
  4578. var formattedName;
  4579. var zrWidth = this.zr.getWidth();
  4580. var zrHeight = this.zr.getHeight();
  4581. var lastX = this._itemGroupLocation.x;
  4582. var lastY = this._itemGroupLocation.y;
  4583. var itemWidth = this.legendOption.itemWidth;
  4584. var itemHeight = this.legendOption.itemHeight;
  4585. var itemGap = this.legendOption.itemGap;
  4586. var color;
  4587. if (this.legendOption.orient === 'vertical' && this.legendOption.x === 'right') {
  4588. lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
  4589. }
  4590. for (var i = 0; i < dataLength; i++) {
  4591. dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
  4592. dataFont = this.getFont(dataTextStyle);
  4593. itemName = this._getName(data[i]);
  4594. formattedName = this._getFormatterName(itemName);
  4595. if (itemName === '') {
  4596. if (this.legendOption.orient === 'horizontal') {
  4597. lastX = this._itemGroupLocation.x;
  4598. lastY += itemHeight + itemGap;
  4599. } else {
  4600. this.legendOption.x === 'right' ? lastX -= this._itemGroupLocation.maxWidth + itemGap : lastX += this._itemGroupLocation.maxWidth + itemGap;
  4601. lastY = this._itemGroupLocation.y;
  4602. }
  4603. continue;
  4604. }
  4605. itemType = data[i].icon || this._getSomethingByName(itemName).type;
  4606. color = this.getColor(itemName);
  4607. if (this.legendOption.orient === 'horizontal') {
  4608. if (zrWidth - lastX < 200 && itemWidth + 5 + zrArea.getTextWidth(formattedName, dataFont) + (i === dataLength - 1 || data[i + 1] === '' ? 0 : itemGap) >= zrWidth - lastX) {
  4609. lastX = this._itemGroupLocation.x;
  4610. lastY += itemHeight + itemGap;
  4611. }
  4612. } else {
  4613. if (zrHeight - lastY < 200 && itemHeight + (i === dataLength - 1 || data[i + 1] === '' ? 0 : itemGap) >= zrHeight - lastY) {
  4614. this.legendOption.x === 'right' ? lastX -= this._itemGroupLocation.maxWidth + itemGap : lastX += this._itemGroupLocation.maxWidth + itemGap;
  4615. lastY = this._itemGroupLocation.y;
  4616. }
  4617. }
  4618. itemShape = this._getItemShapeByType(lastX, lastY, itemWidth, itemHeight, this._selectedMap[itemName] && this._hasDataMap[itemName] ? color : '#ccc', itemType, color);
  4619. itemShape._name = itemName;
  4620. itemShape = new IconShape(itemShape);
  4621. textShape = {
  4622. zlevel: this.getZlevelBase(),
  4623. z: this.getZBase(),
  4624. style: {
  4625. x: lastX + itemWidth + 5,
  4626. y: lastY + itemHeight / 2,
  4627. color: this._selectedMap[itemName] ? dataTextStyle.color === 'auto' ? color : dataTextStyle.color : '#ccc',
  4628. text: formattedName,
  4629. textFont: dataFont,
  4630. textBaseline: 'middle'
  4631. },
  4632. highlightStyle: {
  4633. color: color,
  4634. brushType: 'fill'
  4635. },
  4636. hoverable: !!this.legendOption.selectedMode,
  4637. clickable: !!this.legendOption.selectedMode
  4638. };
  4639. if (this.legendOption.orient === 'vertical' && this.legendOption.x === 'right') {
  4640. textShape.style.x -= itemWidth + 10;
  4641. textShape.style.textAlign = 'right';
  4642. }
  4643. textShape._name = itemName;
  4644. textShape = new TextShape(textShape);
  4645. if (this.legendOption.selectedMode) {
  4646. itemShape.onclick = textShape.onclick = this._legendSelected;
  4647. itemShape.onmouseover = textShape.onmouseover = this._dispatchHoverLink;
  4648. itemShape.hoverConnect = textShape.id;
  4649. textShape.hoverConnect = itemShape.id;
  4650. }
  4651. this.shapeList.push(itemShape);
  4652. this.shapeList.push(textShape);
  4653. if (this.legendOption.orient === 'horizontal') {
  4654. lastX += itemWidth + 5 + zrArea.getTextWidth(formattedName, dataFont) + itemGap;
  4655. } else {
  4656. lastY += itemHeight + itemGap;
  4657. }
  4658. }
  4659. if (this.legendOption.orient === 'horizontal' && this.legendOption.x === 'center' && lastY != this._itemGroupLocation.y) {
  4660. this._mLineOptimize();
  4661. }
  4662. },
  4663. _getName: function (data) {
  4664. return typeof data.name != 'undefined' ? data.name : data;
  4665. },
  4666. _getFormatterName: function (itemName) {
  4667. var formatter = this.legendOption.formatter;
  4668. var formattedName;
  4669. if (typeof formatter === 'function') {
  4670. formattedName = formatter.call(this.myChart, itemName);
  4671. } else if (typeof formatter === 'string') {
  4672. formattedName = formatter.replace('{name}', itemName);
  4673. } else {
  4674. formattedName = itemName;
  4675. }
  4676. return formattedName;
  4677. },
  4678. _getFormatterNameFromData: function (data) {
  4679. var itemName = this._getName(data);
  4680. return this._getFormatterName(itemName);
  4681. },
  4682. _mLineOptimize: function () {
  4683. var lineOffsetArray = [];
  4684. var lastX = this._itemGroupLocation.x;
  4685. for (var i = 2, l = this.shapeList.length; i < l; i++) {
  4686. if (this.shapeList[i].style.x === lastX) {
  4687. lineOffsetArray.push((this._itemGroupLocation.width - (this.shapeList[i - 1].style.x + zrArea.getTextWidth(this.shapeList[i - 1].style.text, this.shapeList[i - 1].style.textFont) - lastX)) / 2);
  4688. } else if (i === l - 1) {
  4689. lineOffsetArray.push((this._itemGroupLocation.width - (this.shapeList[i].style.x + zrArea.getTextWidth(this.shapeList[i].style.text, this.shapeList[i].style.textFont) - lastX)) / 2);
  4690. }
  4691. }
  4692. var curLineIndex = -1;
  4693. for (var i = 1, l = this.shapeList.length; i < l; i++) {
  4694. if (this.shapeList[i].style.x === lastX) {
  4695. curLineIndex++;
  4696. }
  4697. if (lineOffsetArray[curLineIndex] === 0) {
  4698. continue;
  4699. } else {
  4700. this.shapeList[i].style.x += lineOffsetArray[curLineIndex];
  4701. }
  4702. }
  4703. },
  4704. _buildBackground: function () {
  4705. var padding = this.reformCssArray(this.legendOption.padding);
  4706. this.shapeList.push(new RectangleShape({
  4707. zlevel: this.getZlevelBase(),
  4708. z: this.getZBase(),
  4709. hoverable: false,
  4710. style: {
  4711. x: this._itemGroupLocation.x - padding[3],
  4712. y: this._itemGroupLocation.y - padding[0],
  4713. width: this._itemGroupLocation.width + padding[3] + padding[1],
  4714. height: this._itemGroupLocation.height + padding[0] + padding[2],
  4715. brushType: this.legendOption.borderWidth === 0 ? 'fill' : 'both',
  4716. color: this.legendOption.backgroundColor,
  4717. strokeColor: this.legendOption.borderColor,
  4718. lineWidth: this.legendOption.borderWidth
  4719. }
  4720. }));
  4721. },
  4722. _getItemGroupLocation: function () {
  4723. var data = this.legendOption.data;
  4724. var dataLength = data.length;
  4725. var itemGap = this.legendOption.itemGap;
  4726. var itemWidth = this.legendOption.itemWidth + 5;
  4727. var itemHeight = this.legendOption.itemHeight;
  4728. var textStyle = this.legendOption.textStyle;
  4729. var font = this.getFont(textStyle);
  4730. var totalWidth = 0;
  4731. var totalHeight = 0;
  4732. var padding = this.reformCssArray(this.legendOption.padding);
  4733. var zrWidth = this.zr.getWidth() - padding[1] - padding[3];
  4734. var zrHeight = this.zr.getHeight() - padding[0] - padding[2];
  4735. var temp = 0;
  4736. var maxWidth = 0;
  4737. if (this.legendOption.orient === 'horizontal') {
  4738. totalHeight = itemHeight;
  4739. for (var i = 0; i < dataLength; i++) {
  4740. if (this._getName(data[i]) === '') {
  4741. temp -= itemGap;
  4742. totalWidth = Math.max(totalWidth, temp);
  4743. totalHeight += itemHeight + itemGap;
  4744. temp = 0;
  4745. continue;
  4746. }
  4747. var tempTextWidth = zrArea.getTextWidth(this._getFormatterNameFromData(data[i]), data[i].textStyle ? this.getFont(zrUtil.merge(data[i].textStyle || {}, textStyle)) : font);
  4748. if (temp + itemWidth + tempTextWidth + itemGap > zrWidth) {
  4749. temp -= itemGap;
  4750. totalWidth = Math.max(totalWidth, temp);
  4751. totalHeight += itemHeight + itemGap;
  4752. temp = 0;
  4753. } else {
  4754. temp += itemWidth + tempTextWidth + itemGap;
  4755. totalWidth = Math.max(totalWidth, temp - itemGap);
  4756. }
  4757. }
  4758. } else {
  4759. for (var i = 0; i < dataLength; i++) {
  4760. maxWidth = Math.max(maxWidth, zrArea.getTextWidth(this._getFormatterNameFromData(data[i]), data[i].textStyle ? this.getFont(zrUtil.merge(data[i].textStyle || {}, textStyle)) : font));
  4761. }
  4762. maxWidth += itemWidth;
  4763. totalWidth = maxWidth;
  4764. for (var i = 0; i < dataLength; i++) {
  4765. if (this._getName(data[i]) === '') {
  4766. totalWidth += maxWidth + itemGap;
  4767. temp -= itemGap;
  4768. totalHeight = Math.max(totalHeight, temp);
  4769. temp = 0;
  4770. continue;
  4771. }
  4772. if (temp + itemHeight + itemGap > zrHeight) {
  4773. totalWidth += maxWidth + itemGap;
  4774. temp -= itemGap;
  4775. totalHeight = Math.max(totalHeight, temp);
  4776. temp = 0;
  4777. } else {
  4778. temp += itemHeight + itemGap;
  4779. totalHeight = Math.max(totalHeight, temp - itemGap);
  4780. }
  4781. }
  4782. }
  4783. zrWidth = this.zr.getWidth();
  4784. zrHeight = this.zr.getHeight();
  4785. var x;
  4786. switch (this.legendOption.x) {
  4787. case 'center':
  4788. x = Math.floor((zrWidth - totalWidth) / 2);
  4789. break;
  4790. case 'left':
  4791. x = padding[3] + this.legendOption.borderWidth;
  4792. break;
  4793. case 'right':
  4794. x = zrWidth - totalWidth - padding[1] - padding[3] - this.legendOption.borderWidth * 2;
  4795. break;
  4796. default:
  4797. x = this.parsePercent(this.legendOption.x, zrWidth);
  4798. break;
  4799. }
  4800. var y;
  4801. switch (this.legendOption.y) {
  4802. case 'top':
  4803. y = padding[0] + this.legendOption.borderWidth;
  4804. break;
  4805. case 'bottom':
  4806. y = zrHeight - totalHeight - padding[0] - padding[2] - this.legendOption.borderWidth * 2;
  4807. break;
  4808. case 'center':
  4809. y = Math.floor((zrHeight - totalHeight) / 2);
  4810. break;
  4811. default:
  4812. y = this.parsePercent(this.legendOption.y, zrHeight);
  4813. break;
  4814. }
  4815. return {
  4816. x: x,
  4817. y: y,
  4818. width: totalWidth,
  4819. height: totalHeight,
  4820. maxWidth: maxWidth
  4821. };
  4822. },
  4823. _getSomethingByName: function (name) {
  4824. var series = this.option.series;
  4825. var data;
  4826. for (var i = 0, l = series.length; i < l; i++) {
  4827. if (series[i].name === name) {
  4828. return {
  4829. type: series[i].type,
  4830. series: series[i],
  4831. seriesIndex: i,
  4832. data: null,
  4833. dataIndex: -1
  4834. };
  4835. }
  4836. if (series[i].type === ecConfig.CHART_TYPE_PIE || series[i].type === ecConfig.CHART_TYPE_RADAR || series[i].type === ecConfig.CHART_TYPE_CHORD || series[i].type === ecConfig.CHART_TYPE_FORCE || series[i].type === ecConfig.CHART_TYPE_FUNNEL || series[i].type === ecConfig.CHART_TYPE_TREEMAP) {
  4837. data = series[i].categories || series[i].data || series[i].nodes;
  4838. for (var j = 0, k = data.length; j < k; j++) {
  4839. if (data[j].name === name) {
  4840. return {
  4841. type: series[i].type,
  4842. series: series[i],
  4843. seriesIndex: i,
  4844. data: data[j],
  4845. dataIndex: j
  4846. };
  4847. }
  4848. }
  4849. }
  4850. }
  4851. return {
  4852. type: 'bar',
  4853. series: null,
  4854. seriesIndex: -1,
  4855. data: null,
  4856. dataIndex: -1
  4857. };
  4858. },
  4859. _getItemShapeByType: function (x, y, width, height, color, itemType, defaultColor) {
  4860. var highlightColor = color === '#ccc' ? defaultColor : color;
  4861. var itemShape = {
  4862. zlevel: this.getZlevelBase(),
  4863. z: this.getZBase(),
  4864. style: {
  4865. iconType: 'legendicon' + itemType,
  4866. x: x,
  4867. y: y,
  4868. width: width,
  4869. height: height,
  4870. color: color,
  4871. strokeColor: color,
  4872. lineWidth: 2
  4873. },
  4874. highlightStyle: {
  4875. color: highlightColor,
  4876. strokeColor: highlightColor,
  4877. lineWidth: 1
  4878. },
  4879. hoverable: this.legendOption.selectedMode,
  4880. clickable: this.legendOption.selectedMode
  4881. };
  4882. var imageLocation;
  4883. if (itemType.match('image')) {
  4884. var imageLocation = itemType.replace(new RegExp('^image:\\/\\/'), '');
  4885. itemType = 'image';
  4886. }
  4887. switch (itemType) {
  4888. case 'line':
  4889. itemShape.style.brushType = 'stroke';
  4890. itemShape.highlightStyle.lineWidth = 3;
  4891. break;
  4892. case 'radar':
  4893. case 'venn':
  4894. case 'tree':
  4895. case 'treemap':
  4896. case 'scatter':
  4897. itemShape.highlightStyle.lineWidth = 3;
  4898. break;
  4899. case 'k':
  4900. itemShape.style.brushType = 'both';
  4901. itemShape.highlightStyle.lineWidth = 3;
  4902. itemShape.highlightStyle.color = itemShape.style.color = this.deepQuery([
  4903. this.ecTheme,
  4904. ecConfig
  4905. ], 'k.itemStyle.normal.color') || '#fff';
  4906. itemShape.style.strokeColor = color != '#ccc' ? this.deepQuery([
  4907. this.ecTheme,
  4908. ecConfig
  4909. ], 'k.itemStyle.normal.lineStyle.color') || '#ff3200' : color;
  4910. break;
  4911. case 'image':
  4912. itemShape.style.iconType = 'image';
  4913. itemShape.style.image = imageLocation;
  4914. if (color === '#ccc') {
  4915. itemShape.style.opacity = 0.5;
  4916. }
  4917. break;
  4918. }
  4919. return itemShape;
  4920. },
  4921. __legendSelected: function (param) {
  4922. var itemName = param.target._name;
  4923. if (this.legendOption.selectedMode === 'single') {
  4924. for (var k in this._selectedMap) {
  4925. this._selectedMap[k] = false;
  4926. }
  4927. }
  4928. this._selectedMap[itemName] = !this._selectedMap[itemName];
  4929. this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_SELECTED, param.event, {
  4930. selected: this._selectedMap,
  4931. target: itemName
  4932. }, this.myChart);
  4933. },
  4934. __dispatchHoverLink: function (param) {
  4935. this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_HOVERLINK, param.event, { target: param.target._name }, this.myChart);
  4936. return;
  4937. },
  4938. refresh: function (newOption) {
  4939. if (newOption) {
  4940. this.option = newOption || this.option;
  4941. this.option.legend = this.reformOption(this.option.legend);
  4942. this.legendOption = this.option.legend;
  4943. var data = this.legendOption.data || [];
  4944. var itemName;
  4945. var something;
  4946. var color;
  4947. var queryTarget;
  4948. if (this.legendOption.selected) {
  4949. for (var k in this.legendOption.selected) {
  4950. this._selectedMap[k] = typeof this._selectedMap[k] != 'undefined' ? this._selectedMap[k] : this.legendOption.selected[k];
  4951. }
  4952. }
  4953. for (var i = 0, dataLength = data.length; i < dataLength; i++) {
  4954. itemName = this._getName(data[i]);
  4955. if (itemName === '') {
  4956. continue;
  4957. }
  4958. something = this._getSomethingByName(itemName);
  4959. if (!something.series) {
  4960. this._hasDataMap[itemName] = false;
  4961. } else {
  4962. this._hasDataMap[itemName] = true;
  4963. if (something.data && (something.type === ecConfig.CHART_TYPE_PIE || something.type === ecConfig.CHART_TYPE_FORCE || something.type === ecConfig.CHART_TYPE_FUNNEL)) {
  4964. queryTarget = [
  4965. something.data,
  4966. something.series
  4967. ];
  4968. } else {
  4969. queryTarget = [something.series];
  4970. }
  4971. color = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), something.seriesIndex, something.dataIndex, something.data);
  4972. if (color && something.type != ecConfig.CHART_TYPE_K) {
  4973. this.setColor(itemName, color);
  4974. }
  4975. this._selectedMap[itemName] = this._selectedMap[itemName] != null ? this._selectedMap[itemName] : true;
  4976. }
  4977. }
  4978. }
  4979. this.clear();
  4980. this._buildShape();
  4981. },
  4982. getRelatedAmount: function (name) {
  4983. var amount = 0;
  4984. var series = this.option.series;
  4985. var data;
  4986. for (var i = 0, l = series.length; i < l; i++) {
  4987. if (series[i].name === name) {
  4988. amount++;
  4989. }
  4990. if (series[i].type === ecConfig.CHART_TYPE_PIE || series[i].type === ecConfig.CHART_TYPE_RADAR || series[i].type === ecConfig.CHART_TYPE_CHORD || series[i].type === ecConfig.CHART_TYPE_FORCE || series[i].type === ecConfig.CHART_TYPE_FUNNEL) {
  4991. data = series[i].type != ecConfig.CHART_TYPE_FORCE ? series[i].data : series[i].categories;
  4992. for (var j = 0, k = data.length; j < k; j++) {
  4993. if (data[j].name === name && data[j].value != '-') {
  4994. amount++;
  4995. }
  4996. }
  4997. }
  4998. }
  4999. return amount;
  5000. },
  5001. setColor: function (legendName, color) {
  5002. this._colorMap[legendName] = color;
  5003. },
  5004. getColor: function (legendName) {
  5005. if (!this._colorMap[legendName]) {
  5006. this._colorMap[legendName] = this.zr.getColor(this._colorIndex++);
  5007. }
  5008. return this._colorMap[legendName];
  5009. },
  5010. hasColor: function (legendName) {
  5011. return this._colorMap[legendName] ? this._colorMap[legendName] : false;
  5012. },
  5013. add: function (name, color) {
  5014. var data = this.legendOption.data;
  5015. for (var i = 0, dataLength = data.length; i < dataLength; i++) {
  5016. if (this._getName(data[i]) === name) {
  5017. return;
  5018. }
  5019. }
  5020. this.legendOption.data.push(name);
  5021. this.setColor(name, color);
  5022. this._selectedMap[name] = true;
  5023. this._hasDataMap[name] = true;
  5024. },
  5025. del: function (name) {
  5026. var data = this.legendOption.data;
  5027. for (var i = 0, dataLength = data.length; i < dataLength; i++) {
  5028. if (this._getName(data[i]) === name) {
  5029. return this.legendOption.data.splice(i, 1);
  5030. }
  5031. }
  5032. },
  5033. getItemShape: function (name) {
  5034. if (name == null) {
  5035. return;
  5036. }
  5037. var shape;
  5038. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  5039. shape = this.shapeList[i];
  5040. if (shape._name === name && shape.type != 'text') {
  5041. return shape;
  5042. }
  5043. }
  5044. },
  5045. setItemShape: function (name, itemShape) {
  5046. var shape;
  5047. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  5048. shape = this.shapeList[i];
  5049. if (shape._name === name && shape.type != 'text') {
  5050. if (!this._selectedMap[name]) {
  5051. itemShape.style.color = '#ccc';
  5052. itemShape.style.strokeColor = '#ccc';
  5053. }
  5054. this.zr.modShape(shape.id, itemShape);
  5055. }
  5056. }
  5057. },
  5058. isSelected: function (itemName) {
  5059. if (typeof this._selectedMap[itemName] != 'undefined') {
  5060. return this._selectedMap[itemName];
  5061. } else {
  5062. return true;
  5063. }
  5064. },
  5065. getSelectedMap: function () {
  5066. return this._selectedMap;
  5067. },
  5068. setSelected: function (itemName, selectStatus) {
  5069. if (this.legendOption.selectedMode === 'single') {
  5070. for (var k in this._selectedMap) {
  5071. this._selectedMap[k] = false;
  5072. }
  5073. }
  5074. this._selectedMap[itemName] = selectStatus;
  5075. this.messageCenter.dispatch(ecConfig.EVENT.LEGEND_SELECTED, null, {
  5076. selected: this._selectedMap,
  5077. target: itemName
  5078. }, this.myChart);
  5079. },
  5080. onlegendSelected: function (param, status) {
  5081. var legendSelected = param.selected;
  5082. for (var itemName in legendSelected) {
  5083. if (this._selectedMap[itemName] != legendSelected[itemName]) {
  5084. status.needRefresh = true;
  5085. }
  5086. this._selectedMap[itemName] = legendSelected[itemName];
  5087. }
  5088. return;
  5089. }
  5090. };
  5091. var legendIcon = {
  5092. line: function (ctx, style) {
  5093. var dy = style.height / 2;
  5094. ctx.moveTo(style.x, style.y + dy);
  5095. ctx.lineTo(style.x + style.width, style.y + dy);
  5096. },
  5097. pie: function (ctx, style) {
  5098. var x = style.x;
  5099. var y = style.y;
  5100. var width = style.width;
  5101. var height = style.height;
  5102. SectorShape.prototype.buildPath(ctx, {
  5103. x: x + width / 2,
  5104. y: y + height + 2,
  5105. r: height,
  5106. r0: 6,
  5107. startAngle: 45,
  5108. endAngle: 135
  5109. });
  5110. },
  5111. eventRiver: function (ctx, style) {
  5112. var x = style.x;
  5113. var y = style.y;
  5114. var width = style.width;
  5115. var height = style.height;
  5116. ctx.moveTo(x, y + height);
  5117. ctx.bezierCurveTo(x + width, y + height, x, y + 4, x + width, y + 4);
  5118. ctx.lineTo(x + width, y);
  5119. ctx.bezierCurveTo(x, y, x + width, y + height - 4, x, y + height - 4);
  5120. ctx.lineTo(x, y + height);
  5121. },
  5122. k: function (ctx, style) {
  5123. var x = style.x;
  5124. var y = style.y;
  5125. var width = style.width;
  5126. var height = style.height;
  5127. CandleShape.prototype.buildPath(ctx, {
  5128. x: x + width / 2,
  5129. y: [
  5130. y + 1,
  5131. y + 1,
  5132. y + height - 6,
  5133. y + height
  5134. ],
  5135. width: width - 6
  5136. });
  5137. },
  5138. bar: function (ctx, style) {
  5139. var x = style.x;
  5140. var y = style.y + 1;
  5141. var width = style.width;
  5142. var height = style.height - 2;
  5143. var r = 3;
  5144. ctx.moveTo(x + r, y);
  5145. ctx.lineTo(x + width - r, y);
  5146. ctx.quadraticCurveTo(x + width, y, x + width, y + r);
  5147. ctx.lineTo(x + width, y + height - r);
  5148. ctx.quadraticCurveTo(x + width, y + height, x + width - r, y + height);
  5149. ctx.lineTo(x + r, y + height);
  5150. ctx.quadraticCurveTo(x, y + height, x, y + height - r);
  5151. ctx.lineTo(x, y + r);
  5152. ctx.quadraticCurveTo(x, y, x + r, y);
  5153. },
  5154. force: function (ctx, style) {
  5155. IconShape.prototype.iconLibrary.circle(ctx, style);
  5156. },
  5157. radar: function (ctx, style) {
  5158. var n = 6;
  5159. var x = style.x + style.width / 2;
  5160. var y = style.y + style.height / 2;
  5161. var r = style.height / 2;
  5162. var dStep = 2 * Math.PI / n;
  5163. var deg = -Math.PI / 2;
  5164. var xStart = x + r * Math.cos(deg);
  5165. var yStart = y + r * Math.sin(deg);
  5166. ctx.moveTo(xStart, yStart);
  5167. deg += dStep;
  5168. for (var i = 0, end = n - 1; i < end; i++) {
  5169. ctx.lineTo(x + r * Math.cos(deg), y + r * Math.sin(deg));
  5170. deg += dStep;
  5171. }
  5172. ctx.lineTo(xStart, yStart);
  5173. }
  5174. };
  5175. legendIcon.chord = legendIcon.pie;
  5176. legendIcon.map = legendIcon.bar;
  5177. for (var k in legendIcon) {
  5178. IconShape.prototype.iconLibrary['legendicon' + k] = legendIcon[k];
  5179. }
  5180. zrUtil.inherits(Legend, Base);
  5181. require('../component').define('legend', Legend);
  5182. return Legend;
  5183. });define('echarts/util/ecData', [], function () {
  5184. function pack(shape, series, seriesIndex, data, dataIndex, name, special, special2) {
  5185. var value;
  5186. if (typeof data != 'undefined') {
  5187. value = data.value == null ? data : data.value;
  5188. }
  5189. shape._echartsData = {
  5190. '_series': series,
  5191. '_seriesIndex': seriesIndex,
  5192. '_data': data,
  5193. '_dataIndex': dataIndex,
  5194. '_name': name,
  5195. '_value': value,
  5196. '_special': special,
  5197. '_special2': special2
  5198. };
  5199. return shape._echartsData;
  5200. }
  5201. function get(shape, key) {
  5202. var data = shape._echartsData;
  5203. if (!key) {
  5204. return data;
  5205. }
  5206. switch (key) {
  5207. case 'series':
  5208. case 'seriesIndex':
  5209. case 'data':
  5210. case 'dataIndex':
  5211. case 'name':
  5212. case 'value':
  5213. case 'special':
  5214. case 'special2':
  5215. return data && data['_' + key];
  5216. }
  5217. return null;
  5218. }
  5219. function set(shape, key, value) {
  5220. shape._echartsData = shape._echartsData || {};
  5221. switch (key) {
  5222. case 'series':
  5223. case 'seriesIndex':
  5224. case 'data':
  5225. case 'dataIndex':
  5226. case 'name':
  5227. case 'value':
  5228. case 'special':
  5229. case 'special2':
  5230. shape._echartsData['_' + key] = value;
  5231. break;
  5232. }
  5233. }
  5234. function clone(source, target) {
  5235. target._echartsData = {
  5236. '_series': source._echartsData._series,
  5237. '_seriesIndex': source._echartsData._seriesIndex,
  5238. '_data': source._echartsData._data,
  5239. '_dataIndex': source._echartsData._dataIndex,
  5240. '_name': source._echartsData._name,
  5241. '_value': source._echartsData._value,
  5242. '_special': source._echartsData._special,
  5243. '_special2': source._echartsData._special2
  5244. };
  5245. }
  5246. return {
  5247. pack: pack,
  5248. set: set,
  5249. get: get,
  5250. clone: clone
  5251. };
  5252. });define('echarts/chart', [], function () {
  5253. var self = {};
  5254. var _chartLibrary = {};
  5255. self.define = function (name, clazz) {
  5256. _chartLibrary[name] = clazz;
  5257. return self;
  5258. };
  5259. self.get = function (name) {
  5260. return _chartLibrary[name];
  5261. };
  5262. return self;
  5263. });define('zrender/tool/color', [
  5264. 'require',
  5265. '../tool/util'
  5266. ], function (require) {
  5267. var util = require('../tool/util');
  5268. var _ctx;
  5269. var palette = [
  5270. '#ff9277',
  5271. ' #dddd00',
  5272. ' #ffc877',
  5273. ' #bbe3ff',
  5274. ' #d5ffbb',
  5275. '#bbbbff',
  5276. ' #ddb000',
  5277. ' #b0dd00',
  5278. ' #e2bbff',
  5279. ' #ffbbe3',
  5280. '#ff7777',
  5281. ' #ff9900',
  5282. ' #83dd00',
  5283. ' #77e3ff',
  5284. ' #778fff',
  5285. '#c877ff',
  5286. ' #ff77ab',
  5287. ' #ff6600',
  5288. ' #aa8800',
  5289. ' #77c7ff',
  5290. '#ad77ff',
  5291. ' #ff77ff',
  5292. ' #dd0083',
  5293. ' #777700',
  5294. ' #00aa00',
  5295. '#0088aa',
  5296. ' #8400dd',
  5297. ' #aa0088',
  5298. ' #dd0000',
  5299. ' #772e00'
  5300. ];
  5301. var _palette = palette;
  5302. var highlightColor = 'rgba(255,255,0,0.5)';
  5303. var _highlightColor = highlightColor;
  5304. var colorRegExp = /^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i;
  5305. var _nameColors = {
  5306. aliceblue: '#f0f8ff',
  5307. antiquewhite: '#faebd7',
  5308. aqua: '#0ff',
  5309. aquamarine: '#7fffd4',
  5310. azure: '#f0ffff',
  5311. beige: '#f5f5dc',
  5312. bisque: '#ffe4c4',
  5313. black: '#000',
  5314. blanchedalmond: '#ffebcd',
  5315. blue: '#00f',
  5316. blueviolet: '#8a2be2',
  5317. brown: '#a52a2a',
  5318. burlywood: '#deb887',
  5319. cadetblue: '#5f9ea0',
  5320. chartreuse: '#7fff00',
  5321. chocolate: '#d2691e',
  5322. coral: '#ff7f50',
  5323. cornflowerblue: '#6495ed',
  5324. cornsilk: '#fff8dc',
  5325. crimson: '#dc143c',
  5326. cyan: '#0ff',
  5327. darkblue: '#00008b',
  5328. darkcyan: '#008b8b',
  5329. darkgoldenrod: '#b8860b',
  5330. darkgray: '#a9a9a9',
  5331. darkgrey: '#a9a9a9',
  5332. darkgreen: '#006400',
  5333. darkkhaki: '#bdb76b',
  5334. darkmagenta: '#8b008b',
  5335. darkolivegreen: '#556b2f',
  5336. darkorange: '#ff8c00',
  5337. darkorchid: '#9932cc',
  5338. darkred: '#8b0000',
  5339. darksalmon: '#e9967a',
  5340. darkseagreen: '#8fbc8f',
  5341. darkslateblue: '#483d8b',
  5342. darkslategray: '#2f4f4f',
  5343. darkslategrey: '#2f4f4f',
  5344. darkturquoise: '#00ced1',
  5345. darkviolet: '#9400d3',
  5346. deeppink: '#ff1493',
  5347. deepskyblue: '#00bfff',
  5348. dimgray: '#696969',
  5349. dimgrey: '#696969',
  5350. dodgerblue: '#1e90ff',
  5351. firebrick: '#b22222',
  5352. floralwhite: '#fffaf0',
  5353. forestgreen: '#228b22',
  5354. fuchsia: '#f0f',
  5355. gainsboro: '#dcdcdc',
  5356. ghostwhite: '#f8f8ff',
  5357. gold: '#ffd700',
  5358. goldenrod: '#daa520',
  5359. gray: '#808080',
  5360. grey: '#808080',
  5361. green: '#008000',
  5362. greenyellow: '#adff2f',
  5363. honeydew: '#f0fff0',
  5364. hotpink: '#ff69b4',
  5365. indianred: '#cd5c5c',
  5366. indigo: '#4b0082',
  5367. ivory: '#fffff0',
  5368. khaki: '#f0e68c',
  5369. lavender: '#e6e6fa',
  5370. lavenderblush: '#fff0f5',
  5371. lawngreen: '#7cfc00',
  5372. lemonchiffon: '#fffacd',
  5373. lightblue: '#add8e6',
  5374. lightcoral: '#f08080',
  5375. lightcyan: '#e0ffff',
  5376. lightgoldenrodyellow: '#fafad2',
  5377. lightgray: '#d3d3d3',
  5378. lightgrey: '#d3d3d3',
  5379. lightgreen: '#90ee90',
  5380. lightpink: '#ffb6c1',
  5381. lightsalmon: '#ffa07a',
  5382. lightseagreen: '#20b2aa',
  5383. lightskyblue: '#87cefa',
  5384. lightslategray: '#789',
  5385. lightslategrey: '#789',
  5386. lightsteelblue: '#b0c4de',
  5387. lightyellow: '#ffffe0',
  5388. lime: '#0f0',
  5389. limegreen: '#32cd32',
  5390. linen: '#faf0e6',
  5391. magenta: '#f0f',
  5392. maroon: '#800000',
  5393. mediumaquamarine: '#66cdaa',
  5394. mediumblue: '#0000cd',
  5395. mediumorchid: '#ba55d3',
  5396. mediumpurple: '#9370d8',
  5397. mediumseagreen: '#3cb371',
  5398. mediumslateblue: '#7b68ee',
  5399. mediumspringgreen: '#00fa9a',
  5400. mediumturquoise: '#48d1cc',
  5401. mediumvioletred: '#c71585',
  5402. midnightblue: '#191970',
  5403. mintcream: '#f5fffa',
  5404. mistyrose: '#ffe4e1',
  5405. moccasin: '#ffe4b5',
  5406. navajowhite: '#ffdead',
  5407. navy: '#000080',
  5408. oldlace: '#fdf5e6',
  5409. olive: '#808000',
  5410. olivedrab: '#6b8e23',
  5411. orange: '#ffa500',
  5412. orangered: '#ff4500',
  5413. orchid: '#da70d6',
  5414. palegoldenrod: '#eee8aa',
  5415. palegreen: '#98fb98',
  5416. paleturquoise: '#afeeee',
  5417. palevioletred: '#d87093',
  5418. papayawhip: '#ffefd5',
  5419. peachpuff: '#ffdab9',
  5420. peru: '#cd853f',
  5421. pink: '#ffc0cb',
  5422. plum: '#dda0dd',
  5423. powderblue: '#b0e0e6',
  5424. purple: '#800080',
  5425. red: '#f00',
  5426. rosybrown: '#bc8f8f',
  5427. royalblue: '#4169e1',
  5428. saddlebrown: '#8b4513',
  5429. salmon: '#fa8072',
  5430. sandybrown: '#f4a460',
  5431. seagreen: '#2e8b57',
  5432. seashell: '#fff5ee',
  5433. sienna: '#a0522d',
  5434. silver: '#c0c0c0',
  5435. skyblue: '#87ceeb',
  5436. slateblue: '#6a5acd',
  5437. slategray: '#708090',
  5438. slategrey: '#708090',
  5439. snow: '#fffafa',
  5440. springgreen: '#00ff7f',
  5441. steelblue: '#4682b4',
  5442. tan: '#d2b48c',
  5443. teal: '#008080',
  5444. thistle: '#d8bfd8',
  5445. tomato: '#ff6347',
  5446. turquoise: '#40e0d0',
  5447. violet: '#ee82ee',
  5448. wheat: '#f5deb3',
  5449. white: '#fff',
  5450. whitesmoke: '#f5f5f5',
  5451. yellow: '#ff0',
  5452. yellowgreen: '#9acd32'
  5453. };
  5454. function customPalette(userPalete) {
  5455. palette = userPalete;
  5456. }
  5457. function resetPalette() {
  5458. palette = _palette;
  5459. }
  5460. function getColor(idx, userPalete) {
  5461. idx = idx | 0;
  5462. userPalete = userPalete || palette;
  5463. return userPalete[idx % userPalete.length];
  5464. }
  5465. function customHighlight(userHighlightColor) {
  5466. highlightColor = userHighlightColor;
  5467. }
  5468. function resetHighlight() {
  5469. _highlightColor = highlightColor;
  5470. }
  5471. function getHighlightColor() {
  5472. return highlightColor;
  5473. }
  5474. function getRadialGradient(x0, y0, r0, x1, y1, r1, colorList) {
  5475. if (!_ctx) {
  5476. _ctx = util.getContext();
  5477. }
  5478. var gradient = _ctx.createRadialGradient(x0, y0, r0, x1, y1, r1);
  5479. for (var i = 0, l = colorList.length; i < l; i++) {
  5480. gradient.addColorStop(colorList[i][0], colorList[i][1]);
  5481. }
  5482. gradient.__nonRecursion = true;
  5483. return gradient;
  5484. }
  5485. function getLinearGradient(x0, y0, x1, y1, colorList) {
  5486. if (!_ctx) {
  5487. _ctx = util.getContext();
  5488. }
  5489. var gradient = _ctx.createLinearGradient(x0, y0, x1, y1);
  5490. for (var i = 0, l = colorList.length; i < l; i++) {
  5491. gradient.addColorStop(colorList[i][0], colorList[i][1]);
  5492. }
  5493. gradient.__nonRecursion = true;
  5494. return gradient;
  5495. }
  5496. function getStepColors(start, end, step) {
  5497. start = toRGBA(start);
  5498. end = toRGBA(end);
  5499. start = getData(start);
  5500. end = getData(end);
  5501. var colors = [];
  5502. var stepR = (end[0] - start[0]) / step;
  5503. var stepG = (end[1] - start[1]) / step;
  5504. var stepB = (end[2] - start[2]) / step;
  5505. var stepA = (end[3] - start[3]) / step;
  5506. for (var i = 0, r = start[0], g = start[1], b = start[2], a = start[3]; i < step; i++) {
  5507. colors[i] = toColor([
  5508. adjust(Math.floor(r), [
  5509. 0,
  5510. 255
  5511. ]),
  5512. adjust(Math.floor(g), [
  5513. 0,
  5514. 255
  5515. ]),
  5516. adjust(Math.floor(b), [
  5517. 0,
  5518. 255
  5519. ]),
  5520. a.toFixed(4) - 0
  5521. ], 'rgba');
  5522. r += stepR;
  5523. g += stepG;
  5524. b += stepB;
  5525. a += stepA;
  5526. }
  5527. r = end[0];
  5528. g = end[1];
  5529. b = end[2];
  5530. a = end[3];
  5531. colors[i] = toColor([
  5532. r,
  5533. g,
  5534. b,
  5535. a
  5536. ], 'rgba');
  5537. return colors;
  5538. }
  5539. function getGradientColors(colors, step) {
  5540. var ret = [];
  5541. var len = colors.length;
  5542. if (step === undefined) {
  5543. step = 20;
  5544. }
  5545. if (len === 1) {
  5546. ret = getStepColors(colors[0], colors[0], step);
  5547. } else if (len > 1) {
  5548. for (var i = 0, n = len - 1; i < n; i++) {
  5549. var steps = getStepColors(colors[i], colors[i + 1], step);
  5550. if (i < n - 1) {
  5551. steps.pop();
  5552. }
  5553. ret = ret.concat(steps);
  5554. }
  5555. }
  5556. return ret;
  5557. }
  5558. function toColor(data, format) {
  5559. format = format || 'rgb';
  5560. if (data && (data.length === 3 || data.length === 4)) {
  5561. data = map(data, function (c) {
  5562. return c > 1 ? Math.ceil(c) : c;
  5563. });
  5564. if (format.indexOf('hex') > -1) {
  5565. return '#' + ((1 << 24) + (data[0] << 16) + (data[1] << 8) + +data[2]).toString(16).slice(1);
  5566. } else if (format.indexOf('hs') > -1) {
  5567. var sx = map(data.slice(1, 3), function (c) {
  5568. return c + '%';
  5569. });
  5570. data[1] = sx[0];
  5571. data[2] = sx[1];
  5572. }
  5573. if (format.indexOf('a') > -1) {
  5574. if (data.length === 3) {
  5575. data.push(1);
  5576. }
  5577. data[3] = adjust(data[3], [
  5578. 0,
  5579. 1
  5580. ]);
  5581. return format + '(' + data.slice(0, 4).join(',') + ')';
  5582. }
  5583. return format + '(' + data.slice(0, 3).join(',') + ')';
  5584. }
  5585. }
  5586. function toArray(color) {
  5587. color = trim(color);
  5588. if (color.indexOf('rgba') < 0) {
  5589. color = toRGBA(color);
  5590. }
  5591. var data = [];
  5592. var i = 0;
  5593. color.replace(/[\d.]+/g, function (n) {
  5594. if (i < 3) {
  5595. n = n | 0;
  5596. } else {
  5597. n = +n;
  5598. }
  5599. data[i++] = n;
  5600. });
  5601. return data;
  5602. }
  5603. function convert(color, format) {
  5604. if (!isCalculableColor(color)) {
  5605. return color;
  5606. }
  5607. var data = getData(color);
  5608. var alpha = data[3];
  5609. if (typeof alpha === 'undefined') {
  5610. alpha = 1;
  5611. }
  5612. if (color.indexOf('hsb') > -1) {
  5613. data = _HSV_2_RGB(data);
  5614. } else if (color.indexOf('hsl') > -1) {
  5615. data = _HSL_2_RGB(data);
  5616. }
  5617. if (format.indexOf('hsb') > -1 || format.indexOf('hsv') > -1) {
  5618. data = _RGB_2_HSB(data);
  5619. } else if (format.indexOf('hsl') > -1) {
  5620. data = _RGB_2_HSL(data);
  5621. }
  5622. data[3] = alpha;
  5623. return toColor(data, format);
  5624. }
  5625. function toRGBA(color) {
  5626. return convert(color, 'rgba');
  5627. }
  5628. function toRGB(color) {
  5629. return convert(color, 'rgb');
  5630. }
  5631. function toHex(color) {
  5632. return convert(color, 'hex');
  5633. }
  5634. function toHSVA(color) {
  5635. return convert(color, 'hsva');
  5636. }
  5637. function toHSV(color) {
  5638. return convert(color, 'hsv');
  5639. }
  5640. function toHSBA(color) {
  5641. return convert(color, 'hsba');
  5642. }
  5643. function toHSB(color) {
  5644. return convert(color, 'hsb');
  5645. }
  5646. function toHSLA(color) {
  5647. return convert(color, 'hsla');
  5648. }
  5649. function toHSL(color) {
  5650. return convert(color, 'hsl');
  5651. }
  5652. function toName(color) {
  5653. for (var key in _nameColors) {
  5654. if (toHex(_nameColors[key]) === toHex(color)) {
  5655. return key;
  5656. }
  5657. }
  5658. return null;
  5659. }
  5660. function trim(color) {
  5661. return String(color).replace(/\s+/g, '');
  5662. }
  5663. function normalize(color) {
  5664. if (_nameColors[color]) {
  5665. color = _nameColors[color];
  5666. }
  5667. color = trim(color);
  5668. color = color.replace(/hsv/i, 'hsb');
  5669. if (/^#[\da-f]{3}$/i.test(color)) {
  5670. color = parseInt(color.slice(1), 16);
  5671. var r = (color & 3840) << 8;
  5672. var g = (color & 240) << 4;
  5673. var b = color & 15;
  5674. color = '#' + ((1 << 24) + (r << 4) + r + (g << 4) + g + (b << 4) + b).toString(16).slice(1);
  5675. }
  5676. return color;
  5677. }
  5678. function lift(color, level) {
  5679. if (!isCalculableColor(color)) {
  5680. return color;
  5681. }
  5682. var direct = level > 0 ? 1 : -1;
  5683. if (typeof level === 'undefined') {
  5684. level = 0;
  5685. }
  5686. level = Math.abs(level) > 1 ? 1 : Math.abs(level);
  5687. color = toRGB(color);
  5688. var data = getData(color);
  5689. for (var i = 0; i < 3; i++) {
  5690. if (direct === 1) {
  5691. data[i] = data[i] * (1 - level) | 0;
  5692. } else {
  5693. data[i] = (255 - data[i]) * level + data[i] | 0;
  5694. }
  5695. }
  5696. return 'rgb(' + data.join(',') + ')';
  5697. }
  5698. function reverse(color) {
  5699. if (!isCalculableColor(color)) {
  5700. return color;
  5701. }
  5702. var data = getData(toRGBA(color));
  5703. data = map(data, function (c) {
  5704. return 255 - c;
  5705. });
  5706. return toColor(data, 'rgb');
  5707. }
  5708. function mix(color1, color2, weight) {
  5709. if (!isCalculableColor(color1) || !isCalculableColor(color2)) {
  5710. return color1;
  5711. }
  5712. if (typeof weight === 'undefined') {
  5713. weight = 0.5;
  5714. }
  5715. weight = 1 - adjust(weight, [
  5716. 0,
  5717. 1
  5718. ]);
  5719. var w = weight * 2 - 1;
  5720. var data1 = getData(toRGBA(color1));
  5721. var data2 = getData(toRGBA(color2));
  5722. var d = data1[3] - data2[3];
  5723. var weight1 = ((w * d === -1 ? w : (w + d) / (1 + w * d)) + 1) / 2;
  5724. var weight2 = 1 - weight1;
  5725. var data = [];
  5726. for (var i = 0; i < 3; i++) {
  5727. data[i] = data1[i] * weight1 + data2[i] * weight2;
  5728. }
  5729. var alpha = data1[3] * weight + data2[3] * (1 - weight);
  5730. alpha = Math.max(0, Math.min(1, alpha));
  5731. if (data1[3] === 1 && data2[3] === 1) {
  5732. return toColor(data, 'rgb');
  5733. }
  5734. data[3] = alpha;
  5735. return toColor(data, 'rgba');
  5736. }
  5737. function random() {
  5738. return '#' + (Math.random().toString(16) + '0000').slice(2, 8);
  5739. }
  5740. function getData(color) {
  5741. color = normalize(color);
  5742. var r = color.match(colorRegExp);
  5743. if (r === null) {
  5744. throw new Error('The color format error');
  5745. }
  5746. var d;
  5747. var a;
  5748. var data = [];
  5749. var rgb;
  5750. if (r[2]) {
  5751. d = r[2].replace('#', '').split('');
  5752. rgb = [
  5753. d[0] + d[1],
  5754. d[2] + d[3],
  5755. d[4] + d[5]
  5756. ];
  5757. data = map(rgb, function (c) {
  5758. return adjust(parseInt(c, 16), [
  5759. 0,
  5760. 255
  5761. ]);
  5762. });
  5763. } else if (r[4]) {
  5764. var rgba = r[4].split(',');
  5765. a = rgba[3];
  5766. rgb = rgba.slice(0, 3);
  5767. data = map(rgb, function (c) {
  5768. c = Math.floor(c.indexOf('%') > 0 ? parseInt(c, 0) * 2.55 : c);
  5769. return adjust(c, [
  5770. 0,
  5771. 255
  5772. ]);
  5773. });
  5774. if (typeof a !== 'undefined') {
  5775. data.push(adjust(parseFloat(a), [
  5776. 0,
  5777. 1
  5778. ]));
  5779. }
  5780. } else if (r[5] || r[6]) {
  5781. var hsxa = (r[5] || r[6]).split(',');
  5782. var h = parseInt(hsxa[0], 0) / 360;
  5783. var s = hsxa[1];
  5784. var x = hsxa[2];
  5785. a = hsxa[3];
  5786. data = map([
  5787. s,
  5788. x
  5789. ], function (c) {
  5790. return adjust(parseFloat(c) / 100, [
  5791. 0,
  5792. 1
  5793. ]);
  5794. });
  5795. data.unshift(h);
  5796. if (typeof a !== 'undefined') {
  5797. data.push(adjust(parseFloat(a), [
  5798. 0,
  5799. 1
  5800. ]));
  5801. }
  5802. }
  5803. return data;
  5804. }
  5805. function alpha(color, a) {
  5806. if (!isCalculableColor(color)) {
  5807. return color;
  5808. }
  5809. if (a === null) {
  5810. a = 1;
  5811. }
  5812. var data = getData(toRGBA(color));
  5813. data[3] = adjust(Number(a).toFixed(4), [
  5814. 0,
  5815. 1
  5816. ]);
  5817. return toColor(data, 'rgba');
  5818. }
  5819. function map(array, fun) {
  5820. if (typeof fun !== 'function') {
  5821. throw new TypeError();
  5822. }
  5823. var len = array ? array.length : 0;
  5824. for (var i = 0; i < len; i++) {
  5825. array[i] = fun(array[i]);
  5826. }
  5827. return array;
  5828. }
  5829. function adjust(value, region) {
  5830. if (value <= region[0]) {
  5831. value = region[0];
  5832. } else if (value >= region[1]) {
  5833. value = region[1];
  5834. }
  5835. return value;
  5836. }
  5837. function isCalculableColor(color) {
  5838. return color instanceof Array || typeof color === 'string';
  5839. }
  5840. function _HSV_2_RGB(data) {
  5841. var H = data[0];
  5842. var S = data[1];
  5843. var V = data[2];
  5844. var R;
  5845. var G;
  5846. var B;
  5847. if (S === 0) {
  5848. R = V * 255;
  5849. G = V * 255;
  5850. B = V * 255;
  5851. } else {
  5852. var h = H * 6;
  5853. if (h === 6) {
  5854. h = 0;
  5855. }
  5856. var i = h | 0;
  5857. var v1 = V * (1 - S);
  5858. var v2 = V * (1 - S * (h - i));
  5859. var v3 = V * (1 - S * (1 - (h - i)));
  5860. var r = 0;
  5861. var g = 0;
  5862. var b = 0;
  5863. if (i === 0) {
  5864. r = V;
  5865. g = v3;
  5866. b = v1;
  5867. } else if (i === 1) {
  5868. r = v2;
  5869. g = V;
  5870. b = v1;
  5871. } else if (i === 2) {
  5872. r = v1;
  5873. g = V;
  5874. b = v3;
  5875. } else if (i === 3) {
  5876. r = v1;
  5877. g = v2;
  5878. b = V;
  5879. } else if (i === 4) {
  5880. r = v3;
  5881. g = v1;
  5882. b = V;
  5883. } else {
  5884. r = V;
  5885. g = v1;
  5886. b = v2;
  5887. }
  5888. R = r * 255;
  5889. G = g * 255;
  5890. B = b * 255;
  5891. }
  5892. return [
  5893. R,
  5894. G,
  5895. B
  5896. ];
  5897. }
  5898. function _HSL_2_RGB(data) {
  5899. var H = data[0];
  5900. var S = data[1];
  5901. var L = data[2];
  5902. var R;
  5903. var G;
  5904. var B;
  5905. if (S === 0) {
  5906. R = L * 255;
  5907. G = L * 255;
  5908. B = L * 255;
  5909. } else {
  5910. var v2;
  5911. if (L < 0.5) {
  5912. v2 = L * (1 + S);
  5913. } else {
  5914. v2 = L + S - S * L;
  5915. }
  5916. var v1 = 2 * L - v2;
  5917. R = 255 * _HUE_2_RGB(v1, v2, H + 1 / 3);
  5918. G = 255 * _HUE_2_RGB(v1, v2, H);
  5919. B = 255 * _HUE_2_RGB(v1, v2, H - 1 / 3);
  5920. }
  5921. return [
  5922. R,
  5923. G,
  5924. B
  5925. ];
  5926. }
  5927. function _HUE_2_RGB(v1, v2, vH) {
  5928. if (vH < 0) {
  5929. vH += 1;
  5930. }
  5931. if (vH > 1) {
  5932. vH -= 1;
  5933. }
  5934. if (6 * vH < 1) {
  5935. return v1 + (v2 - v1) * 6 * vH;
  5936. }
  5937. if (2 * vH < 1) {
  5938. return v2;
  5939. }
  5940. if (3 * vH < 2) {
  5941. return v1 + (v2 - v1) * (2 / 3 - vH) * 6;
  5942. }
  5943. return v1;
  5944. }
  5945. function _RGB_2_HSB(data) {
  5946. var R = data[0] / 255;
  5947. var G = data[1] / 255;
  5948. var B = data[2] / 255;
  5949. var vMin = Math.min(R, G, B);
  5950. var vMax = Math.max(R, G, B);
  5951. var delta = vMax - vMin;
  5952. var V = vMax;
  5953. var H;
  5954. var S;
  5955. if (delta === 0) {
  5956. H = 0;
  5957. S = 0;
  5958. } else {
  5959. S = delta / vMax;
  5960. var deltaR = ((vMax - R) / 6 + delta / 2) / delta;
  5961. var deltaG = ((vMax - G) / 6 + delta / 2) / delta;
  5962. var deltaB = ((vMax - B) / 6 + delta / 2) / delta;
  5963. if (R === vMax) {
  5964. H = deltaB - deltaG;
  5965. } else if (G === vMax) {
  5966. H = 1 / 3 + deltaR - deltaB;
  5967. } else if (B === vMax) {
  5968. H = 2 / 3 + deltaG - deltaR;
  5969. }
  5970. if (H < 0) {
  5971. H += 1;
  5972. }
  5973. if (H > 1) {
  5974. H -= 1;
  5975. }
  5976. }
  5977. H = H * 360;
  5978. S = S * 100;
  5979. V = V * 100;
  5980. return [
  5981. H,
  5982. S,
  5983. V
  5984. ];
  5985. }
  5986. function _RGB_2_HSL(data) {
  5987. var R = data[0] / 255;
  5988. var G = data[1] / 255;
  5989. var B = data[2] / 255;
  5990. var vMin = Math.min(R, G, B);
  5991. var vMax = Math.max(R, G, B);
  5992. var delta = vMax - vMin;
  5993. var L = (vMax + vMin) / 2;
  5994. var H;
  5995. var S;
  5996. if (delta === 0) {
  5997. H = 0;
  5998. S = 0;
  5999. } else {
  6000. if (L < 0.5) {
  6001. S = delta / (vMax + vMin);
  6002. } else {
  6003. S = delta / (2 - vMax - vMin);
  6004. }
  6005. var deltaR = ((vMax - R) / 6 + delta / 2) / delta;
  6006. var deltaG = ((vMax - G) / 6 + delta / 2) / delta;
  6007. var deltaB = ((vMax - B) / 6 + delta / 2) / delta;
  6008. if (R === vMax) {
  6009. H = deltaB - deltaG;
  6010. } else if (G === vMax) {
  6011. H = 1 / 3 + deltaR - deltaB;
  6012. } else if (B === vMax) {
  6013. H = 2 / 3 + deltaG - deltaR;
  6014. }
  6015. if (H < 0) {
  6016. H += 1;
  6017. }
  6018. if (H > 1) {
  6019. H -= 1;
  6020. }
  6021. }
  6022. H = H * 360;
  6023. S = S * 100;
  6024. L = L * 100;
  6025. return [
  6026. H,
  6027. S,
  6028. L
  6029. ];
  6030. }
  6031. return {
  6032. customPalette: customPalette,
  6033. resetPalette: resetPalette,
  6034. getColor: getColor,
  6035. getHighlightColor: getHighlightColor,
  6036. customHighlight: customHighlight,
  6037. resetHighlight: resetHighlight,
  6038. getRadialGradient: getRadialGradient,
  6039. getLinearGradient: getLinearGradient,
  6040. getGradientColors: getGradientColors,
  6041. getStepColors: getStepColors,
  6042. reverse: reverse,
  6043. mix: mix,
  6044. lift: lift,
  6045. trim: trim,
  6046. random: random,
  6047. toRGB: toRGB,
  6048. toRGBA: toRGBA,
  6049. toHex: toHex,
  6050. toHSL: toHSL,
  6051. toHSLA: toHSLA,
  6052. toHSB: toHSB,
  6053. toHSBA: toHSBA,
  6054. toHSV: toHSV,
  6055. toHSVA: toHSVA,
  6056. toName: toName,
  6057. toColor: toColor,
  6058. toArray: toArray,
  6059. alpha: alpha,
  6060. getData: getData
  6061. };
  6062. });define('echarts/component/timeline', [
  6063. 'require',
  6064. './base',
  6065. 'zrender/shape/Rectangle',
  6066. '../util/shape/Icon',
  6067. '../util/shape/Chain',
  6068. '../config',
  6069. 'zrender/tool/util',
  6070. 'zrender/tool/area',
  6071. 'zrender/tool/event',
  6072. '../component'
  6073. ], function (require) {
  6074. var Base = require('./base');
  6075. var RectangleShape = require('zrender/shape/Rectangle');
  6076. var IconShape = require('../util/shape/Icon');
  6077. var ChainShape = require('../util/shape/Chain');
  6078. var ecConfig = require('../config');
  6079. ecConfig.timeline = {
  6080. zlevel: 0,
  6081. z: 4,
  6082. show: true,
  6083. type: 'time',
  6084. notMerge: false,
  6085. realtime: true,
  6086. x: 80,
  6087. x2: 80,
  6088. y2: 0,
  6089. height: 50,
  6090. backgroundColor: 'rgba(0,0,0,0)',
  6091. borderColor: '#ccc',
  6092. borderWidth: 0,
  6093. padding: 5,
  6094. controlPosition: 'left',
  6095. autoPlay: false,
  6096. loop: true,
  6097. playInterval: 2000,
  6098. lineStyle: {
  6099. width: 1,
  6100. color: '#666',
  6101. type: 'dashed'
  6102. },
  6103. label: {
  6104. show: true,
  6105. interval: 'auto',
  6106. rotate: 0,
  6107. textStyle: { color: '#333' }
  6108. },
  6109. checkpointStyle: {
  6110. symbol: 'auto',
  6111. symbolSize: 'auto',
  6112. color: 'auto',
  6113. borderColor: 'auto',
  6114. borderWidth: 'auto',
  6115. label: {
  6116. show: false,
  6117. textStyle: { color: 'auto' }
  6118. }
  6119. },
  6120. controlStyle: {
  6121. itemSize: 15,
  6122. itemGap: 5,
  6123. normal: { color: '#333' },
  6124. emphasis: { color: '#1e90ff' }
  6125. },
  6126. symbol: 'emptyDiamond',
  6127. symbolSize: 4,
  6128. currentIndex: 0
  6129. };
  6130. var zrUtil = require('zrender/tool/util');
  6131. var zrArea = require('zrender/tool/area');
  6132. var zrEvent = require('zrender/tool/event');
  6133. function Timeline(ecTheme, messageCenter, zr, option, myChart) {
  6134. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  6135. var self = this;
  6136. self._onclick = function (param) {
  6137. return self.__onclick(param);
  6138. };
  6139. self._ondrift = function (dx, dy) {
  6140. return self.__ondrift(this, dx, dy);
  6141. };
  6142. self._ondragend = function () {
  6143. return self.__ondragend();
  6144. };
  6145. self._setCurrentOption = function () {
  6146. var timelineOption = self.timelineOption;
  6147. self.currentIndex %= timelineOption.data.length;
  6148. var curOption = self.options[self.currentIndex] || {};
  6149. self.myChart._setOption(curOption, timelineOption.notMerge, true);
  6150. self.messageCenter.dispatch(ecConfig.EVENT.TIMELINE_CHANGED, null, {
  6151. currentIndex: self.currentIndex,
  6152. data: timelineOption.data[self.currentIndex].name != null ? timelineOption.data[self.currentIndex].name : timelineOption.data[self.currentIndex]
  6153. }, self.myChart);
  6154. };
  6155. self._onFrame = function () {
  6156. self._setCurrentOption();
  6157. self._syncHandleShape();
  6158. if (self.timelineOption.autoPlay) {
  6159. self.playTicket = setTimeout(function () {
  6160. self.currentIndex += 1;
  6161. if (!self.timelineOption.loop && self.currentIndex >= self.timelineOption.data.length) {
  6162. self.currentIndex = self.timelineOption.data.length - 1;
  6163. self.stop();
  6164. return;
  6165. }
  6166. self._onFrame();
  6167. }, self.timelineOption.playInterval);
  6168. }
  6169. };
  6170. this.setTheme(false);
  6171. this.options = this.option.options;
  6172. this.currentIndex = this.timelineOption.currentIndex % this.timelineOption.data.length;
  6173. if (!this.timelineOption.notMerge && this.currentIndex !== 0) {
  6174. this.options[this.currentIndex] = zrUtil.merge(this.options[this.currentIndex], this.options[0]);
  6175. }
  6176. if (this.timelineOption.show) {
  6177. this._buildShape();
  6178. this._syncHandleShape();
  6179. }
  6180. this._setCurrentOption();
  6181. if (this.timelineOption.autoPlay) {
  6182. var self = this;
  6183. this.playTicket = setTimeout(function () {
  6184. self.play();
  6185. }, this.ecTheme.animationDuration != null ? this.ecTheme.animationDuration : ecConfig.animationDuration);
  6186. }
  6187. }
  6188. Timeline.prototype = {
  6189. type: ecConfig.COMPONENT_TYPE_TIMELINE,
  6190. _buildShape: function () {
  6191. this._location = this._getLocation();
  6192. this._buildBackground();
  6193. this._buildControl();
  6194. this._chainPoint = this._getChainPoint();
  6195. if (this.timelineOption.label.show) {
  6196. var interval = this._getInterval();
  6197. for (var i = 0, len = this._chainPoint.length; i < len; i += interval) {
  6198. this._chainPoint[i].showLabel = true;
  6199. }
  6200. }
  6201. this._buildChain();
  6202. this._buildHandle();
  6203. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  6204. this.zr.addShape(this.shapeList[i]);
  6205. }
  6206. },
  6207. _getLocation: function () {
  6208. var timelineOption = this.timelineOption;
  6209. var padding = this.reformCssArray(this.timelineOption.padding);
  6210. var zrWidth = this.zr.getWidth();
  6211. var x = this.parsePercent(timelineOption.x, zrWidth);
  6212. var x2 = this.parsePercent(timelineOption.x2, zrWidth);
  6213. var width;
  6214. if (timelineOption.width == null) {
  6215. width = zrWidth - x - x2;
  6216. x2 = zrWidth - x2;
  6217. } else {
  6218. width = this.parsePercent(timelineOption.width, zrWidth);
  6219. x2 = x + width;
  6220. }
  6221. var zrHeight = this.zr.getHeight();
  6222. var height = this.parsePercent(timelineOption.height, zrHeight);
  6223. var y;
  6224. var y2;
  6225. if (timelineOption.y != null) {
  6226. y = this.parsePercent(timelineOption.y, zrHeight);
  6227. y2 = y + height;
  6228. } else {
  6229. y2 = zrHeight - this.parsePercent(timelineOption.y2, zrHeight);
  6230. y = y2 - height;
  6231. }
  6232. return {
  6233. x: x + padding[3],
  6234. y: y + padding[0],
  6235. x2: x2 - padding[1],
  6236. y2: y2 - padding[2],
  6237. width: width - padding[1] - padding[3],
  6238. height: height - padding[0] - padding[2]
  6239. };
  6240. },
  6241. _getReformedLabel: function (idx) {
  6242. var timelineOption = this.timelineOption;
  6243. var data = timelineOption.data[idx].name != null ? timelineOption.data[idx].name : timelineOption.data[idx];
  6244. var formatter = timelineOption.data[idx].formatter || timelineOption.label.formatter;
  6245. if (formatter) {
  6246. if (typeof formatter === 'function') {
  6247. data = formatter.call(this.myChart, data);
  6248. } else if (typeof formatter === 'string') {
  6249. data = formatter.replace('{value}', data);
  6250. }
  6251. }
  6252. return data;
  6253. },
  6254. _getInterval: function () {
  6255. var chainPoint = this._chainPoint;
  6256. var timelineOption = this.timelineOption;
  6257. var interval = timelineOption.label.interval;
  6258. if (interval === 'auto') {
  6259. var fontSize = timelineOption.label.textStyle.fontSize;
  6260. var data = timelineOption.data;
  6261. var dataLength = timelineOption.data.length;
  6262. if (dataLength > 3) {
  6263. var isEnough = false;
  6264. var labelSpace;
  6265. var labelSize;
  6266. interval = 0;
  6267. while (!isEnough && interval < dataLength) {
  6268. interval++;
  6269. isEnough = true;
  6270. for (var i = interval; i < dataLength; i += interval) {
  6271. labelSpace = chainPoint[i].x - chainPoint[i - interval].x;
  6272. if (timelineOption.label.rotate !== 0) {
  6273. labelSize = fontSize;
  6274. } else if (data[i].textStyle) {
  6275. labelSize = zrArea.getTextWidth(chainPoint[i].name, chainPoint[i].textFont);
  6276. } else {
  6277. var label = chainPoint[i].name + '';
  6278. var wLen = (label.match(/\w/g) || '').length;
  6279. var oLen = label.length - wLen;
  6280. labelSize = wLen * fontSize * 2 / 3 + oLen * fontSize;
  6281. }
  6282. if (labelSpace < labelSize) {
  6283. isEnough = false;
  6284. break;
  6285. }
  6286. }
  6287. }
  6288. } else {
  6289. interval = 1;
  6290. }
  6291. } else {
  6292. interval = interval - 0 + 1;
  6293. }
  6294. return interval;
  6295. },
  6296. _getChainPoint: function () {
  6297. var timelineOption = this.timelineOption;
  6298. var symbol = timelineOption.symbol.toLowerCase();
  6299. var symbolSize = timelineOption.symbolSize;
  6300. var rotate = timelineOption.label.rotate;
  6301. var textStyle = timelineOption.label.textStyle;
  6302. var textFont = this.getFont(textStyle);
  6303. var dataTextStyle;
  6304. var data = timelineOption.data;
  6305. var x = this._location.x;
  6306. var y = this._location.y + this._location.height / 4 * 3;
  6307. var width = this._location.x2 - this._location.x;
  6308. var len = data.length;
  6309. function _getName(i) {
  6310. return data[i].name != null ? data[i].name : data[i] + '';
  6311. }
  6312. var xList = [];
  6313. if (len > 1) {
  6314. var boundaryGap = width / len;
  6315. boundaryGap = boundaryGap > 50 ? 50 : boundaryGap < 20 ? 5 : boundaryGap;
  6316. width -= boundaryGap * 2;
  6317. if (timelineOption.type === 'number') {
  6318. for (var i = 0; i < len; i++) {
  6319. xList.push(x + boundaryGap + width / (len - 1) * i);
  6320. }
  6321. } else {
  6322. xList[0] = new Date(_getName(0).replace(/-/g, '/'));
  6323. xList[len - 1] = new Date(_getName(len - 1).replace(/-/g, '/')) - xList[0];
  6324. for (var i = 1; i < len; i++) {
  6325. xList[i] = x + boundaryGap + width * (new Date(_getName(i).replace(/-/g, '/')) - xList[0]) / xList[len - 1];
  6326. }
  6327. xList[0] = x + boundaryGap;
  6328. }
  6329. } else {
  6330. xList.push(x + width / 2);
  6331. }
  6332. var list = [];
  6333. var curSymbol;
  6334. var n;
  6335. var isEmpty;
  6336. var textAlign;
  6337. var rotation;
  6338. for (var i = 0; i < len; i++) {
  6339. x = xList[i];
  6340. curSymbol = data[i].symbol && data[i].symbol.toLowerCase() || symbol;
  6341. if (curSymbol.match('empty')) {
  6342. curSymbol = curSymbol.replace('empty', '');
  6343. isEmpty = true;
  6344. } else {
  6345. isEmpty = false;
  6346. }
  6347. if (curSymbol.match('star')) {
  6348. n = curSymbol.replace('star', '') - 0 || 5;
  6349. curSymbol = 'star';
  6350. }
  6351. dataTextStyle = data[i].textStyle ? zrUtil.merge(data[i].textStyle || {}, textStyle) : textStyle;
  6352. textAlign = dataTextStyle.align || 'center';
  6353. if (rotate) {
  6354. textAlign = rotate > 0 ? 'right' : 'left';
  6355. rotation = [
  6356. rotate * Math.PI / 180,
  6357. x,
  6358. y - 5
  6359. ];
  6360. } else {
  6361. rotation = false;
  6362. }
  6363. list.push({
  6364. x: x,
  6365. n: n,
  6366. isEmpty: isEmpty,
  6367. symbol: curSymbol,
  6368. symbolSize: data[i].symbolSize || symbolSize,
  6369. color: data[i].color,
  6370. borderColor: data[i].borderColor,
  6371. borderWidth: data[i].borderWidth,
  6372. name: this._getReformedLabel(i),
  6373. textColor: dataTextStyle.color,
  6374. textAlign: textAlign,
  6375. textBaseline: dataTextStyle.baseline || 'middle',
  6376. textX: x,
  6377. textY: y - (rotate ? 5 : 0),
  6378. textFont: data[i].textStyle ? this.getFont(dataTextStyle) : textFont,
  6379. rotation: rotation,
  6380. showLabel: false
  6381. });
  6382. }
  6383. return list;
  6384. },
  6385. _buildBackground: function () {
  6386. var timelineOption = this.timelineOption;
  6387. var padding = this.reformCssArray(this.timelineOption.padding);
  6388. var width = this._location.width;
  6389. var height = this._location.height;
  6390. if (timelineOption.borderWidth !== 0 || timelineOption.backgroundColor.replace(/\s/g, '') != 'rgba(0,0,0,0)') {
  6391. this.shapeList.push(new RectangleShape({
  6392. zlevel: this.getZlevelBase(),
  6393. z: this.getZBase(),
  6394. hoverable: false,
  6395. style: {
  6396. x: this._location.x - padding[3],
  6397. y: this._location.y - padding[0],
  6398. width: width + padding[1] + padding[3],
  6399. height: height + padding[0] + padding[2],
  6400. brushType: timelineOption.borderWidth === 0 ? 'fill' : 'both',
  6401. color: timelineOption.backgroundColor,
  6402. strokeColor: timelineOption.borderColor,
  6403. lineWidth: timelineOption.borderWidth
  6404. }
  6405. }));
  6406. }
  6407. },
  6408. _buildControl: function () {
  6409. var self = this;
  6410. var timelineOption = this.timelineOption;
  6411. var lineStyle = timelineOption.lineStyle;
  6412. var controlStyle = timelineOption.controlStyle;
  6413. if (timelineOption.controlPosition === 'none') {
  6414. return;
  6415. }
  6416. var iconSize = controlStyle.itemSize;
  6417. var iconGap = controlStyle.itemGap;
  6418. var x;
  6419. if (timelineOption.controlPosition === 'left') {
  6420. x = this._location.x;
  6421. this._location.x += (iconSize + iconGap) * 3;
  6422. } else {
  6423. x = this._location.x2 - ((iconSize + iconGap) * 3 - iconGap);
  6424. this._location.x2 -= (iconSize + iconGap) * 3;
  6425. }
  6426. var y = this._location.y;
  6427. var iconStyle = {
  6428. zlevel: this.getZlevelBase(),
  6429. z: this.getZBase() + 1,
  6430. style: {
  6431. iconType: 'timelineControl',
  6432. symbol: 'last',
  6433. x: x,
  6434. y: y,
  6435. width: iconSize,
  6436. height: iconSize,
  6437. brushType: 'stroke',
  6438. color: controlStyle.normal.color,
  6439. strokeColor: controlStyle.normal.color,
  6440. lineWidth: lineStyle.width
  6441. },
  6442. highlightStyle: {
  6443. color: controlStyle.emphasis.color,
  6444. strokeColor: controlStyle.emphasis.color,
  6445. lineWidth: lineStyle.width + 1
  6446. },
  6447. clickable: true
  6448. };
  6449. this._ctrLastShape = new IconShape(iconStyle);
  6450. this._ctrLastShape.onclick = function () {
  6451. self.last();
  6452. };
  6453. this.shapeList.push(this._ctrLastShape);
  6454. x += iconSize + iconGap;
  6455. this._ctrPlayShape = new IconShape(zrUtil.clone(iconStyle));
  6456. this._ctrPlayShape.style.brushType = 'fill';
  6457. this._ctrPlayShape.style.symbol = 'play';
  6458. this._ctrPlayShape.style.status = this.timelineOption.autoPlay ? 'playing' : 'stop';
  6459. this._ctrPlayShape.style.x = x;
  6460. this._ctrPlayShape.onclick = function () {
  6461. if (self._ctrPlayShape.style.status === 'stop') {
  6462. self.play();
  6463. } else {
  6464. self.stop();
  6465. }
  6466. };
  6467. this.shapeList.push(this._ctrPlayShape);
  6468. x += iconSize + iconGap;
  6469. this._ctrNextShape = new IconShape(zrUtil.clone(iconStyle));
  6470. this._ctrNextShape.style.symbol = 'next';
  6471. this._ctrNextShape.style.x = x;
  6472. this._ctrNextShape.onclick = function () {
  6473. self.next();
  6474. };
  6475. this.shapeList.push(this._ctrNextShape);
  6476. },
  6477. _buildChain: function () {
  6478. var timelineOption = this.timelineOption;
  6479. var lineStyle = timelineOption.lineStyle;
  6480. this._timelineShae = {
  6481. zlevel: this.getZlevelBase(),
  6482. z: this.getZBase(),
  6483. style: {
  6484. x: this._location.x,
  6485. y: this.subPixelOptimize(this._location.y, lineStyle.width),
  6486. width: this._location.x2 - this._location.x,
  6487. height: this._location.height,
  6488. chainPoint: this._chainPoint,
  6489. brushType: 'both',
  6490. strokeColor: lineStyle.color,
  6491. lineWidth: lineStyle.width,
  6492. lineType: lineStyle.type
  6493. },
  6494. hoverable: false,
  6495. clickable: true,
  6496. onclick: this._onclick
  6497. };
  6498. this._timelineShae = new ChainShape(this._timelineShae);
  6499. this.shapeList.push(this._timelineShae);
  6500. },
  6501. _buildHandle: function () {
  6502. var curPoint = this._chainPoint[this.currentIndex];
  6503. var symbolSize = curPoint.symbolSize + 1;
  6504. symbolSize = symbolSize < 5 ? 5 : symbolSize;
  6505. this._handleShape = {
  6506. zlevel: this.getZlevelBase(),
  6507. z: this.getZBase() + 1,
  6508. hoverable: false,
  6509. draggable: true,
  6510. style: {
  6511. iconType: 'diamond',
  6512. n: curPoint.n,
  6513. x: curPoint.x - symbolSize,
  6514. y: this._location.y + this._location.height / 4 - symbolSize,
  6515. width: symbolSize * 2,
  6516. height: symbolSize * 2,
  6517. brushType: 'both',
  6518. textPosition: 'specific',
  6519. textX: curPoint.x,
  6520. textY: this._location.y - this._location.height / 4,
  6521. textAlign: 'center',
  6522. textBaseline: 'middle'
  6523. },
  6524. highlightStyle: {},
  6525. ondrift: this._ondrift,
  6526. ondragend: this._ondragend
  6527. };
  6528. this._handleShape = new IconShape(this._handleShape);
  6529. this.shapeList.push(this._handleShape);
  6530. },
  6531. _syncHandleShape: function () {
  6532. if (!this.timelineOption.show) {
  6533. return;
  6534. }
  6535. var timelineOption = this.timelineOption;
  6536. var cpStyle = timelineOption.checkpointStyle;
  6537. var curPoint = this._chainPoint[this.currentIndex];
  6538. this._handleShape.style.text = cpStyle.label.show ? curPoint.name : '';
  6539. this._handleShape.style.textFont = curPoint.textFont;
  6540. this._handleShape.style.n = curPoint.n;
  6541. if (cpStyle.symbol === 'auto') {
  6542. this._handleShape.style.iconType = curPoint.symbol != 'none' ? curPoint.symbol : 'diamond';
  6543. } else {
  6544. this._handleShape.style.iconType = cpStyle.symbol;
  6545. if (cpStyle.symbol.match('star')) {
  6546. this._handleShape.style.n = cpStyle.symbol.replace('star', '') - 0 || 5;
  6547. this._handleShape.style.iconType = 'star';
  6548. }
  6549. }
  6550. var symbolSize;
  6551. if (cpStyle.symbolSize === 'auto') {
  6552. symbolSize = curPoint.symbolSize + 2;
  6553. symbolSize = symbolSize < 5 ? 5 : symbolSize;
  6554. } else {
  6555. symbolSize = cpStyle.symbolSize - 0;
  6556. }
  6557. this._handleShape.style.color = cpStyle.color === 'auto' ? curPoint.color ? curPoint.color : timelineOption.controlStyle.emphasis.color : cpStyle.color;
  6558. this._handleShape.style.textColor = cpStyle.label.textStyle.color === 'auto' ? this._handleShape.style.color : cpStyle.label.textStyle.color;
  6559. this._handleShape.highlightStyle.strokeColor = this._handleShape.style.strokeColor = cpStyle.borderColor === 'auto' ? curPoint.borderColor ? curPoint.borderColor : '#fff' : cpStyle.borderColor;
  6560. this._handleShape.style.lineWidth = cpStyle.borderWidth === 'auto' ? curPoint.borderWidth ? curPoint.borderWidth : 0 : cpStyle.borderWidth - 0;
  6561. this._handleShape.highlightStyle.lineWidth = this._handleShape.style.lineWidth + 1;
  6562. this.zr.animate(this._handleShape.id, 'style').when(500, {
  6563. x: curPoint.x - symbolSize,
  6564. textX: curPoint.x,
  6565. y: this._location.y + this._location.height / 4 - symbolSize,
  6566. width: symbolSize * 2,
  6567. height: symbolSize * 2
  6568. }).start('ExponentialOut');
  6569. },
  6570. _findChainIndex: function (x) {
  6571. var chainPoint = this._chainPoint;
  6572. var len = chainPoint.length;
  6573. if (x <= chainPoint[0].x) {
  6574. return 0;
  6575. } else if (x >= chainPoint[len - 1].x) {
  6576. return len - 1;
  6577. }
  6578. for (var i = 0; i < len - 1; i++) {
  6579. if (x >= chainPoint[i].x && x <= chainPoint[i + 1].x) {
  6580. return Math.abs(x - chainPoint[i].x) < Math.abs(x - chainPoint[i + 1].x) ? i : i + 1;
  6581. }
  6582. }
  6583. },
  6584. __onclick: function (param) {
  6585. var x = zrEvent.getX(param.event);
  6586. var newIndex = this._findChainIndex(x);
  6587. if (newIndex === this.currentIndex) {
  6588. return true;
  6589. }
  6590. this.currentIndex = newIndex;
  6591. this.timelineOption.autoPlay && this.stop();
  6592. clearTimeout(this.playTicket);
  6593. this._onFrame();
  6594. },
  6595. __ondrift: function (shape, dx) {
  6596. this.timelineOption.autoPlay && this.stop();
  6597. var chainPoint = this._chainPoint;
  6598. var len = chainPoint.length;
  6599. var newIndex;
  6600. if (shape.style.x + dx <= chainPoint[0].x - chainPoint[0].symbolSize) {
  6601. shape.style.x = chainPoint[0].x - chainPoint[0].symbolSize;
  6602. newIndex = 0;
  6603. } else if (shape.style.x + dx >= chainPoint[len - 1].x - chainPoint[len - 1].symbolSize) {
  6604. shape.style.x = chainPoint[len - 1].x - chainPoint[len - 1].symbolSize;
  6605. newIndex = len - 1;
  6606. } else {
  6607. shape.style.x += dx;
  6608. newIndex = this._findChainIndex(shape.style.x);
  6609. }
  6610. var curPoint = chainPoint[newIndex];
  6611. var symbolSize = curPoint.symbolSize + 2;
  6612. shape.style.iconType = curPoint.symbol;
  6613. shape.style.n = curPoint.n;
  6614. shape.style.textX = shape.style.x + symbolSize / 2;
  6615. shape.style.y = this._location.y + this._location.height / 4 - symbolSize;
  6616. shape.style.width = symbolSize * 2;
  6617. shape.style.height = symbolSize * 2;
  6618. shape.style.text = curPoint.name;
  6619. if (newIndex === this.currentIndex) {
  6620. return true;
  6621. }
  6622. this.currentIndex = newIndex;
  6623. if (this.timelineOption.realtime) {
  6624. clearTimeout(this.playTicket);
  6625. var self = this;
  6626. this.playTicket = setTimeout(function () {
  6627. self._setCurrentOption();
  6628. }, 200);
  6629. }
  6630. return true;
  6631. },
  6632. __ondragend: function () {
  6633. this.isDragend = true;
  6634. },
  6635. ondragend: function (param, status) {
  6636. if (!this.isDragend || !param.target) {
  6637. return;
  6638. }
  6639. !this.timelineOption.realtime && this._setCurrentOption();
  6640. status.dragOut = true;
  6641. status.dragIn = true;
  6642. status.needRefresh = false;
  6643. this.isDragend = false;
  6644. this._syncHandleShape();
  6645. return;
  6646. },
  6647. last: function () {
  6648. this.timelineOption.autoPlay && this.stop();
  6649. this.currentIndex -= 1;
  6650. if (this.currentIndex < 0) {
  6651. this.currentIndex = this.timelineOption.data.length - 1;
  6652. }
  6653. this._onFrame();
  6654. return this.currentIndex;
  6655. },
  6656. next: function () {
  6657. this.timelineOption.autoPlay && this.stop();
  6658. this.currentIndex += 1;
  6659. if (this.currentIndex >= this.timelineOption.data.length) {
  6660. this.currentIndex = 0;
  6661. }
  6662. this._onFrame();
  6663. return this.currentIndex;
  6664. },
  6665. play: function (targetIndex, autoPlay) {
  6666. if (this._ctrPlayShape && this._ctrPlayShape.style.status != 'playing') {
  6667. this._ctrPlayShape.style.status = 'playing';
  6668. this.zr.modShape(this._ctrPlayShape.id);
  6669. this.zr.refreshNextFrame();
  6670. }
  6671. this.timelineOption.autoPlay = autoPlay != null ? autoPlay : true;
  6672. if (!this.timelineOption.autoPlay) {
  6673. clearTimeout(this.playTicket);
  6674. }
  6675. this.currentIndex = targetIndex != null ? targetIndex : this.currentIndex + 1;
  6676. if (this.currentIndex >= this.timelineOption.data.length) {
  6677. this.currentIndex = 0;
  6678. }
  6679. this._onFrame();
  6680. return this.currentIndex;
  6681. },
  6682. stop: function () {
  6683. if (this._ctrPlayShape && this._ctrPlayShape.style.status != 'stop') {
  6684. this._ctrPlayShape.style.status = 'stop';
  6685. this.zr.modShape(this._ctrPlayShape.id);
  6686. this.zr.refreshNextFrame();
  6687. }
  6688. this.timelineOption.autoPlay = false;
  6689. clearTimeout(this.playTicket);
  6690. return this.currentIndex;
  6691. },
  6692. resize: function () {
  6693. if (this.timelineOption.show) {
  6694. this.clear();
  6695. this._buildShape();
  6696. this._syncHandleShape();
  6697. }
  6698. },
  6699. setTheme: function (needRefresh) {
  6700. this.timelineOption = this.reformOption(zrUtil.clone(this.option.timeline));
  6701. this.timelineOption.label.textStyle = this.getTextStyle(this.timelineOption.label.textStyle);
  6702. this.timelineOption.checkpointStyle.label.textStyle = this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle);
  6703. if (!this.myChart.canvasSupported) {
  6704. this.timelineOption.realtime = false;
  6705. }
  6706. if (this.timelineOption.show && needRefresh) {
  6707. this.clear();
  6708. this._buildShape();
  6709. this._syncHandleShape();
  6710. }
  6711. },
  6712. onbeforDispose: function () {
  6713. clearTimeout(this.playTicket);
  6714. }
  6715. };
  6716. function timelineControl(ctx, style) {
  6717. var lineWidth = 2;
  6718. var x = style.x + lineWidth;
  6719. var y = style.y + lineWidth + 2;
  6720. var width = style.width - lineWidth;
  6721. var height = style.height - lineWidth;
  6722. var symbol = style.symbol;
  6723. if (symbol === 'last') {
  6724. ctx.moveTo(x + width - 2, y + height / 3);
  6725. ctx.lineTo(x + width - 2, y);
  6726. ctx.lineTo(x + 2, y + height / 2);
  6727. ctx.lineTo(x + width - 2, y + height);
  6728. ctx.lineTo(x + width - 2, y + height / 3 * 2);
  6729. ctx.moveTo(x, y);
  6730. ctx.lineTo(x, y);
  6731. } else if (symbol === 'next') {
  6732. ctx.moveTo(x + 2, y + height / 3);
  6733. ctx.lineTo(x + 2, y);
  6734. ctx.lineTo(x + width - 2, y + height / 2);
  6735. ctx.lineTo(x + 2, y + height);
  6736. ctx.lineTo(x + 2, y + height / 3 * 2);
  6737. ctx.moveTo(x, y);
  6738. ctx.lineTo(x, y);
  6739. } else if (symbol === 'play') {
  6740. if (style.status === 'stop') {
  6741. ctx.moveTo(x + 2, y);
  6742. ctx.lineTo(x + width - 2, y + height / 2);
  6743. ctx.lineTo(x + 2, y + height);
  6744. ctx.lineTo(x + 2, y);
  6745. } else {
  6746. var delta = style.brushType === 'both' ? 2 : 3;
  6747. ctx.rect(x + 2, y, delta, height);
  6748. ctx.rect(x + width - delta - 2, y, delta, height);
  6749. }
  6750. } else if (symbol.match('image')) {
  6751. var imageLocation = '';
  6752. imageLocation = symbol.replace(new RegExp('^image:\\/\\/'), '');
  6753. symbol = IconShape.prototype.iconLibrary.image;
  6754. symbol(ctx, {
  6755. x: x,
  6756. y: y,
  6757. width: width,
  6758. height: height,
  6759. image: imageLocation
  6760. });
  6761. }
  6762. }
  6763. IconShape.prototype.iconLibrary['timelineControl'] = timelineControl;
  6764. zrUtil.inherits(Timeline, Base);
  6765. require('../component').define('timeline', Timeline);
  6766. return Timeline;
  6767. });define('zrender/shape/Image', [
  6768. 'require',
  6769. './Base',
  6770. '../tool/util'
  6771. ], function (require) {
  6772. var Base = require('./Base');
  6773. var ZImage = function (options) {
  6774. Base.call(this, options);
  6775. };
  6776. ZImage.prototype = {
  6777. type: 'image',
  6778. brush: function (ctx, isHighlight, refreshNextFrame) {
  6779. var style = this.style || {};
  6780. if (isHighlight) {
  6781. style = this.getHighlightStyle(style, this.highlightStyle || {});
  6782. }
  6783. var image = style.image;
  6784. var self = this;
  6785. if (!this._imageCache) {
  6786. this._imageCache = {};
  6787. }
  6788. if (typeof image === 'string') {
  6789. var src = image;
  6790. if (this._imageCache[src]) {
  6791. image = this._imageCache[src];
  6792. } else {
  6793. image = new Image();
  6794. image.onload = function () {
  6795. image.onload = null;
  6796. self.modSelf();
  6797. refreshNextFrame();
  6798. };
  6799. image.src = src;
  6800. this._imageCache[src] = image;
  6801. }
  6802. }
  6803. if (image) {
  6804. if (image.nodeName.toUpperCase() == 'IMG') {
  6805. if (window.ActiveXObject) {
  6806. if (image.readyState != 'complete') {
  6807. return;
  6808. }
  6809. } else {
  6810. if (!image.complete) {
  6811. return;
  6812. }
  6813. }
  6814. }
  6815. var width = style.width || image.width;
  6816. var height = style.height || image.height;
  6817. var x = style.x;
  6818. var y = style.y;
  6819. if (!image.width || !image.height) {
  6820. return;
  6821. }
  6822. ctx.save();
  6823. this.doClip(ctx);
  6824. this.setContext(ctx, style);
  6825. this.setTransform(ctx);
  6826. if (style.sWidth && style.sHeight) {
  6827. var sx = style.sx || 0;
  6828. var sy = style.sy || 0;
  6829. ctx.drawImage(image, sx, sy, style.sWidth, style.sHeight, x, y, width, height);
  6830. } else if (style.sx && style.sy) {
  6831. var sx = style.sx;
  6832. var sy = style.sy;
  6833. var sWidth = width - sx;
  6834. var sHeight = height - sy;
  6835. ctx.drawImage(image, sx, sy, sWidth, sHeight, x, y, width, height);
  6836. } else {
  6837. ctx.drawImage(image, x, y, width, height);
  6838. }
  6839. if (!style.width) {
  6840. style.width = width;
  6841. }
  6842. if (!style.height) {
  6843. style.height = height;
  6844. }
  6845. if (!this.style.width) {
  6846. this.style.width = width;
  6847. }
  6848. if (!this.style.height) {
  6849. this.style.height = height;
  6850. }
  6851. this.drawText(ctx, style, this.style);
  6852. ctx.restore();
  6853. }
  6854. },
  6855. getRect: function (style) {
  6856. return {
  6857. x: style.x,
  6858. y: style.y,
  6859. width: style.width,
  6860. height: style.height
  6861. };
  6862. },
  6863. clearCache: function () {
  6864. this._imageCache = {};
  6865. }
  6866. };
  6867. require('../tool/util').inherits(ZImage, Base);
  6868. return ZImage;
  6869. });define('zrender/loadingEffect/Bar', [
  6870. 'require',
  6871. './Base',
  6872. '../tool/util',
  6873. '../tool/color',
  6874. '../shape/Rectangle'
  6875. ], function (require) {
  6876. var Base = require('./Base');
  6877. var util = require('../tool/util');
  6878. var zrColor = require('../tool/color');
  6879. var RectangleShape = require('../shape/Rectangle');
  6880. function Bar(options) {
  6881. Base.call(this, options);
  6882. }
  6883. util.inherits(Bar, Base);
  6884. Bar.prototype._start = function (addShapeHandle, refreshHandle) {
  6885. var options = util.merge(this.options, {
  6886. textStyle: { color: '#888' },
  6887. backgroundColor: 'rgba(250, 250, 250, 0.8)',
  6888. effectOption: {
  6889. x: 0,
  6890. y: this.canvasHeight / 2 - 30,
  6891. width: this.canvasWidth,
  6892. height: 5,
  6893. brushType: 'fill',
  6894. timeInterval: 100
  6895. }
  6896. });
  6897. var textShape = this.createTextShape(options.textStyle);
  6898. var background = this.createBackgroundShape(options.backgroundColor);
  6899. var effectOption = options.effectOption;
  6900. var barShape = new RectangleShape({ highlightStyle: util.clone(effectOption) });
  6901. barShape.highlightStyle.color = effectOption.color || zrColor.getLinearGradient(effectOption.x, effectOption.y, effectOption.x + effectOption.width, effectOption.y + effectOption.height, [
  6902. [
  6903. 0,
  6904. '#ff6400'
  6905. ],
  6906. [
  6907. 0.5,
  6908. '#ffe100'
  6909. ],
  6910. [
  6911. 1,
  6912. '#b1ff00'
  6913. ]
  6914. ]);
  6915. if (options.progress != null) {
  6916. addShapeHandle(background);
  6917. barShape.highlightStyle.width = this.adjust(options.progress, [
  6918. 0,
  6919. 1
  6920. ]) * options.effectOption.width;
  6921. addShapeHandle(barShape);
  6922. addShapeHandle(textShape);
  6923. refreshHandle();
  6924. return;
  6925. } else {
  6926. barShape.highlightStyle.width = 0;
  6927. return setInterval(function () {
  6928. addShapeHandle(background);
  6929. if (barShape.highlightStyle.width < effectOption.width) {
  6930. barShape.highlightStyle.width += 8;
  6931. } else {
  6932. barShape.highlightStyle.width = 0;
  6933. }
  6934. addShapeHandle(barShape);
  6935. addShapeHandle(textShape);
  6936. refreshHandle();
  6937. }, effectOption.timeInterval);
  6938. }
  6939. };
  6940. return Bar;
  6941. });define('zrender/loadingEffect/Bubble', [
  6942. 'require',
  6943. './Base',
  6944. '../tool/util',
  6945. '../tool/color',
  6946. '../shape/Circle'
  6947. ], function (require) {
  6948. var Base = require('./Base');
  6949. var util = require('../tool/util');
  6950. var zrColor = require('../tool/color');
  6951. var CircleShape = require('../shape/Circle');
  6952. function Bubble(options) {
  6953. Base.call(this, options);
  6954. }
  6955. util.inherits(Bubble, Base);
  6956. Bubble.prototype._start = function (addShapeHandle, refreshHandle) {
  6957. var options = util.merge(this.options, {
  6958. textStyle: { color: '#888' },
  6959. backgroundColor: 'rgba(250, 250, 250, 0.8)',
  6960. effect: {
  6961. n: 50,
  6962. lineWidth: 2,
  6963. brushType: 'stroke',
  6964. color: 'random',
  6965. timeInterval: 100
  6966. }
  6967. });
  6968. var textShape = this.createTextShape(options.textStyle);
  6969. var background = this.createBackgroundShape(options.backgroundColor);
  6970. var effectOption = options.effect;
  6971. var n = effectOption.n;
  6972. var brushType = effectOption.brushType;
  6973. var lineWidth = effectOption.lineWidth;
  6974. var shapeList = [];
  6975. var canvasWidth = this.canvasWidth;
  6976. var canvasHeight = this.canvasHeight;
  6977. for (var i = 0; i < n; i++) {
  6978. var color = effectOption.color == 'random' ? zrColor.alpha(zrColor.random(), 0.3) : effectOption.color;
  6979. shapeList[i] = new CircleShape({
  6980. highlightStyle: {
  6981. x: Math.ceil(Math.random() * canvasWidth),
  6982. y: Math.ceil(Math.random() * canvasHeight),
  6983. r: Math.ceil(Math.random() * 40),
  6984. brushType: brushType,
  6985. color: color,
  6986. strokeColor: color,
  6987. lineWidth: lineWidth
  6988. },
  6989. animationY: Math.ceil(Math.random() * 20)
  6990. });
  6991. }
  6992. return setInterval(function () {
  6993. addShapeHandle(background);
  6994. for (var i = 0; i < n; i++) {
  6995. var style = shapeList[i].highlightStyle;
  6996. if (style.y - shapeList[i].animationY + style.r <= 0) {
  6997. shapeList[i].highlightStyle.y = canvasHeight + style.r;
  6998. shapeList[i].highlightStyle.x = Math.ceil(Math.random() * canvasWidth);
  6999. }
  7000. shapeList[i].highlightStyle.y -= shapeList[i].animationY;
  7001. addShapeHandle(shapeList[i]);
  7002. }
  7003. addShapeHandle(textShape);
  7004. refreshHandle();
  7005. }, effectOption.timeInterval);
  7006. };
  7007. return Bubble;
  7008. });define('zrender/loadingEffect/DynamicLine', [
  7009. 'require',
  7010. './Base',
  7011. '../tool/util',
  7012. '../tool/color',
  7013. '../shape/Line'
  7014. ], function (require) {
  7015. var Base = require('./Base');
  7016. var util = require('../tool/util');
  7017. var zrColor = require('../tool/color');
  7018. var LineShape = require('../shape/Line');
  7019. function DynamicLine(options) {
  7020. Base.call(this, options);
  7021. }
  7022. util.inherits(DynamicLine, Base);
  7023. DynamicLine.prototype._start = function (addShapeHandle, refreshHandle) {
  7024. var options = util.merge(this.options, {
  7025. textStyle: { color: '#fff' },
  7026. backgroundColor: 'rgba(0, 0, 0, 0.8)',
  7027. effectOption: {
  7028. n: 30,
  7029. lineWidth: 1,
  7030. color: 'random',
  7031. timeInterval: 100
  7032. }
  7033. });
  7034. var textShape = this.createTextShape(options.textStyle);
  7035. var background = this.createBackgroundShape(options.backgroundColor);
  7036. var effectOption = options.effectOption;
  7037. var n = effectOption.n;
  7038. var lineWidth = effectOption.lineWidth;
  7039. var shapeList = [];
  7040. var canvasWidth = this.canvasWidth;
  7041. var canvasHeight = this.canvasHeight;
  7042. for (var i = 0; i < n; i++) {
  7043. var xStart = -Math.ceil(Math.random() * 1000);
  7044. var len = Math.ceil(Math.random() * 400);
  7045. var pos = Math.ceil(Math.random() * canvasHeight);
  7046. var color = effectOption.color == 'random' ? zrColor.random() : effectOption.color;
  7047. shapeList[i] = new LineShape({
  7048. highlightStyle: {
  7049. xStart: xStart,
  7050. yStart: pos,
  7051. xEnd: xStart + len,
  7052. yEnd: pos,
  7053. strokeColor: color,
  7054. lineWidth: lineWidth
  7055. },
  7056. animationX: Math.ceil(Math.random() * 100),
  7057. len: len
  7058. });
  7059. }
  7060. return setInterval(function () {
  7061. addShapeHandle(background);
  7062. for (var i = 0; i < n; i++) {
  7063. var style = shapeList[i].highlightStyle;
  7064. if (style.xStart >= canvasWidth) {
  7065. shapeList[i].len = Math.ceil(Math.random() * 400);
  7066. style.xStart = -400;
  7067. style.xEnd = -400 + shapeList[i].len;
  7068. style.yStart = Math.ceil(Math.random() * canvasHeight);
  7069. style.yEnd = style.yStart;
  7070. }
  7071. style.xStart += shapeList[i].animationX;
  7072. style.xEnd += shapeList[i].animationX;
  7073. addShapeHandle(shapeList[i]);
  7074. }
  7075. addShapeHandle(textShape);
  7076. refreshHandle();
  7077. }, effectOption.timeInterval);
  7078. };
  7079. return DynamicLine;
  7080. });define('zrender/loadingEffect/Ring', [
  7081. 'require',
  7082. './Base',
  7083. '../tool/util',
  7084. '../tool/color',
  7085. '../shape/Ring',
  7086. '../shape/Sector'
  7087. ], function (require) {
  7088. var Base = require('./Base');
  7089. var util = require('../tool/util');
  7090. var zrColor = require('../tool/color');
  7091. var RingShape = require('../shape/Ring');
  7092. var SectorShape = require('../shape/Sector');
  7093. function Ring(options) {
  7094. Base.call(this, options);
  7095. }
  7096. util.inherits(Ring, Base);
  7097. Ring.prototype._start = function (addShapeHandle, refreshHandle) {
  7098. var options = util.merge(this.options, {
  7099. textStyle: { color: '#07a' },
  7100. backgroundColor: 'rgba(250, 250, 250, 0.8)',
  7101. effect: {
  7102. x: this.canvasWidth / 2,
  7103. y: this.canvasHeight / 2,
  7104. r0: 60,
  7105. r: 100,
  7106. color: '#bbdcff',
  7107. brushType: 'fill',
  7108. textPosition: 'inside',
  7109. textFont: 'normal 30px verdana',
  7110. textColor: 'rgba(30, 144, 255, 0.6)',
  7111. timeInterval: 100
  7112. }
  7113. });
  7114. var effectOption = options.effect;
  7115. var textStyle = options.textStyle;
  7116. if (textStyle.x == null) {
  7117. textStyle.x = effectOption.x;
  7118. }
  7119. if (textStyle.y == null) {
  7120. textStyle.y = effectOption.y + (effectOption.r0 + effectOption.r) / 2 - 5;
  7121. }
  7122. var textShape = this.createTextShape(options.textStyle);
  7123. var background = this.createBackgroundShape(options.backgroundColor);
  7124. var x = effectOption.x;
  7125. var y = effectOption.y;
  7126. var r0 = effectOption.r0 + 6;
  7127. var r = effectOption.r - 6;
  7128. var color = effectOption.color;
  7129. var darkColor = zrColor.lift(color, 0.1);
  7130. var shapeRing = new RingShape({ highlightStyle: util.clone(effectOption) });
  7131. var shapeList = [];
  7132. var clolrList = zrColor.getGradientColors([
  7133. '#ff6400',
  7134. '#ffe100',
  7135. '#97ff00'
  7136. ], 25);
  7137. var preAngle = 15;
  7138. var endAngle = 240;
  7139. for (var i = 0; i < 16; i++) {
  7140. shapeList.push(new SectorShape({
  7141. highlightStyle: {
  7142. x: x,
  7143. y: y,
  7144. r0: r0,
  7145. r: r,
  7146. startAngle: endAngle - preAngle,
  7147. endAngle: endAngle,
  7148. brushType: 'fill',
  7149. color: darkColor
  7150. },
  7151. _color: zrColor.getLinearGradient(x + r0 * Math.cos(endAngle, true), y - r0 * Math.sin(endAngle, true), x + r0 * Math.cos(endAngle - preAngle, true), y - r0 * Math.sin(endAngle - preAngle, true), [
  7152. [
  7153. 0,
  7154. clolrList[i * 2]
  7155. ],
  7156. [
  7157. 1,
  7158. clolrList[i * 2 + 1]
  7159. ]
  7160. ])
  7161. }));
  7162. endAngle -= preAngle;
  7163. }
  7164. endAngle = 360;
  7165. for (var i = 0; i < 4; i++) {
  7166. shapeList.push(new SectorShape({
  7167. highlightStyle: {
  7168. x: x,
  7169. y: y,
  7170. r0: r0,
  7171. r: r,
  7172. startAngle: endAngle - preAngle,
  7173. endAngle: endAngle,
  7174. brushType: 'fill',
  7175. color: darkColor
  7176. },
  7177. _color: zrColor.getLinearGradient(x + r0 * Math.cos(endAngle, true), y - r0 * Math.sin(endAngle, true), x + r0 * Math.cos(endAngle - preAngle, true), y - r0 * Math.sin(endAngle - preAngle, true), [
  7178. [
  7179. 0,
  7180. clolrList[i * 2 + 32]
  7181. ],
  7182. [
  7183. 1,
  7184. clolrList[i * 2 + 33]
  7185. ]
  7186. ])
  7187. }));
  7188. endAngle -= preAngle;
  7189. }
  7190. var n = 0;
  7191. if (options.progress != null) {
  7192. addShapeHandle(background);
  7193. n = this.adjust(options.progress, [
  7194. 0,
  7195. 1
  7196. ]).toFixed(2) * 100 / 5;
  7197. shapeRing.highlightStyle.text = n * 5 + '%';
  7198. addShapeHandle(shapeRing);
  7199. for (var i = 0; i < 20; i++) {
  7200. shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
  7201. addShapeHandle(shapeList[i]);
  7202. }
  7203. addShapeHandle(textShape);
  7204. refreshHandle();
  7205. return;
  7206. }
  7207. return setInterval(function () {
  7208. addShapeHandle(background);
  7209. n += n >= 20 ? -20 : 1;
  7210. addShapeHandle(shapeRing);
  7211. for (var i = 0; i < 20; i++) {
  7212. shapeList[i].highlightStyle.color = i < n ? shapeList[i]._color : darkColor;
  7213. addShapeHandle(shapeList[i]);
  7214. }
  7215. addShapeHandle(textShape);
  7216. refreshHandle();
  7217. }, effectOption.timeInterval);
  7218. };
  7219. return Ring;
  7220. });define('zrender/loadingEffect/Spin', [
  7221. 'require',
  7222. './Base',
  7223. '../tool/util',
  7224. '../tool/color',
  7225. '../tool/area',
  7226. '../shape/Sector'
  7227. ], function (require) {
  7228. var Base = require('./Base');
  7229. var util = require('../tool/util');
  7230. var zrColor = require('../tool/color');
  7231. var zrArea = require('../tool/area');
  7232. var SectorShape = require('../shape/Sector');
  7233. function Spin(options) {
  7234. Base.call(this, options);
  7235. }
  7236. util.inherits(Spin, Base);
  7237. Spin.prototype._start = function (addShapeHandle, refreshHandle) {
  7238. var options = util.merge(this.options, {
  7239. textStyle: {
  7240. color: '#fff',
  7241. textAlign: 'start'
  7242. },
  7243. backgroundColor: 'rgba(0, 0, 0, 0.8)'
  7244. });
  7245. var textShape = this.createTextShape(options.textStyle);
  7246. var textGap = 10;
  7247. var textWidth = zrArea.getTextWidth(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7248. var textHeight = zrArea.getTextHeight(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7249. var effectOption = util.merge(this.options.effect || {}, {
  7250. r0: 9,
  7251. r: 15,
  7252. n: 18,
  7253. color: '#fff',
  7254. timeInterval: 100
  7255. });
  7256. var location = this.getLocation(this.options.textStyle, textWidth + textGap + effectOption.r * 2, Math.max(effectOption.r * 2, textHeight));
  7257. effectOption.x = location.x + effectOption.r;
  7258. effectOption.y = textShape.highlightStyle.y = location.y + location.height / 2;
  7259. textShape.highlightStyle.x = effectOption.x + effectOption.r + textGap;
  7260. var background = this.createBackgroundShape(options.backgroundColor);
  7261. var n = effectOption.n;
  7262. var x = effectOption.x;
  7263. var y = effectOption.y;
  7264. var r0 = effectOption.r0;
  7265. var r = effectOption.r;
  7266. var color = effectOption.color;
  7267. var shapeList = [];
  7268. var preAngle = Math.round(180 / n);
  7269. for (var i = 0; i < n; i++) {
  7270. shapeList[i] = new SectorShape({
  7271. highlightStyle: {
  7272. x: x,
  7273. y: y,
  7274. r0: r0,
  7275. r: r,
  7276. startAngle: preAngle * i * 2,
  7277. endAngle: preAngle * i * 2 + preAngle,
  7278. color: zrColor.alpha(color, (i + 1) / n),
  7279. brushType: 'fill'
  7280. }
  7281. });
  7282. }
  7283. var pos = [
  7284. 0,
  7285. x,
  7286. y
  7287. ];
  7288. return setInterval(function () {
  7289. addShapeHandle(background);
  7290. pos[0] -= 0.3;
  7291. for (var i = 0; i < n; i++) {
  7292. shapeList[i].rotation = pos;
  7293. addShapeHandle(shapeList[i]);
  7294. }
  7295. addShapeHandle(textShape);
  7296. refreshHandle();
  7297. }, effectOption.timeInterval);
  7298. };
  7299. return Spin;
  7300. });define('zrender/loadingEffect/Whirling', [
  7301. 'require',
  7302. './Base',
  7303. '../tool/util',
  7304. '../tool/area',
  7305. '../shape/Ring',
  7306. '../shape/Droplet',
  7307. '../shape/Circle'
  7308. ], function (require) {
  7309. var Base = require('./Base');
  7310. var util = require('../tool/util');
  7311. var zrArea = require('../tool/area');
  7312. var RingShape = require('../shape/Ring');
  7313. var DropletShape = require('../shape/Droplet');
  7314. var CircleShape = require('../shape/Circle');
  7315. function Whirling(options) {
  7316. Base.call(this, options);
  7317. }
  7318. util.inherits(Whirling, Base);
  7319. Whirling.prototype._start = function (addShapeHandle, refreshHandle) {
  7320. var options = util.merge(this.options, {
  7321. textStyle: {
  7322. color: '#888',
  7323. textAlign: 'start'
  7324. },
  7325. backgroundColor: 'rgba(250, 250, 250, 0.8)'
  7326. });
  7327. var textShape = this.createTextShape(options.textStyle);
  7328. var textGap = 10;
  7329. var textWidth = zrArea.getTextWidth(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7330. var textHeight = zrArea.getTextHeight(textShape.highlightStyle.text, textShape.highlightStyle.textFont);
  7331. var effectOption = util.merge(this.options.effect || {}, {
  7332. r: 18,
  7333. colorIn: '#fff',
  7334. colorOut: '#555',
  7335. colorWhirl: '#6cf',
  7336. timeInterval: 50
  7337. });
  7338. var location = this.getLocation(this.options.textStyle, textWidth + textGap + effectOption.r * 2, Math.max(effectOption.r * 2, textHeight));
  7339. effectOption.x = location.x + effectOption.r;
  7340. effectOption.y = textShape.highlightStyle.y = location.y + location.height / 2;
  7341. textShape.highlightStyle.x = effectOption.x + effectOption.r + textGap;
  7342. var background = this.createBackgroundShape(options.backgroundColor);
  7343. var droplet = new DropletShape({
  7344. highlightStyle: {
  7345. a: Math.round(effectOption.r / 2),
  7346. b: Math.round(effectOption.r - effectOption.r / 6),
  7347. brushType: 'fill',
  7348. color: effectOption.colorWhirl
  7349. }
  7350. });
  7351. var circleIn = new CircleShape({
  7352. highlightStyle: {
  7353. r: Math.round(effectOption.r / 6),
  7354. brushType: 'fill',
  7355. color: effectOption.colorIn
  7356. }
  7357. });
  7358. var circleOut = new RingShape({
  7359. highlightStyle: {
  7360. r0: Math.round(effectOption.r - effectOption.r / 3),
  7361. r: effectOption.r,
  7362. brushType: 'fill',
  7363. color: effectOption.colorOut
  7364. }
  7365. });
  7366. var pos = [
  7367. 0,
  7368. effectOption.x,
  7369. effectOption.y
  7370. ];
  7371. droplet.highlightStyle.x = circleIn.highlightStyle.x = circleOut.highlightStyle.x = pos[1];
  7372. droplet.highlightStyle.y = circleIn.highlightStyle.y = circleOut.highlightStyle.y = pos[2];
  7373. return setInterval(function () {
  7374. addShapeHandle(background);
  7375. addShapeHandle(circleOut);
  7376. pos[0] -= 0.3;
  7377. droplet.rotation = pos;
  7378. addShapeHandle(droplet);
  7379. addShapeHandle(circleIn);
  7380. addShapeHandle(textShape);
  7381. refreshHandle();
  7382. }, effectOption.timeInterval);
  7383. };
  7384. return Whirling;
  7385. });define('echarts/theme/macarons', [], function () {
  7386. var theme = {
  7387. color: [
  7388. '#2ec7c9',
  7389. '#b6a2de',
  7390. '#5ab1ef',
  7391. '#ffb980',
  7392. '#d87a80',
  7393. '#8d98b3',
  7394. '#e5cf0d',
  7395. '#97b552',
  7396. '#95706d',
  7397. '#dc69aa',
  7398. '#07a2a4',
  7399. '#9a7fd1',
  7400. '#588dd5',
  7401. '#f5994e',
  7402. '#c05050',
  7403. '#59678c',
  7404. '#c9ab00',
  7405. '#7eb00a',
  7406. '#6f5553',
  7407. '#c14089'
  7408. ],
  7409. title: {
  7410. textStyle: {
  7411. fontWeight: 'normal',
  7412. color: '#008acd'
  7413. }
  7414. },
  7415. dataRange: {
  7416. itemWidth: 15,
  7417. color: [
  7418. '#5ab1ef',
  7419. '#e0ffff'
  7420. ]
  7421. },
  7422. toolbox: {
  7423. color: [
  7424. '#1e90ff',
  7425. '#1e90ff',
  7426. '#1e90ff',
  7427. '#1e90ff'
  7428. ],
  7429. effectiveColor: '#ff4500'
  7430. },
  7431. tooltip: {
  7432. backgroundColor: 'rgba(50,50,50,0.5)',
  7433. axisPointer: {
  7434. type: 'line',
  7435. lineStyle: { color: '#008acd' },
  7436. crossStyle: { color: '#008acd' },
  7437. shadowStyle: { color: 'rgba(200,200,200,0.2)' }
  7438. }
  7439. },
  7440. dataZoom: {
  7441. dataBackgroundColor: '#efefff',
  7442. fillerColor: 'rgba(182,162,222,0.2)',
  7443. handleColor: '#008acd'
  7444. },
  7445. grid: { borderColor: '#eee' },
  7446. categoryAxis: {
  7447. axisLine: { lineStyle: { color: '#008acd' } },
  7448. splitLine: { lineStyle: { color: ['#eee'] } }
  7449. },
  7450. valueAxis: {
  7451. axisLine: { lineStyle: { color: '#008acd' } },
  7452. splitArea: {
  7453. show: true,
  7454. areaStyle: {
  7455. color: [
  7456. 'rgba(250,250,250,0.1)',
  7457. 'rgba(200,200,200,0.1)'
  7458. ]
  7459. }
  7460. },
  7461. splitLine: { lineStyle: { color: ['#eee'] } }
  7462. },
  7463. polar: {
  7464. axisLine: { lineStyle: { color: '#ddd' } },
  7465. splitArea: {
  7466. show: true,
  7467. areaStyle: {
  7468. color: [
  7469. 'rgba(250,250,250,0.2)',
  7470. 'rgba(200,200,200,0.2)'
  7471. ]
  7472. }
  7473. },
  7474. splitLine: { lineStyle: { color: '#ddd' } }
  7475. },
  7476. timeline: {
  7477. lineStyle: { color: '#008acd' },
  7478. controlStyle: {
  7479. normal: { color: '#008acd' },
  7480. emphasis: { color: '#008acd' }
  7481. },
  7482. symbol: 'emptyCircle',
  7483. symbolSize: 3
  7484. },
  7485. bar: {
  7486. itemStyle: {
  7487. normal: { barBorderRadius: 5 },
  7488. emphasis: { barBorderRadius: 5 }
  7489. }
  7490. },
  7491. line: {
  7492. smooth: true,
  7493. symbol: 'emptyCircle',
  7494. symbolSize: 3
  7495. },
  7496. k: {
  7497. itemStyle: {
  7498. normal: {
  7499. color: '#d87a80',
  7500. color0: '#2ec7c9',
  7501. lineStyle: {
  7502. color: '#d87a80',
  7503. color0: '#2ec7c9'
  7504. }
  7505. }
  7506. }
  7507. },
  7508. scatter: {
  7509. symbol: 'circle',
  7510. symbolSize: 4
  7511. },
  7512. radar: {
  7513. symbol: 'emptyCircle',
  7514. symbolSize: 3
  7515. },
  7516. map: {
  7517. itemStyle: {
  7518. normal: {
  7519. areaStyle: { color: '#ddd' },
  7520. label: { textStyle: { color: '#d87a80' } }
  7521. },
  7522. emphasis: { areaStyle: { color: '#fe994e' } }
  7523. }
  7524. },
  7525. force: { itemStyle: { normal: { linkStyle: { color: '#1e90ff' } } } },
  7526. chord: {
  7527. itemStyle: {
  7528. normal: {
  7529. borderWidth: 1,
  7530. borderColor: 'rgba(128, 128, 128, 0.5)',
  7531. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7532. },
  7533. emphasis: {
  7534. borderWidth: 1,
  7535. borderColor: 'rgba(128, 128, 128, 0.5)',
  7536. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7537. }
  7538. }
  7539. },
  7540. gauge: {
  7541. axisLine: {
  7542. lineStyle: {
  7543. color: [
  7544. [
  7545. 0.2,
  7546. '#2ec7c9'
  7547. ],
  7548. [
  7549. 0.8,
  7550. '#5ab1ef'
  7551. ],
  7552. [
  7553. 1,
  7554. '#d87a80'
  7555. ]
  7556. ],
  7557. width: 10
  7558. }
  7559. },
  7560. axisTick: {
  7561. splitNumber: 10,
  7562. length: 15,
  7563. lineStyle: { color: 'auto' }
  7564. },
  7565. splitLine: {
  7566. length: 22,
  7567. lineStyle: { color: 'auto' }
  7568. },
  7569. pointer: { width: 5 }
  7570. },
  7571. textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' }
  7572. };
  7573. return theme;
  7574. });define('echarts/theme/infographic', [], function () {
  7575. var theme = {
  7576. color: [
  7577. '#C1232B',
  7578. '#B5C334',
  7579. '#FCCE10',
  7580. '#E87C25',
  7581. '#27727B',
  7582. '#FE8463',
  7583. '#9BCA63',
  7584. '#FAD860',
  7585. '#F3A43B',
  7586. '#60C0DD',
  7587. '#D7504B',
  7588. '#C6E579',
  7589. '#F4E001',
  7590. '#F0805A',
  7591. '#26C0C0'
  7592. ],
  7593. title: {
  7594. textStyle: {
  7595. fontWeight: 'normal',
  7596. color: '#27727B'
  7597. }
  7598. },
  7599. dataRange: {
  7600. x: 'right',
  7601. y: 'center',
  7602. itemWidth: 5,
  7603. itemHeight: 25,
  7604. color: [
  7605. '#C1232B',
  7606. '#FCCE10'
  7607. ]
  7608. },
  7609. toolbox: {
  7610. color: [
  7611. '#C1232B',
  7612. '#B5C334',
  7613. '#FCCE10',
  7614. '#E87C25',
  7615. '#27727B',
  7616. '#FE8463',
  7617. '#9BCA63',
  7618. '#FAD860',
  7619. '#F3A43B',
  7620. '#60C0DD'
  7621. ],
  7622. effectiveColor: '#ff4500'
  7623. },
  7624. tooltip: {
  7625. backgroundColor: 'rgba(50,50,50,0.5)',
  7626. axisPointer: {
  7627. type: 'line',
  7628. lineStyle: {
  7629. color: '#27727B',
  7630. type: 'dashed'
  7631. },
  7632. crossStyle: { color: '#27727B' },
  7633. shadowStyle: { color: 'rgba(200,200,200,0.3)' }
  7634. }
  7635. },
  7636. dataZoom: {
  7637. dataBackgroundColor: 'rgba(181,195,52,0.3)',
  7638. fillerColor: 'rgba(181,195,52,0.2)',
  7639. handleColor: '#27727B'
  7640. },
  7641. grid: { borderWidth: 0 },
  7642. categoryAxis: {
  7643. axisLine: { lineStyle: { color: '#27727B' } },
  7644. splitLine: { show: false }
  7645. },
  7646. valueAxis: {
  7647. axisLine: { show: false },
  7648. splitArea: { show: false },
  7649. splitLine: {
  7650. lineStyle: {
  7651. color: ['#ccc'],
  7652. type: 'dashed'
  7653. }
  7654. }
  7655. },
  7656. polar: {
  7657. axisLine: { lineStyle: { color: '#ddd' } },
  7658. splitArea: {
  7659. show: true,
  7660. areaStyle: {
  7661. color: [
  7662. 'rgba(250,250,250,0.2)',
  7663. 'rgba(200,200,200,0.2)'
  7664. ]
  7665. }
  7666. },
  7667. splitLine: { lineStyle: { color: '#ddd' } }
  7668. },
  7669. timeline: {
  7670. lineStyle: { color: '#27727B' },
  7671. controlStyle: {
  7672. normal: { color: '#27727B' },
  7673. emphasis: { color: '#27727B' }
  7674. },
  7675. symbol: 'emptyCircle',
  7676. symbolSize: 3
  7677. },
  7678. line: {
  7679. itemStyle: {
  7680. normal: {
  7681. borderWidth: 2,
  7682. borderColor: '#fff',
  7683. lineStyle: { width: 3 }
  7684. },
  7685. emphasis: { borderWidth: 0 }
  7686. },
  7687. symbol: 'circle',
  7688. symbolSize: 3.5
  7689. },
  7690. k: {
  7691. itemStyle: {
  7692. normal: {
  7693. color: '#C1232B',
  7694. color0: '#B5C334',
  7695. lineStyle: {
  7696. width: 1,
  7697. color: '#C1232B',
  7698. color0: '#B5C334'
  7699. }
  7700. }
  7701. }
  7702. },
  7703. scatter: {
  7704. itemStyle: {
  7705. normal: {
  7706. borderWidth: 1,
  7707. borderColor: 'rgba(200,200,200,0.5)'
  7708. },
  7709. emphasis: { borderWidth: 0 }
  7710. },
  7711. symbol: 'star4',
  7712. symbolSize: 4
  7713. },
  7714. radar: {
  7715. symbol: 'emptyCircle',
  7716. symbolSize: 3
  7717. },
  7718. map: {
  7719. itemStyle: {
  7720. normal: {
  7721. areaStyle: { color: '#ddd' },
  7722. label: { textStyle: { color: '#C1232B' } }
  7723. },
  7724. emphasis: {
  7725. areaStyle: { color: '#fe994e' },
  7726. label: { textStyle: { color: 'rgb(100,0,0)' } }
  7727. }
  7728. }
  7729. },
  7730. force: { itemStyle: { normal: { linkStyle: { color: '#27727B' } } } },
  7731. chord: {
  7732. itemStyle: {
  7733. normal: {
  7734. borderWidth: 1,
  7735. borderColor: 'rgba(128, 128, 128, 0.5)',
  7736. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7737. },
  7738. emphasis: {
  7739. borderWidth: 1,
  7740. borderColor: 'rgba(128, 128, 128, 0.5)',
  7741. chordStyle: { lineStyle: { color: 'rgba(128, 128, 128, 0.5)' } }
  7742. }
  7743. }
  7744. },
  7745. gauge: {
  7746. center: [
  7747. '50%',
  7748. '80%'
  7749. ],
  7750. radius: '100%',
  7751. startAngle: 180,
  7752. endAngle: 0,
  7753. axisLine: {
  7754. show: true,
  7755. lineStyle: {
  7756. color: [
  7757. [
  7758. 0.2,
  7759. '#B5C334'
  7760. ],
  7761. [
  7762. 0.8,
  7763. '#27727B'
  7764. ],
  7765. [
  7766. 1,
  7767. '#C1232B'
  7768. ]
  7769. ],
  7770. width: '40%'
  7771. }
  7772. },
  7773. axisTick: {
  7774. splitNumber: 2,
  7775. length: 5,
  7776. lineStyle: { color: '#fff' }
  7777. },
  7778. axisLabel: {
  7779. textStyle: {
  7780. color: '#fff',
  7781. fontWeight: 'bolder'
  7782. }
  7783. },
  7784. splitLine: {
  7785. length: '5%',
  7786. lineStyle: { color: '#fff' }
  7787. },
  7788. pointer: {
  7789. width: '40%',
  7790. length: '80%',
  7791. color: '#fff'
  7792. },
  7793. title: {
  7794. offsetCenter: [
  7795. 0,
  7796. -20
  7797. ],
  7798. textStyle: {
  7799. color: 'auto',
  7800. fontSize: 20
  7801. }
  7802. },
  7803. detail: {
  7804. offsetCenter: [
  7805. 0,
  7806. 0
  7807. ],
  7808. textStyle: {
  7809. color: 'auto',
  7810. fontSize: 40
  7811. }
  7812. }
  7813. },
  7814. textStyle: { fontFamily: '微软雅黑, Arial, Verdana, sans-serif' }
  7815. };
  7816. return theme;
  7817. });define('zrender/dep/excanvas', ['require'], function (require) {
  7818. if (!document.createElement('canvas').getContext) {
  7819. (function () {
  7820. var m = Math;
  7821. var mr = m.round;
  7822. var ms = m.sin;
  7823. var mc = m.cos;
  7824. var abs = m.abs;
  7825. var sqrt = m.sqrt;
  7826. var Z = 10;
  7827. var Z2 = Z / 2;
  7828. var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];
  7829. function getContext() {
  7830. return this.context_ || (this.context_ = new CanvasRenderingContext2D_(this));
  7831. }
  7832. var slice = Array.prototype.slice;
  7833. function bind(f, obj, var_args) {
  7834. var a = slice.call(arguments, 2);
  7835. return function () {
  7836. return f.apply(obj, a.concat(slice.call(arguments)));
  7837. };
  7838. }
  7839. function encodeHtmlAttribute(s) {
  7840. return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
  7841. }
  7842. function addNamespace(doc, prefix, urn) {
  7843. if (!doc.namespaces[prefix]) {
  7844. doc.namespaces.add(prefix, urn, '#default#VML');
  7845. }
  7846. }
  7847. function addNamespacesAndStylesheet(doc) {
  7848. addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
  7849. addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');
  7850. if (!doc.styleSheets['ex_canvas_']) {
  7851. var ss = doc.createStyleSheet();
  7852. ss.owningElement.id = 'ex_canvas_';
  7853. ss.cssText = 'canvas{display:inline-block;overflow:hidden;' + 'text-align:left;width:300px;height:150px}';
  7854. }
  7855. }
  7856. addNamespacesAndStylesheet(document);
  7857. var G_vmlCanvasManager_ = {
  7858. init: function (opt_doc) {
  7859. var doc = opt_doc || document;
  7860. doc.createElement('canvas');
  7861. doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
  7862. },
  7863. init_: function (doc) {
  7864. var els = doc.getElementsByTagName('canvas');
  7865. for (var i = 0; i < els.length; i++) {
  7866. this.initElement(els[i]);
  7867. }
  7868. },
  7869. initElement: function (el) {
  7870. if (!el.getContext) {
  7871. el.getContext = getContext;
  7872. addNamespacesAndStylesheet(el.ownerDocument);
  7873. el.innerHTML = '';
  7874. el.attachEvent('onpropertychange', onPropertyChange);
  7875. el.attachEvent('onresize', onResize);
  7876. var attrs = el.attributes;
  7877. if (attrs.width && attrs.width.specified) {
  7878. el.style.width = attrs.width.nodeValue + 'px';
  7879. } else {
  7880. el.width = el.clientWidth;
  7881. }
  7882. if (attrs.height && attrs.height.specified) {
  7883. el.style.height = attrs.height.nodeValue + 'px';
  7884. } else {
  7885. el.height = el.clientHeight;
  7886. }
  7887. }
  7888. return el;
  7889. }
  7890. };
  7891. function onPropertyChange(e) {
  7892. var el = e.srcElement;
  7893. switch (e.propertyName) {
  7894. case 'width':
  7895. el.getContext().clearRect();
  7896. el.style.width = el.attributes.width.nodeValue + 'px';
  7897. el.firstChild.style.width = el.clientWidth + 'px';
  7898. break;
  7899. case 'height':
  7900. el.getContext().clearRect();
  7901. el.style.height = el.attributes.height.nodeValue + 'px';
  7902. el.firstChild.style.height = el.clientHeight + 'px';
  7903. break;
  7904. }
  7905. }
  7906. function onResize(e) {
  7907. var el = e.srcElement;
  7908. if (el.firstChild) {
  7909. el.firstChild.style.width = el.clientWidth + 'px';
  7910. el.firstChild.style.height = el.clientHeight + 'px';
  7911. }
  7912. }
  7913. G_vmlCanvasManager_.init();
  7914. var decToHex = [];
  7915. for (var i = 0; i < 16; i++) {
  7916. for (var j = 0; j < 16; j++) {
  7917. decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
  7918. }
  7919. }
  7920. function createMatrixIdentity() {
  7921. return [
  7922. [
  7923. 1,
  7924. 0,
  7925. 0
  7926. ],
  7927. [
  7928. 0,
  7929. 1,
  7930. 0
  7931. ],
  7932. [
  7933. 0,
  7934. 0,
  7935. 1
  7936. ]
  7937. ];
  7938. }
  7939. function matrixMultiply(m1, m2) {
  7940. var result = createMatrixIdentity();
  7941. for (var x = 0; x < 3; x++) {
  7942. for (var y = 0; y < 3; y++) {
  7943. var sum = 0;
  7944. for (var z = 0; z < 3; z++) {
  7945. sum += m1[x][z] * m2[z][y];
  7946. }
  7947. result[x][y] = sum;
  7948. }
  7949. }
  7950. return result;
  7951. }
  7952. function copyState(o1, o2) {
  7953. o2.fillStyle = o1.fillStyle;
  7954. o2.lineCap = o1.lineCap;
  7955. o2.lineJoin = o1.lineJoin;
  7956. o2.lineWidth = o1.lineWidth;
  7957. o2.miterLimit = o1.miterLimit;
  7958. o2.shadowBlur = o1.shadowBlur;
  7959. o2.shadowColor = o1.shadowColor;
  7960. o2.shadowOffsetX = o1.shadowOffsetX;
  7961. o2.shadowOffsetY = o1.shadowOffsetY;
  7962. o2.strokeStyle = o1.strokeStyle;
  7963. o2.globalAlpha = o1.globalAlpha;
  7964. o2.font = o1.font;
  7965. o2.textAlign = o1.textAlign;
  7966. o2.textBaseline = o1.textBaseline;
  7967. o2.scaleX_ = o1.scaleX_;
  7968. o2.scaleY_ = o1.scaleY_;
  7969. o2.lineScale_ = o1.lineScale_;
  7970. }
  7971. var colorData = {
  7972. aliceblue: '#F0F8FF',
  7973. antiquewhite: '#FAEBD7',
  7974. aquamarine: '#7FFFD4',
  7975. azure: '#F0FFFF',
  7976. beige: '#F5F5DC',
  7977. bisque: '#FFE4C4',
  7978. black: '#000000',
  7979. blanchedalmond: '#FFEBCD',
  7980. blueviolet: '#8A2BE2',
  7981. brown: '#A52A2A',
  7982. burlywood: '#DEB887',
  7983. cadetblue: '#5F9EA0',
  7984. chartreuse: '#7FFF00',
  7985. chocolate: '#D2691E',
  7986. coral: '#FF7F50',
  7987. cornflowerblue: '#6495ED',
  7988. cornsilk: '#FFF8DC',
  7989. crimson: '#DC143C',
  7990. cyan: '#00FFFF',
  7991. darkblue: '#00008B',
  7992. darkcyan: '#008B8B',
  7993. darkgoldenrod: '#B8860B',
  7994. darkgray: '#A9A9A9',
  7995. darkgreen: '#006400',
  7996. darkgrey: '#A9A9A9',
  7997. darkkhaki: '#BDB76B',
  7998. darkmagenta: '#8B008B',
  7999. darkolivegreen: '#556B2F',
  8000. darkorange: '#FF8C00',
  8001. darkorchid: '#9932CC',
  8002. darkred: '#8B0000',
  8003. darksalmon: '#E9967A',
  8004. darkseagreen: '#8FBC8F',
  8005. darkslateblue: '#483D8B',
  8006. darkslategray: '#2F4F4F',
  8007. darkslategrey: '#2F4F4F',
  8008. darkturquoise: '#00CED1',
  8009. darkviolet: '#9400D3',
  8010. deeppink: '#FF1493',
  8011. deepskyblue: '#00BFFF',
  8012. dimgray: '#696969',
  8013. dimgrey: '#696969',
  8014. dodgerblue: '#1E90FF',
  8015. firebrick: '#B22222',
  8016. floralwhite: '#FFFAF0',
  8017. forestgreen: '#228B22',
  8018. gainsboro: '#DCDCDC',
  8019. ghostwhite: '#F8F8FF',
  8020. gold: '#FFD700',
  8021. goldenrod: '#DAA520',
  8022. grey: '#808080',
  8023. greenyellow: '#ADFF2F',
  8024. honeydew: '#F0FFF0',
  8025. hotpink: '#FF69B4',
  8026. indianred: '#CD5C5C',
  8027. indigo: '#4B0082',
  8028. ivory: '#FFFFF0',
  8029. khaki: '#F0E68C',
  8030. lavender: '#E6E6FA',
  8031. lavenderblush: '#FFF0F5',
  8032. lawngreen: '#7CFC00',
  8033. lemonchiffon: '#FFFACD',
  8034. lightblue: '#ADD8E6',
  8035. lightcoral: '#F08080',
  8036. lightcyan: '#E0FFFF',
  8037. lightgoldenrodyellow: '#FAFAD2',
  8038. lightgreen: '#90EE90',
  8039. lightgrey: '#D3D3D3',
  8040. lightpink: '#FFB6C1',
  8041. lightsalmon: '#FFA07A',
  8042. lightseagreen: '#20B2AA',
  8043. lightskyblue: '#87CEFA',
  8044. lightslategray: '#778899',
  8045. lightslategrey: '#778899',
  8046. lightsteelblue: '#B0C4DE',
  8047. lightyellow: '#FFFFE0',
  8048. limegreen: '#32CD32',
  8049. linen: '#FAF0E6',
  8050. magenta: '#FF00FF',
  8051. mediumaquamarine: '#66CDAA',
  8052. mediumblue: '#0000CD',
  8053. mediumorchid: '#BA55D3',
  8054. mediumpurple: '#9370DB',
  8055. mediumseagreen: '#3CB371',
  8056. mediumslateblue: '#7B68EE',
  8057. mediumspringgreen: '#00FA9A',
  8058. mediumturquoise: '#48D1CC',
  8059. mediumvioletred: '#C71585',
  8060. midnightblue: '#191970',
  8061. mintcream: '#F5FFFA',
  8062. mistyrose: '#FFE4E1',
  8063. moccasin: '#FFE4B5',
  8064. navajowhite: '#FFDEAD',
  8065. oldlace: '#FDF5E6',
  8066. olivedrab: '#6B8E23',
  8067. orange: '#FFA500',
  8068. orangered: '#FF4500',
  8069. orchid: '#DA70D6',
  8070. palegoldenrod: '#EEE8AA',
  8071. palegreen: '#98FB98',
  8072. paleturquoise: '#AFEEEE',
  8073. palevioletred: '#DB7093',
  8074. papayawhip: '#FFEFD5',
  8075. peachpuff: '#FFDAB9',
  8076. peru: '#CD853F',
  8077. pink: '#FFC0CB',
  8078. plum: '#DDA0DD',
  8079. powderblue: '#B0E0E6',
  8080. rosybrown: '#BC8F8F',
  8081. royalblue: '#4169E1',
  8082. saddlebrown: '#8B4513',
  8083. salmon: '#FA8072',
  8084. sandybrown: '#F4A460',
  8085. seagreen: '#2E8B57',
  8086. seashell: '#FFF5EE',
  8087. sienna: '#A0522D',
  8088. skyblue: '#87CEEB',
  8089. slateblue: '#6A5ACD',
  8090. slategray: '#708090',
  8091. slategrey: '#708090',
  8092. snow: '#FFFAFA',
  8093. springgreen: '#00FF7F',
  8094. steelblue: '#4682B4',
  8095. tan: '#D2B48C',
  8096. thistle: '#D8BFD8',
  8097. tomato: '#FF6347',
  8098. turquoise: '#40E0D0',
  8099. violet: '#EE82EE',
  8100. wheat: '#F5DEB3',
  8101. whitesmoke: '#F5F5F5',
  8102. yellowgreen: '#9ACD32'
  8103. };
  8104. function getRgbHslContent(styleString) {
  8105. var start = styleString.indexOf('(', 3);
  8106. var end = styleString.indexOf(')', start + 1);
  8107. var parts = styleString.substring(start + 1, end).split(',');
  8108. if (parts.length != 4 || styleString.charAt(3) != 'a') {
  8109. parts[3] = 1;
  8110. }
  8111. return parts;
  8112. }
  8113. function percent(s) {
  8114. return parseFloat(s) / 100;
  8115. }
  8116. function clamp(v, min, max) {
  8117. return Math.min(max, Math.max(min, v));
  8118. }
  8119. function hslToRgb(parts) {
  8120. var r, g, b, h, s, l;
  8121. h = parseFloat(parts[0]) / 360 % 360;
  8122. if (h < 0)
  8123. h++;
  8124. s = clamp(percent(parts[1]), 0, 1);
  8125. l = clamp(percent(parts[2]), 0, 1);
  8126. if (s == 0) {
  8127. r = g = b = l;
  8128. } else {
  8129. var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
  8130. var p = 2 * l - q;
  8131. r = hueToRgb(p, q, h + 1 / 3);
  8132. g = hueToRgb(p, q, h);
  8133. b = hueToRgb(p, q, h - 1 / 3);
  8134. }
  8135. return '#' + decToHex[Math.floor(r * 255)] + decToHex[Math.floor(g * 255)] + decToHex[Math.floor(b * 255)];
  8136. }
  8137. function hueToRgb(m1, m2, h) {
  8138. if (h < 0)
  8139. h++;
  8140. if (h > 1)
  8141. h--;
  8142. if (6 * h < 1)
  8143. return m1 + (m2 - m1) * 6 * h;
  8144. else if (2 * h < 1)
  8145. return m2;
  8146. else if (3 * h < 2)
  8147. return m1 + (m2 - m1) * (2 / 3 - h) * 6;
  8148. else
  8149. return m1;
  8150. }
  8151. var processStyleCache = {};
  8152. function processStyle(styleString) {
  8153. if (styleString in processStyleCache) {
  8154. return processStyleCache[styleString];
  8155. }
  8156. var str, alpha = 1;
  8157. styleString = String(styleString);
  8158. if (styleString.charAt(0) == '#') {
  8159. str = styleString;
  8160. } else if (/^rgb/.test(styleString)) {
  8161. var parts = getRgbHslContent(styleString);
  8162. var str = '#', n;
  8163. for (var i = 0; i < 3; i++) {
  8164. if (parts[i].indexOf('%') != -1) {
  8165. n = Math.floor(percent(parts[i]) * 255);
  8166. } else {
  8167. n = +parts[i];
  8168. }
  8169. str += decToHex[clamp(n, 0, 255)];
  8170. }
  8171. alpha = +parts[3];
  8172. } else if (/^hsl/.test(styleString)) {
  8173. var parts = getRgbHslContent(styleString);
  8174. str = hslToRgb(parts);
  8175. alpha = parts[3];
  8176. } else {
  8177. str = colorData[styleString] || styleString;
  8178. }
  8179. return processStyleCache[styleString] = {
  8180. color: str,
  8181. alpha: alpha
  8182. };
  8183. }
  8184. var DEFAULT_STYLE = {
  8185. style: 'normal',
  8186. variant: 'normal',
  8187. weight: 'normal',
  8188. size: 12,
  8189. family: '微软雅黑'
  8190. };
  8191. var fontStyleCache = {};
  8192. function processFontStyle(styleString) {
  8193. if (fontStyleCache[styleString]) {
  8194. return fontStyleCache[styleString];
  8195. }
  8196. var el = document.createElement('div');
  8197. var style = el.style;
  8198. var fontFamily;
  8199. try {
  8200. style.font = styleString;
  8201. fontFamily = style.fontFamily.split(',')[0];
  8202. } catch (ex) {
  8203. }
  8204. return fontStyleCache[styleString] = {
  8205. style: style.fontStyle || DEFAULT_STYLE.style,
  8206. variant: style.fontVariant || DEFAULT_STYLE.variant,
  8207. weight: style.fontWeight || DEFAULT_STYLE.weight,
  8208. size: style.fontSize || DEFAULT_STYLE.size,
  8209. family: fontFamily || DEFAULT_STYLE.family
  8210. };
  8211. }
  8212. function getComputedStyle(style, element) {
  8213. var computedStyle = {};
  8214. for (var p in style) {
  8215. computedStyle[p] = style[p];
  8216. }
  8217. var canvasFontSize = parseFloat(element.currentStyle.fontSize), fontSize = parseFloat(style.size);
  8218. if (typeof style.size == 'number') {
  8219. computedStyle.size = style.size;
  8220. } else if (style.size.indexOf('px') != -1) {
  8221. computedStyle.size = fontSize;
  8222. } else if (style.size.indexOf('em') != -1) {
  8223. computedStyle.size = canvasFontSize * fontSize;
  8224. } else if (style.size.indexOf('%') != -1) {
  8225. computedStyle.size = canvasFontSize / 100 * fontSize;
  8226. } else if (style.size.indexOf('pt') != -1) {
  8227. computedStyle.size = fontSize / 0.75;
  8228. } else {
  8229. computedStyle.size = canvasFontSize;
  8230. }
  8231. return computedStyle;
  8232. }
  8233. function buildStyle(style) {
  8234. return style.style + ' ' + style.variant + ' ' + style.weight + ' ' + style.size + 'px \'' + style.family + '\'';
  8235. }
  8236. var lineCapMap = {
  8237. 'butt': 'flat',
  8238. 'round': 'round'
  8239. };
  8240. function processLineCap(lineCap) {
  8241. return lineCapMap[lineCap] || 'square';
  8242. }
  8243. function CanvasRenderingContext2D_(canvasElement) {
  8244. this.m_ = createMatrixIdentity();
  8245. this.mStack_ = [];
  8246. this.aStack_ = [];
  8247. this.currentPath_ = [];
  8248. this.strokeStyle = '#000';
  8249. this.fillStyle = '#000';
  8250. this.lineWidth = 1;
  8251. this.lineJoin = 'miter';
  8252. this.lineCap = 'butt';
  8253. this.miterLimit = Z * 1;
  8254. this.globalAlpha = 1;
  8255. this.font = '12px 微软雅黑';
  8256. this.textAlign = 'left';
  8257. this.textBaseline = 'alphabetic';
  8258. this.canvas = canvasElement;
  8259. var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' + canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
  8260. var el = canvasElement.ownerDocument.createElement('div');
  8261. el.style.cssText = cssText;
  8262. canvasElement.appendChild(el);
  8263. var overlayEl = el.cloneNode(false);
  8264. overlayEl.style.backgroundColor = '#fff';
  8265. overlayEl.style.filter = 'alpha(opacity=0)';
  8266. canvasElement.appendChild(overlayEl);
  8267. this.element_ = el;
  8268. this.scaleX_ = 1;
  8269. this.scaleY_ = 1;
  8270. this.lineScale_ = 1;
  8271. }
  8272. var contextPrototype = CanvasRenderingContext2D_.prototype;
  8273. contextPrototype.clearRect = function () {
  8274. if (this.textMeasureEl_) {
  8275. this.textMeasureEl_.removeNode(true);
  8276. this.textMeasureEl_ = null;
  8277. }
  8278. this.element_.innerHTML = '';
  8279. };
  8280. contextPrototype.beginPath = function () {
  8281. this.currentPath_ = [];
  8282. };
  8283. contextPrototype.moveTo = function (aX, aY) {
  8284. var p = getCoords(this, aX, aY);
  8285. this.currentPath_.push({
  8286. type: 'moveTo',
  8287. x: p.x,
  8288. y: p.y
  8289. });
  8290. this.currentX_ = p.x;
  8291. this.currentY_ = p.y;
  8292. };
  8293. contextPrototype.lineTo = function (aX, aY) {
  8294. var p = getCoords(this, aX, aY);
  8295. this.currentPath_.push({
  8296. type: 'lineTo',
  8297. x: p.x,
  8298. y: p.y
  8299. });
  8300. this.currentX_ = p.x;
  8301. this.currentY_ = p.y;
  8302. };
  8303. contextPrototype.bezierCurveTo = function (aCP1x, aCP1y, aCP2x, aCP2y, aX, aY) {
  8304. var p = getCoords(this, aX, aY);
  8305. var cp1 = getCoords(this, aCP1x, aCP1y);
  8306. var cp2 = getCoords(this, aCP2x, aCP2y);
  8307. bezierCurveTo(this, cp1, cp2, p);
  8308. };
  8309. function bezierCurveTo(self, cp1, cp2, p) {
  8310. self.currentPath_.push({
  8311. type: 'bezierCurveTo',
  8312. cp1x: cp1.x,
  8313. cp1y: cp1.y,
  8314. cp2x: cp2.x,
  8315. cp2y: cp2.y,
  8316. x: p.x,
  8317. y: p.y
  8318. });
  8319. self.currentX_ = p.x;
  8320. self.currentY_ = p.y;
  8321. }
  8322. contextPrototype.quadraticCurveTo = function (aCPx, aCPy, aX, aY) {
  8323. var cp = getCoords(this, aCPx, aCPy);
  8324. var p = getCoords(this, aX, aY);
  8325. var cp1 = {
  8326. x: this.currentX_ + 2 / 3 * (cp.x - this.currentX_),
  8327. y: this.currentY_ + 2 / 3 * (cp.y - this.currentY_)
  8328. };
  8329. var cp2 = {
  8330. x: cp1.x + (p.x - this.currentX_) / 3,
  8331. y: cp1.y + (p.y - this.currentY_) / 3
  8332. };
  8333. bezierCurveTo(this, cp1, cp2, p);
  8334. };
  8335. contextPrototype.arc = function (aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise) {
  8336. aRadius *= Z;
  8337. var arcType = aClockwise ? 'at' : 'wa';
  8338. var xStart = aX + mc(aStartAngle) * aRadius - Z2;
  8339. var yStart = aY + ms(aStartAngle) * aRadius - Z2;
  8340. var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
  8341. var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
  8342. if (xStart == xEnd && !aClockwise) {
  8343. xStart += 0.125;
  8344. }
  8345. var p = getCoords(this, aX, aY);
  8346. var pStart = getCoords(this, xStart, yStart);
  8347. var pEnd = getCoords(this, xEnd, yEnd);
  8348. this.currentPath_.push({
  8349. type: arcType,
  8350. x: p.x,
  8351. y: p.y,
  8352. radius: aRadius,
  8353. xStart: pStart.x,
  8354. yStart: pStart.y,
  8355. xEnd: pEnd.x,
  8356. yEnd: pEnd.y
  8357. });
  8358. };
  8359. contextPrototype.rect = function (aX, aY, aWidth, aHeight) {
  8360. this.moveTo(aX, aY);
  8361. this.lineTo(aX + aWidth, aY);
  8362. this.lineTo(aX + aWidth, aY + aHeight);
  8363. this.lineTo(aX, aY + aHeight);
  8364. this.closePath();
  8365. };
  8366. contextPrototype.strokeRect = function (aX, aY, aWidth, aHeight) {
  8367. var oldPath = this.currentPath_;
  8368. this.beginPath();
  8369. this.moveTo(aX, aY);
  8370. this.lineTo(aX + aWidth, aY);
  8371. this.lineTo(aX + aWidth, aY + aHeight);
  8372. this.lineTo(aX, aY + aHeight);
  8373. this.closePath();
  8374. this.stroke();
  8375. this.currentPath_ = oldPath;
  8376. };
  8377. contextPrototype.fillRect = function (aX, aY, aWidth, aHeight) {
  8378. var oldPath = this.currentPath_;
  8379. this.beginPath();
  8380. this.moveTo(aX, aY);
  8381. this.lineTo(aX + aWidth, aY);
  8382. this.lineTo(aX + aWidth, aY + aHeight);
  8383. this.lineTo(aX, aY + aHeight);
  8384. this.closePath();
  8385. this.fill();
  8386. this.currentPath_ = oldPath;
  8387. };
  8388. contextPrototype.createLinearGradient = function (aX0, aY0, aX1, aY1) {
  8389. var gradient = new CanvasGradient_('gradient');
  8390. gradient.x0_ = aX0;
  8391. gradient.y0_ = aY0;
  8392. gradient.x1_ = aX1;
  8393. gradient.y1_ = aY1;
  8394. return gradient;
  8395. };
  8396. contextPrototype.createRadialGradient = function (aX0, aY0, aR0, aX1, aY1, aR1) {
  8397. var gradient = new CanvasGradient_('gradientradial');
  8398. gradient.x0_ = aX0;
  8399. gradient.y0_ = aY0;
  8400. gradient.r0_ = aR0;
  8401. gradient.x1_ = aX1;
  8402. gradient.y1_ = aY1;
  8403. gradient.r1_ = aR1;
  8404. return gradient;
  8405. };
  8406. contextPrototype.drawImage = function (image, var_args) {
  8407. var dx, dy, dw, dh, sx, sy, sw, sh;
  8408. var oldRuntimeWidth = image.runtimeStyle.width;
  8409. var oldRuntimeHeight = image.runtimeStyle.height;
  8410. image.runtimeStyle.width = 'auto';
  8411. image.runtimeStyle.height = 'auto';
  8412. var w = image.width;
  8413. var h = image.height;
  8414. image.runtimeStyle.width = oldRuntimeWidth;
  8415. image.runtimeStyle.height = oldRuntimeHeight;
  8416. if (arguments.length == 3) {
  8417. dx = arguments[1];
  8418. dy = arguments[2];
  8419. sx = sy = 0;
  8420. sw = dw = w;
  8421. sh = dh = h;
  8422. } else if (arguments.length == 5) {
  8423. dx = arguments[1];
  8424. dy = arguments[2];
  8425. dw = arguments[3];
  8426. dh = arguments[4];
  8427. sx = sy = 0;
  8428. sw = w;
  8429. sh = h;
  8430. } else if (arguments.length == 9) {
  8431. sx = arguments[1];
  8432. sy = arguments[2];
  8433. sw = arguments[3];
  8434. sh = arguments[4];
  8435. dx = arguments[5];
  8436. dy = arguments[6];
  8437. dw = arguments[7];
  8438. dh = arguments[8];
  8439. } else {
  8440. throw Error('Invalid number of arguments');
  8441. }
  8442. var d = getCoords(this, dx, dy);
  8443. var w2 = sw / 2;
  8444. var h2 = sh / 2;
  8445. var vmlStr = [];
  8446. var W = 10;
  8447. var H = 10;
  8448. var scaleX = scaleY = 1;
  8449. vmlStr.push(' <g_vml_:group', ' coordsize="', Z * W, ',', Z * H, '"', ' coordorigin="0,0"', ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
  8450. if (this.m_[0][0] != 1 || this.m_[0][1] || this.m_[1][1] != 1 || this.m_[1][0]) {
  8451. var filter = [];
  8452. var scaleX = this.scaleX_;
  8453. var scaleY = this.scaleY_;
  8454. filter.push('M11=', this.m_[0][0] / scaleX, ',', 'M12=', this.m_[1][0] / scaleY, ',', 'M21=', this.m_[0][1] / scaleX, ',', 'M22=', this.m_[1][1] / scaleY, ',', 'Dx=', mr(d.x / Z), ',', 'Dy=', mr(d.y / Z), '');
  8455. var max = d;
  8456. var c2 = getCoords(this, dx + dw, dy);
  8457. var c3 = getCoords(this, dx, dy + dh);
  8458. var c4 = getCoords(this, dx + dw, dy + dh);
  8459. max.x = m.max(max.x, c2.x, c3.x, c4.x);
  8460. max.y = m.max(max.y, c2.y, c3.y, c4.y);
  8461. vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z), 'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(', filter.join(''), ', SizingMethod=\'clip\');');
  8462. } else {
  8463. vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
  8464. }
  8465. vmlStr.push(' ">');
  8466. if (sx || sy) {
  8467. vmlStr.push('<div style="overflow: hidden; width:', Math.ceil((dw + sx * dw / sw) * scaleX), 'px;', ' height:', Math.ceil((dh + sy * dh / sh) * scaleY), 'px;', ' filter:progid:DxImageTransform.Microsoft.Matrix(Dx=', -sx * dw / sw * scaleX, ',Dy=', -sy * dh / sh * scaleY, ');">');
  8468. }
  8469. vmlStr.push('<div style="width:', Math.round(scaleX * w * dw / sw), 'px;', ' height:', Math.round(scaleY * h * dh / sh), 'px;', ' filter:');
  8470. if (this.globalAlpha < 1) {
  8471. vmlStr.push(' progid:DXImageTransform.Microsoft.Alpha(opacity=' + this.globalAlpha * 100 + ')');
  8472. }
  8473. vmlStr.push(' progid:DXImageTransform.Microsoft.AlphaImageLoader(src=', image.src, ',sizingMethod=scale)">');
  8474. if (sx || sy)
  8475. vmlStr.push('</div>');
  8476. vmlStr.push('</div></div>');
  8477. this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
  8478. };
  8479. contextPrototype.stroke = function (aFill) {
  8480. var lineStr = [];
  8481. var lineOpen = false;
  8482. var W = 10;
  8483. var H = 10;
  8484. lineStr.push('<g_vml_:shape', ' filled="', !!aFill, '"', ' style="position:absolute;width:', W, 'px;height:', H, 'px;"', ' coordorigin="0,0"', ' coordsize="', Z * W, ',', Z * H, '"', ' stroked="', !aFill, '"', ' path="');
  8485. var newSeq = false;
  8486. var min = {
  8487. x: null,
  8488. y: null
  8489. };
  8490. var max = {
  8491. x: null,
  8492. y: null
  8493. };
  8494. for (var i = 0; i < this.currentPath_.length; i++) {
  8495. var p = this.currentPath_[i];
  8496. var c;
  8497. switch (p.type) {
  8498. case 'moveTo':
  8499. c = p;
  8500. lineStr.push(' m ', mr(p.x), ',', mr(p.y));
  8501. break;
  8502. case 'lineTo':
  8503. lineStr.push(' l ', mr(p.x), ',', mr(p.y));
  8504. break;
  8505. case 'close':
  8506. lineStr.push(' x ');
  8507. p = null;
  8508. break;
  8509. case 'bezierCurveTo':
  8510. lineStr.push(' c ', mr(p.cp1x), ',', mr(p.cp1y), ',', mr(p.cp2x), ',', mr(p.cp2y), ',', mr(p.x), ',', mr(p.y));
  8511. break;
  8512. case 'at':
  8513. case 'wa':
  8514. lineStr.push(' ', p.type, ' ', mr(p.x - this.scaleX_ * p.radius), ',', mr(p.y - this.scaleY_ * p.radius), ' ', mr(p.x + this.scaleX_ * p.radius), ',', mr(p.y + this.scaleY_ * p.radius), ' ', mr(p.xStart), ',', mr(p.yStart), ' ', mr(p.xEnd), ',', mr(p.yEnd));
  8515. break;
  8516. }
  8517. if (p) {
  8518. if (min.x == null || p.x < min.x) {
  8519. min.x = p.x;
  8520. }
  8521. if (max.x == null || p.x > max.x) {
  8522. max.x = p.x;
  8523. }
  8524. if (min.y == null || p.y < min.y) {
  8525. min.y = p.y;
  8526. }
  8527. if (max.y == null || p.y > max.y) {
  8528. max.y = p.y;
  8529. }
  8530. }
  8531. }
  8532. lineStr.push(' ">');
  8533. if (!aFill) {
  8534. appendStroke(this, lineStr);
  8535. } else {
  8536. appendFill(this, lineStr, min, max);
  8537. }
  8538. lineStr.push('</g_vml_:shape>');
  8539. this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  8540. };
  8541. function appendStroke(ctx, lineStr) {
  8542. var a = processStyle(ctx.strokeStyle);
  8543. var color = a.color;
  8544. var opacity = a.alpha * ctx.globalAlpha;
  8545. var lineWidth = ctx.lineScale_ * ctx.lineWidth;
  8546. if (lineWidth < 1) {
  8547. opacity *= lineWidth;
  8548. }
  8549. lineStr.push('<g_vml_:stroke', ' opacity="', opacity, '"', ' joinstyle="', ctx.lineJoin, '"', ' miterlimit="', ctx.miterLimit, '"', ' endcap="', processLineCap(ctx.lineCap), '"', ' weight="', lineWidth, 'px"', ' color="', color, '" />');
  8550. }
  8551. function appendFill(ctx, lineStr, min, max) {
  8552. var fillStyle = ctx.fillStyle;
  8553. var arcScaleX = ctx.scaleX_;
  8554. var arcScaleY = ctx.scaleY_;
  8555. var width = max.x - min.x;
  8556. var height = max.y - min.y;
  8557. if (fillStyle instanceof CanvasGradient_) {
  8558. var angle = 0;
  8559. var focus = {
  8560. x: 0,
  8561. y: 0
  8562. };
  8563. var shift = 0;
  8564. var expansion = 1;
  8565. if (fillStyle.type_ == 'gradient') {
  8566. var x0 = fillStyle.x0_ / arcScaleX;
  8567. var y0 = fillStyle.y0_ / arcScaleY;
  8568. var x1 = fillStyle.x1_ / arcScaleX;
  8569. var y1 = fillStyle.y1_ / arcScaleY;
  8570. var p0 = getCoords(ctx, x0, y0);
  8571. var p1 = getCoords(ctx, x1, y1);
  8572. var dx = p1.x - p0.x;
  8573. var dy = p1.y - p0.y;
  8574. angle = Math.atan2(dx, dy) * 180 / Math.PI;
  8575. if (angle < 0) {
  8576. angle += 360;
  8577. }
  8578. if (angle < 0.000001) {
  8579. angle = 0;
  8580. }
  8581. } else {
  8582. var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
  8583. focus = {
  8584. x: (p0.x - min.x) / width,
  8585. y: (p0.y - min.y) / height
  8586. };
  8587. width /= arcScaleX * Z;
  8588. height /= arcScaleY * Z;
  8589. var dimension = m.max(width, height);
  8590. shift = 2 * fillStyle.r0_ / dimension;
  8591. expansion = 2 * fillStyle.r1_ / dimension - shift;
  8592. }
  8593. var stops = fillStyle.colors_;
  8594. stops.sort(function (cs1, cs2) {
  8595. return cs1.offset - cs2.offset;
  8596. });
  8597. var length = stops.length;
  8598. var color1 = stops[0].color;
  8599. var color2 = stops[length - 1].color;
  8600. var opacity1 = stops[0].alpha * ctx.globalAlpha;
  8601. var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;
  8602. var colors = [];
  8603. for (var i = 0; i < length; i++) {
  8604. var stop = stops[i];
  8605. colors.push(stop.offset * expansion + shift + ' ' + stop.color);
  8606. }
  8607. lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"', ' method="none" focus="100%"', ' color="', color1, '"', ' color2="', color2, '"', ' colors="', colors.join(','), '"', ' opacity="', opacity2, '"', ' g_o_:opacity2="', opacity1, '"', ' angle="', angle, '"', ' focusposition="', focus.x, ',', focus.y, '" />');
  8608. } else if (fillStyle instanceof CanvasPattern_) {
  8609. if (width && height) {
  8610. var deltaLeft = -min.x;
  8611. var deltaTop = -min.y;
  8612. lineStr.push('<g_vml_:fill', ' position="', deltaLeft / width * arcScaleX * arcScaleX, ',', deltaTop / height * arcScaleY * arcScaleY, '"', ' type="tile"', ' src="', fillStyle.src_, '" />');
  8613. }
  8614. } else {
  8615. var a = processStyle(ctx.fillStyle);
  8616. var color = a.color;
  8617. var opacity = a.alpha * ctx.globalAlpha;
  8618. lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity, '" />');
  8619. }
  8620. }
  8621. contextPrototype.fill = function () {
  8622. this.stroke(true);
  8623. };
  8624. contextPrototype.closePath = function () {
  8625. this.currentPath_.push({ type: 'close' });
  8626. };
  8627. function getCoords(ctx, aX, aY) {
  8628. var m = ctx.m_;
  8629. return {
  8630. x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
  8631. y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
  8632. };
  8633. }
  8634. ;
  8635. contextPrototype.save = function () {
  8636. var o = {};
  8637. copyState(this, o);
  8638. this.aStack_.push(o);
  8639. this.mStack_.push(this.m_);
  8640. this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
  8641. };
  8642. contextPrototype.restore = function () {
  8643. if (this.aStack_.length) {
  8644. copyState(this.aStack_.pop(), this);
  8645. this.m_ = this.mStack_.pop();
  8646. }
  8647. };
  8648. function matrixIsFinite(m) {
  8649. return isFinite(m[0][0]) && isFinite(m[0][1]) && isFinite(m[1][0]) && isFinite(m[1][1]) && isFinite(m[2][0]) && isFinite(m[2][1]);
  8650. }
  8651. function setM(ctx, m, updateLineScale) {
  8652. if (!matrixIsFinite(m)) {
  8653. return;
  8654. }
  8655. ctx.m_ = m;
  8656. ctx.scaleX_ = Math.sqrt(m[0][0] * m[0][0] + m[0][1] * m[0][1]);
  8657. ctx.scaleY_ = Math.sqrt(m[1][0] * m[1][0] + m[1][1] * m[1][1]);
  8658. if (updateLineScale) {
  8659. var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
  8660. ctx.lineScale_ = sqrt(abs(det));
  8661. }
  8662. }
  8663. contextPrototype.translate = function (aX, aY) {
  8664. var m1 = [
  8665. [
  8666. 1,
  8667. 0,
  8668. 0
  8669. ],
  8670. [
  8671. 0,
  8672. 1,
  8673. 0
  8674. ],
  8675. [
  8676. aX,
  8677. aY,
  8678. 1
  8679. ]
  8680. ];
  8681. setM(this, matrixMultiply(m1, this.m_), false);
  8682. };
  8683. contextPrototype.rotate = function (aRot) {
  8684. var c = mc(aRot);
  8685. var s = ms(aRot);
  8686. var m1 = [
  8687. [
  8688. c,
  8689. s,
  8690. 0
  8691. ],
  8692. [
  8693. -s,
  8694. c,
  8695. 0
  8696. ],
  8697. [
  8698. 0,
  8699. 0,
  8700. 1
  8701. ]
  8702. ];
  8703. setM(this, matrixMultiply(m1, this.m_), false);
  8704. };
  8705. contextPrototype.scale = function (aX, aY) {
  8706. var m1 = [
  8707. [
  8708. aX,
  8709. 0,
  8710. 0
  8711. ],
  8712. [
  8713. 0,
  8714. aY,
  8715. 0
  8716. ],
  8717. [
  8718. 0,
  8719. 0,
  8720. 1
  8721. ]
  8722. ];
  8723. setM(this, matrixMultiply(m1, this.m_), true);
  8724. };
  8725. contextPrototype.transform = function (m11, m12, m21, m22, dx, dy) {
  8726. var m1 = [
  8727. [
  8728. m11,
  8729. m12,
  8730. 0
  8731. ],
  8732. [
  8733. m21,
  8734. m22,
  8735. 0
  8736. ],
  8737. [
  8738. dx,
  8739. dy,
  8740. 1
  8741. ]
  8742. ];
  8743. setM(this, matrixMultiply(m1, this.m_), true);
  8744. };
  8745. contextPrototype.setTransform = function (m11, m12, m21, m22, dx, dy) {
  8746. var m = [
  8747. [
  8748. m11,
  8749. m12,
  8750. 0
  8751. ],
  8752. [
  8753. m21,
  8754. m22,
  8755. 0
  8756. ],
  8757. [
  8758. dx,
  8759. dy,
  8760. 1
  8761. ]
  8762. ];
  8763. setM(this, m, true);
  8764. };
  8765. contextPrototype.drawText_ = function (text, x, y, maxWidth, stroke) {
  8766. var m = this.m_, delta = 1000, left = 0, right = delta, offset = {
  8767. x: 0,
  8768. y: 0
  8769. }, lineStr = [];
  8770. var fontStyle = getComputedStyle(processFontStyle(this.font), this.element_);
  8771. var fontStyleString = buildStyle(fontStyle);
  8772. var elementStyle = this.element_.currentStyle;
  8773. var textAlign = this.textAlign.toLowerCase();
  8774. switch (textAlign) {
  8775. case 'left':
  8776. case 'center':
  8777. case 'right':
  8778. break;
  8779. case 'end':
  8780. textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
  8781. break;
  8782. case 'start':
  8783. textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
  8784. break;
  8785. default:
  8786. textAlign = 'left';
  8787. }
  8788. switch (this.textBaseline) {
  8789. case 'hanging':
  8790. case 'top':
  8791. offset.y = fontStyle.size / 1.75;
  8792. break;
  8793. case 'middle':
  8794. break;
  8795. default:
  8796. case null:
  8797. case 'alphabetic':
  8798. case 'ideographic':
  8799. case 'bottom':
  8800. offset.y = -fontStyle.size / 2.25;
  8801. break;
  8802. }
  8803. switch (textAlign) {
  8804. case 'right':
  8805. left = delta;
  8806. right = 0.05;
  8807. break;
  8808. case 'center':
  8809. left = right = delta / 2;
  8810. break;
  8811. }
  8812. var d = getCoords(this, x + offset.x, y + offset.y);
  8813. lineStr.push('<g_vml_:line from="', -left, ' 0" to="', right, ' 0.05" ', ' coordsize="100 100" coordorigin="0 0"', ' filled="', !stroke, '" stroked="', !!stroke, '" style="position:absolute;width:1px;height:1px;">');
  8814. if (stroke) {
  8815. appendStroke(this, lineStr);
  8816. } else {
  8817. appendFill(this, lineStr, {
  8818. x: -left,
  8819. y: 0
  8820. }, {
  8821. x: right,
  8822. y: fontStyle.size
  8823. });
  8824. }
  8825. var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' + m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';
  8826. var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);
  8827. lineStr.push('<g_vml_:skew on="t" matrix="', skewM, '" ', ' offset="', skewOffset, '" origin="', left, ' 0" />', '<g_vml_:path textpathok="true" />', '<g_vml_:textpath on="true" string="', encodeHtmlAttribute(text), '" style="v-text-align:', textAlign, ';font:', encodeHtmlAttribute(fontStyleString), '" /></g_vml_:line>');
  8828. this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
  8829. };
  8830. contextPrototype.fillText = function (text, x, y, maxWidth) {
  8831. this.drawText_(text, x, y, maxWidth, false);
  8832. };
  8833. contextPrototype.strokeText = function (text, x, y, maxWidth) {
  8834. this.drawText_(text, x, y, maxWidth, true);
  8835. };
  8836. contextPrototype.measureText = function (text) {
  8837. if (!this.textMeasureEl_) {
  8838. var s = '<span style="position:absolute;' + 'top:-20000px;left:0;padding:0;margin:0;border:none;' + 'white-space:pre;"></span>';
  8839. this.element_.insertAdjacentHTML('beforeEnd', s);
  8840. this.textMeasureEl_ = this.element_.lastChild;
  8841. }
  8842. var doc = this.element_.ownerDocument;
  8843. this.textMeasureEl_.innerHTML = '';
  8844. try {
  8845. this.textMeasureEl_.style.font = this.font;
  8846. } catch (ex) {
  8847. }
  8848. this.textMeasureEl_.appendChild(doc.createTextNode(text));
  8849. return { width: this.textMeasureEl_.offsetWidth };
  8850. };
  8851. contextPrototype.clip = function () {
  8852. };
  8853. contextPrototype.arcTo = function () {
  8854. };
  8855. contextPrototype.createPattern = function (image, repetition) {
  8856. return new CanvasPattern_(image, repetition);
  8857. };
  8858. function CanvasGradient_(aType) {
  8859. this.type_ = aType;
  8860. this.x0_ = 0;
  8861. this.y0_ = 0;
  8862. this.r0_ = 0;
  8863. this.x1_ = 0;
  8864. this.y1_ = 0;
  8865. this.r1_ = 0;
  8866. this.colors_ = [];
  8867. }
  8868. CanvasGradient_.prototype.addColorStop = function (aOffset, aColor) {
  8869. aColor = processStyle(aColor);
  8870. this.colors_.push({
  8871. offset: aOffset,
  8872. color: aColor.color,
  8873. alpha: aColor.alpha
  8874. });
  8875. };
  8876. function CanvasPattern_(image, repetition) {
  8877. assertImageIsValid(image);
  8878. switch (repetition) {
  8879. case 'repeat':
  8880. case null:
  8881. case '':
  8882. this.repetition_ = 'repeat';
  8883. break;
  8884. case 'repeat-x':
  8885. case 'repeat-y':
  8886. case 'no-repeat':
  8887. this.repetition_ = repetition;
  8888. break;
  8889. default:
  8890. throwException('SYNTAX_ERR');
  8891. }
  8892. this.src_ = image.src;
  8893. this.width_ = image.width;
  8894. this.height_ = image.height;
  8895. }
  8896. function throwException(s) {
  8897. throw new DOMException_(s);
  8898. }
  8899. function assertImageIsValid(img) {
  8900. if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
  8901. throwException('TYPE_MISMATCH_ERR');
  8902. }
  8903. if (img.readyState != 'complete') {
  8904. throwException('INVALID_STATE_ERR');
  8905. }
  8906. }
  8907. function DOMException_(s) {
  8908. this.code = this[s];
  8909. this.message = s + ': DOM Exception ' + this.code;
  8910. }
  8911. var p = DOMException_.prototype = new Error();
  8912. p.INDEX_SIZE_ERR = 1;
  8913. p.DOMSTRING_SIZE_ERR = 2;
  8914. p.HIERARCHY_REQUEST_ERR = 3;
  8915. p.WRONG_DOCUMENT_ERR = 4;
  8916. p.INVALID_CHARACTER_ERR = 5;
  8917. p.NO_DATA_ALLOWED_ERR = 6;
  8918. p.NO_MODIFICATION_ALLOWED_ERR = 7;
  8919. p.NOT_FOUND_ERR = 8;
  8920. p.NOT_SUPPORTED_ERR = 9;
  8921. p.INUSE_ATTRIBUTE_ERR = 10;
  8922. p.INVALID_STATE_ERR = 11;
  8923. p.SYNTAX_ERR = 12;
  8924. p.INVALID_MODIFICATION_ERR = 13;
  8925. p.NAMESPACE_ERR = 14;
  8926. p.INVALID_ACCESS_ERR = 15;
  8927. p.VALIDATION_ERR = 16;
  8928. p.TYPE_MISMATCH_ERR = 17;
  8929. G_vmlCanvasManager = G_vmlCanvasManager_;
  8930. CanvasRenderingContext2D = CanvasRenderingContext2D_;
  8931. CanvasGradient = CanvasGradient_;
  8932. CanvasPattern = CanvasPattern_;
  8933. DOMException = DOMException_;
  8934. }());
  8935. } else {
  8936. G_vmlCanvasManager = false;
  8937. }
  8938. return G_vmlCanvasManager;
  8939. });define('zrender/mixin/Eventful', ['require'], function (require) {
  8940. var Eventful = function () {
  8941. this._handlers = {};
  8942. };
  8943. Eventful.prototype.one = function (event, handler, context) {
  8944. var _h = this._handlers;
  8945. if (!handler || !event) {
  8946. return this;
  8947. }
  8948. if (!_h[event]) {
  8949. _h[event] = [];
  8950. }
  8951. _h[event].push({
  8952. h: handler,
  8953. one: true,
  8954. ctx: context || this
  8955. });
  8956. return this;
  8957. };
  8958. Eventful.prototype.bind = function (event, handler, context) {
  8959. var _h = this._handlers;
  8960. if (!handler || !event) {
  8961. return this;
  8962. }
  8963. if (!_h[event]) {
  8964. _h[event] = [];
  8965. }
  8966. _h[event].push({
  8967. h: handler,
  8968. one: false,
  8969. ctx: context || this
  8970. });
  8971. return this;
  8972. };
  8973. Eventful.prototype.unbind = function (event, handler) {
  8974. var _h = this._handlers;
  8975. if (!event) {
  8976. this._handlers = {};
  8977. return this;
  8978. }
  8979. if (handler) {
  8980. if (_h[event]) {
  8981. var newList = [];
  8982. for (var i = 0, l = _h[event].length; i < l; i++) {
  8983. if (_h[event][i]['h'] != handler) {
  8984. newList.push(_h[event][i]);
  8985. }
  8986. }
  8987. _h[event] = newList;
  8988. }
  8989. if (_h[event] && _h[event].length === 0) {
  8990. delete _h[event];
  8991. }
  8992. } else {
  8993. delete _h[event];
  8994. }
  8995. return this;
  8996. };
  8997. Eventful.prototype.dispatch = function (type) {
  8998. if (this._handlers[type]) {
  8999. var args = arguments;
  9000. var argLen = args.length;
  9001. if (argLen > 3) {
  9002. args = Array.prototype.slice.call(args, 1);
  9003. }
  9004. var _h = this._handlers[type];
  9005. var len = _h.length;
  9006. for (var i = 0; i < len;) {
  9007. switch (argLen) {
  9008. case 1:
  9009. _h[i]['h'].call(_h[i]['ctx']);
  9010. break;
  9011. case 2:
  9012. _h[i]['h'].call(_h[i]['ctx'], args[1]);
  9013. break;
  9014. case 3:
  9015. _h[i]['h'].call(_h[i]['ctx'], args[1], args[2]);
  9016. break;
  9017. default:
  9018. _h[i]['h'].apply(_h[i]['ctx'], args);
  9019. break;
  9020. }
  9021. if (_h[i]['one']) {
  9022. _h.splice(i, 1);
  9023. len--;
  9024. } else {
  9025. i++;
  9026. }
  9027. }
  9028. }
  9029. return this;
  9030. };
  9031. Eventful.prototype.dispatchWithContext = function (type) {
  9032. if (this._handlers[type]) {
  9033. var args = arguments;
  9034. var argLen = args.length;
  9035. if (argLen > 4) {
  9036. args = Array.prototype.slice.call(args, 1, args.length - 1);
  9037. }
  9038. var ctx = args[args.length - 1];
  9039. var _h = this._handlers[type];
  9040. var len = _h.length;
  9041. for (var i = 0; i < len;) {
  9042. switch (argLen) {
  9043. case 1:
  9044. _h[i]['h'].call(ctx);
  9045. break;
  9046. case 2:
  9047. _h[i]['h'].call(ctx, args[1]);
  9048. break;
  9049. case 3:
  9050. _h[i]['h'].call(ctx, args[1], args[2]);
  9051. break;
  9052. default:
  9053. _h[i]['h'].apply(ctx, args);
  9054. break;
  9055. }
  9056. if (_h[i]['one']) {
  9057. _h.splice(i, 1);
  9058. len--;
  9059. } else {
  9060. i++;
  9061. }
  9062. }
  9063. }
  9064. return this;
  9065. };
  9066. return Eventful;
  9067. });define('zrender/tool/log', [
  9068. 'require',
  9069. '../config'
  9070. ], function (require) {
  9071. var config = require('../config');
  9072. return function () {
  9073. if (config.debugMode === 0) {
  9074. return;
  9075. } else if (config.debugMode == 1) {
  9076. for (var k in arguments) {
  9077. throw new Error(arguments[k]);
  9078. }
  9079. } else if (config.debugMode > 1) {
  9080. for (var k in arguments) {
  9081. console.log(arguments[k]);
  9082. }
  9083. }
  9084. };
  9085. });define('zrender/tool/guid', [], function () {
  9086. var idStart = 2311;
  9087. return function () {
  9088. return 'zrender__' + idStart++;
  9089. };
  9090. });define('zrender/Handler', [
  9091. 'require',
  9092. './config',
  9093. './tool/env',
  9094. './tool/event',
  9095. './tool/util',
  9096. './tool/vector',
  9097. './tool/matrix',
  9098. './mixin/Eventful'
  9099. ], function (require) {
  9100. 'use strict';
  9101. var config = require('./config');
  9102. var env = require('./tool/env');
  9103. var eventTool = require('./tool/event');
  9104. var util = require('./tool/util');
  9105. var vec2 = require('./tool/vector');
  9106. var mat2d = require('./tool/matrix');
  9107. var EVENT = config.EVENT;
  9108. var Eventful = require('./mixin/Eventful');
  9109. var domHandlerNames = [
  9110. 'resize',
  9111. 'click',
  9112. 'dblclick',
  9113. 'mousewheel',
  9114. 'mousemove',
  9115. 'mouseout',
  9116. 'mouseup',
  9117. 'mousedown',
  9118. 'touchstart',
  9119. 'touchend',
  9120. 'touchmove'
  9121. ];
  9122. var isZRenderElement = function (event) {
  9123. if (window.G_vmlCanvasManager) {
  9124. return true;
  9125. }
  9126. event = event || window.event;
  9127. var target = event.toElement || event.relatedTarget || event.srcElement || event.target;
  9128. return target && target.className.match(config.elementClassName);
  9129. };
  9130. var domHandlers = {
  9131. resize: function (event) {
  9132. event = event || window.event;
  9133. this._lastHover = null;
  9134. this._isMouseDown = 0;
  9135. this.dispatch(EVENT.RESIZE, event);
  9136. },
  9137. click: function (event, manually) {
  9138. if (!isZRenderElement(event) && !manually) {
  9139. return;
  9140. }
  9141. event = this._zrenderEventFixed(event);
  9142. var _lastHover = this._lastHover;
  9143. if (_lastHover && _lastHover.clickable || !_lastHover) {
  9144. if (this._clickThreshold < 5) {
  9145. this._dispatchAgency(_lastHover, EVENT.CLICK, event);
  9146. }
  9147. }
  9148. this._mousemoveHandler(event);
  9149. },
  9150. dblclick: function (event, manually) {
  9151. if (!isZRenderElement(event) && !manually) {
  9152. return;
  9153. }
  9154. event = event || window.event;
  9155. event = this._zrenderEventFixed(event);
  9156. var _lastHover = this._lastHover;
  9157. if (_lastHover && _lastHover.clickable || !_lastHover) {
  9158. if (this._clickThreshold < 5) {
  9159. this._dispatchAgency(_lastHover, EVENT.DBLCLICK, event);
  9160. }
  9161. }
  9162. this._mousemoveHandler(event);
  9163. },
  9164. mousewheel: function (event, manually) {
  9165. if (!isZRenderElement(event) && !manually) {
  9166. return;
  9167. }
  9168. event = this._zrenderEventFixed(event);
  9169. var delta = event.wheelDelta || -event.detail;
  9170. var scale = delta > 0 ? 1.1 : 1 / 1.1;
  9171. var needsRefresh = false;
  9172. var mouseX = this._mouseX;
  9173. var mouseY = this._mouseY;
  9174. this.painter.eachBuildinLayer(function (layer) {
  9175. var pos = layer.position;
  9176. if (layer.zoomable) {
  9177. layer.__zoom = layer.__zoom || 1;
  9178. var newZoom = layer.__zoom;
  9179. newZoom *= scale;
  9180. newZoom = Math.max(Math.min(layer.maxZoom, newZoom), layer.minZoom);
  9181. scale = newZoom / layer.__zoom;
  9182. layer.__zoom = newZoom;
  9183. pos[0] -= (mouseX - pos[0]) * (scale - 1);
  9184. pos[1] -= (mouseY - pos[1]) * (scale - 1);
  9185. layer.scale[0] *= scale;
  9186. layer.scale[1] *= scale;
  9187. layer.dirty = true;
  9188. needsRefresh = true;
  9189. eventTool.stop(event);
  9190. }
  9191. });
  9192. if (needsRefresh) {
  9193. this.painter.refresh();
  9194. }
  9195. this._dispatchAgency(this._lastHover, EVENT.MOUSEWHEEL, event);
  9196. this._mousemoveHandler(event);
  9197. },
  9198. mousemove: function (event, manually) {
  9199. if (!isZRenderElement(event) && !manually) {
  9200. return;
  9201. }
  9202. if (this.painter.isLoading()) {
  9203. return;
  9204. }
  9205. event = this._zrenderEventFixed(event);
  9206. this._lastX = this._mouseX;
  9207. this._lastY = this._mouseY;
  9208. this._mouseX = eventTool.getX(event);
  9209. this._mouseY = eventTool.getY(event);
  9210. var dx = this._mouseX - this._lastX;
  9211. var dy = this._mouseY - this._lastY;
  9212. this._processDragStart(event);
  9213. this._hasfound = 0;
  9214. this._event = event;
  9215. this._iterateAndFindHover();
  9216. if (!this._hasfound) {
  9217. if (!this._draggingTarget || this._lastHover && this._lastHover != this._draggingTarget) {
  9218. this._processOutShape(event);
  9219. this._processDragLeave(event);
  9220. }
  9221. this._lastHover = null;
  9222. this.storage.delHover();
  9223. this.painter.clearHover();
  9224. }
  9225. var cursor = 'default';
  9226. if (this._draggingTarget) {
  9227. this.storage.drift(this._draggingTarget.id, dx, dy);
  9228. this._draggingTarget.modSelf();
  9229. this.storage.addHover(this._draggingTarget);
  9230. this._clickThreshold++;
  9231. } else if (this._isMouseDown) {
  9232. var needsRefresh = false;
  9233. this.painter.eachBuildinLayer(function (layer) {
  9234. if (layer.panable) {
  9235. cursor = 'move';
  9236. layer.position[0] += dx;
  9237. layer.position[1] += dy;
  9238. needsRefresh = true;
  9239. layer.dirty = true;
  9240. }
  9241. });
  9242. if (needsRefresh) {
  9243. this.painter.refresh();
  9244. }
  9245. }
  9246. if (this._draggingTarget || this._hasfound && this._lastHover.draggable) {
  9247. cursor = 'move';
  9248. } else if (this._hasfound && this._lastHover.clickable) {
  9249. cursor = 'pointer';
  9250. }
  9251. this.root.style.cursor = cursor;
  9252. this._dispatchAgency(this._lastHover, EVENT.MOUSEMOVE, event);
  9253. if (this._draggingTarget || this._hasfound || this.storage.hasHoverShape()) {
  9254. this.painter.refreshHover();
  9255. }
  9256. },
  9257. mouseout: function (event, manually) {
  9258. if (!isZRenderElement(event) && !manually) {
  9259. return;
  9260. }
  9261. event = this._zrenderEventFixed(event);
  9262. var element = event.toElement || event.relatedTarget;
  9263. if (element != this.root) {
  9264. while (element && element.nodeType != 9) {
  9265. if (element == this.root) {
  9266. this._mousemoveHandler(event);
  9267. return;
  9268. }
  9269. element = element.parentNode;
  9270. }
  9271. }
  9272. event.zrenderX = this._lastX;
  9273. event.zrenderY = this._lastY;
  9274. this.root.style.cursor = 'default';
  9275. this._isMouseDown = 0;
  9276. this._processOutShape(event);
  9277. this._processDrop(event);
  9278. this._processDragEnd(event);
  9279. if (!this.painter.isLoading()) {
  9280. this.painter.refreshHover();
  9281. }
  9282. this.dispatch(EVENT.GLOBALOUT, event);
  9283. },
  9284. mousedown: function (event, manually) {
  9285. if (!isZRenderElement(event) && !manually) {
  9286. return;
  9287. }
  9288. this._clickThreshold = 0;
  9289. if (this._lastDownButton == 2) {
  9290. this._lastDownButton = event.button;
  9291. this._mouseDownTarget = null;
  9292. return;
  9293. }
  9294. this._lastMouseDownMoment = new Date();
  9295. event = this._zrenderEventFixed(event);
  9296. this._isMouseDown = 1;
  9297. this._mouseDownTarget = this._lastHover;
  9298. this._dispatchAgency(this._lastHover, EVENT.MOUSEDOWN, event);
  9299. this._lastDownButton = event.button;
  9300. },
  9301. mouseup: function (event, manually) {
  9302. if (!isZRenderElement(event) && !manually) {
  9303. return;
  9304. }
  9305. event = this._zrenderEventFixed(event);
  9306. this.root.style.cursor = 'default';
  9307. this._isMouseDown = 0;
  9308. this._mouseDownTarget = null;
  9309. this._dispatchAgency(this._lastHover, EVENT.MOUSEUP, event);
  9310. this._processDrop(event);
  9311. this._processDragEnd(event);
  9312. },
  9313. touchstart: function (event, manually) {
  9314. if (!isZRenderElement(event) && !manually) {
  9315. return;
  9316. }
  9317. event = this._zrenderEventFixed(event, true);
  9318. this._lastTouchMoment = new Date();
  9319. this._mobileFindFixed(event);
  9320. this._mousedownHandler(event);
  9321. },
  9322. touchmove: function (event, manually) {
  9323. if (!isZRenderElement(event) && !manually) {
  9324. return;
  9325. }
  9326. event = this._zrenderEventFixed(event, true);
  9327. this._mousemoveHandler(event);
  9328. if (this._isDragging) {
  9329. eventTool.stop(event);
  9330. }
  9331. },
  9332. touchend: function (event, manually) {
  9333. if (!isZRenderElement(event) && !manually) {
  9334. return;
  9335. }
  9336. event = this._zrenderEventFixed(event, true);
  9337. this._mouseupHandler(event);
  9338. var now = new Date();
  9339. if (now - this._lastTouchMoment < EVENT.touchClickDelay) {
  9340. this._mobileFindFixed(event);
  9341. this._clickHandler(event);
  9342. if (now - this._lastClickMoment < EVENT.touchClickDelay / 2) {
  9343. this._dblclickHandler(event);
  9344. if (this._lastHover && this._lastHover.clickable) {
  9345. eventTool.stop(event);
  9346. }
  9347. }
  9348. this._lastClickMoment = now;
  9349. }
  9350. this.painter.clearHover();
  9351. }
  9352. };
  9353. function bind2Arg(handler, context) {
  9354. return function (arg1, arg2) {
  9355. return handler.call(context, arg1, arg2);
  9356. };
  9357. }
  9358. function bind3Arg(handler, context) {
  9359. return function (arg1, arg2, arg3) {
  9360. return handler.call(context, arg1, arg2, arg3);
  9361. };
  9362. }
  9363. function initDomHandler(instance) {
  9364. var len = domHandlerNames.length;
  9365. while (len--) {
  9366. var name = domHandlerNames[len];
  9367. instance['_' + name + 'Handler'] = bind2Arg(domHandlers[name], instance);
  9368. }
  9369. }
  9370. var Handler = function (root, storage, painter) {
  9371. Eventful.call(this);
  9372. this.root = root;
  9373. this.storage = storage;
  9374. this.painter = painter;
  9375. this._lastX = this._lastY = this._mouseX = this._mouseY = 0;
  9376. this._findHover = bind3Arg(findHover, this);
  9377. this._domHover = painter.getDomHover();
  9378. initDomHandler(this);
  9379. if (window.addEventListener) {
  9380. window.addEventListener('resize', this._resizeHandler);
  9381. if (env.os.tablet || env.os.phone) {
  9382. root.addEventListener('touchstart', this._touchstartHandler);
  9383. root.addEventListener('touchmove', this._touchmoveHandler);
  9384. root.addEventListener('touchend', this._touchendHandler);
  9385. } else {
  9386. root.addEventListener('click', this._clickHandler);
  9387. root.addEventListener('dblclick', this._dblclickHandler);
  9388. root.addEventListener('mousewheel', this._mousewheelHandler);
  9389. root.addEventListener('mousemove', this._mousemoveHandler);
  9390. root.addEventListener('mousedown', this._mousedownHandler);
  9391. root.addEventListener('mouseup', this._mouseupHandler);
  9392. }
  9393. root.addEventListener('DOMMouseScroll', this._mousewheelHandler);
  9394. root.addEventListener('mouseout', this._mouseoutHandler);
  9395. } else {
  9396. window.attachEvent('onresize', this._resizeHandler);
  9397. root.attachEvent('onclick', this._clickHandler);
  9398. root.ondblclick = this._dblclickHandler;
  9399. root.attachEvent('onmousewheel', this._mousewheelHandler);
  9400. root.attachEvent('onmousemove', this._mousemoveHandler);
  9401. root.attachEvent('onmouseout', this._mouseoutHandler);
  9402. root.attachEvent('onmousedown', this._mousedownHandler);
  9403. root.attachEvent('onmouseup', this._mouseupHandler);
  9404. }
  9405. };
  9406. Handler.prototype.on = function (eventName, handler, context) {
  9407. this.bind(eventName, handler, context);
  9408. return this;
  9409. };
  9410. Handler.prototype.un = function (eventName, handler) {
  9411. this.unbind(eventName, handler);
  9412. return this;
  9413. };
  9414. Handler.prototype.trigger = function (eventName, eventArgs) {
  9415. switch (eventName) {
  9416. case EVENT.RESIZE:
  9417. case EVENT.CLICK:
  9418. case EVENT.DBLCLICK:
  9419. case EVENT.MOUSEWHEEL:
  9420. case EVENT.MOUSEMOVE:
  9421. case EVENT.MOUSEDOWN:
  9422. case EVENT.MOUSEUP:
  9423. case EVENT.MOUSEOUT:
  9424. this['_' + eventName + 'Handler'](eventArgs, true);
  9425. break;
  9426. }
  9427. };
  9428. Handler.prototype.dispose = function () {
  9429. var root = this.root;
  9430. if (window.removeEventListener) {
  9431. window.removeEventListener('resize', this._resizeHandler);
  9432. if (env.os.tablet || env.os.phone) {
  9433. root.removeEventListener('touchstart', this._touchstartHandler);
  9434. root.removeEventListener('touchmove', this._touchmoveHandler);
  9435. root.removeEventListener('touchend', this._touchendHandler);
  9436. } else {
  9437. root.removeEventListener('click', this._clickHandler);
  9438. root.removeEventListener('dblclick', this._dblclickHandler);
  9439. root.removeEventListener('mousewheel', this._mousewheelHandler);
  9440. root.removeEventListener('mousemove', this._mousemoveHandler);
  9441. root.removeEventListener('mousedown', this._mousedownHandler);
  9442. root.removeEventListener('mouseup', this._mouseupHandler);
  9443. }
  9444. root.removeEventListener('DOMMouseScroll', this._mousewheelHandler);
  9445. root.removeEventListener('mouseout', this._mouseoutHandler);
  9446. } else {
  9447. window.detachEvent('onresize', this._resizeHandler);
  9448. root.detachEvent('onclick', this._clickHandler);
  9449. root.detachEvent('dblclick', this._dblclickHandler);
  9450. root.detachEvent('onmousewheel', this._mousewheelHandler);
  9451. root.detachEvent('onmousemove', this._mousemoveHandler);
  9452. root.detachEvent('onmouseout', this._mouseoutHandler);
  9453. root.detachEvent('onmousedown', this._mousedownHandler);
  9454. root.detachEvent('onmouseup', this._mouseupHandler);
  9455. }
  9456. this.root = this._domHover = this.storage = this.painter = null;
  9457. this.un();
  9458. };
  9459. Handler.prototype._processDragStart = function (event) {
  9460. var _lastHover = this._lastHover;
  9461. if (this._isMouseDown && _lastHover && _lastHover.draggable && !this._draggingTarget && this._mouseDownTarget == _lastHover) {
  9462. if (_lastHover.dragEnableTime && new Date() - this._lastMouseDownMoment < _lastHover.dragEnableTime) {
  9463. return;
  9464. }
  9465. var _draggingTarget = _lastHover;
  9466. this._draggingTarget = _draggingTarget;
  9467. this._isDragging = 1;
  9468. _draggingTarget.invisible = true;
  9469. this.storage.mod(_draggingTarget.id);
  9470. this._dispatchAgency(_draggingTarget, EVENT.DRAGSTART, event);
  9471. this.painter.refresh();
  9472. }
  9473. };
  9474. Handler.prototype._processDragEnter = function (event) {
  9475. if (this._draggingTarget) {
  9476. this._dispatchAgency(this._lastHover, EVENT.DRAGENTER, event, this._draggingTarget);
  9477. }
  9478. };
  9479. Handler.prototype._processDragOver = function (event) {
  9480. if (this._draggingTarget) {
  9481. this._dispatchAgency(this._lastHover, EVENT.DRAGOVER, event, this._draggingTarget);
  9482. }
  9483. };
  9484. Handler.prototype._processDragLeave = function (event) {
  9485. if (this._draggingTarget) {
  9486. this._dispatchAgency(this._lastHover, EVENT.DRAGLEAVE, event, this._draggingTarget);
  9487. }
  9488. };
  9489. Handler.prototype._processDrop = function (event) {
  9490. if (this._draggingTarget) {
  9491. this._draggingTarget.invisible = false;
  9492. this.storage.mod(this._draggingTarget.id);
  9493. this.painter.refresh();
  9494. this._dispatchAgency(this._lastHover, EVENT.DROP, event, this._draggingTarget);
  9495. }
  9496. };
  9497. Handler.prototype._processDragEnd = function (event) {
  9498. if (this._draggingTarget) {
  9499. this._dispatchAgency(this._draggingTarget, EVENT.DRAGEND, event);
  9500. this._lastHover = null;
  9501. }
  9502. this._isDragging = 0;
  9503. this._draggingTarget = null;
  9504. };
  9505. Handler.prototype._processOverShape = function (event) {
  9506. this._dispatchAgency(this._lastHover, EVENT.MOUSEOVER, event);
  9507. };
  9508. Handler.prototype._processOutShape = function (event) {
  9509. this._dispatchAgency(this._lastHover, EVENT.MOUSEOUT, event);
  9510. };
  9511. Handler.prototype._dispatchAgency = function (targetShape, eventName, event, draggedShape) {
  9512. var eventHandler = 'on' + eventName;
  9513. var eventPacket = {
  9514. type: eventName,
  9515. event: event,
  9516. target: targetShape,
  9517. cancelBubble: false
  9518. };
  9519. var el = targetShape;
  9520. if (draggedShape) {
  9521. eventPacket.dragged = draggedShape;
  9522. }
  9523. while (el) {
  9524. el[eventHandler] && (eventPacket.cancelBubble = el[eventHandler](eventPacket));
  9525. el.dispatch(eventName, eventPacket);
  9526. el = el.parent;
  9527. if (eventPacket.cancelBubble) {
  9528. break;
  9529. }
  9530. }
  9531. if (targetShape) {
  9532. if (!eventPacket.cancelBubble) {
  9533. this.dispatch(eventName, eventPacket);
  9534. }
  9535. } else if (!draggedShape) {
  9536. var eveObj = {
  9537. type: eventName,
  9538. event: event
  9539. };
  9540. this.dispatch(eventName, eveObj);
  9541. this.painter.eachOtherLayer(function (layer) {
  9542. if (typeof layer[eventHandler] == 'function') {
  9543. layer[eventHandler](eveObj);
  9544. }
  9545. if (layer.dispatch) {
  9546. layer.dispatch(eventName, eveObj);
  9547. }
  9548. });
  9549. }
  9550. };
  9551. Handler.prototype._iterateAndFindHover = function () {
  9552. var invTransform = mat2d.create();
  9553. return function () {
  9554. var list = this.storage.getShapeList();
  9555. var currentZLevel;
  9556. var currentLayer;
  9557. var tmp = [
  9558. 0,
  9559. 0
  9560. ];
  9561. for (var i = list.length - 1; i >= 0; i--) {
  9562. var shape = list[i];
  9563. if (currentZLevel !== shape.zlevel) {
  9564. currentLayer = this.painter.getLayer(shape.zlevel, currentLayer);
  9565. tmp[0] = this._mouseX;
  9566. tmp[1] = this._mouseY;
  9567. if (currentLayer.needTransform) {
  9568. mat2d.invert(invTransform, currentLayer.transform);
  9569. vec2.applyTransform(tmp, tmp, invTransform);
  9570. }
  9571. }
  9572. if (this._findHover(shape, tmp[0], tmp[1])) {
  9573. break;
  9574. }
  9575. }
  9576. };
  9577. }();
  9578. var MOBILE_TOUCH_OFFSETS = [
  9579. { x: 10 },
  9580. { x: -20 },
  9581. {
  9582. x: 10,
  9583. y: 10
  9584. },
  9585. { y: -20 }
  9586. ];
  9587. Handler.prototype._mobileFindFixed = function (event) {
  9588. this._lastHover = null;
  9589. this._mouseX = event.zrenderX;
  9590. this._mouseY = event.zrenderY;
  9591. this._event = event;
  9592. this._iterateAndFindHover();
  9593. for (var i = 0; !this._lastHover && i < MOBILE_TOUCH_OFFSETS.length; i++) {
  9594. var offset = MOBILE_TOUCH_OFFSETS[i];
  9595. offset.x && (this._mouseX += offset.x);
  9596. offset.y && (this._mouseY += offset.y);
  9597. this._iterateAndFindHover();
  9598. }
  9599. if (this._lastHover) {
  9600. event.zrenderX = this._mouseX;
  9601. event.zrenderY = this._mouseY;
  9602. }
  9603. };
  9604. function findHover(shape, x, y) {
  9605. if (this._draggingTarget && this._draggingTarget.id == shape.id || shape.isSilent()) {
  9606. return false;
  9607. }
  9608. var event = this._event;
  9609. if (shape.isCover(x, y)) {
  9610. if (shape.hoverable) {
  9611. this.storage.addHover(shape);
  9612. }
  9613. var p = shape.parent;
  9614. while (p) {
  9615. if (p.clipShape && !p.clipShape.isCover(this._mouseX, this._mouseY)) {
  9616. return false;
  9617. }
  9618. p = p.parent;
  9619. }
  9620. if (this._lastHover != shape) {
  9621. this._processOutShape(event);
  9622. this._processDragLeave(event);
  9623. this._lastHover = shape;
  9624. this._processDragEnter(event);
  9625. }
  9626. this._processOverShape(event);
  9627. this._processDragOver(event);
  9628. this._hasfound = 1;
  9629. return true;
  9630. }
  9631. return false;
  9632. }
  9633. Handler.prototype._zrenderEventFixed = function (event, isTouch) {
  9634. if (event.zrenderFixed) {
  9635. return event;
  9636. }
  9637. if (!isTouch) {
  9638. event = event || window.event;
  9639. var target = event.toElement || event.relatedTarget || event.srcElement || event.target;
  9640. if (target && target != this._domHover) {
  9641. event.zrenderX = (typeof event.offsetX != 'undefined' ? event.offsetX : event.layerX) + target.offsetLeft;
  9642. event.zrenderY = (typeof event.offsetY != 'undefined' ? event.offsetY : event.layerY) + target.offsetTop;
  9643. }
  9644. } else {
  9645. var touch = event.type != 'touchend' ? event.targetTouches[0] : event.changedTouches[0];
  9646. if (touch) {
  9647. var rBounding = this.painter._domRoot.getBoundingClientRect();
  9648. event.zrenderX = touch.clientX - rBounding.left;
  9649. event.zrenderY = touch.clientY - rBounding.top;
  9650. }
  9651. }
  9652. event.zrenderFixed = 1;
  9653. return event;
  9654. };
  9655. util.merge(Handler.prototype, Eventful.prototype, true);
  9656. return Handler;
  9657. });define('zrender/Painter', [
  9658. 'require',
  9659. './config',
  9660. './tool/util',
  9661. './tool/log',
  9662. './loadingEffect/Base',
  9663. './Layer',
  9664. './shape/Image'
  9665. ], function (require) {
  9666. 'use strict';
  9667. var config = require('./config');
  9668. var util = require('./tool/util');
  9669. var log = require('./tool/log');
  9670. var BaseLoadingEffect = require('./loadingEffect/Base');
  9671. var Layer = require('./Layer');
  9672. function returnFalse() {
  9673. return false;
  9674. }
  9675. function doNothing() {
  9676. }
  9677. function isLayerValid(layer) {
  9678. if (!layer) {
  9679. return false;
  9680. }
  9681. if (layer.isBuildin) {
  9682. return true;
  9683. }
  9684. if (typeof layer.resize !== 'function' || typeof layer.refresh !== 'function') {
  9685. return false;
  9686. }
  9687. return true;
  9688. }
  9689. var Painter = function (root, storage) {
  9690. this.root = root;
  9691. root.style['-webkit-tap-highlight-color'] = 'transparent';
  9692. root.style['-webkit-user-select'] = 'none';
  9693. root.style['user-select'] = 'none';
  9694. root.style['-webkit-touch-callout'] = 'none';
  9695. this.storage = storage;
  9696. root.innerHTML = '';
  9697. this._width = this._getWidth();
  9698. this._height = this._getHeight();
  9699. var domRoot = document.createElement('div');
  9700. this._domRoot = domRoot;
  9701. domRoot.style.position = 'relative';
  9702. domRoot.style.overflow = 'hidden';
  9703. domRoot.style.width = this._width + 'px';
  9704. domRoot.style.height = this._height + 'px';
  9705. root.appendChild(domRoot);
  9706. this._layers = {};
  9707. this._zlevelList = [];
  9708. this._layerConfig = {};
  9709. this._loadingEffect = new BaseLoadingEffect({});
  9710. this.shapeToImage = this._createShapeToImageProcessor();
  9711. this._bgDom = document.createElement('div');
  9712. this._bgDom.style.cssText = [
  9713. 'position:absolute;left:0px;top:0px;width:',
  9714. this._width,
  9715. 'px;height:',
  9716. this._height + 'px;',
  9717. '-webkit-user-select:none;user-select;none;',
  9718. '-webkit-touch-callout:none;'
  9719. ].join('');
  9720. this._bgDom.setAttribute('data-zr-dom-id', 'bg');
  9721. this._bgDom.className = config.elementClassName;
  9722. domRoot.appendChild(this._bgDom);
  9723. this._bgDom.onselectstart = returnFalse;
  9724. var hoverLayer = new Layer('_zrender_hover_', this);
  9725. this._layers['hover'] = hoverLayer;
  9726. domRoot.appendChild(hoverLayer.dom);
  9727. hoverLayer.initContext();
  9728. hoverLayer.dom.onselectstart = returnFalse;
  9729. hoverLayer.dom.style['-webkit-user-select'] = 'none';
  9730. hoverLayer.dom.style['user-select'] = 'none';
  9731. hoverLayer.dom.style['-webkit-touch-callout'] = 'none';
  9732. this.refreshNextFrame = null;
  9733. };
  9734. Painter.prototype.render = function (callback) {
  9735. if (this.isLoading()) {
  9736. this.hideLoading();
  9737. }
  9738. this.refresh(callback, true);
  9739. return this;
  9740. };
  9741. Painter.prototype.refresh = function (callback, paintAll) {
  9742. var list = this.storage.getShapeList(true);
  9743. this._paintList(list, paintAll);
  9744. for (var i = 0; i < this._zlevelList.length; i++) {
  9745. var z = this._zlevelList[i];
  9746. var layer = this._layers[z];
  9747. if (!layer.isBuildin && layer.refresh) {
  9748. layer.refresh();
  9749. }
  9750. }
  9751. if (typeof callback == 'function') {
  9752. callback();
  9753. }
  9754. return this;
  9755. };
  9756. Painter.prototype._preProcessLayer = function (layer) {
  9757. layer.unusedCount++;
  9758. layer.updateTransform();
  9759. };
  9760. Painter.prototype._postProcessLayer = function (layer) {
  9761. layer.dirty = false;
  9762. if (layer.unusedCount == 1) {
  9763. layer.clear();
  9764. }
  9765. };
  9766. Painter.prototype._paintList = function (list, paintAll) {
  9767. if (typeof paintAll == 'undefined') {
  9768. paintAll = false;
  9769. }
  9770. this._updateLayerStatus(list);
  9771. var currentLayer;
  9772. var currentZLevel;
  9773. var ctx;
  9774. this.eachBuildinLayer(this._preProcessLayer);
  9775. for (var i = 0, l = list.length; i < l; i++) {
  9776. var shape = list[i];
  9777. if (currentZLevel !== shape.zlevel) {
  9778. if (currentLayer) {
  9779. if (currentLayer.needTransform) {
  9780. ctx.restore();
  9781. }
  9782. ctx.flush && ctx.flush();
  9783. }
  9784. currentZLevel = shape.zlevel;
  9785. currentLayer = this.getLayer(currentZLevel);
  9786. if (!currentLayer.isBuildin) {
  9787. log('ZLevel ' + currentZLevel + ' has been used by unkown layer ' + currentLayer.id);
  9788. }
  9789. ctx = currentLayer.ctx;
  9790. currentLayer.unusedCount = 0;
  9791. if (currentLayer.dirty || paintAll) {
  9792. currentLayer.clear();
  9793. }
  9794. if (currentLayer.needTransform) {
  9795. ctx.save();
  9796. currentLayer.setTransform(ctx);
  9797. }
  9798. }
  9799. if ((currentLayer.dirty || paintAll) && !shape.invisible) {
  9800. if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, false)) {
  9801. if (config.catchBrushException) {
  9802. try {
  9803. shape.brush(ctx, false, this.refreshNextFrame);
  9804. } catch (error) {
  9805. log(error, 'brush error of ' + shape.type, shape);
  9806. }
  9807. } else {
  9808. shape.brush(ctx, false, this.refreshNextFrame);
  9809. }
  9810. }
  9811. }
  9812. shape.__dirty = false;
  9813. }
  9814. if (currentLayer) {
  9815. if (currentLayer.needTransform) {
  9816. ctx.restore();
  9817. }
  9818. ctx.flush && ctx.flush();
  9819. }
  9820. this.eachBuildinLayer(this._postProcessLayer);
  9821. };
  9822. Painter.prototype.getLayer = function (zlevel) {
  9823. var layer = this._layers[zlevel];
  9824. if (!layer) {
  9825. layer = new Layer(zlevel, this);
  9826. layer.isBuildin = true;
  9827. if (this._layerConfig[zlevel]) {
  9828. util.merge(layer, this._layerConfig[zlevel], true);
  9829. }
  9830. layer.updateTransform();
  9831. this.insertLayer(zlevel, layer);
  9832. layer.initContext();
  9833. }
  9834. return layer;
  9835. };
  9836. Painter.prototype.insertLayer = function (zlevel, layer) {
  9837. if (this._layers[zlevel]) {
  9838. log('ZLevel ' + zlevel + ' has been used already');
  9839. return;
  9840. }
  9841. if (!isLayerValid(layer)) {
  9842. log('Layer of zlevel ' + zlevel + ' is not valid');
  9843. return;
  9844. }
  9845. var len = this._zlevelList.length;
  9846. var prevLayer = null;
  9847. var i = -1;
  9848. if (len > 0 && zlevel > this._zlevelList[0]) {
  9849. for (i = 0; i < len - 1; i++) {
  9850. if (this._zlevelList[i] < zlevel && this._zlevelList[i + 1] > zlevel) {
  9851. break;
  9852. }
  9853. }
  9854. prevLayer = this._layers[this._zlevelList[i]];
  9855. }
  9856. this._zlevelList.splice(i + 1, 0, zlevel);
  9857. var prevDom = prevLayer ? prevLayer.dom : this._bgDom;
  9858. if (prevDom.nextSibling) {
  9859. prevDom.parentNode.insertBefore(layer.dom, prevDom.nextSibling);
  9860. } else {
  9861. prevDom.parentNode.appendChild(layer.dom);
  9862. }
  9863. this._layers[zlevel] = layer;
  9864. };
  9865. Painter.prototype.eachLayer = function (cb, context) {
  9866. for (var i = 0; i < this._zlevelList.length; i++) {
  9867. var z = this._zlevelList[i];
  9868. cb.call(context, this._layers[z], z);
  9869. }
  9870. };
  9871. Painter.prototype.eachBuildinLayer = function (cb, context) {
  9872. for (var i = 0; i < this._zlevelList.length; i++) {
  9873. var z = this._zlevelList[i];
  9874. var layer = this._layers[z];
  9875. if (layer.isBuildin) {
  9876. cb.call(context, layer, z);
  9877. }
  9878. }
  9879. };
  9880. Painter.prototype.eachOtherLayer = function (cb, context) {
  9881. for (var i = 0; i < this._zlevelList.length; i++) {
  9882. var z = this._zlevelList[i];
  9883. var layer = this._layers[z];
  9884. if (!layer.isBuildin) {
  9885. cb.call(context, layer, z);
  9886. }
  9887. }
  9888. };
  9889. Painter.prototype.getLayers = function () {
  9890. return this._layers;
  9891. };
  9892. Painter.prototype._updateLayerStatus = function (list) {
  9893. var layers = this._layers;
  9894. var elCounts = {};
  9895. this.eachBuildinLayer(function (layer, z) {
  9896. elCounts[z] = layer.elCount;
  9897. layer.elCount = 0;
  9898. });
  9899. for (var i = 0, l = list.length; i < l; i++) {
  9900. var shape = list[i];
  9901. var zlevel = shape.zlevel;
  9902. var layer = layers[zlevel];
  9903. if (layer) {
  9904. layer.elCount++;
  9905. if (layer.dirty) {
  9906. continue;
  9907. }
  9908. layer.dirty = shape.__dirty;
  9909. }
  9910. }
  9911. this.eachBuildinLayer(function (layer, z) {
  9912. if (elCounts[z] !== layer.elCount) {
  9913. layer.dirty = true;
  9914. }
  9915. });
  9916. };
  9917. Painter.prototype.refreshShapes = function (shapeList, callback) {
  9918. for (var i = 0, l = shapeList.length; i < l; i++) {
  9919. var shape = shapeList[i];
  9920. shape.modSelf();
  9921. }
  9922. this.refresh(callback);
  9923. return this;
  9924. };
  9925. Painter.prototype.setLoadingEffect = function (loadingEffect) {
  9926. this._loadingEffect = loadingEffect;
  9927. return this;
  9928. };
  9929. Painter.prototype.clear = function () {
  9930. this.eachBuildinLayer(this._clearLayer);
  9931. return this;
  9932. };
  9933. Painter.prototype._clearLayer = function (layer) {
  9934. layer.clear();
  9935. };
  9936. Painter.prototype.modLayer = function (zlevel, config) {
  9937. if (config) {
  9938. if (!this._layerConfig[zlevel]) {
  9939. this._layerConfig[zlevel] = config;
  9940. } else {
  9941. util.merge(this._layerConfig[zlevel], config, true);
  9942. }
  9943. var layer = this._layers[zlevel];
  9944. if (layer) {
  9945. util.merge(layer, this._layerConfig[zlevel], true);
  9946. }
  9947. }
  9948. };
  9949. Painter.prototype.delLayer = function (zlevel) {
  9950. var layer = this._layers[zlevel];
  9951. if (!layer) {
  9952. return;
  9953. }
  9954. this.modLayer(zlevel, {
  9955. position: layer.position,
  9956. rotation: layer.rotation,
  9957. scale: layer.scale
  9958. });
  9959. layer.dom.parentNode.removeChild(layer.dom);
  9960. delete this._layers[zlevel];
  9961. this._zlevelList.splice(util.indexOf(this._zlevelList, zlevel), 1);
  9962. };
  9963. Painter.prototype.refreshHover = function () {
  9964. this.clearHover();
  9965. var list = this.storage.getHoverShapes(true);
  9966. for (var i = 0, l = list.length; i < l; i++) {
  9967. this._brushHover(list[i]);
  9968. }
  9969. var ctx = this._layers.hover.ctx;
  9970. ctx.flush && ctx.flush();
  9971. this.storage.delHover();
  9972. return this;
  9973. };
  9974. Painter.prototype.clearHover = function () {
  9975. var hover = this._layers.hover;
  9976. hover && hover.clear();
  9977. return this;
  9978. };
  9979. Painter.prototype.showLoading = function (loadingEffect) {
  9980. this._loadingEffect && this._loadingEffect.stop();
  9981. loadingEffect && this.setLoadingEffect(loadingEffect);
  9982. this._loadingEffect.start(this);
  9983. this.loading = true;
  9984. return this;
  9985. };
  9986. Painter.prototype.hideLoading = function () {
  9987. this._loadingEffect.stop();
  9988. this.clearHover();
  9989. this.loading = false;
  9990. return this;
  9991. };
  9992. Painter.prototype.isLoading = function () {
  9993. return this.loading;
  9994. };
  9995. Painter.prototype.resize = function () {
  9996. var domRoot = this._domRoot;
  9997. domRoot.style.display = 'none';
  9998. var width = this._getWidth();
  9999. var height = this._getHeight();
  10000. domRoot.style.display = '';
  10001. if (this._width != width || height != this._height) {
  10002. this._width = width;
  10003. this._height = height;
  10004. domRoot.style.width = width + 'px';
  10005. domRoot.style.height = height + 'px';
  10006. for (var id in this._layers) {
  10007. this._layers[id].resize(width, height);
  10008. }
  10009. this.refresh(null, true);
  10010. }
  10011. return this;
  10012. };
  10013. Painter.prototype.clearLayer = function (zLevel) {
  10014. var layer = this._layers[zLevel];
  10015. if (layer) {
  10016. layer.clear();
  10017. }
  10018. };
  10019. Painter.prototype.dispose = function () {
  10020. if (this.isLoading()) {
  10021. this.hideLoading();
  10022. }
  10023. this.root.innerHTML = '';
  10024. this.root = this.storage = this._domRoot = this._layers = null;
  10025. };
  10026. Painter.prototype.getDomHover = function () {
  10027. return this._layers.hover.dom;
  10028. };
  10029. Painter.prototype.toDataURL = function (type, backgroundColor, args) {
  10030. if (window['G_vmlCanvasManager']) {
  10031. return null;
  10032. }
  10033. var imageLayer = new Layer('image', this);
  10034. this._bgDom.appendChild(imageLayer.dom);
  10035. imageLayer.initContext();
  10036. var ctx = imageLayer.ctx;
  10037. imageLayer.clearColor = backgroundColor || '#fff';
  10038. imageLayer.clear();
  10039. var self = this;
  10040. this.storage.iterShape(function (shape) {
  10041. if (!shape.invisible) {
  10042. if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, false)) {
  10043. if (config.catchBrushException) {
  10044. try {
  10045. shape.brush(ctx, false, self.refreshNextFrame);
  10046. } catch (error) {
  10047. log(error, 'brush error of ' + shape.type, shape);
  10048. }
  10049. } else {
  10050. shape.brush(ctx, false, self.refreshNextFrame);
  10051. }
  10052. }
  10053. }
  10054. }, {
  10055. normal: 'up',
  10056. update: true
  10057. });
  10058. var image = imageLayer.dom.toDataURL(type, args);
  10059. ctx = null;
  10060. this._bgDom.removeChild(imageLayer.dom);
  10061. return image;
  10062. };
  10063. Painter.prototype.getWidth = function () {
  10064. return this._width;
  10065. };
  10066. Painter.prototype.getHeight = function () {
  10067. return this._height;
  10068. };
  10069. Painter.prototype._getWidth = function () {
  10070. var root = this.root;
  10071. var stl = root.currentStyle || document.defaultView.getComputedStyle(root);
  10072. return ((root.clientWidth || parseInt(stl.width, 10)) - parseInt(stl.paddingLeft, 10) - parseInt(stl.paddingRight, 10)).toFixed(0) - 0;
  10073. };
  10074. Painter.prototype._getHeight = function () {
  10075. var root = this.root;
  10076. var stl = root.currentStyle || document.defaultView.getComputedStyle(root);
  10077. return ((root.clientHeight || parseInt(stl.height, 10)) - parseInt(stl.paddingTop, 10) - parseInt(stl.paddingBottom, 10)).toFixed(0) - 0;
  10078. };
  10079. Painter.prototype._brushHover = function (shape) {
  10080. var ctx = this._layers.hover.ctx;
  10081. if (!shape.onbrush || shape.onbrush && !shape.onbrush(ctx, true)) {
  10082. var layer = this.getLayer(shape.zlevel);
  10083. if (layer.needTransform) {
  10084. ctx.save();
  10085. layer.setTransform(ctx);
  10086. }
  10087. if (config.catchBrushException) {
  10088. try {
  10089. shape.brush(ctx, true, this.refreshNextFrame);
  10090. } catch (error) {
  10091. log(error, 'hoverBrush error of ' + shape.type, shape);
  10092. }
  10093. } else {
  10094. shape.brush(ctx, true, this.refreshNextFrame);
  10095. }
  10096. if (layer.needTransform) {
  10097. ctx.restore();
  10098. }
  10099. }
  10100. };
  10101. Painter.prototype._shapeToImage = function (id, shape, width, height, devicePixelRatio) {
  10102. var canvas = document.createElement('canvas');
  10103. var ctx = canvas.getContext('2d');
  10104. canvas.style.width = width + 'px';
  10105. canvas.style.height = height + 'px';
  10106. canvas.setAttribute('width', width * devicePixelRatio);
  10107. canvas.setAttribute('height', height * devicePixelRatio);
  10108. ctx.clearRect(0, 0, width * devicePixelRatio, height * devicePixelRatio);
  10109. var shapeTransform = {
  10110. position: shape.position,
  10111. rotation: shape.rotation,
  10112. scale: shape.scale
  10113. };
  10114. shape.position = [
  10115. 0,
  10116. 0,
  10117. 0
  10118. ];
  10119. shape.rotation = 0;
  10120. shape.scale = [
  10121. 1,
  10122. 1
  10123. ];
  10124. if (shape) {
  10125. shape.brush(ctx, false);
  10126. }
  10127. var ImageShape = require('./shape/Image');
  10128. var imgShape = new ImageShape({
  10129. id: id,
  10130. style: {
  10131. x: 0,
  10132. y: 0,
  10133. image: canvas
  10134. }
  10135. });
  10136. if (shapeTransform.position != null) {
  10137. imgShape.position = shape.position = shapeTransform.position;
  10138. }
  10139. if (shapeTransform.rotation != null) {
  10140. imgShape.rotation = shape.rotation = shapeTransform.rotation;
  10141. }
  10142. if (shapeTransform.scale != null) {
  10143. imgShape.scale = shape.scale = shapeTransform.scale;
  10144. }
  10145. return imgShape;
  10146. };
  10147. Painter.prototype._createShapeToImageProcessor = function () {
  10148. if (window['G_vmlCanvasManager']) {
  10149. return doNothing;
  10150. }
  10151. var me = this;
  10152. return function (id, e, width, height) {
  10153. return me._shapeToImage(id, e, width, height, config.devicePixelRatio);
  10154. };
  10155. };
  10156. return Painter;
  10157. });define('zrender/Storage', [
  10158. 'require',
  10159. './tool/util',
  10160. './Group'
  10161. ], function (require) {
  10162. 'use strict';
  10163. var util = require('./tool/util');
  10164. var Group = require('./Group');
  10165. var defaultIterateOption = {
  10166. hover: false,
  10167. normal: 'down',
  10168. update: false
  10169. };
  10170. function shapeCompareFunc(a, b) {
  10171. if (a.zlevel == b.zlevel) {
  10172. if (a.z == b.z) {
  10173. return a.__renderidx - b.__renderidx;
  10174. }
  10175. return a.z - b.z;
  10176. }
  10177. return a.zlevel - b.zlevel;
  10178. }
  10179. var Storage = function () {
  10180. this._elements = {};
  10181. this._hoverElements = [];
  10182. this._roots = [];
  10183. this._shapeList = [];
  10184. this._shapeListOffset = 0;
  10185. };
  10186. Storage.prototype.iterShape = function (fun, option) {
  10187. if (!option) {
  10188. option = defaultIterateOption;
  10189. }
  10190. if (option.hover) {
  10191. for (var i = 0, l = this._hoverElements.length; i < l; i++) {
  10192. var el = this._hoverElements[i];
  10193. el.updateTransform();
  10194. if (fun(el)) {
  10195. return this;
  10196. }
  10197. }
  10198. }
  10199. if (option.update) {
  10200. this.updateShapeList();
  10201. }
  10202. switch (option.normal) {
  10203. case 'down':
  10204. var l = this._shapeList.length;
  10205. while (l--) {
  10206. if (fun(this._shapeList[l])) {
  10207. return this;
  10208. }
  10209. }
  10210. break;
  10211. default:
  10212. for (var i = 0, l = this._shapeList.length; i < l; i++) {
  10213. if (fun(this._shapeList[i])) {
  10214. return this;
  10215. }
  10216. }
  10217. break;
  10218. }
  10219. return this;
  10220. };
  10221. Storage.prototype.getHoverShapes = function (update) {
  10222. var hoverElements = [];
  10223. for (var i = 0, l = this._hoverElements.length; i < l; i++) {
  10224. hoverElements.push(this._hoverElements[i]);
  10225. var target = this._hoverElements[i].hoverConnect;
  10226. if (target) {
  10227. var shape;
  10228. target = target instanceof Array ? target : [target];
  10229. for (var j = 0, k = target.length; j < k; j++) {
  10230. shape = target[j].id ? target[j] : this.get(target[j]);
  10231. if (shape) {
  10232. hoverElements.push(shape);
  10233. }
  10234. }
  10235. }
  10236. }
  10237. hoverElements.sort(shapeCompareFunc);
  10238. if (update) {
  10239. for (var i = 0, l = hoverElements.length; i < l; i++) {
  10240. hoverElements[i].updateTransform();
  10241. }
  10242. }
  10243. return hoverElements;
  10244. };
  10245. Storage.prototype.getShapeList = function (update) {
  10246. if (update) {
  10247. this.updateShapeList();
  10248. }
  10249. return this._shapeList;
  10250. };
  10251. Storage.prototype.updateShapeList = function () {
  10252. this._shapeListOffset = 0;
  10253. for (var i = 0, len = this._roots.length; i < len; i++) {
  10254. var root = this._roots[i];
  10255. this._updateAndAddShape(root);
  10256. }
  10257. this._shapeList.length = this._shapeListOffset;
  10258. for (var i = 0, len = this._shapeList.length; i < len; i++) {
  10259. this._shapeList[i].__renderidx = i;
  10260. }
  10261. this._shapeList.sort(shapeCompareFunc);
  10262. };
  10263. Storage.prototype._updateAndAddShape = function (el, clipShapes) {
  10264. if (el.ignore) {
  10265. return;
  10266. }
  10267. el.updateTransform();
  10268. if (el.clipShape) {
  10269. el.clipShape.parent = el;
  10270. el.clipShape.updateTransform();
  10271. if (clipShapes) {
  10272. clipShapes = clipShapes.slice();
  10273. clipShapes.push(el.clipShape);
  10274. } else {
  10275. clipShapes = [el.clipShape];
  10276. }
  10277. }
  10278. if (el.type == 'group') {
  10279. for (var i = 0; i < el._children.length; i++) {
  10280. var child = el._children[i];
  10281. child.__dirty = el.__dirty || child.__dirty;
  10282. this._updateAndAddShape(child, clipShapes);
  10283. }
  10284. el.__dirty = false;
  10285. } else {
  10286. el.__clipShapes = clipShapes;
  10287. this._shapeList[this._shapeListOffset++] = el;
  10288. }
  10289. };
  10290. Storage.prototype.mod = function (el, params) {
  10291. if (typeof el === 'string') {
  10292. el = this._elements[el];
  10293. }
  10294. if (el) {
  10295. el.modSelf();
  10296. if (params) {
  10297. if (params.parent || params._storage || params.__clipShapes) {
  10298. var target = {};
  10299. for (var name in params) {
  10300. if (name === 'parent' || name === '_storage' || name === '__clipShapes') {
  10301. continue;
  10302. }
  10303. if (params.hasOwnProperty(name)) {
  10304. target[name] = params[name];
  10305. }
  10306. }
  10307. util.merge(el, target, true);
  10308. } else {
  10309. util.merge(el, params, true);
  10310. }
  10311. }
  10312. }
  10313. return this;
  10314. };
  10315. Storage.prototype.drift = function (shapeId, dx, dy) {
  10316. var shape = this._elements[shapeId];
  10317. if (shape) {
  10318. shape.needTransform = true;
  10319. if (shape.draggable === 'horizontal') {
  10320. dy = 0;
  10321. } else if (shape.draggable === 'vertical') {
  10322. dx = 0;
  10323. }
  10324. if (!shape.ondrift || shape.ondrift && !shape.ondrift(dx, dy)) {
  10325. shape.drift(dx, dy);
  10326. }
  10327. }
  10328. return this;
  10329. };
  10330. Storage.prototype.addHover = function (shape) {
  10331. shape.updateNeedTransform();
  10332. this._hoverElements.push(shape);
  10333. return this;
  10334. };
  10335. Storage.prototype.delHover = function () {
  10336. this._hoverElements = [];
  10337. return this;
  10338. };
  10339. Storage.prototype.hasHoverShape = function () {
  10340. return this._hoverElements.length > 0;
  10341. };
  10342. Storage.prototype.addRoot = function (el) {
  10343. if (this._elements[el.id]) {
  10344. return;
  10345. }
  10346. if (el instanceof Group) {
  10347. el.addChildrenToStorage(this);
  10348. }
  10349. this.addToMap(el);
  10350. this._roots.push(el);
  10351. };
  10352. Storage.prototype.delRoot = function (elId) {
  10353. if (typeof elId == 'undefined') {
  10354. for (var i = 0; i < this._roots.length; i++) {
  10355. var root = this._roots[i];
  10356. if (root instanceof Group) {
  10357. root.delChildrenFromStorage(this);
  10358. }
  10359. }
  10360. this._elements = {};
  10361. this._hoverElements = [];
  10362. this._roots = [];
  10363. this._shapeList = [];
  10364. this._shapeListOffset = 0;
  10365. return;
  10366. }
  10367. if (elId instanceof Array) {
  10368. for (var i = 0, l = elId.length; i < l; i++) {
  10369. this.delRoot(elId[i]);
  10370. }
  10371. return;
  10372. }
  10373. var el;
  10374. if (typeof elId == 'string') {
  10375. el = this._elements[elId];
  10376. } else {
  10377. el = elId;
  10378. }
  10379. var idx = util.indexOf(this._roots, el);
  10380. if (idx >= 0) {
  10381. this.delFromMap(el.id);
  10382. this._roots.splice(idx, 1);
  10383. if (el instanceof Group) {
  10384. el.delChildrenFromStorage(this);
  10385. }
  10386. }
  10387. };
  10388. Storage.prototype.addToMap = function (el) {
  10389. if (el instanceof Group) {
  10390. el._storage = this;
  10391. }
  10392. el.modSelf();
  10393. this._elements[el.id] = el;
  10394. return this;
  10395. };
  10396. Storage.prototype.get = function (elId) {
  10397. return this._elements[elId];
  10398. };
  10399. Storage.prototype.delFromMap = function (elId) {
  10400. var el = this._elements[elId];
  10401. if (el) {
  10402. delete this._elements[elId];
  10403. if (el instanceof Group) {
  10404. el._storage = null;
  10405. }
  10406. }
  10407. return this;
  10408. };
  10409. Storage.prototype.dispose = function () {
  10410. this._elements = this._renderList = this._roots = this._hoverElements = null;
  10411. };
  10412. return Storage;
  10413. });define('zrender/animation/Animation', [
  10414. 'require',
  10415. './Clip',
  10416. '../tool/color',
  10417. '../tool/util',
  10418. '../tool/event'
  10419. ], function (require) {
  10420. 'use strict';
  10421. var Clip = require('./Clip');
  10422. var color = require('../tool/color');
  10423. var util = require('../tool/util');
  10424. var Dispatcher = require('../tool/event').Dispatcher;
  10425. var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (func) {
  10426. setTimeout(func, 16);
  10427. };
  10428. var arraySlice = Array.prototype.slice;
  10429. var Animation = function (options) {
  10430. options = options || {};
  10431. this.stage = options.stage || {};
  10432. this.onframe = options.onframe || function () {
  10433. };
  10434. this._clips = [];
  10435. this._running = false;
  10436. this._time = 0;
  10437. Dispatcher.call(this);
  10438. };
  10439. Animation.prototype = {
  10440. add: function (clip) {
  10441. this._clips.push(clip);
  10442. },
  10443. remove: function (clip) {
  10444. if (clip.__inStep) {
  10445. clip.__needsRemove = true;
  10446. } else {
  10447. var idx = util.indexOf(this._clips, clip);
  10448. if (idx >= 0) {
  10449. this._clips.splice(idx, 1);
  10450. }
  10451. }
  10452. },
  10453. _update: function () {
  10454. var time = new Date().getTime();
  10455. var delta = time - this._time;
  10456. var clips = this._clips;
  10457. var len = clips.length;
  10458. var deferredEvents = [];
  10459. var deferredClips = [];
  10460. for (var i = 0; i < len; i++) {
  10461. var clip = clips[i];
  10462. clip.__inStep = true;
  10463. var e = clip.step(time);
  10464. clip.__inStep = false;
  10465. if (e) {
  10466. deferredEvents.push(e);
  10467. deferredClips.push(clip);
  10468. }
  10469. }
  10470. for (var i = 0; i < len;) {
  10471. if (clips[i].__needsRemove) {
  10472. clips[i] = clips[len - 1];
  10473. clips.pop();
  10474. len--;
  10475. } else {
  10476. i++;
  10477. }
  10478. }
  10479. len = deferredEvents.length;
  10480. for (var i = 0; i < len; i++) {
  10481. deferredClips[i].fire(deferredEvents[i]);
  10482. }
  10483. this._time = time;
  10484. this.onframe(delta);
  10485. this.dispatch('frame', delta);
  10486. if (this.stage.update) {
  10487. this.stage.update();
  10488. }
  10489. },
  10490. start: function () {
  10491. var self = this;
  10492. this._running = true;
  10493. function step() {
  10494. if (self._running) {
  10495. requestAnimationFrame(step);
  10496. self._update();
  10497. }
  10498. }
  10499. this._time = new Date().getTime();
  10500. requestAnimationFrame(step);
  10501. },
  10502. stop: function () {
  10503. this._running = false;
  10504. },
  10505. clear: function () {
  10506. this._clips = [];
  10507. },
  10508. animate: function (target, options) {
  10509. options = options || {};
  10510. var deferred = new Animator(target, options.loop, options.getter, options.setter);
  10511. deferred.animation = this;
  10512. return deferred;
  10513. },
  10514. constructor: Animation
  10515. };
  10516. util.merge(Animation.prototype, Dispatcher.prototype, true);
  10517. function _defaultGetter(target, key) {
  10518. return target[key];
  10519. }
  10520. function _defaultSetter(target, key, value) {
  10521. target[key] = value;
  10522. }
  10523. function _interpolateNumber(p0, p1, percent) {
  10524. return (p1 - p0) * percent + p0;
  10525. }
  10526. function _interpolateArray(p0, p1, percent, out, arrDim) {
  10527. var len = p0.length;
  10528. if (arrDim == 1) {
  10529. for (var i = 0; i < len; i++) {
  10530. out[i] = _interpolateNumber(p0[i], p1[i], percent);
  10531. }
  10532. } else {
  10533. var len2 = p0[0].length;
  10534. for (var i = 0; i < len; i++) {
  10535. for (var j = 0; j < len2; j++) {
  10536. out[i][j] = _interpolateNumber(p0[i][j], p1[i][j], percent);
  10537. }
  10538. }
  10539. }
  10540. }
  10541. function _isArrayLike(data) {
  10542. switch (typeof data) {
  10543. case 'undefined':
  10544. case 'string':
  10545. return false;
  10546. }
  10547. return typeof data.length !== 'undefined';
  10548. }
  10549. function _catmullRomInterpolateArray(p0, p1, p2, p3, t, t2, t3, out, arrDim) {
  10550. var len = p0.length;
  10551. if (arrDim == 1) {
  10552. for (var i = 0; i < len; i++) {
  10553. out[i] = _catmullRomInterpolate(p0[i], p1[i], p2[i], p3[i], t, t2, t3);
  10554. }
  10555. } else {
  10556. var len2 = p0[0].length;
  10557. for (var i = 0; i < len; i++) {
  10558. for (var j = 0; j < len2; j++) {
  10559. out[i][j] = _catmullRomInterpolate(p0[i][j], p1[i][j], p2[i][j], p3[i][j], t, t2, t3);
  10560. }
  10561. }
  10562. }
  10563. }
  10564. function _catmullRomInterpolate(p0, p1, p2, p3, t, t2, t3) {
  10565. var v0 = (p2 - p0) * 0.5;
  10566. var v1 = (p3 - p1) * 0.5;
  10567. return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;
  10568. }
  10569. function _cloneValue(value) {
  10570. if (_isArrayLike(value)) {
  10571. var len = value.length;
  10572. if (_isArrayLike(value[0])) {
  10573. var ret = [];
  10574. for (var i = 0; i < len; i++) {
  10575. ret.push(arraySlice.call(value[i]));
  10576. }
  10577. return ret;
  10578. } else {
  10579. return arraySlice.call(value);
  10580. }
  10581. } else {
  10582. return value;
  10583. }
  10584. }
  10585. function rgba2String(rgba) {
  10586. rgba[0] = Math.floor(rgba[0]);
  10587. rgba[1] = Math.floor(rgba[1]);
  10588. rgba[2] = Math.floor(rgba[2]);
  10589. return 'rgba(' + rgba.join(',') + ')';
  10590. }
  10591. var Animator = function (target, loop, getter, setter) {
  10592. this._tracks = {};
  10593. this._target = target;
  10594. this._loop = loop || false;
  10595. this._getter = getter || _defaultGetter;
  10596. this._setter = setter || _defaultSetter;
  10597. this._clipCount = 0;
  10598. this._delay = 0;
  10599. this._doneList = [];
  10600. this._onframeList = [];
  10601. this._clipList = [];
  10602. };
  10603. Animator.prototype = {
  10604. when: function (time, props) {
  10605. for (var propName in props) {
  10606. if (!this._tracks[propName]) {
  10607. this._tracks[propName] = [];
  10608. if (time !== 0) {
  10609. this._tracks[propName].push({
  10610. time: 0,
  10611. value: _cloneValue(this._getter(this._target, propName))
  10612. });
  10613. }
  10614. }
  10615. this._tracks[propName].push({
  10616. time: parseInt(time, 10),
  10617. value: props[propName]
  10618. });
  10619. }
  10620. return this;
  10621. },
  10622. during: function (callback) {
  10623. this._onframeList.push(callback);
  10624. return this;
  10625. },
  10626. start: function (easing) {
  10627. var self = this;
  10628. var setter = this._setter;
  10629. var getter = this._getter;
  10630. var useSpline = easing === 'spline';
  10631. var ondestroy = function () {
  10632. self._clipCount--;
  10633. if (self._clipCount === 0) {
  10634. self._tracks = {};
  10635. var len = self._doneList.length;
  10636. for (var i = 0; i < len; i++) {
  10637. self._doneList[i].call(self);
  10638. }
  10639. }
  10640. };
  10641. var createTrackClip = function (keyframes, propName) {
  10642. var trackLen = keyframes.length;
  10643. if (!trackLen) {
  10644. return;
  10645. }
  10646. var firstVal = keyframes[0].value;
  10647. var isValueArray = _isArrayLike(firstVal);
  10648. var isValueColor = false;
  10649. var arrDim = isValueArray && _isArrayLike(firstVal[0]) ? 2 : 1;
  10650. keyframes.sort(function (a, b) {
  10651. return a.time - b.time;
  10652. });
  10653. var trackMaxTime;
  10654. if (trackLen) {
  10655. trackMaxTime = keyframes[trackLen - 1].time;
  10656. } else {
  10657. return;
  10658. }
  10659. var kfPercents = [];
  10660. var kfValues = [];
  10661. for (var i = 0; i < trackLen; i++) {
  10662. kfPercents.push(keyframes[i].time / trackMaxTime);
  10663. var value = keyframes[i].value;
  10664. if (typeof value == 'string') {
  10665. value = color.toArray(value);
  10666. if (value.length === 0) {
  10667. value[0] = value[1] = value[2] = 0;
  10668. value[3] = 1;
  10669. }
  10670. isValueColor = true;
  10671. }
  10672. kfValues.push(value);
  10673. }
  10674. var cacheKey = 0;
  10675. var cachePercent = 0;
  10676. var start;
  10677. var i;
  10678. var w;
  10679. var p0;
  10680. var p1;
  10681. var p2;
  10682. var p3;
  10683. if (isValueColor) {
  10684. var rgba = [
  10685. 0,
  10686. 0,
  10687. 0,
  10688. 0
  10689. ];
  10690. }
  10691. var onframe = function (target, percent) {
  10692. if (percent < cachePercent) {
  10693. start = Math.min(cacheKey + 1, trackLen - 1);
  10694. for (i = start; i >= 0; i--) {
  10695. if (kfPercents[i] <= percent) {
  10696. break;
  10697. }
  10698. }
  10699. i = Math.min(i, trackLen - 2);
  10700. } else {
  10701. for (i = cacheKey; i < trackLen; i++) {
  10702. if (kfPercents[i] > percent) {
  10703. break;
  10704. }
  10705. }
  10706. i = Math.min(i - 1, trackLen - 2);
  10707. }
  10708. cacheKey = i;
  10709. cachePercent = percent;
  10710. var range = kfPercents[i + 1] - kfPercents[i];
  10711. if (range === 0) {
  10712. return;
  10713. } else {
  10714. w = (percent - kfPercents[i]) / range;
  10715. }
  10716. if (useSpline) {
  10717. p1 = kfValues[i];
  10718. p0 = kfValues[i === 0 ? i : i - 1];
  10719. p2 = kfValues[i > trackLen - 2 ? trackLen - 1 : i + 1];
  10720. p3 = kfValues[i > trackLen - 3 ? trackLen - 1 : i + 2];
  10721. if (isValueArray) {
  10722. _catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, getter(target, propName), arrDim);
  10723. } else {
  10724. var value;
  10725. if (isValueColor) {
  10726. value = _catmullRomInterpolateArray(p0, p1, p2, p3, w, w * w, w * w * w, rgba, 1);
  10727. value = rgba2String(rgba);
  10728. } else {
  10729. value = _catmullRomInterpolate(p0, p1, p2, p3, w, w * w, w * w * w);
  10730. }
  10731. setter(target, propName, value);
  10732. }
  10733. } else {
  10734. if (isValueArray) {
  10735. _interpolateArray(kfValues[i], kfValues[i + 1], w, getter(target, propName), arrDim);
  10736. } else {
  10737. var value;
  10738. if (isValueColor) {
  10739. _interpolateArray(kfValues[i], kfValues[i + 1], w, rgba, 1);
  10740. value = rgba2String(rgba);
  10741. } else {
  10742. value = _interpolateNumber(kfValues[i], kfValues[i + 1], w);
  10743. }
  10744. setter(target, propName, value);
  10745. }
  10746. }
  10747. for (i = 0; i < self._onframeList.length; i++) {
  10748. self._onframeList[i](target, percent);
  10749. }
  10750. };
  10751. var clip = new Clip({
  10752. target: self._target,
  10753. life: trackMaxTime,
  10754. loop: self._loop,
  10755. delay: self._delay,
  10756. onframe: onframe,
  10757. ondestroy: ondestroy
  10758. });
  10759. if (easing && easing !== 'spline') {
  10760. clip.easing = easing;
  10761. }
  10762. self._clipList.push(clip);
  10763. self._clipCount++;
  10764. self.animation.add(clip);
  10765. };
  10766. for (var propName in this._tracks) {
  10767. createTrackClip(this._tracks[propName], propName);
  10768. }
  10769. return this;
  10770. },
  10771. stop: function () {
  10772. for (var i = 0; i < this._clipList.length; i++) {
  10773. var clip = this._clipList[i];
  10774. this.animation.remove(clip);
  10775. }
  10776. this._clipList = [];
  10777. },
  10778. delay: function (time) {
  10779. this._delay = time;
  10780. return this;
  10781. },
  10782. done: function (cb) {
  10783. if (cb) {
  10784. this._doneList.push(cb);
  10785. }
  10786. return this;
  10787. }
  10788. };
  10789. return Animation;
  10790. });define('zrender/tool/vector', [], function () {
  10791. var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;
  10792. var vector = {
  10793. create: function (x, y) {
  10794. var out = new ArrayCtor(2);
  10795. out[0] = x || 0;
  10796. out[1] = y || 0;
  10797. return out;
  10798. },
  10799. copy: function (out, v) {
  10800. out[0] = v[0];
  10801. out[1] = v[1];
  10802. return out;
  10803. },
  10804. clone: function (v) {
  10805. var out = new ArrayCtor(2);
  10806. out[0] = v[0];
  10807. out[1] = v[1];
  10808. return out;
  10809. },
  10810. set: function (out, a, b) {
  10811. out[0] = a;
  10812. out[1] = b;
  10813. return out;
  10814. },
  10815. add: function (out, v1, v2) {
  10816. out[0] = v1[0] + v2[0];
  10817. out[1] = v1[1] + v2[1];
  10818. return out;
  10819. },
  10820. scaleAndAdd: function (out, v1, v2, a) {
  10821. out[0] = v1[0] + v2[0] * a;
  10822. out[1] = v1[1] + v2[1] * a;
  10823. return out;
  10824. },
  10825. sub: function (out, v1, v2) {
  10826. out[0] = v1[0] - v2[0];
  10827. out[1] = v1[1] - v2[1];
  10828. return out;
  10829. },
  10830. len: function (v) {
  10831. return Math.sqrt(this.lenSquare(v));
  10832. },
  10833. lenSquare: function (v) {
  10834. return v[0] * v[0] + v[1] * v[1];
  10835. },
  10836. mul: function (out, v1, v2) {
  10837. out[0] = v1[0] * v2[0];
  10838. out[1] = v1[1] * v2[1];
  10839. return out;
  10840. },
  10841. div: function (out, v1, v2) {
  10842. out[0] = v1[0] / v2[0];
  10843. out[1] = v1[1] / v2[1];
  10844. return out;
  10845. },
  10846. dot: function (v1, v2) {
  10847. return v1[0] * v2[0] + v1[1] * v2[1];
  10848. },
  10849. scale: function (out, v, s) {
  10850. out[0] = v[0] * s;
  10851. out[1] = v[1] * s;
  10852. return out;
  10853. },
  10854. normalize: function (out, v) {
  10855. var d = vector.len(v);
  10856. if (d === 0) {
  10857. out[0] = 0;
  10858. out[1] = 0;
  10859. } else {
  10860. out[0] = v[0] / d;
  10861. out[1] = v[1] / d;
  10862. }
  10863. return out;
  10864. },
  10865. distance: function (v1, v2) {
  10866. return Math.sqrt((v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]));
  10867. },
  10868. distanceSquare: function (v1, v2) {
  10869. return (v1[0] - v2[0]) * (v1[0] - v2[0]) + (v1[1] - v2[1]) * (v1[1] - v2[1]);
  10870. },
  10871. negate: function (out, v) {
  10872. out[0] = -v[0];
  10873. out[1] = -v[1];
  10874. return out;
  10875. },
  10876. lerp: function (out, v1, v2, t) {
  10877. out[0] = v1[0] + t * (v2[0] - v1[0]);
  10878. out[1] = v1[1] + t * (v2[1] - v1[1]);
  10879. return out;
  10880. },
  10881. applyTransform: function (out, v, m) {
  10882. var x = v[0];
  10883. var y = v[1];
  10884. out[0] = m[0] * x + m[2] * y + m[4];
  10885. out[1] = m[1] * x + m[3] * y + m[5];
  10886. return out;
  10887. },
  10888. min: function (out, v1, v2) {
  10889. out[0] = Math.min(v1[0], v2[0]);
  10890. out[1] = Math.min(v1[1], v2[1]);
  10891. return out;
  10892. },
  10893. max: function (out, v1, v2) {
  10894. out[0] = Math.max(v1[0], v2[0]);
  10895. out[1] = Math.max(v1[1], v2[1]);
  10896. return out;
  10897. }
  10898. };
  10899. vector.length = vector.len;
  10900. vector.lengthSquare = vector.lenSquare;
  10901. vector.dist = vector.distance;
  10902. vector.distSquare = vector.distanceSquare;
  10903. return vector;
  10904. });define('zrender/tool/matrix', [], function () {
  10905. var ArrayCtor = typeof Float32Array === 'undefined' ? Array : Float32Array;
  10906. var matrix = {
  10907. create: function () {
  10908. var out = new ArrayCtor(6);
  10909. matrix.identity(out);
  10910. return out;
  10911. },
  10912. identity: function (out) {
  10913. out[0] = 1;
  10914. out[1] = 0;
  10915. out[2] = 0;
  10916. out[3] = 1;
  10917. out[4] = 0;
  10918. out[5] = 0;
  10919. return out;
  10920. },
  10921. copy: function (out, m) {
  10922. out[0] = m[0];
  10923. out[1] = m[1];
  10924. out[2] = m[2];
  10925. out[3] = m[3];
  10926. out[4] = m[4];
  10927. out[5] = m[5];
  10928. return out;
  10929. },
  10930. mul: function (out, m1, m2) {
  10931. out[0] = m1[0] * m2[0] + m1[2] * m2[1];
  10932. out[1] = m1[1] * m2[0] + m1[3] * m2[1];
  10933. out[2] = m1[0] * m2[2] + m1[2] * m2[3];
  10934. out[3] = m1[1] * m2[2] + m1[3] * m2[3];
  10935. out[4] = m1[0] * m2[4] + m1[2] * m2[5] + m1[4];
  10936. out[5] = m1[1] * m2[4] + m1[3] * m2[5] + m1[5];
  10937. return out;
  10938. },
  10939. translate: function (out, a, v) {
  10940. out[0] = a[0];
  10941. out[1] = a[1];
  10942. out[2] = a[2];
  10943. out[3] = a[3];
  10944. out[4] = a[4] + v[0];
  10945. out[5] = a[5] + v[1];
  10946. return out;
  10947. },
  10948. rotate: function (out, a, rad) {
  10949. var aa = a[0];
  10950. var ac = a[2];
  10951. var atx = a[4];
  10952. var ab = a[1];
  10953. var ad = a[3];
  10954. var aty = a[5];
  10955. var st = Math.sin(rad);
  10956. var ct = Math.cos(rad);
  10957. out[0] = aa * ct + ab * st;
  10958. out[1] = -aa * st + ab * ct;
  10959. out[2] = ac * ct + ad * st;
  10960. out[3] = -ac * st + ct * ad;
  10961. out[4] = ct * atx + st * aty;
  10962. out[5] = ct * aty - st * atx;
  10963. return out;
  10964. },
  10965. scale: function (out, a, v) {
  10966. var vx = v[0];
  10967. var vy = v[1];
  10968. out[0] = a[0] * vx;
  10969. out[1] = a[1] * vy;
  10970. out[2] = a[2] * vx;
  10971. out[3] = a[3] * vy;
  10972. out[4] = a[4] * vx;
  10973. out[5] = a[5] * vy;
  10974. return out;
  10975. },
  10976. invert: function (out, a) {
  10977. var aa = a[0];
  10978. var ac = a[2];
  10979. var atx = a[4];
  10980. var ab = a[1];
  10981. var ad = a[3];
  10982. var aty = a[5];
  10983. var det = aa * ad - ab * ac;
  10984. if (!det) {
  10985. return null;
  10986. }
  10987. det = 1 / det;
  10988. out[0] = ad * det;
  10989. out[1] = -ab * det;
  10990. out[2] = -ac * det;
  10991. out[3] = aa * det;
  10992. out[4] = (ac * aty - ad * atx) * det;
  10993. out[5] = (ab * atx - aa * aty) * det;
  10994. return out;
  10995. }
  10996. };
  10997. return matrix;
  10998. });define('zrender/loadingEffect/Base', [
  10999. 'require',
  11000. '../tool/util',
  11001. '../shape/Text',
  11002. '../shape/Rectangle'
  11003. ], function (require) {
  11004. var util = require('../tool/util');
  11005. var TextShape = require('../shape/Text');
  11006. var RectangleShape = require('../shape/Rectangle');
  11007. var DEFAULT_TEXT = 'Loading...';
  11008. var DEFAULT_TEXT_FONT = 'normal 16px Arial';
  11009. function Base(options) {
  11010. this.setOptions(options);
  11011. }
  11012. Base.prototype.createTextShape = function (textStyle) {
  11013. return new TextShape({
  11014. highlightStyle: util.merge({
  11015. x: this.canvasWidth / 2,
  11016. y: this.canvasHeight / 2,
  11017. text: DEFAULT_TEXT,
  11018. textAlign: 'center',
  11019. textBaseline: 'middle',
  11020. textFont: DEFAULT_TEXT_FONT,
  11021. color: '#333',
  11022. brushType: 'fill'
  11023. }, textStyle, true)
  11024. });
  11025. };
  11026. Base.prototype.createBackgroundShape = function (color) {
  11027. return new RectangleShape({
  11028. highlightStyle: {
  11029. x: 0,
  11030. y: 0,
  11031. width: this.canvasWidth,
  11032. height: this.canvasHeight,
  11033. brushType: 'fill',
  11034. color: color
  11035. }
  11036. });
  11037. };
  11038. Base.prototype.start = function (painter) {
  11039. this.canvasWidth = painter._width;
  11040. this.canvasHeight = painter._height;
  11041. function addShapeHandle(param) {
  11042. painter.storage.addHover(param);
  11043. }
  11044. function refreshHandle() {
  11045. painter.refreshHover();
  11046. }
  11047. this.loadingTimer = this._start(addShapeHandle, refreshHandle);
  11048. };
  11049. Base.prototype._start = function () {
  11050. return setInterval(function () {
  11051. }, 10000);
  11052. };
  11053. Base.prototype.stop = function () {
  11054. clearInterval(this.loadingTimer);
  11055. };
  11056. Base.prototype.setOptions = function (options) {
  11057. this.options = options || {};
  11058. };
  11059. Base.prototype.adjust = function (value, region) {
  11060. if (value <= region[0]) {
  11061. value = region[0];
  11062. } else if (value >= region[1]) {
  11063. value = region[1];
  11064. }
  11065. return value;
  11066. };
  11067. Base.prototype.getLocation = function (loc, totalWidth, totalHeight) {
  11068. var x = loc.x != null ? loc.x : 'center';
  11069. switch (x) {
  11070. case 'center':
  11071. x = Math.floor((this.canvasWidth - totalWidth) / 2);
  11072. break;
  11073. case 'left':
  11074. x = 0;
  11075. break;
  11076. case 'right':
  11077. x = this.canvasWidth - totalWidth;
  11078. break;
  11079. }
  11080. var y = loc.y != null ? loc.y : 'center';
  11081. switch (y) {
  11082. case 'center':
  11083. y = Math.floor((this.canvasHeight - totalHeight) / 2);
  11084. break;
  11085. case 'top':
  11086. y = 0;
  11087. break;
  11088. case 'bottom':
  11089. y = this.canvasHeight - totalHeight;
  11090. break;
  11091. }
  11092. return {
  11093. x: x,
  11094. y: y,
  11095. width: totalWidth,
  11096. height: totalHeight
  11097. };
  11098. };
  11099. return Base;
  11100. });define('zrender/Layer', [
  11101. 'require',
  11102. './mixin/Transformable',
  11103. './tool/util',
  11104. './config'
  11105. ], function (require) {
  11106. var Transformable = require('./mixin/Transformable');
  11107. var util = require('./tool/util');
  11108. var vmlCanvasManager = window['G_vmlCanvasManager'];
  11109. var config = require('./config');
  11110. function returnFalse() {
  11111. return false;
  11112. }
  11113. function createDom(id, type, painter) {
  11114. var newDom = document.createElement(type);
  11115. var width = painter.getWidth();
  11116. var height = painter.getHeight();
  11117. newDom.style.position = 'absolute';
  11118. newDom.style.left = 0;
  11119. newDom.style.top = 0;
  11120. newDom.style.width = width + 'px';
  11121. newDom.style.height = height + 'px';
  11122. newDom.width = width * config.devicePixelRatio;
  11123. newDom.height = height * config.devicePixelRatio;
  11124. newDom.setAttribute('data-zr-dom-id', id);
  11125. return newDom;
  11126. }
  11127. var Layer = function (id, painter) {
  11128. this.id = id;
  11129. this.dom = createDom(id, 'canvas', painter);
  11130. this.dom.onselectstart = returnFalse;
  11131. this.dom.style['-webkit-user-select'] = 'none';
  11132. this.dom.style['user-select'] = 'none';
  11133. this.dom.style['-webkit-touch-callout'] = 'none';
  11134. this.dom.style['-webkit-tap-highlight-color'] = 'rgba(0,0,0,0)';
  11135. this.dom.className = config.elementClassName;
  11136. vmlCanvasManager && vmlCanvasManager.initElement(this.dom);
  11137. this.domBack = null;
  11138. this.ctxBack = null;
  11139. this.painter = painter;
  11140. this.unusedCount = 0;
  11141. this.config = null;
  11142. this.dirty = true;
  11143. this.elCount = 0;
  11144. this.clearColor = 0;
  11145. this.motionBlur = false;
  11146. this.lastFrameAlpha = 0.7;
  11147. this.zoomable = false;
  11148. this.panable = false;
  11149. this.maxZoom = Infinity;
  11150. this.minZoom = 0;
  11151. Transformable.call(this);
  11152. };
  11153. Layer.prototype.initContext = function () {
  11154. this.ctx = this.dom.getContext('2d');
  11155. var dpr = config.devicePixelRatio;
  11156. if (dpr != 1) {
  11157. this.ctx.scale(dpr, dpr);
  11158. }
  11159. };
  11160. Layer.prototype.createBackBuffer = function () {
  11161. if (vmlCanvasManager) {
  11162. return;
  11163. }
  11164. this.domBack = createDom('back-' + this.id, 'canvas', this.painter);
  11165. this.ctxBack = this.domBack.getContext('2d');
  11166. var dpr = config.devicePixelRatio;
  11167. if (dpr != 1) {
  11168. this.ctxBack.scale(dpr, dpr);
  11169. }
  11170. };
  11171. Layer.prototype.resize = function (width, height) {
  11172. var dpr = config.devicePixelRatio;
  11173. this.dom.style.width = width + 'px';
  11174. this.dom.style.height = height + 'px';
  11175. this.dom.setAttribute('width', width * dpr);
  11176. this.dom.setAttribute('height', height * dpr);
  11177. if (dpr != 1) {
  11178. this.ctx.scale(dpr, dpr);
  11179. }
  11180. if (this.domBack) {
  11181. this.domBack.setAttribute('width', width * dpr);
  11182. this.domBack.setAttribute('height', height * dpr);
  11183. if (dpr != 1) {
  11184. this.ctxBack.scale(dpr, dpr);
  11185. }
  11186. }
  11187. };
  11188. Layer.prototype.clear = function () {
  11189. var dom = this.dom;
  11190. var ctx = this.ctx;
  11191. var width = dom.width;
  11192. var height = dom.height;
  11193. var haveClearColor = this.clearColor && !vmlCanvasManager;
  11194. var haveMotionBLur = this.motionBlur && !vmlCanvasManager;
  11195. var lastFrameAlpha = this.lastFrameAlpha;
  11196. var dpr = config.devicePixelRatio;
  11197. if (haveMotionBLur) {
  11198. if (!this.domBack) {
  11199. this.createBackBuffer();
  11200. }
  11201. this.ctxBack.globalCompositeOperation = 'copy';
  11202. this.ctxBack.drawImage(dom, 0, 0, width / dpr, height / dpr);
  11203. }
  11204. ctx.clearRect(0, 0, width / dpr, height / dpr);
  11205. if (haveClearColor) {
  11206. ctx.save();
  11207. ctx.fillStyle = this.clearColor;
  11208. ctx.fillRect(0, 0, width / dpr, height / dpr);
  11209. ctx.restore();
  11210. }
  11211. if (haveMotionBLur) {
  11212. var domBack = this.domBack;
  11213. ctx.save();
  11214. ctx.globalAlpha = lastFrameAlpha;
  11215. ctx.drawImage(domBack, 0, 0, width / dpr, height / dpr);
  11216. ctx.restore();
  11217. }
  11218. };
  11219. util.merge(Layer.prototype, Transformable.prototype);
  11220. return Layer;
  11221. });define('zrender/shape/Text', [
  11222. 'require',
  11223. '../tool/area',
  11224. './Base',
  11225. '../tool/util'
  11226. ], function (require) {
  11227. var area = require('../tool/area');
  11228. var Base = require('./Base');
  11229. var Text = function (options) {
  11230. Base.call(this, options);
  11231. };
  11232. Text.prototype = {
  11233. type: 'text',
  11234. brush: function (ctx, isHighlight) {
  11235. var style = this.style;
  11236. if (isHighlight) {
  11237. style = this.getHighlightStyle(style, this.highlightStyle || {});
  11238. }
  11239. if (typeof style.text == 'undefined' || style.text === false) {
  11240. return;
  11241. }
  11242. ctx.save();
  11243. this.doClip(ctx);
  11244. this.setContext(ctx, style);
  11245. this.setTransform(ctx);
  11246. if (style.textFont) {
  11247. ctx.font = style.textFont;
  11248. }
  11249. ctx.textAlign = style.textAlign || 'start';
  11250. ctx.textBaseline = style.textBaseline || 'middle';
  11251. var text = (style.text + '').split('\n');
  11252. var lineHeight = area.getTextHeight('国', style.textFont);
  11253. var rect = this.getRect(style);
  11254. var x = style.x;
  11255. var y;
  11256. if (style.textBaseline == 'top') {
  11257. y = rect.y;
  11258. } else if (style.textBaseline == 'bottom') {
  11259. y = rect.y + lineHeight;
  11260. } else {
  11261. y = rect.y + lineHeight / 2;
  11262. }
  11263. for (var i = 0, l = text.length; i < l; i++) {
  11264. if (style.maxWidth) {
  11265. switch (style.brushType) {
  11266. case 'fill':
  11267. ctx.fillText(text[i], x, y, style.maxWidth);
  11268. break;
  11269. case 'stroke':
  11270. ctx.strokeText(text[i], x, y, style.maxWidth);
  11271. break;
  11272. case 'both':
  11273. ctx.fillText(text[i], x, y, style.maxWidth);
  11274. ctx.strokeText(text[i], x, y, style.maxWidth);
  11275. break;
  11276. default:
  11277. ctx.fillText(text[i], x, y, style.maxWidth);
  11278. }
  11279. } else {
  11280. switch (style.brushType) {
  11281. case 'fill':
  11282. ctx.fillText(text[i], x, y);
  11283. break;
  11284. case 'stroke':
  11285. ctx.strokeText(text[i], x, y);
  11286. break;
  11287. case 'both':
  11288. ctx.fillText(text[i], x, y);
  11289. ctx.strokeText(text[i], x, y);
  11290. break;
  11291. default:
  11292. ctx.fillText(text[i], x, y);
  11293. }
  11294. }
  11295. y += lineHeight;
  11296. }
  11297. ctx.restore();
  11298. return;
  11299. },
  11300. getRect: function (style) {
  11301. if (style.__rect) {
  11302. return style.__rect;
  11303. }
  11304. var width = area.getTextWidth(style.text, style.textFont);
  11305. var height = area.getTextHeight(style.text, style.textFont);
  11306. var textX = style.x;
  11307. if (style.textAlign == 'end' || style.textAlign == 'right') {
  11308. textX -= width;
  11309. } else if (style.textAlign == 'center') {
  11310. textX -= width / 2;
  11311. }
  11312. var textY;
  11313. if (style.textBaseline == 'top') {
  11314. textY = style.y;
  11315. } else if (style.textBaseline == 'bottom') {
  11316. textY = style.y - height;
  11317. } else {
  11318. textY = style.y - height / 2;
  11319. }
  11320. style.__rect = {
  11321. x: textX,
  11322. y: textY,
  11323. width: width,
  11324. height: height
  11325. };
  11326. return style.__rect;
  11327. }
  11328. };
  11329. require('../tool/util').inherits(Text, Base);
  11330. return Text;
  11331. });define('zrender/shape/Rectangle', [
  11332. 'require',
  11333. './Base',
  11334. '../tool/util'
  11335. ], function (require) {
  11336. var Base = require('./Base');
  11337. var Rectangle = function (options) {
  11338. Base.call(this, options);
  11339. };
  11340. Rectangle.prototype = {
  11341. type: 'rectangle',
  11342. _buildRadiusPath: function (ctx, style) {
  11343. var x = style.x;
  11344. var y = style.y;
  11345. var width = style.width;
  11346. var height = style.height;
  11347. var r = style.radius;
  11348. var r1;
  11349. var r2;
  11350. var r3;
  11351. var r4;
  11352. if (typeof r === 'number') {
  11353. r1 = r2 = r3 = r4 = r;
  11354. } else if (r instanceof Array) {
  11355. if (r.length === 1) {
  11356. r1 = r2 = r3 = r4 = r[0];
  11357. } else if (r.length === 2) {
  11358. r1 = r3 = r[0];
  11359. r2 = r4 = r[1];
  11360. } else if (r.length === 3) {
  11361. r1 = r[0];
  11362. r2 = r4 = r[1];
  11363. r3 = r[2];
  11364. } else {
  11365. r1 = r[0];
  11366. r2 = r[1];
  11367. r3 = r[2];
  11368. r4 = r[3];
  11369. }
  11370. } else {
  11371. r1 = r2 = r3 = r4 = 0;
  11372. }
  11373. var total;
  11374. if (r1 + r2 > width) {
  11375. total = r1 + r2;
  11376. r1 *= width / total;
  11377. r2 *= width / total;
  11378. }
  11379. if (r3 + r4 > width) {
  11380. total = r3 + r4;
  11381. r3 *= width / total;
  11382. r4 *= width / total;
  11383. }
  11384. if (r2 + r3 > height) {
  11385. total = r2 + r3;
  11386. r2 *= height / total;
  11387. r3 *= height / total;
  11388. }
  11389. if (r1 + r4 > height) {
  11390. total = r1 + r4;
  11391. r1 *= height / total;
  11392. r4 *= height / total;
  11393. }
  11394. ctx.moveTo(x + r1, y);
  11395. ctx.lineTo(x + width - r2, y);
  11396. r2 !== 0 && ctx.quadraticCurveTo(x + width, y, x + width, y + r2);
  11397. ctx.lineTo(x + width, y + height - r3);
  11398. r3 !== 0 && ctx.quadraticCurveTo(x + width, y + height, x + width - r3, y + height);
  11399. ctx.lineTo(x + r4, y + height);
  11400. r4 !== 0 && ctx.quadraticCurveTo(x, y + height, x, y + height - r4);
  11401. ctx.lineTo(x, y + r1);
  11402. r1 !== 0 && ctx.quadraticCurveTo(x, y, x + r1, y);
  11403. },
  11404. buildPath: function (ctx, style) {
  11405. if (!style.radius) {
  11406. ctx.moveTo(style.x, style.y);
  11407. ctx.lineTo(style.x + style.width, style.y);
  11408. ctx.lineTo(style.x + style.width, style.y + style.height);
  11409. ctx.lineTo(style.x, style.y + style.height);
  11410. ctx.lineTo(style.x, style.y);
  11411. } else {
  11412. this._buildRadiusPath(ctx, style);
  11413. }
  11414. ctx.closePath();
  11415. return;
  11416. },
  11417. getRect: function (style) {
  11418. if (style.__rect) {
  11419. return style.__rect;
  11420. }
  11421. var lineWidth;
  11422. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  11423. lineWidth = style.lineWidth || 1;
  11424. } else {
  11425. lineWidth = 0;
  11426. }
  11427. style.__rect = {
  11428. x: Math.round(style.x - lineWidth / 2),
  11429. y: Math.round(style.y - lineWidth / 2),
  11430. width: style.width + lineWidth,
  11431. height: style.height + lineWidth
  11432. };
  11433. return style.__rect;
  11434. }
  11435. };
  11436. require('../tool/util').inherits(Rectangle, Base);
  11437. return Rectangle;
  11438. });define('zrender/tool/area', [
  11439. 'require',
  11440. './util',
  11441. './curve'
  11442. ], function (require) {
  11443. 'use strict';
  11444. var util = require('./util');
  11445. var curve = require('./curve');
  11446. var _ctx;
  11447. var _textWidthCache = {};
  11448. var _textHeightCache = {};
  11449. var _textWidthCacheCounter = 0;
  11450. var _textHeightCacheCounter = 0;
  11451. var TEXT_CACHE_MAX = 5000;
  11452. var PI2 = Math.PI * 2;
  11453. function normalizeRadian(angle) {
  11454. angle %= PI2;
  11455. if (angle < 0) {
  11456. angle += PI2;
  11457. }
  11458. return angle;
  11459. }
  11460. function isInside(shape, area, x, y) {
  11461. if (!area || !shape) {
  11462. return false;
  11463. }
  11464. var zoneType = shape.type;
  11465. _ctx = _ctx || util.getContext();
  11466. var _mathReturn = _mathMethod(shape, area, x, y);
  11467. if (typeof _mathReturn != 'undefined') {
  11468. return _mathReturn;
  11469. }
  11470. if (shape.buildPath && _ctx.isPointInPath) {
  11471. return _buildPathMethod(shape, _ctx, area, x, y);
  11472. }
  11473. switch (zoneType) {
  11474. case 'ellipse':
  11475. return true;
  11476. case 'trochoid':
  11477. var _r = area.location == 'out' ? area.r1 + area.r2 + area.d : area.r1 - area.r2 + area.d;
  11478. return isInsideCircle(area, x, y, _r);
  11479. case 'rose':
  11480. return isInsideCircle(area, x, y, area.maxr);
  11481. default:
  11482. return false;
  11483. }
  11484. }
  11485. function _mathMethod(shape, area, x, y) {
  11486. var zoneType = shape.type;
  11487. switch (zoneType) {
  11488. case 'bezier-curve':
  11489. if (typeof area.cpX2 === 'undefined') {
  11490. return isInsideQuadraticStroke(area.xStart, area.yStart, area.cpX1, area.cpY1, area.xEnd, area.yEnd, area.lineWidth, x, y);
  11491. }
  11492. return isInsideCubicStroke(area.xStart, area.yStart, area.cpX1, area.cpY1, area.cpX2, area.cpY2, area.xEnd, area.yEnd, area.lineWidth, x, y);
  11493. case 'line':
  11494. return isInsideLine(area.xStart, area.yStart, area.xEnd, area.yEnd, area.lineWidth, x, y);
  11495. case 'polyline':
  11496. return isInsidePolyline(area.pointList, area.lineWidth, x, y);
  11497. case 'ring':
  11498. return isInsideRing(area.x, area.y, area.r0, area.r, x, y);
  11499. case 'circle':
  11500. return isInsideCircle(area.x, area.y, area.r, x, y);
  11501. case 'sector':
  11502. var startAngle = area.startAngle * Math.PI / 180;
  11503. var endAngle = area.endAngle * Math.PI / 180;
  11504. if (!area.clockWise) {
  11505. startAngle = -startAngle;
  11506. endAngle = -endAngle;
  11507. }
  11508. return isInsideSector(area.x, area.y, area.r0, area.r, startAngle, endAngle, !area.clockWise, x, y);
  11509. case 'path':
  11510. return area.pathArray && isInsidePath(area.pathArray, Math.max(area.lineWidth, 5), area.brushType, x, y);
  11511. case 'polygon':
  11512. case 'star':
  11513. case 'isogon':
  11514. return isInsidePolygon(area.pointList, x, y);
  11515. case 'text':
  11516. var rect = area.__rect || shape.getRect(area);
  11517. return isInsideRect(rect.x, rect.y, rect.width, rect.height, x, y);
  11518. case 'rectangle':
  11519. case 'image':
  11520. return isInsideRect(area.x, area.y, area.width, area.height, x, y);
  11521. }
  11522. }
  11523. function _buildPathMethod(shape, context, area, x, y) {
  11524. context.beginPath();
  11525. shape.buildPath(context, area);
  11526. context.closePath();
  11527. return context.isPointInPath(x, y);
  11528. }
  11529. function isOutside(shape, area, x, y) {
  11530. return !isInside(shape, area, x, y);
  11531. }
  11532. function isInsideLine(x0, y0, x1, y1, lineWidth, x, y) {
  11533. if (lineWidth === 0) {
  11534. return false;
  11535. }
  11536. var _l = Math.max(lineWidth, 5);
  11537. var _a = 0;
  11538. var _b = x0;
  11539. if (y > y0 + _l && y > y1 + _l || y < y0 - _l && y < y1 - _l || x > x0 + _l && x > x1 + _l || x < x0 - _l && x < x1 - _l) {
  11540. return false;
  11541. }
  11542. if (x0 !== x1) {
  11543. _a = (y0 - y1) / (x0 - x1);
  11544. _b = (x0 * y1 - x1 * y0) / (x0 - x1);
  11545. } else {
  11546. return Math.abs(x - x0) <= _l / 2;
  11547. }
  11548. var tmp = _a * x - y + _b;
  11549. var _s = tmp * tmp / (_a * _a + 1);
  11550. return _s <= _l / 2 * _l / 2;
  11551. }
  11552. function isInsideCubicStroke(x0, y0, x1, y1, x2, y2, x3, y3, lineWidth, x, y) {
  11553. if (lineWidth === 0) {
  11554. return false;
  11555. }
  11556. var _l = Math.max(lineWidth, 5);
  11557. if (y > y0 + _l && y > y1 + _l && y > y2 + _l && y > y3 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l && y < y3 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l && x > x3 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l && x < x3 - _l) {
  11558. return false;
  11559. }
  11560. var d = curve.cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, null);
  11561. return d <= _l / 2;
  11562. }
  11563. function isInsideQuadraticStroke(x0, y0, x1, y1, x2, y2, lineWidth, x, y) {
  11564. if (lineWidth === 0) {
  11565. return false;
  11566. }
  11567. var _l = Math.max(lineWidth, 5);
  11568. if (y > y0 + _l && y > y1 + _l && y > y2 + _l || y < y0 - _l && y < y1 - _l && y < y2 - _l || x > x0 + _l && x > x1 + _l && x > x2 + _l || x < x0 - _l && x < x1 - _l && x < x2 - _l) {
  11569. return false;
  11570. }
  11571. var d = curve.quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, null);
  11572. return d <= _l / 2;
  11573. }
  11574. function isInsideArcStroke(cx, cy, r, startAngle, endAngle, anticlockwise, lineWidth, x, y) {
  11575. if (lineWidth === 0) {
  11576. return false;
  11577. }
  11578. var _l = Math.max(lineWidth, 5);
  11579. x -= cx;
  11580. y -= cy;
  11581. var d = Math.sqrt(x * x + y * y);
  11582. if (d - _l > r || d + _l < r) {
  11583. return false;
  11584. }
  11585. if (Math.abs(startAngle - endAngle) >= PI2) {
  11586. return true;
  11587. }
  11588. if (anticlockwise) {
  11589. var tmp = startAngle;
  11590. startAngle = normalizeRadian(endAngle);
  11591. endAngle = normalizeRadian(tmp);
  11592. } else {
  11593. startAngle = normalizeRadian(startAngle);
  11594. endAngle = normalizeRadian(endAngle);
  11595. }
  11596. if (startAngle > endAngle) {
  11597. endAngle += PI2;
  11598. }
  11599. var angle = Math.atan2(y, x);
  11600. if (angle < 0) {
  11601. angle += PI2;
  11602. }
  11603. return angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle;
  11604. }
  11605. function isInsidePolyline(points, lineWidth, x, y) {
  11606. var lineWidth = Math.max(lineWidth, 10);
  11607. for (var i = 0, l = points.length - 1; i < l; i++) {
  11608. var x0 = points[i][0];
  11609. var y0 = points[i][1];
  11610. var x1 = points[i + 1][0];
  11611. var y1 = points[i + 1][1];
  11612. if (isInsideLine(x0, y0, x1, y1, lineWidth, x, y)) {
  11613. return true;
  11614. }
  11615. }
  11616. return false;
  11617. }
  11618. function isInsideRing(cx, cy, r0, r, x, y) {
  11619. var d = (x - cx) * (x - cx) + (y - cy) * (y - cy);
  11620. return d < r * r && d > r0 * r0;
  11621. }
  11622. function isInsideRect(x0, y0, width, height, x, y) {
  11623. return x >= x0 && x <= x0 + width && y >= y0 && y <= y0 + height;
  11624. }
  11625. function isInsideCircle(x0, y0, r, x, y) {
  11626. return (x - x0) * (x - x0) + (y - y0) * (y - y0) < r * r;
  11627. }
  11628. function isInsideSector(cx, cy, r0, r, startAngle, endAngle, anticlockwise, x, y) {
  11629. return isInsideArcStroke(cx, cy, (r0 + r) / 2, startAngle, endAngle, anticlockwise, r - r0, x, y);
  11630. }
  11631. function isInsidePolygon(points, x, y) {
  11632. var N = points.length;
  11633. var w = 0;
  11634. for (var i = 0, j = N - 1; i < N; i++) {
  11635. var x0 = points[j][0];
  11636. var y0 = points[j][1];
  11637. var x1 = points[i][0];
  11638. var y1 = points[i][1];
  11639. w += windingLine(x0, y0, x1, y1, x, y);
  11640. j = i;
  11641. }
  11642. return w !== 0;
  11643. }
  11644. function windingLine(x0, y0, x1, y1, x, y) {
  11645. if (y > y0 && y > y1 || y < y0 && y < y1) {
  11646. return 0;
  11647. }
  11648. if (y1 == y0) {
  11649. return 0;
  11650. }
  11651. var dir = y1 < y0 ? 1 : -1;
  11652. var t = (y - y0) / (y1 - y0);
  11653. var x_ = t * (x1 - x0) + x0;
  11654. return x_ > x ? dir : 0;
  11655. }
  11656. var roots = [
  11657. -1,
  11658. -1,
  11659. -1
  11660. ];
  11661. var extrema = [
  11662. -1,
  11663. -1
  11664. ];
  11665. function swapExtrema() {
  11666. var tmp = extrema[0];
  11667. extrema[0] = extrema[1];
  11668. extrema[1] = tmp;
  11669. }
  11670. function windingCubic(x0, y0, x1, y1, x2, y2, x3, y3, x, y) {
  11671. if (y > y0 && y > y1 && y > y2 && y > y3 || y < y0 && y < y1 && y < y2 && y < y3) {
  11672. return 0;
  11673. }
  11674. var nRoots = curve.cubicRootAt(y0, y1, y2, y3, y, roots);
  11675. if (nRoots === 0) {
  11676. return 0;
  11677. } else {
  11678. var w = 0;
  11679. var nExtrema = -1;
  11680. var y0_, y1_;
  11681. for (var i = 0; i < nRoots; i++) {
  11682. var t = roots[i];
  11683. var x_ = curve.cubicAt(x0, x1, x2, x3, t);
  11684. if (x_ < x) {
  11685. continue;
  11686. }
  11687. if (nExtrema < 0) {
  11688. nExtrema = curve.cubicExtrema(y0, y1, y2, y3, extrema);
  11689. if (extrema[1] < extrema[0] && nExtrema > 1) {
  11690. swapExtrema();
  11691. }
  11692. y0_ = curve.cubicAt(y0, y1, y2, y3, extrema[0]);
  11693. if (nExtrema > 1) {
  11694. y1_ = curve.cubicAt(y0, y1, y2, y3, extrema[1]);
  11695. }
  11696. }
  11697. if (nExtrema == 2) {
  11698. if (t < extrema[0]) {
  11699. w += y0_ < y0 ? 1 : -1;
  11700. } else if (t < extrema[1]) {
  11701. w += y1_ < y0_ ? 1 : -1;
  11702. } else {
  11703. w += y3 < y1_ ? 1 : -1;
  11704. }
  11705. } else {
  11706. if (t < extrema[0]) {
  11707. w += y0_ < y0 ? 1 : -1;
  11708. } else {
  11709. w += y3 < y0_ ? 1 : -1;
  11710. }
  11711. }
  11712. }
  11713. return w;
  11714. }
  11715. }
  11716. function windingQuadratic(x0, y0, x1, y1, x2, y2, x, y) {
  11717. if (y > y0 && y > y1 && y > y2 || y < y0 && y < y1 && y < y2) {
  11718. return 0;
  11719. }
  11720. var nRoots = curve.quadraticRootAt(y0, y1, y2, y, roots);
  11721. if (nRoots === 0) {
  11722. return 0;
  11723. } else {
  11724. var t = curve.quadraticExtremum(y0, y1, y2);
  11725. if (t >= 0 && t <= 1) {
  11726. var w = 0;
  11727. var y_ = curve.quadraticAt(y0, y1, y2, t);
  11728. for (var i = 0; i < nRoots; i++) {
  11729. var x_ = curve.quadraticAt(x0, x1, x2, roots[i]);
  11730. if (x_ < x) {
  11731. continue;
  11732. }
  11733. if (roots[i] < t) {
  11734. w += y_ < y0 ? 1 : -1;
  11735. } else {
  11736. w += y2 < y_ ? 1 : -1;
  11737. }
  11738. }
  11739. return w;
  11740. } else {
  11741. var x_ = curve.quadraticAt(x0, x1, x2, roots[0]);
  11742. if (x_ < x) {
  11743. return 0;
  11744. }
  11745. return y2 < y0 ? 1 : -1;
  11746. }
  11747. }
  11748. }
  11749. function windingArc(cx, cy, r, startAngle, endAngle, anticlockwise, x, y) {
  11750. y -= cy;
  11751. if (y > r || y < -r) {
  11752. return 0;
  11753. }
  11754. var tmp = Math.sqrt(r * r - y * y);
  11755. roots[0] = -tmp;
  11756. roots[1] = tmp;
  11757. if (Math.abs(startAngle - endAngle) >= PI2) {
  11758. startAngle = 0;
  11759. endAngle = PI2;
  11760. var dir = anticlockwise ? 1 : -1;
  11761. if (x >= roots[0] + cx && x <= roots[1] + cx) {
  11762. return dir;
  11763. } else {
  11764. return 0;
  11765. }
  11766. }
  11767. if (anticlockwise) {
  11768. var tmp = startAngle;
  11769. startAngle = normalizeRadian(endAngle);
  11770. endAngle = normalizeRadian(tmp);
  11771. } else {
  11772. startAngle = normalizeRadian(startAngle);
  11773. endAngle = normalizeRadian(endAngle);
  11774. }
  11775. if (startAngle > endAngle) {
  11776. endAngle += PI2;
  11777. }
  11778. var w = 0;
  11779. for (var i = 0; i < 2; i++) {
  11780. var x_ = roots[i];
  11781. if (x_ + cx > x) {
  11782. var angle = Math.atan2(y, x_);
  11783. var dir = anticlockwise ? 1 : -1;
  11784. if (angle < 0) {
  11785. angle = PI2 + angle;
  11786. }
  11787. if (angle >= startAngle && angle <= endAngle || angle + PI2 >= startAngle && angle + PI2 <= endAngle) {
  11788. if (angle > Math.PI / 2 && angle < Math.PI * 1.5) {
  11789. dir = -dir;
  11790. }
  11791. w += dir;
  11792. }
  11793. }
  11794. }
  11795. return w;
  11796. }
  11797. function isInsidePath(pathArray, lineWidth, brushType, x, y) {
  11798. var w = 0;
  11799. var xi = 0;
  11800. var yi = 0;
  11801. var x0 = 0;
  11802. var y0 = 0;
  11803. var beginSubpath = true;
  11804. var firstCmd = true;
  11805. brushType = brushType || 'fill';
  11806. var hasStroke = brushType === 'stroke' || brushType === 'both';
  11807. var hasFill = brushType === 'fill' || brushType === 'both';
  11808. for (var i = 0; i < pathArray.length; i++) {
  11809. var seg = pathArray[i];
  11810. var p = seg.points;
  11811. if (beginSubpath || seg.command === 'M') {
  11812. if (i > 0) {
  11813. if (hasFill) {
  11814. w += windingLine(xi, yi, x0, y0, x, y);
  11815. }
  11816. if (w !== 0) {
  11817. return true;
  11818. }
  11819. }
  11820. x0 = p[p.length - 2];
  11821. y0 = p[p.length - 1];
  11822. beginSubpath = false;
  11823. if (firstCmd && seg.command !== 'A') {
  11824. firstCmd = false;
  11825. xi = x0;
  11826. yi = y0;
  11827. }
  11828. }
  11829. switch (seg.command) {
  11830. case 'M':
  11831. xi = p[0];
  11832. yi = p[1];
  11833. break;
  11834. case 'L':
  11835. if (hasStroke) {
  11836. if (isInsideLine(xi, yi, p[0], p[1], lineWidth, x, y)) {
  11837. return true;
  11838. }
  11839. }
  11840. if (hasFill) {
  11841. w += windingLine(xi, yi, p[0], p[1], x, y);
  11842. }
  11843. xi = p[0];
  11844. yi = p[1];
  11845. break;
  11846. case 'C':
  11847. if (hasStroke) {
  11848. if (isInsideCubicStroke(xi, yi, p[0], p[1], p[2], p[3], p[4], p[5], lineWidth, x, y)) {
  11849. return true;
  11850. }
  11851. }
  11852. if (hasFill) {
  11853. w += windingCubic(xi, yi, p[0], p[1], p[2], p[3], p[4], p[5], x, y);
  11854. }
  11855. xi = p[4];
  11856. yi = p[5];
  11857. break;
  11858. case 'Q':
  11859. if (hasStroke) {
  11860. if (isInsideQuadraticStroke(xi, yi, p[0], p[1], p[2], p[3], lineWidth, x, y)) {
  11861. return true;
  11862. }
  11863. }
  11864. if (hasFill) {
  11865. w += windingQuadratic(xi, yi, p[0], p[1], p[2], p[3], x, y);
  11866. }
  11867. xi = p[2];
  11868. yi = p[3];
  11869. break;
  11870. case 'A':
  11871. var cx = p[0];
  11872. var cy = p[1];
  11873. var rx = p[2];
  11874. var ry = p[3];
  11875. var theta = p[4];
  11876. var dTheta = p[5];
  11877. var x1 = Math.cos(theta) * rx + cx;
  11878. var y1 = Math.sin(theta) * ry + cy;
  11879. if (!firstCmd) {
  11880. w += windingLine(xi, yi, x1, y1);
  11881. } else {
  11882. firstCmd = false;
  11883. x0 = x1;
  11884. y0 = y1;
  11885. }
  11886. var _x = (x - cx) * ry / rx + cx;
  11887. if (hasStroke) {
  11888. if (isInsideArcStroke(cx, cy, ry, theta, theta + dTheta, 1 - p[7], lineWidth, _x, y)) {
  11889. return true;
  11890. }
  11891. }
  11892. if (hasFill) {
  11893. w += windingArc(cx, cy, ry, theta, theta + dTheta, 1 - p[7], _x, y);
  11894. }
  11895. xi = Math.cos(theta + dTheta) * rx + cx;
  11896. yi = Math.sin(theta + dTheta) * ry + cy;
  11897. break;
  11898. case 'z':
  11899. if (hasStroke) {
  11900. if (isInsideLine(xi, yi, x0, y0, lineWidth, x, y)) {
  11901. return true;
  11902. }
  11903. }
  11904. beginSubpath = true;
  11905. break;
  11906. }
  11907. }
  11908. if (hasFill) {
  11909. w += windingLine(xi, yi, x0, y0, x, y);
  11910. }
  11911. return w !== 0;
  11912. }
  11913. function getTextWidth(text, textFont) {
  11914. var key = text + ':' + textFont;
  11915. if (_textWidthCache[key]) {
  11916. return _textWidthCache[key];
  11917. }
  11918. _ctx = _ctx || util.getContext();
  11919. _ctx.save();
  11920. if (textFont) {
  11921. _ctx.font = textFont;
  11922. }
  11923. text = (text + '').split('\n');
  11924. var width = 0;
  11925. for (var i = 0, l = text.length; i < l; i++) {
  11926. width = Math.max(_ctx.measureText(text[i]).width, width);
  11927. }
  11928. _ctx.restore();
  11929. _textWidthCache[key] = width;
  11930. if (++_textWidthCacheCounter > TEXT_CACHE_MAX) {
  11931. _textWidthCacheCounter = 0;
  11932. _textWidthCache = {};
  11933. }
  11934. return width;
  11935. }
  11936. function getTextHeight(text, textFont) {
  11937. var key = text + ':' + textFont;
  11938. if (_textHeightCache[key]) {
  11939. return _textHeightCache[key];
  11940. }
  11941. _ctx = _ctx || util.getContext();
  11942. _ctx.save();
  11943. if (textFont) {
  11944. _ctx.font = textFont;
  11945. }
  11946. text = (text + '').split('\n');
  11947. var height = (_ctx.measureText('国').width + 2) * text.length;
  11948. _ctx.restore();
  11949. _textHeightCache[key] = height;
  11950. if (++_textHeightCacheCounter > TEXT_CACHE_MAX) {
  11951. _textHeightCacheCounter = 0;
  11952. _textHeightCache = {};
  11953. }
  11954. return height;
  11955. }
  11956. return {
  11957. isInside: isInside,
  11958. isOutside: isOutside,
  11959. getTextWidth: getTextWidth,
  11960. getTextHeight: getTextHeight,
  11961. isInsidePath: isInsidePath,
  11962. isInsidePolygon: isInsidePolygon,
  11963. isInsideSector: isInsideSector,
  11964. isInsideCircle: isInsideCircle,
  11965. isInsideLine: isInsideLine,
  11966. isInsideRect: isInsideRect,
  11967. isInsidePolyline: isInsidePolyline,
  11968. isInsideCubicStroke: isInsideCubicStroke,
  11969. isInsideQuadraticStroke: isInsideQuadraticStroke
  11970. };
  11971. });define('zrender/shape/Base', [
  11972. 'require',
  11973. '../tool/matrix',
  11974. '../tool/guid',
  11975. '../tool/util',
  11976. '../tool/log',
  11977. '../mixin/Transformable',
  11978. '../mixin/Eventful',
  11979. '../tool/area',
  11980. '../tool/color'
  11981. ], function (require) {
  11982. var vmlCanvasManager = window['G_vmlCanvasManager'];
  11983. var matrix = require('../tool/matrix');
  11984. var guid = require('../tool/guid');
  11985. var util = require('../tool/util');
  11986. var log = require('../tool/log');
  11987. var Transformable = require('../mixin/Transformable');
  11988. var Eventful = require('../mixin/Eventful');
  11989. function _fillText(ctx, text, x, y, textFont, textAlign, textBaseline) {
  11990. if (textFont) {
  11991. ctx.font = textFont;
  11992. }
  11993. ctx.textAlign = textAlign;
  11994. ctx.textBaseline = textBaseline;
  11995. var rect = _getTextRect(text, x, y, textFont, textAlign, textBaseline);
  11996. text = (text + '').split('\n');
  11997. var lineHeight = require('../tool/area').getTextHeight('国', textFont);
  11998. switch (textBaseline) {
  11999. case 'top':
  12000. y = rect.y;
  12001. break;
  12002. case 'bottom':
  12003. y = rect.y + lineHeight;
  12004. break;
  12005. default:
  12006. y = rect.y + lineHeight / 2;
  12007. }
  12008. for (var i = 0, l = text.length; i < l; i++) {
  12009. ctx.fillText(text[i], x, y);
  12010. y += lineHeight;
  12011. }
  12012. }
  12013. function _getTextRect(text, x, y, textFont, textAlign, textBaseline) {
  12014. var area = require('../tool/area');
  12015. var width = area.getTextWidth(text, textFont);
  12016. var lineHeight = area.getTextHeight('国', textFont);
  12017. text = (text + '').split('\n');
  12018. switch (textAlign) {
  12019. case 'end':
  12020. case 'right':
  12021. x -= width;
  12022. break;
  12023. case 'center':
  12024. x -= width / 2;
  12025. break;
  12026. }
  12027. switch (textBaseline) {
  12028. case 'top':
  12029. break;
  12030. case 'bottom':
  12031. y -= lineHeight * text.length;
  12032. break;
  12033. default:
  12034. y -= lineHeight * text.length / 2;
  12035. }
  12036. return {
  12037. x: x,
  12038. y: y,
  12039. width: width,
  12040. height: lineHeight * text.length
  12041. };
  12042. }
  12043. var Base = function (options) {
  12044. options = options || {};
  12045. this.id = options.id || guid();
  12046. for (var key in options) {
  12047. this[key] = options[key];
  12048. }
  12049. this.style = this.style || {};
  12050. this.highlightStyle = this.highlightStyle || null;
  12051. this.parent = null;
  12052. this.__dirty = true;
  12053. this.__clipShapes = [];
  12054. Transformable.call(this);
  12055. Eventful.call(this);
  12056. };
  12057. Base.prototype.invisible = false;
  12058. Base.prototype.ignore = false;
  12059. Base.prototype.zlevel = 0;
  12060. Base.prototype.draggable = false;
  12061. Base.prototype.clickable = false;
  12062. Base.prototype.hoverable = true;
  12063. Base.prototype.z = 0;
  12064. Base.prototype.brush = function (ctx, isHighlight) {
  12065. var style = this.beforeBrush(ctx, isHighlight);
  12066. ctx.beginPath();
  12067. this.buildPath(ctx, style);
  12068. switch (style.brushType) {
  12069. case 'both':
  12070. ctx.fill();
  12071. case 'stroke':
  12072. style.lineWidth > 0 && ctx.stroke();
  12073. break;
  12074. default:
  12075. ctx.fill();
  12076. }
  12077. this.drawText(ctx, style, this.style);
  12078. this.afterBrush(ctx);
  12079. };
  12080. Base.prototype.beforeBrush = function (ctx, isHighlight) {
  12081. var style = this.style;
  12082. if (this.brushTypeOnly) {
  12083. style.brushType = this.brushTypeOnly;
  12084. }
  12085. if (isHighlight) {
  12086. style = this.getHighlightStyle(style, this.highlightStyle || {}, this.brushTypeOnly);
  12087. }
  12088. if (this.brushTypeOnly == 'stroke') {
  12089. style.strokeColor = style.strokeColor || style.color;
  12090. }
  12091. ctx.save();
  12092. this.doClip(ctx);
  12093. this.setContext(ctx, style);
  12094. this.setTransform(ctx);
  12095. return style;
  12096. };
  12097. Base.prototype.afterBrush = function (ctx) {
  12098. ctx.restore();
  12099. };
  12100. var STYLE_CTX_MAP = [
  12101. [
  12102. 'color',
  12103. 'fillStyle'
  12104. ],
  12105. [
  12106. 'strokeColor',
  12107. 'strokeStyle'
  12108. ],
  12109. [
  12110. 'opacity',
  12111. 'globalAlpha'
  12112. ],
  12113. [
  12114. 'lineCap',
  12115. 'lineCap'
  12116. ],
  12117. [
  12118. 'lineJoin',
  12119. 'lineJoin'
  12120. ],
  12121. [
  12122. 'miterLimit',
  12123. 'miterLimit'
  12124. ],
  12125. [
  12126. 'lineWidth',
  12127. 'lineWidth'
  12128. ],
  12129. [
  12130. 'shadowBlur',
  12131. 'shadowBlur'
  12132. ],
  12133. [
  12134. 'shadowColor',
  12135. 'shadowColor'
  12136. ],
  12137. [
  12138. 'shadowOffsetX',
  12139. 'shadowOffsetX'
  12140. ],
  12141. [
  12142. 'shadowOffsetY',
  12143. 'shadowOffsetY'
  12144. ]
  12145. ];
  12146. Base.prototype.setContext = function (ctx, style) {
  12147. for (var i = 0, len = STYLE_CTX_MAP.length; i < len; i++) {
  12148. var styleProp = STYLE_CTX_MAP[i][0];
  12149. var styleValue = style[styleProp];
  12150. var ctxProp = STYLE_CTX_MAP[i][1];
  12151. if (typeof styleValue != 'undefined') {
  12152. ctx[ctxProp] = styleValue;
  12153. }
  12154. }
  12155. };
  12156. var clipShapeInvTransform = matrix.create();
  12157. Base.prototype.doClip = function (ctx) {
  12158. if (this.__clipShapes && !vmlCanvasManager) {
  12159. for (var i = 0; i < this.__clipShapes.length; i++) {
  12160. var clipShape = this.__clipShapes[i];
  12161. if (clipShape.needTransform) {
  12162. var m = clipShape.transform;
  12163. matrix.invert(clipShapeInvTransform, m);
  12164. ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
  12165. }
  12166. ctx.beginPath();
  12167. clipShape.buildPath(ctx, clipShape.style);
  12168. ctx.clip();
  12169. if (clipShape.needTransform) {
  12170. var m = clipShapeInvTransform;
  12171. ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
  12172. }
  12173. }
  12174. }
  12175. };
  12176. Base.prototype.getHighlightStyle = function (style, highlightStyle, brushTypeOnly) {
  12177. var newStyle = {};
  12178. for (var k in style) {
  12179. newStyle[k] = style[k];
  12180. }
  12181. var color = require('../tool/color');
  12182. var highlightColor = color.getHighlightColor();
  12183. if (style.brushType != 'stroke') {
  12184. newStyle.strokeColor = highlightColor;
  12185. newStyle.lineWidth = (style.lineWidth || 1) + this.getHighlightZoom();
  12186. newStyle.brushType = 'both';
  12187. } else {
  12188. if (brushTypeOnly != 'stroke') {
  12189. newStyle.strokeColor = highlightColor;
  12190. newStyle.lineWidth = (style.lineWidth || 1) + this.getHighlightZoom();
  12191. } else {
  12192. newStyle.strokeColor = highlightStyle.strokeColor || color.mix(style.strokeColor, color.toRGB(highlightColor));
  12193. }
  12194. }
  12195. for (var k in highlightStyle) {
  12196. if (typeof highlightStyle[k] != 'undefined') {
  12197. newStyle[k] = highlightStyle[k];
  12198. }
  12199. }
  12200. return newStyle;
  12201. };
  12202. Base.prototype.getHighlightZoom = function () {
  12203. return this.type != 'text' ? 6 : 2;
  12204. };
  12205. Base.prototype.drift = function (dx, dy) {
  12206. this.position[0] += dx;
  12207. this.position[1] += dy;
  12208. };
  12209. Base.prototype.buildPath = function (ctx, style) {
  12210. log('buildPath not implemented in ' + this.type);
  12211. };
  12212. Base.prototype.getRect = function (style) {
  12213. log('getRect not implemented in ' + this.type);
  12214. };
  12215. Base.prototype.isCover = function (x, y) {
  12216. var originPos = this.transformCoordToLocal(x, y);
  12217. x = originPos[0];
  12218. y = originPos[1];
  12219. if (this.isCoverRect(x, y)) {
  12220. return require('../tool/area').isInside(this, this.style, x, y);
  12221. }
  12222. return false;
  12223. };
  12224. Base.prototype.isCoverRect = function (x, y) {
  12225. var rect = this.style.__rect;
  12226. if (!rect) {
  12227. rect = this.style.__rect = this.getRect(this.style);
  12228. }
  12229. return x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height;
  12230. };
  12231. Base.prototype.drawText = function (ctx, style, normalStyle) {
  12232. if (typeof style.text == 'undefined' || style.text === false) {
  12233. return;
  12234. }
  12235. var textColor = style.textColor || style.color || style.strokeColor;
  12236. ctx.fillStyle = textColor;
  12237. var dd = 10;
  12238. var al;
  12239. var bl;
  12240. var tx;
  12241. var ty;
  12242. var textPosition = style.textPosition || this.textPosition || 'top';
  12243. switch (textPosition) {
  12244. case 'inside':
  12245. case 'top':
  12246. case 'bottom':
  12247. case 'left':
  12248. case 'right':
  12249. if (this.getRect) {
  12250. var rect = (normalStyle || style).__rect || this.getRect(normalStyle || style);
  12251. switch (textPosition) {
  12252. case 'inside':
  12253. tx = rect.x + rect.width / 2;
  12254. ty = rect.y + rect.height / 2;
  12255. al = 'center';
  12256. bl = 'middle';
  12257. if (style.brushType != 'stroke' && textColor == style.color) {
  12258. ctx.fillStyle = '#fff';
  12259. }
  12260. break;
  12261. case 'left':
  12262. tx = rect.x - dd;
  12263. ty = rect.y + rect.height / 2;
  12264. al = 'end';
  12265. bl = 'middle';
  12266. break;
  12267. case 'right':
  12268. tx = rect.x + rect.width + dd;
  12269. ty = rect.y + rect.height / 2;
  12270. al = 'start';
  12271. bl = 'middle';
  12272. break;
  12273. case 'top':
  12274. tx = rect.x + rect.width / 2;
  12275. ty = rect.y - dd;
  12276. al = 'center';
  12277. bl = 'bottom';
  12278. break;
  12279. case 'bottom':
  12280. tx = rect.x + rect.width / 2;
  12281. ty = rect.y + rect.height + dd;
  12282. al = 'center';
  12283. bl = 'top';
  12284. break;
  12285. }
  12286. }
  12287. break;
  12288. case 'start':
  12289. case 'end':
  12290. var pointList = style.pointList || [
  12291. [
  12292. style.xStart || 0,
  12293. style.yStart || 0
  12294. ],
  12295. [
  12296. style.xEnd || 0,
  12297. style.yEnd || 0
  12298. ]
  12299. ];
  12300. var length = pointList.length;
  12301. if (length < 2) {
  12302. return;
  12303. }
  12304. var xStart;
  12305. var xEnd;
  12306. var yStart;
  12307. var yEnd;
  12308. switch (textPosition) {
  12309. case 'start':
  12310. xStart = pointList[1][0];
  12311. xEnd = pointList[0][0];
  12312. yStart = pointList[1][1];
  12313. yEnd = pointList[0][1];
  12314. break;
  12315. case 'end':
  12316. xStart = pointList[length - 2][0];
  12317. xEnd = pointList[length - 1][0];
  12318. yStart = pointList[length - 2][1];
  12319. yEnd = pointList[length - 1][1];
  12320. break;
  12321. }
  12322. tx = xEnd;
  12323. ty = yEnd;
  12324. var angle = Math.atan((yStart - yEnd) / (xEnd - xStart)) / Math.PI * 180;
  12325. if (xEnd - xStart < 0) {
  12326. angle += 180;
  12327. } else if (yStart - yEnd < 0) {
  12328. angle += 360;
  12329. }
  12330. dd = 5;
  12331. if (angle >= 30 && angle <= 150) {
  12332. al = 'center';
  12333. bl = 'bottom';
  12334. ty -= dd;
  12335. } else if (angle > 150 && angle < 210) {
  12336. al = 'right';
  12337. bl = 'middle';
  12338. tx -= dd;
  12339. } else if (angle >= 210 && angle <= 330) {
  12340. al = 'center';
  12341. bl = 'top';
  12342. ty += dd;
  12343. } else {
  12344. al = 'left';
  12345. bl = 'middle';
  12346. tx += dd;
  12347. }
  12348. break;
  12349. case 'specific':
  12350. tx = style.textX || 0;
  12351. ty = style.textY || 0;
  12352. al = 'start';
  12353. bl = 'middle';
  12354. break;
  12355. }
  12356. if (tx != null && ty != null) {
  12357. _fillText(ctx, style.text, tx, ty, style.textFont, style.textAlign || al, style.textBaseline || bl);
  12358. }
  12359. };
  12360. Base.prototype.modSelf = function () {
  12361. this.__dirty = true;
  12362. if (this.style) {
  12363. this.style.__rect = null;
  12364. }
  12365. if (this.highlightStyle) {
  12366. this.highlightStyle.__rect = null;
  12367. }
  12368. };
  12369. Base.prototype.isSilent = function () {
  12370. return !(this.hoverable || this.draggable || this.clickable || this.onmousemove || this.onmouseover || this.onmouseout || this.onmousedown || this.onmouseup || this.onclick || this.ondragenter || this.ondragover || this.ondragleave || this.ondrop);
  12371. };
  12372. util.merge(Base.prototype, Transformable.prototype, true);
  12373. util.merge(Base.prototype, Eventful.prototype, true);
  12374. return Base;
  12375. });define('zrender/tool/curve', [
  12376. 'require',
  12377. './vector'
  12378. ], function (require) {
  12379. var vector = require('./vector');
  12380. 'use strict';
  12381. var EPSILON = 0.0001;
  12382. var THREE_SQRT = Math.sqrt(3);
  12383. var ONE_THIRD = 1 / 3;
  12384. var _v0 = vector.create();
  12385. var _v1 = vector.create();
  12386. var _v2 = vector.create();
  12387. function isAroundZero(val) {
  12388. return val > -EPSILON && val < EPSILON;
  12389. }
  12390. function isNotAroundZero(val) {
  12391. return val > EPSILON || val < -EPSILON;
  12392. }
  12393. function cubicAt(p0, p1, p2, p3, t) {
  12394. var onet = 1 - t;
  12395. return onet * onet * (onet * p0 + 3 * t * p1) + t * t * (t * p3 + 3 * onet * p2);
  12396. }
  12397. function cubicDerivativeAt(p0, p1, p2, p3, t) {
  12398. var onet = 1 - t;
  12399. return 3 * (((p1 - p0) * onet + 2 * (p2 - p1) * t) * onet + (p3 - p2) * t * t);
  12400. }
  12401. function cubicRootAt(p0, p1, p2, p3, val, roots) {
  12402. var a = p3 + 3 * (p1 - p2) - p0;
  12403. var b = 3 * (p2 - p1 * 2 + p0);
  12404. var c = 3 * (p1 - p0);
  12405. var d = p0 - val;
  12406. var A = b * b - 3 * a * c;
  12407. var B = b * c - 9 * a * d;
  12408. var C = c * c - 3 * b * d;
  12409. var n = 0;
  12410. if (isAroundZero(A) && isAroundZero(B)) {
  12411. if (isAroundZero(b)) {
  12412. roots[0] = 0;
  12413. } else {
  12414. var t1 = -c / b;
  12415. if (t1 >= 0 && t1 <= 1) {
  12416. roots[n++] = t1;
  12417. }
  12418. }
  12419. } else {
  12420. var disc = B * B - 4 * A * C;
  12421. if (isAroundZero(disc)) {
  12422. var K = B / A;
  12423. var t1 = -b / a + K;
  12424. var t2 = -K / 2;
  12425. if (t1 >= 0 && t1 <= 1) {
  12426. roots[n++] = t1;
  12427. }
  12428. if (t2 >= 0 && t2 <= 1) {
  12429. roots[n++] = t2;
  12430. }
  12431. } else if (disc > 0) {
  12432. var discSqrt = Math.sqrt(disc);
  12433. var Y1 = A * b + 1.5 * a * (-B + discSqrt);
  12434. var Y2 = A * b + 1.5 * a * (-B - discSqrt);
  12435. if (Y1 < 0) {
  12436. Y1 = -Math.pow(-Y1, ONE_THIRD);
  12437. } else {
  12438. Y1 = Math.pow(Y1, ONE_THIRD);
  12439. }
  12440. if (Y2 < 0) {
  12441. Y2 = -Math.pow(-Y2, ONE_THIRD);
  12442. } else {
  12443. Y2 = Math.pow(Y2, ONE_THIRD);
  12444. }
  12445. var t1 = (-b - (Y1 + Y2)) / (3 * a);
  12446. if (t1 >= 0 && t1 <= 1) {
  12447. roots[n++] = t1;
  12448. }
  12449. } else {
  12450. var T = (2 * A * b - 3 * a * B) / (2 * Math.sqrt(A * A * A));
  12451. var theta = Math.acos(T) / 3;
  12452. var ASqrt = Math.sqrt(A);
  12453. var tmp = Math.cos(theta);
  12454. var t1 = (-b - 2 * ASqrt * tmp) / (3 * a);
  12455. var t2 = (-b + ASqrt * (tmp + THREE_SQRT * Math.sin(theta))) / (3 * a);
  12456. var t3 = (-b + ASqrt * (tmp - THREE_SQRT * Math.sin(theta))) / (3 * a);
  12457. if (t1 >= 0 && t1 <= 1) {
  12458. roots[n++] = t1;
  12459. }
  12460. if (t2 >= 0 && t2 <= 1) {
  12461. roots[n++] = t2;
  12462. }
  12463. if (t3 >= 0 && t3 <= 1) {
  12464. roots[n++] = t3;
  12465. }
  12466. }
  12467. }
  12468. return n;
  12469. }
  12470. function cubicExtrema(p0, p1, p2, p3, extrema) {
  12471. var b = 6 * p2 - 12 * p1 + 6 * p0;
  12472. var a = 9 * p1 + 3 * p3 - 3 * p0 - 9 * p2;
  12473. var c = 3 * p1 - 3 * p0;
  12474. var n = 0;
  12475. if (isAroundZero(a)) {
  12476. if (isNotAroundZero(b)) {
  12477. var t1 = -c / b;
  12478. if (t1 >= 0 && t1 <= 1) {
  12479. extrema[n++] = t1;
  12480. }
  12481. }
  12482. } else {
  12483. var disc = b * b - 4 * a * c;
  12484. if (isAroundZero(disc)) {
  12485. extrema[0] = -b / (2 * a);
  12486. } else if (disc > 0) {
  12487. var discSqrt = Math.sqrt(disc);
  12488. var t1 = (-b + discSqrt) / (2 * a);
  12489. var t2 = (-b - discSqrt) / (2 * a);
  12490. if (t1 >= 0 && t1 <= 1) {
  12491. extrema[n++] = t1;
  12492. }
  12493. if (t2 >= 0 && t2 <= 1) {
  12494. extrema[n++] = t2;
  12495. }
  12496. }
  12497. }
  12498. return n;
  12499. }
  12500. function cubicSubdivide(p0, p1, p2, p3, t, out) {
  12501. var p01 = (p1 - p0) * t + p0;
  12502. var p12 = (p2 - p1) * t + p1;
  12503. var p23 = (p3 - p2) * t + p2;
  12504. var p012 = (p12 - p01) * t + p01;
  12505. var p123 = (p23 - p12) * t + p12;
  12506. var p0123 = (p123 - p012) * t + p012;
  12507. out[0] = p0;
  12508. out[1] = p01;
  12509. out[2] = p012;
  12510. out[3] = p0123;
  12511. out[4] = p0123;
  12512. out[5] = p123;
  12513. out[6] = p23;
  12514. out[7] = p3;
  12515. }
  12516. function cubicProjectPoint(x0, y0, x1, y1, x2, y2, x3, y3, x, y, out) {
  12517. var t;
  12518. var interval = 0.005;
  12519. var d = Infinity;
  12520. _v0[0] = x;
  12521. _v0[1] = y;
  12522. for (var _t = 0; _t < 1; _t += 0.05) {
  12523. _v1[0] = cubicAt(x0, x1, x2, x3, _t);
  12524. _v1[1] = cubicAt(y0, y1, y2, y3, _t);
  12525. var d1 = vector.distSquare(_v0, _v1);
  12526. if (d1 < d) {
  12527. t = _t;
  12528. d = d1;
  12529. }
  12530. }
  12531. d = Infinity;
  12532. for (var i = 0; i < 32; i++) {
  12533. if (interval < EPSILON) {
  12534. break;
  12535. }
  12536. var prev = t - interval;
  12537. var next = t + interval;
  12538. _v1[0] = cubicAt(x0, x1, x2, x3, prev);
  12539. _v1[1] = cubicAt(y0, y1, y2, y3, prev);
  12540. var d1 = vector.distSquare(_v1, _v0);
  12541. if (prev >= 0 && d1 < d) {
  12542. t = prev;
  12543. d = d1;
  12544. } else {
  12545. _v2[0] = cubicAt(x0, x1, x2, x3, next);
  12546. _v2[1] = cubicAt(y0, y1, y2, y3, next);
  12547. var d2 = vector.distSquare(_v2, _v0);
  12548. if (next <= 1 && d2 < d) {
  12549. t = next;
  12550. d = d2;
  12551. } else {
  12552. interval *= 0.5;
  12553. }
  12554. }
  12555. }
  12556. if (out) {
  12557. out[0] = cubicAt(x0, x1, x2, x3, t);
  12558. out[1] = cubicAt(y0, y1, y2, y3, t);
  12559. }
  12560. return Math.sqrt(d);
  12561. }
  12562. function quadraticAt(p0, p1, p2, t) {
  12563. var onet = 1 - t;
  12564. return onet * (onet * p0 + 2 * t * p1) + t * t * p2;
  12565. }
  12566. function quadraticDerivativeAt(p0, p1, p2, t) {
  12567. return 2 * ((1 - t) * (p1 - p0) + t * (p2 - p1));
  12568. }
  12569. function quadraticRootAt(p0, p1, p2, val, roots) {
  12570. var a = p0 - 2 * p1 + p2;
  12571. var b = 2 * (p1 - p0);
  12572. var c = p0 - val;
  12573. var n = 0;
  12574. if (isAroundZero(a)) {
  12575. if (isNotAroundZero(b)) {
  12576. var t1 = -c / b;
  12577. if (t1 >= 0 && t1 <= 1) {
  12578. roots[n++] = t1;
  12579. }
  12580. }
  12581. } else {
  12582. var disc = b * b - 4 * a * c;
  12583. if (isAroundZero(disc)) {
  12584. var t1 = -b / (2 * a);
  12585. if (t1 >= 0 && t1 <= 1) {
  12586. roots[n++] = t1;
  12587. }
  12588. } else if (disc > 0) {
  12589. var discSqrt = Math.sqrt(disc);
  12590. var t1 = (-b + discSqrt) / (2 * a);
  12591. var t2 = (-b - discSqrt) / (2 * a);
  12592. if (t1 >= 0 && t1 <= 1) {
  12593. roots[n++] = t1;
  12594. }
  12595. if (t2 >= 0 && t2 <= 1) {
  12596. roots[n++] = t2;
  12597. }
  12598. }
  12599. }
  12600. return n;
  12601. }
  12602. function quadraticExtremum(p0, p1, p2) {
  12603. var divider = p0 + p2 - 2 * p1;
  12604. if (divider === 0) {
  12605. return 0.5;
  12606. } else {
  12607. return (p0 - p1) / divider;
  12608. }
  12609. }
  12610. function quadraticSubdivide(p0, p1, p2, t, out) {
  12611. var p01 = (p1 - p0) * t + p0;
  12612. var p12 = (p2 - p1) * t + p1;
  12613. var p012 = (p12 - p01) * t + p01;
  12614. out[0] = p0;
  12615. out[1] = p01;
  12616. out[2] = p012;
  12617. out[3] = p012;
  12618. out[4] = p12;
  12619. out[5] = p2;
  12620. }
  12621. function quadraticProjectPoint(x0, y0, x1, y1, x2, y2, x, y, out) {
  12622. var t;
  12623. var interval = 0.005;
  12624. var d = Infinity;
  12625. _v0[0] = x;
  12626. _v0[1] = y;
  12627. for (var _t = 0; _t < 1; _t += 0.05) {
  12628. _v1[0] = quadraticAt(x0, x1, x2, _t);
  12629. _v1[1] = quadraticAt(y0, y1, y2, _t);
  12630. var d1 = vector.distSquare(_v0, _v1);
  12631. if (d1 < d) {
  12632. t = _t;
  12633. d = d1;
  12634. }
  12635. }
  12636. d = Infinity;
  12637. for (var i = 0; i < 32; i++) {
  12638. if (interval < EPSILON) {
  12639. break;
  12640. }
  12641. var prev = t - interval;
  12642. var next = t + interval;
  12643. _v1[0] = quadraticAt(x0, x1, x2, prev);
  12644. _v1[1] = quadraticAt(y0, y1, y2, prev);
  12645. var d1 = vector.distSquare(_v1, _v0);
  12646. if (prev >= 0 && d1 < d) {
  12647. t = prev;
  12648. d = d1;
  12649. } else {
  12650. _v2[0] = quadraticAt(x0, x1, x2, next);
  12651. _v2[1] = quadraticAt(y0, y1, y2, next);
  12652. var d2 = vector.distSquare(_v2, _v0);
  12653. if (next <= 1 && d2 < d) {
  12654. t = next;
  12655. d = d2;
  12656. } else {
  12657. interval *= 0.5;
  12658. }
  12659. }
  12660. }
  12661. if (out) {
  12662. out[0] = quadraticAt(x0, x1, x2, t);
  12663. out[1] = quadraticAt(y0, y1, y2, t);
  12664. }
  12665. return Math.sqrt(d);
  12666. }
  12667. return {
  12668. cubicAt: cubicAt,
  12669. cubicDerivativeAt: cubicDerivativeAt,
  12670. cubicRootAt: cubicRootAt,
  12671. cubicExtrema: cubicExtrema,
  12672. cubicSubdivide: cubicSubdivide,
  12673. cubicProjectPoint: cubicProjectPoint,
  12674. quadraticAt: quadraticAt,
  12675. quadraticDerivativeAt: quadraticDerivativeAt,
  12676. quadraticRootAt: quadraticRootAt,
  12677. quadraticExtremum: quadraticExtremum,
  12678. quadraticSubdivide: quadraticSubdivide,
  12679. quadraticProjectPoint: quadraticProjectPoint
  12680. };
  12681. });define('zrender/mixin/Transformable', [
  12682. 'require',
  12683. '../tool/matrix',
  12684. '../tool/vector'
  12685. ], function (require) {
  12686. 'use strict';
  12687. var matrix = require('../tool/matrix');
  12688. var vector = require('../tool/vector');
  12689. var origin = [
  12690. 0,
  12691. 0
  12692. ];
  12693. var mTranslate = matrix.translate;
  12694. var EPSILON = 0.00005;
  12695. function isAroundZero(val) {
  12696. return val > -EPSILON && val < EPSILON;
  12697. }
  12698. function isNotAroundZero(val) {
  12699. return val > EPSILON || val < -EPSILON;
  12700. }
  12701. var Transformable = function () {
  12702. if (!this.position) {
  12703. this.position = [
  12704. 0,
  12705. 0
  12706. ];
  12707. }
  12708. if (typeof this.rotation == 'undefined') {
  12709. this.rotation = [
  12710. 0,
  12711. 0,
  12712. 0
  12713. ];
  12714. }
  12715. if (!this.scale) {
  12716. this.scale = [
  12717. 1,
  12718. 1,
  12719. 0,
  12720. 0
  12721. ];
  12722. }
  12723. this.needLocalTransform = false;
  12724. this.needTransform = false;
  12725. };
  12726. Transformable.prototype = {
  12727. constructor: Transformable,
  12728. updateNeedTransform: function () {
  12729. this.needLocalTransform = isNotAroundZero(this.rotation[0]) || isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1]) || isNotAroundZero(this.scale[0] - 1) || isNotAroundZero(this.scale[1] - 1);
  12730. },
  12731. updateTransform: function () {
  12732. this.updateNeedTransform();
  12733. var parentHasTransform = this.parent && this.parent.needTransform;
  12734. this.needTransform = this.needLocalTransform || parentHasTransform;
  12735. if (!this.needTransform) {
  12736. return;
  12737. }
  12738. var m = this.transform || matrix.create();
  12739. matrix.identity(m);
  12740. if (this.needLocalTransform) {
  12741. var scale = this.scale;
  12742. if (isNotAroundZero(scale[0]) || isNotAroundZero(scale[1])) {
  12743. origin[0] = -scale[2] || 0;
  12744. origin[1] = -scale[3] || 0;
  12745. var haveOrigin = isNotAroundZero(origin[0]) || isNotAroundZero(origin[1]);
  12746. if (haveOrigin) {
  12747. mTranslate(m, m, origin);
  12748. }
  12749. matrix.scale(m, m, scale);
  12750. if (haveOrigin) {
  12751. origin[0] = -origin[0];
  12752. origin[1] = -origin[1];
  12753. mTranslate(m, m, origin);
  12754. }
  12755. }
  12756. if (this.rotation instanceof Array) {
  12757. if (this.rotation[0] !== 0) {
  12758. origin[0] = -this.rotation[1] || 0;
  12759. origin[1] = -this.rotation[2] || 0;
  12760. var haveOrigin = isNotAroundZero(origin[0]) || isNotAroundZero(origin[1]);
  12761. if (haveOrigin) {
  12762. mTranslate(m, m, origin);
  12763. }
  12764. matrix.rotate(m, m, this.rotation[0]);
  12765. if (haveOrigin) {
  12766. origin[0] = -origin[0];
  12767. origin[1] = -origin[1];
  12768. mTranslate(m, m, origin);
  12769. }
  12770. }
  12771. } else {
  12772. if (this.rotation !== 0) {
  12773. matrix.rotate(m, m, this.rotation);
  12774. }
  12775. }
  12776. if (isNotAroundZero(this.position[0]) || isNotAroundZero(this.position[1])) {
  12777. mTranslate(m, m, this.position);
  12778. }
  12779. }
  12780. if (parentHasTransform) {
  12781. if (this.needLocalTransform) {
  12782. matrix.mul(m, this.parent.transform, m);
  12783. } else {
  12784. matrix.copy(m, this.parent.transform);
  12785. }
  12786. }
  12787. this.transform = m;
  12788. this.invTransform = this.invTransform || matrix.create();
  12789. matrix.invert(this.invTransform, m);
  12790. },
  12791. setTransform: function (ctx) {
  12792. if (this.needTransform) {
  12793. var m = this.transform;
  12794. ctx.transform(m[0], m[1], m[2], m[3], m[4], m[5]);
  12795. }
  12796. },
  12797. lookAt: function () {
  12798. var v = vector.create();
  12799. return function (target) {
  12800. if (!this.transform) {
  12801. this.transform = matrix.create();
  12802. }
  12803. var m = this.transform;
  12804. vector.sub(v, target, this.position);
  12805. if (isAroundZero(v[0]) && isAroundZero(v[1])) {
  12806. return;
  12807. }
  12808. vector.normalize(v, v);
  12809. var scale = this.scale;
  12810. m[2] = v[0] * scale[1];
  12811. m[3] = v[1] * scale[1];
  12812. m[0] = v[1] * scale[0];
  12813. m[1] = -v[0] * scale[0];
  12814. m[4] = this.position[0];
  12815. m[5] = this.position[1];
  12816. this.decomposeTransform();
  12817. };
  12818. }(),
  12819. decomposeTransform: function () {
  12820. if (!this.transform) {
  12821. return;
  12822. }
  12823. var m = this.transform;
  12824. var sx = m[0] * m[0] + m[1] * m[1];
  12825. var position = this.position;
  12826. var scale = this.scale;
  12827. var rotation = this.rotation;
  12828. if (isNotAroundZero(sx - 1)) {
  12829. sx = Math.sqrt(sx);
  12830. }
  12831. var sy = m[2] * m[2] + m[3] * m[3];
  12832. if (isNotAroundZero(sy - 1)) {
  12833. sy = Math.sqrt(sy);
  12834. }
  12835. position[0] = m[4];
  12836. position[1] = m[5];
  12837. scale[0] = sx;
  12838. scale[1] = sy;
  12839. scale[2] = scale[3] = 0;
  12840. rotation[0] = Math.atan2(-m[1] / sy, m[0] / sx);
  12841. rotation[1] = rotation[2] = 0;
  12842. },
  12843. transformCoordToLocal: function (x, y) {
  12844. var v2 = [
  12845. x,
  12846. y
  12847. ];
  12848. if (this.needTransform && this.invTransform) {
  12849. vector.applyTransform(v2, v2, this.invTransform);
  12850. }
  12851. return v2;
  12852. }
  12853. };
  12854. return Transformable;
  12855. });define('zrender/Group', [
  12856. 'require',
  12857. './tool/guid',
  12858. './tool/util',
  12859. './mixin/Transformable',
  12860. './mixin/Eventful'
  12861. ], function (require) {
  12862. var guid = require('./tool/guid');
  12863. var util = require('./tool/util');
  12864. var Transformable = require('./mixin/Transformable');
  12865. var Eventful = require('./mixin/Eventful');
  12866. var Group = function (options) {
  12867. options = options || {};
  12868. this.id = options.id || guid();
  12869. for (var key in options) {
  12870. this[key] = options[key];
  12871. }
  12872. this.type = 'group';
  12873. this.clipShape = null;
  12874. this._children = [];
  12875. this._storage = null;
  12876. this.__dirty = true;
  12877. Transformable.call(this);
  12878. Eventful.call(this);
  12879. };
  12880. Group.prototype.ignore = false;
  12881. Group.prototype.children = function () {
  12882. return this._children.slice();
  12883. };
  12884. Group.prototype.childAt = function (idx) {
  12885. return this._children[idx];
  12886. };
  12887. Group.prototype.addChild = function (child) {
  12888. if (child == this) {
  12889. return;
  12890. }
  12891. if (child.parent == this) {
  12892. return;
  12893. }
  12894. if (child.parent) {
  12895. child.parent.removeChild(child);
  12896. }
  12897. this._children.push(child);
  12898. child.parent = this;
  12899. if (this._storage && this._storage !== child._storage) {
  12900. this._storage.addToMap(child);
  12901. if (child instanceof Group) {
  12902. child.addChildrenToStorage(this._storage);
  12903. }
  12904. }
  12905. };
  12906. Group.prototype.removeChild = function (child) {
  12907. var idx = util.indexOf(this._children, child);
  12908. if (idx >= 0) {
  12909. this._children.splice(idx, 1);
  12910. }
  12911. child.parent = null;
  12912. if (this._storage) {
  12913. this._storage.delFromMap(child.id);
  12914. if (child instanceof Group) {
  12915. child.delChildrenFromStorage(this._storage);
  12916. }
  12917. }
  12918. };
  12919. Group.prototype.clearChildren = function () {
  12920. for (var i = 0; i < this._children.length; i++) {
  12921. var child = this._children[i];
  12922. if (this._storage) {
  12923. this._storage.delFromMap(child.id);
  12924. if (child instanceof Group) {
  12925. child.delChildrenFromStorage(this._storage);
  12926. }
  12927. }
  12928. }
  12929. this._children.length = 0;
  12930. };
  12931. Group.prototype.eachChild = function (cb, context) {
  12932. var haveContext = !!context;
  12933. for (var i = 0; i < this._children.length; i++) {
  12934. var child = this._children[i];
  12935. if (haveContext) {
  12936. cb.call(context, child);
  12937. } else {
  12938. cb(child);
  12939. }
  12940. }
  12941. };
  12942. Group.prototype.traverse = function (cb, context) {
  12943. var haveContext = !!context;
  12944. for (var i = 0; i < this._children.length; i++) {
  12945. var child = this._children[i];
  12946. if (haveContext) {
  12947. cb.call(context, child);
  12948. } else {
  12949. cb(child);
  12950. }
  12951. if (child.type === 'group') {
  12952. child.traverse(cb, context);
  12953. }
  12954. }
  12955. };
  12956. Group.prototype.addChildrenToStorage = function (storage) {
  12957. for (var i = 0; i < this._children.length; i++) {
  12958. var child = this._children[i];
  12959. storage.addToMap(child);
  12960. if (child instanceof Group) {
  12961. child.addChildrenToStorage(storage);
  12962. }
  12963. }
  12964. };
  12965. Group.prototype.delChildrenFromStorage = function (storage) {
  12966. for (var i = 0; i < this._children.length; i++) {
  12967. var child = this._children[i];
  12968. storage.delFromMap(child.id);
  12969. if (child instanceof Group) {
  12970. child.delChildrenFromStorage(storage);
  12971. }
  12972. }
  12973. };
  12974. Group.prototype.modSelf = function () {
  12975. this.__dirty = true;
  12976. };
  12977. util.merge(Group.prototype, Transformable.prototype, true);
  12978. util.merge(Group.prototype, Eventful.prototype, true);
  12979. return Group;
  12980. });define('zrender/animation/Clip', [
  12981. 'require',
  12982. './easing'
  12983. ], function (require) {
  12984. var Easing = require('./easing');
  12985. function Clip(options) {
  12986. this._targetPool = options.target || {};
  12987. if (!(this._targetPool instanceof Array)) {
  12988. this._targetPool = [this._targetPool];
  12989. }
  12990. this._life = options.life || 1000;
  12991. this._delay = options.delay || 0;
  12992. this._startTime = new Date().getTime() + this._delay;
  12993. this._endTime = this._startTime + this._life * 1000;
  12994. this.loop = typeof options.loop == 'undefined' ? false : options.loop;
  12995. this.gap = options.gap || 0;
  12996. this.easing = options.easing || 'Linear';
  12997. this.onframe = options.onframe;
  12998. this.ondestroy = options.ondestroy;
  12999. this.onrestart = options.onrestart;
  13000. }
  13001. Clip.prototype = {
  13002. step: function (time) {
  13003. var percent = (time - this._startTime) / this._life;
  13004. if (percent < 0) {
  13005. return;
  13006. }
  13007. percent = Math.min(percent, 1);
  13008. var easingFunc = typeof this.easing == 'string' ? Easing[this.easing] : this.easing;
  13009. var schedule = typeof easingFunc === 'function' ? easingFunc(percent) : percent;
  13010. this.fire('frame', schedule);
  13011. if (percent == 1) {
  13012. if (this.loop) {
  13013. this.restart();
  13014. return 'restart';
  13015. }
  13016. this.__needsRemove = true;
  13017. return 'destroy';
  13018. }
  13019. return null;
  13020. },
  13021. restart: function () {
  13022. var time = new Date().getTime();
  13023. var remainder = (time - this._startTime) % this._life;
  13024. this._startTime = new Date().getTime() - remainder + this.gap;
  13025. this.__needsRemove = false;
  13026. },
  13027. fire: function (eventType, arg) {
  13028. for (var i = 0, len = this._targetPool.length; i < len; i++) {
  13029. if (this['on' + eventType]) {
  13030. this['on' + eventType](this._targetPool[i], arg);
  13031. }
  13032. }
  13033. },
  13034. constructor: Clip
  13035. };
  13036. return Clip;
  13037. });define('zrender/animation/easing', [], function () {
  13038. var easing = {
  13039. Linear: function (k) {
  13040. return k;
  13041. },
  13042. QuadraticIn: function (k) {
  13043. return k * k;
  13044. },
  13045. QuadraticOut: function (k) {
  13046. return k * (2 - k);
  13047. },
  13048. QuadraticInOut: function (k) {
  13049. if ((k *= 2) < 1) {
  13050. return 0.5 * k * k;
  13051. }
  13052. return -0.5 * (--k * (k - 2) - 1);
  13053. },
  13054. CubicIn: function (k) {
  13055. return k * k * k;
  13056. },
  13057. CubicOut: function (k) {
  13058. return --k * k * k + 1;
  13059. },
  13060. CubicInOut: function (k) {
  13061. if ((k *= 2) < 1) {
  13062. return 0.5 * k * k * k;
  13063. }
  13064. return 0.5 * ((k -= 2) * k * k + 2);
  13065. },
  13066. QuarticIn: function (k) {
  13067. return k * k * k * k;
  13068. },
  13069. QuarticOut: function (k) {
  13070. return 1 - --k * k * k * k;
  13071. },
  13072. QuarticInOut: function (k) {
  13073. if ((k *= 2) < 1) {
  13074. return 0.5 * k * k * k * k;
  13075. }
  13076. return -0.5 * ((k -= 2) * k * k * k - 2);
  13077. },
  13078. QuinticIn: function (k) {
  13079. return k * k * k * k * k;
  13080. },
  13081. QuinticOut: function (k) {
  13082. return --k * k * k * k * k + 1;
  13083. },
  13084. QuinticInOut: function (k) {
  13085. if ((k *= 2) < 1) {
  13086. return 0.5 * k * k * k * k * k;
  13087. }
  13088. return 0.5 * ((k -= 2) * k * k * k * k + 2);
  13089. },
  13090. SinusoidalIn: function (k) {
  13091. return 1 - Math.cos(k * Math.PI / 2);
  13092. },
  13093. SinusoidalOut: function (k) {
  13094. return Math.sin(k * Math.PI / 2);
  13095. },
  13096. SinusoidalInOut: function (k) {
  13097. return 0.5 * (1 - Math.cos(Math.PI * k));
  13098. },
  13099. ExponentialIn: function (k) {
  13100. return k === 0 ? 0 : Math.pow(1024, k - 1);
  13101. },
  13102. ExponentialOut: function (k) {
  13103. return k === 1 ? 1 : 1 - Math.pow(2, -10 * k);
  13104. },
  13105. ExponentialInOut: function (k) {
  13106. if (k === 0) {
  13107. return 0;
  13108. }
  13109. if (k === 1) {
  13110. return 1;
  13111. }
  13112. if ((k *= 2) < 1) {
  13113. return 0.5 * Math.pow(1024, k - 1);
  13114. }
  13115. return 0.5 * (-Math.pow(2, -10 * (k - 1)) + 2);
  13116. },
  13117. CircularIn: function (k) {
  13118. return 1 - Math.sqrt(1 - k * k);
  13119. },
  13120. CircularOut: function (k) {
  13121. return Math.sqrt(1 - --k * k);
  13122. },
  13123. CircularInOut: function (k) {
  13124. if ((k *= 2) < 1) {
  13125. return -0.5 * (Math.sqrt(1 - k * k) - 1);
  13126. }
  13127. return 0.5 * (Math.sqrt(1 - (k -= 2) * k) + 1);
  13128. },
  13129. ElasticIn: function (k) {
  13130. var s;
  13131. var a = 0.1;
  13132. var p = 0.4;
  13133. if (k === 0) {
  13134. return 0;
  13135. }
  13136. if (k === 1) {
  13137. return 1;
  13138. }
  13139. if (!a || a < 1) {
  13140. a = 1;
  13141. s = p / 4;
  13142. } else {
  13143. s = p * Math.asin(1 / a) / (2 * Math.PI);
  13144. }
  13145. return -(a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
  13146. },
  13147. ElasticOut: function (k) {
  13148. var s;
  13149. var a = 0.1;
  13150. var p = 0.4;
  13151. if (k === 0) {
  13152. return 0;
  13153. }
  13154. if (k === 1) {
  13155. return 1;
  13156. }
  13157. if (!a || a < 1) {
  13158. a = 1;
  13159. s = p / 4;
  13160. } else {
  13161. s = p * Math.asin(1 / a) / (2 * Math.PI);
  13162. }
  13163. return a * Math.pow(2, -10 * k) * Math.sin((k - s) * (2 * Math.PI) / p) + 1;
  13164. },
  13165. ElasticInOut: function (k) {
  13166. var s;
  13167. var a = 0.1;
  13168. var p = 0.4;
  13169. if (k === 0) {
  13170. return 0;
  13171. }
  13172. if (k === 1) {
  13173. return 1;
  13174. }
  13175. if (!a || a < 1) {
  13176. a = 1;
  13177. s = p / 4;
  13178. } else {
  13179. s = p * Math.asin(1 / a) / (2 * Math.PI);
  13180. }
  13181. if ((k *= 2) < 1) {
  13182. return -0.5 * (a * Math.pow(2, 10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p));
  13183. }
  13184. return a * Math.pow(2, -10 * (k -= 1)) * Math.sin((k - s) * (2 * Math.PI) / p) * 0.5 + 1;
  13185. },
  13186. BackIn: function (k) {
  13187. var s = 1.70158;
  13188. return k * k * ((s + 1) * k - s);
  13189. },
  13190. BackOut: function (k) {
  13191. var s = 1.70158;
  13192. return --k * k * ((s + 1) * k + s) + 1;
  13193. },
  13194. BackInOut: function (k) {
  13195. var s = 1.70158 * 1.525;
  13196. if ((k *= 2) < 1) {
  13197. return 0.5 * (k * k * ((s + 1) * k - s));
  13198. }
  13199. return 0.5 * ((k -= 2) * k * ((s + 1) * k + s) + 2);
  13200. },
  13201. BounceIn: function (k) {
  13202. return 1 - easing.BounceOut(1 - k);
  13203. },
  13204. BounceOut: function (k) {
  13205. if (k < 1 / 2.75) {
  13206. return 7.5625 * k * k;
  13207. } else if (k < 2 / 2.75) {
  13208. return 7.5625 * (k -= 1.5 / 2.75) * k + 0.75;
  13209. } else if (k < 2.5 / 2.75) {
  13210. return 7.5625 * (k -= 2.25 / 2.75) * k + 0.9375;
  13211. } else {
  13212. return 7.5625 * (k -= 2.625 / 2.75) * k + 0.984375;
  13213. }
  13214. },
  13215. BounceInOut: function (k) {
  13216. if (k < 0.5) {
  13217. return easing.BounceIn(k * 2) * 0.5;
  13218. }
  13219. return easing.BounceOut(k * 2 - 1) * 0.5 + 0.5;
  13220. }
  13221. };
  13222. return easing;
  13223. });define('echarts/chart/base', [
  13224. 'require',
  13225. 'zrender/shape/Image',
  13226. '../util/shape/Icon',
  13227. '../util/shape/MarkLine',
  13228. '../util/shape/Symbol',
  13229. 'zrender/shape/Polyline',
  13230. 'zrender/shape/ShapeBundle',
  13231. '../config',
  13232. '../util/ecData',
  13233. '../util/ecAnimation',
  13234. '../util/ecEffect',
  13235. '../util/accMath',
  13236. '../component/base',
  13237. '../layout/EdgeBundling',
  13238. 'zrender/tool/util',
  13239. 'zrender/tool/area'
  13240. ], function (require) {
  13241. var ImageShape = require('zrender/shape/Image');
  13242. var IconShape = require('../util/shape/Icon');
  13243. var MarkLineShape = require('../util/shape/MarkLine');
  13244. var SymbolShape = require('../util/shape/Symbol');
  13245. var PolylineShape = require('zrender/shape/Polyline');
  13246. var ShapeBundle = require('zrender/shape/ShapeBundle');
  13247. var ecConfig = require('../config');
  13248. var ecData = require('../util/ecData');
  13249. var ecAnimation = require('../util/ecAnimation');
  13250. var ecEffect = require('../util/ecEffect');
  13251. var accMath = require('../util/accMath');
  13252. var ComponentBase = require('../component/base');
  13253. var EdgeBundling = require('../layout/EdgeBundling');
  13254. var zrUtil = require('zrender/tool/util');
  13255. var zrArea = require('zrender/tool/area');
  13256. function isCoordAvailable(coord) {
  13257. return coord.x != null && coord.y != null;
  13258. }
  13259. function Base(ecTheme, messageCenter, zr, option, myChart) {
  13260. ComponentBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  13261. var self = this;
  13262. this.selectedMap = {};
  13263. this.lastShapeList = [];
  13264. this.shapeHandler = {
  13265. onclick: function () {
  13266. self.isClick = true;
  13267. },
  13268. ondragover: function (param) {
  13269. var calculableShape = param.target;
  13270. calculableShape.highlightStyle = calculableShape.highlightStyle || {};
  13271. var highlightStyle = calculableShape.highlightStyle;
  13272. var brushType = highlightStyle.brushTyep;
  13273. var strokeColor = highlightStyle.strokeColor;
  13274. var lineWidth = highlightStyle.lineWidth;
  13275. highlightStyle.brushType = 'stroke';
  13276. highlightStyle.strokeColor = self.ecTheme.calculableColor || ecConfig.calculableColor;
  13277. highlightStyle.lineWidth = calculableShape.type === 'icon' ? 30 : 10;
  13278. self.zr.addHoverShape(calculableShape);
  13279. setTimeout(function () {
  13280. if (highlightStyle) {
  13281. highlightStyle.brushType = brushType;
  13282. highlightStyle.strokeColor = strokeColor;
  13283. highlightStyle.lineWidth = lineWidth;
  13284. }
  13285. }, 20);
  13286. },
  13287. ondrop: function (param) {
  13288. if (ecData.get(param.dragged, 'data') != null) {
  13289. self.isDrop = true;
  13290. }
  13291. },
  13292. ondragend: function () {
  13293. self.isDragend = true;
  13294. }
  13295. };
  13296. }
  13297. Base.prototype = {
  13298. setCalculable: function (shape) {
  13299. shape.dragEnableTime = this.ecTheme.DRAG_ENABLE_TIME || ecConfig.DRAG_ENABLE_TIME;
  13300. shape.ondragover = this.shapeHandler.ondragover;
  13301. shape.ondragend = this.shapeHandler.ondragend;
  13302. shape.ondrop = this.shapeHandler.ondrop;
  13303. return shape;
  13304. },
  13305. ondrop: function (param, status) {
  13306. if (!this.isDrop || !param.target || status.dragIn) {
  13307. return;
  13308. }
  13309. var target = param.target;
  13310. var dragged = param.dragged;
  13311. var seriesIndex = ecData.get(target, 'seriesIndex');
  13312. var dataIndex = ecData.get(target, 'dataIndex');
  13313. var series = this.series;
  13314. var data;
  13315. var legend = this.component.legend;
  13316. if (dataIndex === -1) {
  13317. if (ecData.get(dragged, 'seriesIndex') == seriesIndex) {
  13318. status.dragOut = status.dragIn = status.needRefresh = true;
  13319. this.isDrop = false;
  13320. return;
  13321. }
  13322. data = {
  13323. value: ecData.get(dragged, 'value'),
  13324. name: ecData.get(dragged, 'name')
  13325. };
  13326. if (this.type === ecConfig.CHART_TYPE_PIE && data.value < 0) {
  13327. data.value = 0;
  13328. }
  13329. var hasFind = false;
  13330. var sData = series[seriesIndex].data;
  13331. for (var i = 0, l = sData.length; i < l; i++) {
  13332. if (sData[i].name === data.name && sData[i].value === '-') {
  13333. series[seriesIndex].data[i].value = data.value;
  13334. hasFind = true;
  13335. }
  13336. }
  13337. !hasFind && series[seriesIndex].data.push(data);
  13338. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  13339. } else {
  13340. data = series[seriesIndex].data[dataIndex] || '-';
  13341. if (data.value != null) {
  13342. if (data.value != '-') {
  13343. series[seriesIndex].data[dataIndex].value = accMath.accAdd(series[seriesIndex].data[dataIndex].value, ecData.get(dragged, 'value'));
  13344. } else {
  13345. series[seriesIndex].data[dataIndex].value = ecData.get(dragged, 'value');
  13346. }
  13347. if (this.type === ecConfig.CHART_TYPE_FUNNEL || this.type === ecConfig.CHART_TYPE_PIE) {
  13348. legend && legend.getRelatedAmount(data.name) === 1 && this.component.legend.del(data.name);
  13349. data.name += this.option.nameConnector + ecData.get(dragged, 'name');
  13350. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  13351. }
  13352. } else {
  13353. if (data != '-') {
  13354. series[seriesIndex].data[dataIndex] = accMath.accAdd(series[seriesIndex].data[dataIndex], ecData.get(dragged, 'value'));
  13355. } else {
  13356. series[seriesIndex].data[dataIndex] = ecData.get(dragged, 'value');
  13357. }
  13358. }
  13359. }
  13360. status.dragIn = status.dragIn || true;
  13361. this.isDrop = false;
  13362. var self = this;
  13363. setTimeout(function () {
  13364. self.zr.trigger('mousemove', param.event);
  13365. }, 300);
  13366. return;
  13367. },
  13368. ondragend: function (param, status) {
  13369. if (!this.isDragend || !param.target || status.dragOut) {
  13370. return;
  13371. }
  13372. var target = param.target;
  13373. var seriesIndex = ecData.get(target, 'seriesIndex');
  13374. var dataIndex = ecData.get(target, 'dataIndex');
  13375. var series = this.series;
  13376. if (series[seriesIndex].data[dataIndex].value != null) {
  13377. series[seriesIndex].data[dataIndex].value = '-';
  13378. var name = series[seriesIndex].data[dataIndex].name;
  13379. var legend = this.component.legend;
  13380. if (legend && legend.getRelatedAmount(name) === 0) {
  13381. legend.del(name);
  13382. }
  13383. } else {
  13384. series[seriesIndex].data[dataIndex] = '-';
  13385. }
  13386. status.dragOut = true;
  13387. status.needRefresh = true;
  13388. this.isDragend = false;
  13389. return;
  13390. },
  13391. onlegendSelected: function (param, status) {
  13392. var legendSelected = param.selected;
  13393. for (var itemName in this.selectedMap) {
  13394. if (this.selectedMap[itemName] != legendSelected[itemName]) {
  13395. status.needRefresh = true;
  13396. }
  13397. this.selectedMap[itemName] = legendSelected[itemName];
  13398. }
  13399. return;
  13400. },
  13401. _buildPosition: function () {
  13402. this._symbol = this.option.symbolList;
  13403. this._sIndex2ShapeMap = {};
  13404. this._sIndex2ColorMap = {};
  13405. this.selectedMap = {};
  13406. this.xMarkMap = {};
  13407. var series = this.series;
  13408. var _position2sIndexMap = {
  13409. top: [],
  13410. bottom: [],
  13411. left: [],
  13412. right: [],
  13413. other: []
  13414. };
  13415. var xAxisIndex;
  13416. var yAxisIndex;
  13417. var xAxis;
  13418. var yAxis;
  13419. for (var i = 0, l = series.length; i < l; i++) {
  13420. if (series[i].type === this.type) {
  13421. series[i] = this.reformOption(series[i]);
  13422. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  13423. xAxisIndex = series[i].xAxisIndex;
  13424. yAxisIndex = series[i].yAxisIndex;
  13425. xAxis = this.component.xAxis.getAxis(xAxisIndex);
  13426. yAxis = this.component.yAxis.getAxis(yAxisIndex);
  13427. if (xAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  13428. _position2sIndexMap[xAxis.getPosition()].push(i);
  13429. } else if (yAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  13430. _position2sIndexMap[yAxis.getPosition()].push(i);
  13431. } else {
  13432. _position2sIndexMap.other.push(i);
  13433. }
  13434. }
  13435. }
  13436. for (var position in _position2sIndexMap) {
  13437. if (_position2sIndexMap[position].length > 0) {
  13438. this._buildSinglePosition(position, _position2sIndexMap[position]);
  13439. }
  13440. }
  13441. this.addShapeList();
  13442. },
  13443. _buildSinglePosition: function (position, seriesArray) {
  13444. var mapData = this._mapData(seriesArray);
  13445. var locationMap = mapData.locationMap;
  13446. var maxDataLength = mapData.maxDataLength;
  13447. if (maxDataLength === 0 || locationMap.length === 0) {
  13448. return;
  13449. }
  13450. switch (position) {
  13451. case 'bottom':
  13452. case 'top':
  13453. this._buildHorizontal(seriesArray, maxDataLength, locationMap, this.xMarkMap);
  13454. break;
  13455. case 'left':
  13456. case 'right':
  13457. this._buildVertical(seriesArray, maxDataLength, locationMap, this.xMarkMap);
  13458. break;
  13459. case 'other':
  13460. this._buildOther(seriesArray, maxDataLength, locationMap, this.xMarkMap);
  13461. break;
  13462. }
  13463. for (var i = 0, l = seriesArray.length; i < l; i++) {
  13464. this.buildMark(seriesArray[i]);
  13465. }
  13466. },
  13467. _mapData: function (seriesArray) {
  13468. var series = this.series;
  13469. var serie;
  13470. var dataIndex = 0;
  13471. var stackMap = {};
  13472. var magicStackKey = '__kener__stack__';
  13473. var stackKey;
  13474. var serieName;
  13475. var legend = this.component.legend;
  13476. var locationMap = [];
  13477. var maxDataLength = 0;
  13478. var iconShape;
  13479. for (var i = 0, l = seriesArray.length; i < l; i++) {
  13480. serie = series[seriesArray[i]];
  13481. serieName = serie.name;
  13482. this._sIndex2ShapeMap[seriesArray[i]] = this._sIndex2ShapeMap[seriesArray[i]] || this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
  13483. if (legend) {
  13484. this.selectedMap[serieName] = legend.isSelected(serieName);
  13485. this._sIndex2ColorMap[seriesArray[i]] = legend.getColor(serieName);
  13486. iconShape = legend.getItemShape(serieName);
  13487. if (iconShape) {
  13488. var style = iconShape.style;
  13489. if (this.type == ecConfig.CHART_TYPE_LINE) {
  13490. style.iconType = 'legendLineIcon';
  13491. style.symbol = this._sIndex2ShapeMap[seriesArray[i]];
  13492. } else if (serie.itemStyle.normal.barBorderWidth > 0) {
  13493. var highlightStyle = iconShape.highlightStyle;
  13494. style.brushType = 'both';
  13495. style.x += 1;
  13496. style.y += 1;
  13497. style.width -= 2;
  13498. style.height -= 2;
  13499. style.strokeColor = highlightStyle.strokeColor = serie.itemStyle.normal.barBorderColor;
  13500. highlightStyle.lineWidth = 3;
  13501. }
  13502. legend.setItemShape(serieName, iconShape);
  13503. }
  13504. } else {
  13505. this.selectedMap[serieName] = true;
  13506. this._sIndex2ColorMap[seriesArray[i]] = this.zr.getColor(seriesArray[i]);
  13507. }
  13508. if (this.selectedMap[serieName]) {
  13509. stackKey = serie.stack || magicStackKey + seriesArray[i];
  13510. if (stackMap[stackKey] == null) {
  13511. stackMap[stackKey] = dataIndex;
  13512. locationMap[dataIndex] = [seriesArray[i]];
  13513. dataIndex++;
  13514. } else {
  13515. locationMap[stackMap[stackKey]].push(seriesArray[i]);
  13516. }
  13517. }
  13518. maxDataLength = Math.max(maxDataLength, serie.data.length);
  13519. }
  13520. return {
  13521. locationMap: locationMap,
  13522. maxDataLength: maxDataLength
  13523. };
  13524. },
  13525. _calculMarkMapXY: function (xMarkMap, locationMap, xy) {
  13526. var series = this.series;
  13527. for (var j = 0, k = locationMap.length; j < k; j++) {
  13528. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  13529. var seriesIndex = locationMap[j][m];
  13530. var valueIndex = xy == 'xy' ? 0 : '';
  13531. var grid = this.component.grid;
  13532. var tarMark = xMarkMap[seriesIndex];
  13533. if (xy.indexOf('x') != '-1') {
  13534. if (tarMark['counter' + valueIndex] > 0) {
  13535. tarMark['average' + valueIndex] = tarMark['sum' + valueIndex] / tarMark['counter' + valueIndex];
  13536. }
  13537. var x = this.component.xAxis.getAxis(series[seriesIndex].xAxisIndex || 0).getCoord(tarMark['average' + valueIndex]);
  13538. tarMark['averageLine' + valueIndex] = [
  13539. [
  13540. x,
  13541. grid.getYend()
  13542. ],
  13543. [
  13544. x,
  13545. grid.getY()
  13546. ]
  13547. ];
  13548. tarMark['minLine' + valueIndex] = [
  13549. [
  13550. tarMark['minX' + valueIndex],
  13551. grid.getYend()
  13552. ],
  13553. [
  13554. tarMark['minX' + valueIndex],
  13555. grid.getY()
  13556. ]
  13557. ];
  13558. tarMark['maxLine' + valueIndex] = [
  13559. [
  13560. tarMark['maxX' + valueIndex],
  13561. grid.getYend()
  13562. ],
  13563. [
  13564. tarMark['maxX' + valueIndex],
  13565. grid.getY()
  13566. ]
  13567. ];
  13568. tarMark.isHorizontal = false;
  13569. }
  13570. valueIndex = xy == 'xy' ? 1 : '';
  13571. if (xy.indexOf('y') != '-1') {
  13572. if (tarMark['counter' + valueIndex] > 0) {
  13573. tarMark['average' + valueIndex] = tarMark['sum' + valueIndex] / tarMark['counter' + valueIndex];
  13574. }
  13575. var y = this.component.yAxis.getAxis(series[seriesIndex].yAxisIndex || 0).getCoord(tarMark['average' + valueIndex]);
  13576. tarMark['averageLine' + valueIndex] = [
  13577. [
  13578. grid.getX(),
  13579. y
  13580. ],
  13581. [
  13582. grid.getXend(),
  13583. y
  13584. ]
  13585. ];
  13586. tarMark['minLine' + valueIndex] = [
  13587. [
  13588. grid.getX(),
  13589. tarMark['minY' + valueIndex]
  13590. ],
  13591. [
  13592. grid.getXend(),
  13593. tarMark['minY' + valueIndex]
  13594. ]
  13595. ];
  13596. tarMark['maxLine' + valueIndex] = [
  13597. [
  13598. grid.getX(),
  13599. tarMark['maxY' + valueIndex]
  13600. ],
  13601. [
  13602. grid.getXend(),
  13603. tarMark['maxY' + valueIndex]
  13604. ]
  13605. ];
  13606. tarMark.isHorizontal = true;
  13607. }
  13608. }
  13609. }
  13610. },
  13611. addLabel: function (tarShape, serie, data, name, orient) {
  13612. var queryTarget = [
  13613. data,
  13614. serie
  13615. ];
  13616. var nLabel = this.deepMerge(queryTarget, 'itemStyle.normal.label');
  13617. var eLabel = this.deepMerge(queryTarget, 'itemStyle.emphasis.label');
  13618. var nTextStyle = nLabel.textStyle || {};
  13619. var eTextStyle = eLabel.textStyle || {};
  13620. if (nLabel.show) {
  13621. var style = tarShape.style;
  13622. style.text = this._getLabelText(serie, data, name, 'normal');
  13623. style.textPosition = nLabel.position == null ? orient === 'horizontal' ? 'right' : 'top' : nLabel.position;
  13624. style.textColor = nTextStyle.color;
  13625. style.textFont = this.getFont(nTextStyle);
  13626. style.textAlign = nTextStyle.align;
  13627. style.textBaseline = nTextStyle.baseline;
  13628. }
  13629. if (eLabel.show) {
  13630. var highlightStyle = tarShape.highlightStyle;
  13631. highlightStyle.text = this._getLabelText(serie, data, name, 'emphasis');
  13632. highlightStyle.textPosition = nLabel.show ? tarShape.style.textPosition : eLabel.position == null ? orient === 'horizontal' ? 'right' : 'top' : eLabel.position;
  13633. highlightStyle.textColor = eTextStyle.color;
  13634. highlightStyle.textFont = this.getFont(eTextStyle);
  13635. highlightStyle.textAlign = eTextStyle.align;
  13636. highlightStyle.textBaseline = eTextStyle.baseline;
  13637. }
  13638. return tarShape;
  13639. },
  13640. _getLabelText: function (serie, data, name, status) {
  13641. var formatter = this.deepQuery([
  13642. data,
  13643. serie
  13644. ], 'itemStyle.' + status + '.label.formatter');
  13645. if (!formatter && status === 'emphasis') {
  13646. formatter = this.deepQuery([
  13647. data,
  13648. serie
  13649. ], 'itemStyle.normal.label.formatter');
  13650. }
  13651. var value = this.getDataFromOption(data, '-');
  13652. if (formatter) {
  13653. if (typeof formatter === 'function') {
  13654. return formatter.call(this.myChart, {
  13655. seriesName: serie.name,
  13656. series: serie,
  13657. name: name,
  13658. value: value,
  13659. data: data,
  13660. status: status
  13661. });
  13662. } else if (typeof formatter === 'string') {
  13663. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', serie.name).replace('{b0}', name).replace('{c0}', this.numAddCommas(value));
  13664. return formatter;
  13665. }
  13666. } else {
  13667. if (value instanceof Array) {
  13668. return value[2] != null ? this.numAddCommas(value[2]) : value[0] + ' , ' + value[1];
  13669. } else {
  13670. return this.numAddCommas(value);
  13671. }
  13672. }
  13673. },
  13674. buildMark: function (seriesIndex) {
  13675. var serie = this.series[seriesIndex];
  13676. if (this.selectedMap[serie.name]) {
  13677. serie.markLine && this._buildMarkLine(seriesIndex);
  13678. serie.markPoint && this._buildMarkPoint(seriesIndex);
  13679. }
  13680. },
  13681. _buildMarkPoint: function (seriesIndex) {
  13682. var attachStyle = (this.markAttachStyle || {})[seriesIndex];
  13683. var serie = this.series[seriesIndex];
  13684. var mpData;
  13685. var pos;
  13686. var markPoint = zrUtil.clone(serie.markPoint);
  13687. for (var i = 0, l = markPoint.data.length; i < l; i++) {
  13688. mpData = markPoint.data[i];
  13689. pos = this.getMarkCoord(seriesIndex, mpData);
  13690. mpData.x = mpData.x != null ? mpData.x : pos[0];
  13691. mpData.y = mpData.y != null ? mpData.y : pos[1];
  13692. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min')) {
  13693. mpData.value = pos[3];
  13694. mpData.name = mpData.name || mpData.type;
  13695. mpData.symbolSize = mpData.symbolSize || zrArea.getTextWidth(pos[3], this.getFont()) / 2 + 5;
  13696. }
  13697. }
  13698. var shapeList = this._markPoint(seriesIndex, markPoint);
  13699. for (var i = 0, l = shapeList.length; i < l; i++) {
  13700. var tarShape = shapeList[i];
  13701. tarShape.zlevel = serie.zlevel;
  13702. tarShape.z = serie.z + 1;
  13703. for (var key in attachStyle) {
  13704. tarShape[key] = zrUtil.clone(attachStyle[key]);
  13705. }
  13706. this.shapeList.push(tarShape);
  13707. }
  13708. if (this.type === ecConfig.CHART_TYPE_FORCE || this.type === ecConfig.CHART_TYPE_CHORD) {
  13709. for (var i = 0, l = shapeList.length; i < l; i++) {
  13710. this.zr.addShape(shapeList[i]);
  13711. }
  13712. }
  13713. },
  13714. _buildMarkLine: function (seriesIndex) {
  13715. var attachStyle = (this.markAttachStyle || {})[seriesIndex];
  13716. var serie = this.series[seriesIndex];
  13717. var pos;
  13718. var markLine = zrUtil.clone(serie.markLine);
  13719. for (var i = 0, l = markLine.data.length; i < l; i++) {
  13720. var mlData = markLine.data[i];
  13721. if (mlData.type && (mlData.type === 'max' || mlData.type === 'min' || mlData.type === 'average')) {
  13722. pos = this.getMarkCoord(seriesIndex, mlData);
  13723. markLine.data[i] = [
  13724. zrUtil.clone(mlData),
  13725. {}
  13726. ];
  13727. markLine.data[i][0].name = mlData.name || mlData.type;
  13728. markLine.data[i][0].value = mlData.type !== 'average' ? pos[3] : +pos[3].toFixed(markLine.precision != null ? markLine.precision : this.deepQuery([
  13729. this.ecTheme,
  13730. ecConfig
  13731. ], 'markLine.precision'));
  13732. pos = pos[2];
  13733. mlData = [
  13734. {},
  13735. {}
  13736. ];
  13737. } else {
  13738. pos = [
  13739. this.getMarkCoord(seriesIndex, mlData[0]),
  13740. this.getMarkCoord(seriesIndex, mlData[1])
  13741. ];
  13742. }
  13743. if (pos == null || pos[0] == null || pos[1] == null) {
  13744. continue;
  13745. }
  13746. markLine.data[i][0].x = mlData[0].x != null ? mlData[0].x : pos[0][0];
  13747. markLine.data[i][0].y = mlData[0].y != null ? mlData[0].y : pos[0][1];
  13748. markLine.data[i][1].x = mlData[1].x != null ? mlData[1].x : pos[1][0];
  13749. markLine.data[i][1].y = mlData[1].y != null ? mlData[1].y : pos[1][1];
  13750. }
  13751. var shapeList = this._markLine(seriesIndex, markLine);
  13752. var isLarge = markLine.large;
  13753. if (isLarge) {
  13754. var shapeBundle = new ShapeBundle({ style: { shapeList: shapeList } });
  13755. var firstShape = shapeList[0];
  13756. if (firstShape) {
  13757. zrUtil.merge(shapeBundle.style, firstShape.style);
  13758. zrUtil.merge(shapeBundle.highlightStyle = {}, firstShape.highlightStyle);
  13759. shapeBundle.style.brushType = 'stroke';
  13760. shapeBundle.zlevel = serie.zlevel;
  13761. shapeBundle.z = serie.z + 1;
  13762. shapeBundle.hoverable = false;
  13763. for (var key in attachStyle) {
  13764. shapeBundle[key] = zrUtil.clone(attachStyle[key]);
  13765. }
  13766. }
  13767. this.shapeList.push(shapeBundle);
  13768. this.zr.addShape(shapeBundle);
  13769. shapeBundle._mark = 'largeLine';
  13770. var effect = markLine.effect;
  13771. if (effect.show) {
  13772. shapeBundle.effect = effect;
  13773. }
  13774. } else {
  13775. for (var i = 0, l = shapeList.length; i < l; i++) {
  13776. var tarShape = shapeList[i];
  13777. tarShape.zlevel = serie.zlevel;
  13778. tarShape.z = serie.z + 1;
  13779. for (var key in attachStyle) {
  13780. tarShape[key] = zrUtil.clone(attachStyle[key]);
  13781. }
  13782. this.shapeList.push(tarShape);
  13783. }
  13784. if (this.type === ecConfig.CHART_TYPE_FORCE || this.type === ecConfig.CHART_TYPE_CHORD) {
  13785. for (var i = 0, l = shapeList.length; i < l; i++) {
  13786. this.zr.addShape(shapeList[i]);
  13787. }
  13788. }
  13789. }
  13790. },
  13791. _markPoint: function (seriesIndex, mpOption) {
  13792. var serie = this.series[seriesIndex];
  13793. var component = this.component;
  13794. zrUtil.merge(zrUtil.merge(mpOption, zrUtil.clone(this.ecTheme.markPoint || {})), zrUtil.clone(ecConfig.markPoint));
  13795. mpOption.name = serie.name;
  13796. var pList = [];
  13797. var data = mpOption.data;
  13798. var itemShape;
  13799. var dataRange = component.dataRange;
  13800. var legend = component.legend;
  13801. var color;
  13802. var value;
  13803. var queryTarget;
  13804. var nColor;
  13805. var eColor;
  13806. var effect;
  13807. var zrWidth = this.zr.getWidth();
  13808. var zrHeight = this.zr.getHeight();
  13809. if (!mpOption.large) {
  13810. for (var i = 0, l = data.length; i < l; i++) {
  13811. if (data[i].x == null || data[i].y == null) {
  13812. continue;
  13813. }
  13814. value = data[i].value != null ? data[i].value : '';
  13815. if (legend) {
  13816. color = legend.getColor(serie.name);
  13817. }
  13818. if (dataRange) {
  13819. color = isNaN(value) ? color : dataRange.getColor(value);
  13820. queryTarget = [
  13821. data[i],
  13822. mpOption
  13823. ];
  13824. nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
  13825. eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
  13826. if (nColor == null && eColor == null) {
  13827. continue;
  13828. }
  13829. }
  13830. color = color == null ? this.zr.getColor(seriesIndex) : color;
  13831. data[i].tooltip = data[i].tooltip || mpOption.tooltip || { trigger: 'item' };
  13832. data[i].name = data[i].name != null ? data[i].name : '';
  13833. data[i].value = value;
  13834. itemShape = this.getSymbolShape(mpOption, seriesIndex, data[i], i, data[i].name, this.parsePercent(data[i].x, zrWidth), this.parsePercent(data[i].y, zrHeight), 'pin', color, 'rgba(0,0,0,0)', 'horizontal');
  13835. itemShape._mark = 'point';
  13836. effect = this.deepMerge([
  13837. data[i],
  13838. mpOption
  13839. ], 'effect');
  13840. if (effect.show) {
  13841. itemShape.effect = effect;
  13842. }
  13843. if (serie.type === ecConfig.CHART_TYPE_MAP) {
  13844. itemShape._geo = this.getMarkGeo(data[i]);
  13845. }
  13846. ecData.pack(itemShape, serie, seriesIndex, data[i], i, data[i].name, value);
  13847. pList.push(itemShape);
  13848. }
  13849. } else {
  13850. itemShape = this.getLargeMarkPointShape(seriesIndex, mpOption);
  13851. itemShape._mark = 'largePoint';
  13852. itemShape && pList.push(itemShape);
  13853. }
  13854. return pList;
  13855. },
  13856. _markLine: function () {
  13857. function normalizeOptionValue(mlOption, key) {
  13858. mlOption[key] = mlOption[key] instanceof Array ? mlOption[key].length > 1 ? mlOption[key] : [
  13859. mlOption[key][0],
  13860. mlOption[key][0]
  13861. ] : [
  13862. mlOption[key],
  13863. mlOption[key]
  13864. ];
  13865. }
  13866. return function (seriesIndex, mlOption) {
  13867. var serie = this.series[seriesIndex];
  13868. var component = this.component;
  13869. var dataRange = component.dataRange;
  13870. var legend = component.legend;
  13871. zrUtil.merge(zrUtil.merge(mlOption, zrUtil.clone(this.ecTheme.markLine || {})), zrUtil.clone(ecConfig.markLine));
  13872. var defaultColor = legend ? legend.getColor(serie.name) : this.zr.getColor(seriesIndex);
  13873. normalizeOptionValue(mlOption, 'symbol');
  13874. normalizeOptionValue(mlOption, 'symbolSize');
  13875. normalizeOptionValue(mlOption, 'symbolRotate');
  13876. var data = mlOption.data;
  13877. var edges = [];
  13878. var zrWidth = this.zr.getWidth();
  13879. var zrHeight = this.zr.getHeight();
  13880. for (var i = 0; i < data.length; i++) {
  13881. var mlData = data[i];
  13882. if (isCoordAvailable(mlData[0]) && isCoordAvailable(mlData[1])) {
  13883. var mergeData = this.deepMerge(mlData);
  13884. var queryTarget = [
  13885. mergeData,
  13886. mlOption
  13887. ];
  13888. var color = defaultColor;
  13889. var value = mergeData.value != null ? mergeData.value : '';
  13890. if (dataRange) {
  13891. color = isNaN(value) ? color : dataRange.getColor(value);
  13892. var nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
  13893. var eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
  13894. if (nColor == null && eColor == null) {
  13895. continue;
  13896. }
  13897. }
  13898. mlData[0].tooltip = mergeData.tooltip || mlOption.tooltip || { trigger: 'item' };
  13899. mlData[0].name = mlData[0].name || '';
  13900. mlData[1].name = mlData[1].name || '';
  13901. mlData[0].value = value;
  13902. edges.push({
  13903. points: [
  13904. [
  13905. this.parsePercent(mlData[0].x, zrWidth),
  13906. this.parsePercent(mlData[0].y, zrHeight)
  13907. ],
  13908. [
  13909. this.parsePercent(mlData[1].x, zrWidth),
  13910. this.parsePercent(mlData[1].y, zrHeight)
  13911. ]
  13912. ],
  13913. rawData: mlData,
  13914. color: color
  13915. });
  13916. }
  13917. }
  13918. var enableBundling = this.query(mlOption, 'bundling.enable');
  13919. if (enableBundling) {
  13920. var edgeBundling = new EdgeBundling();
  13921. edgeBundling.maxTurningAngle = this.query(mlOption, 'bundling.maxTurningAngle') / 180 * Math.PI;
  13922. edges = edgeBundling.run(edges);
  13923. }
  13924. mlOption.name = serie.name;
  13925. var shapeList = [];
  13926. for (var i = 0, l = edges.length; i < l; i++) {
  13927. var edge = edges[i];
  13928. var rawEdge = edge.rawEdge || edge;
  13929. var mlData = rawEdge.rawData;
  13930. var value = mlData.value != null ? mlData.value : '';
  13931. var itemShape = this.getMarkLineShape(mlOption, seriesIndex, mlData, i, edge.points, enableBundling, rawEdge.color);
  13932. itemShape._mark = 'line';
  13933. var effect = this.deepMerge([
  13934. mlData[0],
  13935. mlData[1],
  13936. mlOption
  13937. ], 'effect');
  13938. if (effect.show) {
  13939. itemShape.effect = effect;
  13940. itemShape.effect.large = mlOption.large;
  13941. }
  13942. if (serie.type === ecConfig.CHART_TYPE_MAP) {
  13943. itemShape._geo = [
  13944. this.getMarkGeo(mlData[0]),
  13945. this.getMarkGeo(mlData[1])
  13946. ];
  13947. }
  13948. ecData.pack(itemShape, serie, seriesIndex, mlData[0], i, mlData[0].name + (mlData[1].name !== '' ? ' > ' + mlData[1].name : ''), value);
  13949. shapeList.push(itemShape);
  13950. }
  13951. return shapeList;
  13952. };
  13953. }(),
  13954. getMarkCoord: function () {
  13955. return [
  13956. 0,
  13957. 0
  13958. ];
  13959. },
  13960. getSymbolShape: function (serie, seriesIndex, data, dataIndex, name, x, y, symbol, color, emptyColor, orient) {
  13961. var queryTarget = [
  13962. data,
  13963. serie
  13964. ];
  13965. var value = this.getDataFromOption(data, '-');
  13966. symbol = this.deepQuery(queryTarget, 'symbol') || symbol;
  13967. var symbolSize = this.deepQuery(queryTarget, 'symbolSize');
  13968. symbolSize = typeof symbolSize === 'function' ? symbolSize(value) : symbolSize;
  13969. if (typeof symbolSize === 'number') {
  13970. symbolSize = [
  13971. symbolSize,
  13972. symbolSize
  13973. ];
  13974. }
  13975. var symbolRotate = this.deepQuery(queryTarget, 'symbolRotate');
  13976. var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
  13977. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
  13978. var nBorderWidth = normal.borderWidth != null ? normal.borderWidth : normal.lineStyle && normal.lineStyle.width;
  13979. if (nBorderWidth == null) {
  13980. nBorderWidth = symbol.match('empty') ? 2 : 0;
  13981. }
  13982. var eBorderWidth = emphasis.borderWidth != null ? emphasis.borderWidth : emphasis.lineStyle && emphasis.lineStyle.width;
  13983. if (eBorderWidth == null) {
  13984. eBorderWidth = nBorderWidth + 2;
  13985. }
  13986. var nColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data);
  13987. var eColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data);
  13988. var width = symbolSize[0];
  13989. var height = symbolSize[1];
  13990. var itemShape = new IconShape({
  13991. style: {
  13992. iconType: symbol.replace('empty', '').toLowerCase(),
  13993. x: x - width,
  13994. y: y - height,
  13995. width: width * 2,
  13996. height: height * 2,
  13997. brushType: 'both',
  13998. color: symbol.match('empty') ? emptyColor : nColor || color,
  13999. strokeColor: normal.borderColor || nColor || color,
  14000. lineWidth: nBorderWidth
  14001. },
  14002. highlightStyle: {
  14003. color: symbol.match('empty') ? emptyColor : eColor || nColor || color,
  14004. strokeColor: emphasis.borderColor || normal.borderColor || eColor || nColor || color,
  14005. lineWidth: eBorderWidth
  14006. },
  14007. clickable: this.deepQuery(queryTarget, 'clickable')
  14008. });
  14009. if (symbol.match('image')) {
  14010. itemShape.style.image = symbol.replace(new RegExp('^image:\\/\\/'), '');
  14011. itemShape = new ImageShape({
  14012. style: itemShape.style,
  14013. highlightStyle: itemShape.highlightStyle,
  14014. clickable: this.deepQuery(queryTarget, 'clickable')
  14015. });
  14016. }
  14017. if (symbolRotate != null) {
  14018. itemShape.rotation = [
  14019. symbolRotate * Math.PI / 180,
  14020. x,
  14021. y
  14022. ];
  14023. }
  14024. if (symbol.match('star')) {
  14025. itemShape.style.iconType = 'star';
  14026. itemShape.style.n = symbol.replace('empty', '').replace('star', '') - 0 || 5;
  14027. }
  14028. if (symbol === 'none') {
  14029. itemShape.invisible = true;
  14030. itemShape.hoverable = false;
  14031. }
  14032. itemShape = this.addLabel(itemShape, serie, data, name, orient);
  14033. if (symbol.match('empty')) {
  14034. if (itemShape.style.textColor == null) {
  14035. itemShape.style.textColor = itemShape.style.strokeColor;
  14036. }
  14037. if (itemShape.highlightStyle.textColor == null) {
  14038. itemShape.highlightStyle.textColor = itemShape.highlightStyle.strokeColor;
  14039. }
  14040. }
  14041. ecData.pack(itemShape, serie, seriesIndex, data, dataIndex, name);
  14042. itemShape._x = x;
  14043. itemShape._y = y;
  14044. itemShape._dataIndex = dataIndex;
  14045. itemShape._seriesIndex = seriesIndex;
  14046. return itemShape;
  14047. },
  14048. getMarkLineShape: function (mlOption, seriesIndex, data, dataIndex, points, bundling, color) {
  14049. var value0 = data[0].value != null ? data[0].value : '-';
  14050. var value1 = data[1].value != null ? data[1].value : '-';
  14051. var symbol = [
  14052. data[0].symbol || mlOption.symbol[0],
  14053. data[1].symbol || mlOption.symbol[1]
  14054. ];
  14055. var symbolSize = [
  14056. data[0].symbolSize || mlOption.symbolSize[0],
  14057. data[1].symbolSize || mlOption.symbolSize[1]
  14058. ];
  14059. symbolSize[0] = typeof symbolSize[0] === 'function' ? symbolSize[0](value0) : symbolSize[0];
  14060. symbolSize[1] = typeof symbolSize[1] === 'function' ? symbolSize[1](value1) : symbolSize[1];
  14061. var symbolRotate = [
  14062. this.query(data[0], 'symbolRotate') || mlOption.symbolRotate[0],
  14063. this.query(data[1], 'symbolRotate') || mlOption.symbolRotate[1]
  14064. ];
  14065. var queryTarget = [
  14066. data[0],
  14067. data[1],
  14068. mlOption
  14069. ];
  14070. var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
  14071. normal.color = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data);
  14072. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
  14073. emphasis.color = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data);
  14074. var nlineStyle = normal.lineStyle;
  14075. var elineStyle = emphasis.lineStyle;
  14076. var nBorderWidth = nlineStyle.width;
  14077. if (nBorderWidth == null) {
  14078. nBorderWidth = normal.borderWidth;
  14079. }
  14080. var eBorderWidth = elineStyle.width;
  14081. if (eBorderWidth == null) {
  14082. eBorderWidth = emphasis.borderWidth != null ? emphasis.borderWidth : nBorderWidth + 2;
  14083. }
  14084. var smoothness = this.deepQuery(queryTarget, 'smoothness');
  14085. if (!this.deepQuery(queryTarget, 'smooth')) {
  14086. smoothness = 0;
  14087. }
  14088. var ShapeCtor = bundling ? PolylineShape : MarkLineShape;
  14089. var itemShape = new ShapeCtor({
  14090. style: {
  14091. symbol: symbol,
  14092. symbolSize: symbolSize,
  14093. symbolRotate: symbolRotate,
  14094. brushType: 'both',
  14095. lineType: nlineStyle.type,
  14096. shadowColor: nlineStyle.shadowColor || nlineStyle.color || normal.borderColor || normal.color || color,
  14097. shadowBlur: nlineStyle.shadowBlur,
  14098. shadowOffsetX: nlineStyle.shadowOffsetX,
  14099. shadowOffsetY: nlineStyle.shadowOffsetY,
  14100. color: normal.color || color,
  14101. strokeColor: nlineStyle.color || normal.borderColor || normal.color || color,
  14102. lineWidth: nBorderWidth,
  14103. symbolBorderColor: normal.borderColor || normal.color || color,
  14104. symbolBorder: normal.borderWidth
  14105. },
  14106. highlightStyle: {
  14107. shadowColor: elineStyle.shadowColor,
  14108. shadowBlur: elineStyle.shadowBlur,
  14109. shadowOffsetX: elineStyle.shadowOffsetX,
  14110. shadowOffsetY: elineStyle.shadowOffsetY,
  14111. color: emphasis.color || normal.color || color,
  14112. strokeColor: elineStyle.color || nlineStyle.color || emphasis.borderColor || normal.borderColor || emphasis.color || normal.color || color,
  14113. lineWidth: eBorderWidth,
  14114. symbolBorderColor: emphasis.borderColor || normal.borderColor || emphasis.color || normal.color || color,
  14115. symbolBorder: emphasis.borderWidth == null ? normal.borderWidth + 2 : emphasis.borderWidth
  14116. },
  14117. clickable: this.deepQuery(queryTarget, 'clickable')
  14118. });
  14119. var shapeStyle = itemShape.style;
  14120. if (bundling) {
  14121. shapeStyle.pointList = points;
  14122. shapeStyle.smooth = smoothness;
  14123. } else {
  14124. shapeStyle.xStart = points[0][0];
  14125. shapeStyle.yStart = points[0][1];
  14126. shapeStyle.xEnd = points[1][0];
  14127. shapeStyle.yEnd = points[1][1];
  14128. shapeStyle.curveness = smoothness;
  14129. itemShape.updatePoints(itemShape.style);
  14130. }
  14131. itemShape = this.addLabel(itemShape, mlOption, data[0], data[0].name + ' : ' + data[1].name);
  14132. return itemShape;
  14133. },
  14134. getLargeMarkPointShape: function (seriesIndex, mpOption) {
  14135. var serie = this.series[seriesIndex];
  14136. var component = this.component;
  14137. var data = mpOption.data;
  14138. var itemShape;
  14139. var dataRange = component.dataRange;
  14140. var legend = component.legend;
  14141. var color;
  14142. var value;
  14143. var queryTarget = [
  14144. data[0],
  14145. mpOption
  14146. ];
  14147. var nColor;
  14148. var eColor;
  14149. var effect;
  14150. if (legend) {
  14151. color = legend.getColor(serie.name);
  14152. }
  14153. if (dataRange) {
  14154. value = data[0].value != null ? data[0].value : '';
  14155. color = isNaN(value) ? color : dataRange.getColor(value);
  14156. nColor = this.deepQuery(queryTarget, 'itemStyle.normal.color') || color;
  14157. eColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.color') || nColor;
  14158. if (nColor == null && eColor == null) {
  14159. return;
  14160. }
  14161. }
  14162. color = this.deepMerge(queryTarget, 'itemStyle.normal').color || color;
  14163. var symbol = this.deepQuery(queryTarget, 'symbol') || 'circle';
  14164. symbol = symbol.replace('empty', '').replace(/\d/g, '');
  14165. effect = this.deepMerge([
  14166. data[0],
  14167. mpOption
  14168. ], 'effect');
  14169. var devicePixelRatio = window.devicePixelRatio || 1;
  14170. itemShape = new SymbolShape({
  14171. style: {
  14172. pointList: data,
  14173. color: color,
  14174. strokeColor: color,
  14175. shadowColor: effect.shadowColor || color,
  14176. shadowBlur: (effect.shadowBlur != null ? effect.shadowBlur : 8) * devicePixelRatio,
  14177. size: this.deepQuery(queryTarget, 'symbolSize'),
  14178. iconType: symbol,
  14179. brushType: 'fill',
  14180. lineWidth: 1
  14181. },
  14182. draggable: false,
  14183. hoverable: false
  14184. });
  14185. if (effect.show) {
  14186. itemShape.effect = effect;
  14187. }
  14188. return itemShape;
  14189. },
  14190. backupShapeList: function () {
  14191. if (this.shapeList && this.shapeList.length > 0) {
  14192. this.lastShapeList = this.shapeList;
  14193. this.shapeList = [];
  14194. } else {
  14195. this.lastShapeList = [];
  14196. }
  14197. },
  14198. addShapeList: function () {
  14199. var maxLenth = this.option.animationThreshold / (this.canvasSupported ? 2 : 4);
  14200. var lastShapeList = this.lastShapeList;
  14201. var shapeList = this.shapeList;
  14202. var isUpdate = lastShapeList.length > 0;
  14203. var duration = isUpdate ? this.query(this.option, 'animationDurationUpdate') : this.query(this.option, 'animationDuration');
  14204. var easing = this.query(this.option, 'animationEasing');
  14205. var delay;
  14206. var key;
  14207. var oldMap = {};
  14208. var newMap = {};
  14209. if (this.option.animation && !this.option.renderAsImage && shapeList.length < maxLenth && !this.motionlessOnce) {
  14210. for (var i = 0, l = lastShapeList.length; i < l; i++) {
  14211. key = this._getAnimationKey(lastShapeList[i]);
  14212. if (key.match('undefined')) {
  14213. this.zr.delShape(lastShapeList[i].id);
  14214. } else {
  14215. key += lastShapeList[i].type;
  14216. if (oldMap[key]) {
  14217. this.zr.delShape(lastShapeList[i].id);
  14218. } else {
  14219. oldMap[key] = lastShapeList[i];
  14220. }
  14221. }
  14222. }
  14223. for (var i = 0, l = shapeList.length; i < l; i++) {
  14224. key = this._getAnimationKey(shapeList[i]);
  14225. if (key.match('undefined')) {
  14226. this.zr.addShape(shapeList[i]);
  14227. } else {
  14228. key += shapeList[i].type;
  14229. newMap[key] = shapeList[i];
  14230. }
  14231. }
  14232. for (key in oldMap) {
  14233. if (!newMap[key]) {
  14234. this.zr.delShape(oldMap[key].id);
  14235. }
  14236. }
  14237. for (key in newMap) {
  14238. if (oldMap[key]) {
  14239. this.zr.delShape(oldMap[key].id);
  14240. this._animateMod(oldMap[key], newMap[key], duration, easing, 0, isUpdate);
  14241. } else {
  14242. delay = (this.type == ecConfig.CHART_TYPE_LINE || this.type == ecConfig.CHART_TYPE_RADAR) && key.indexOf('icon') !== 0 ? duration / 2 : 0;
  14243. this._animateMod(false, newMap[key], duration, easing, delay, isUpdate);
  14244. }
  14245. }
  14246. this.zr.refresh();
  14247. this.animationEffect();
  14248. } else {
  14249. this.motionlessOnce = false;
  14250. this.zr.delShape(lastShapeList);
  14251. for (var i = 0, l = shapeList.length; i < l; i++) {
  14252. this.zr.addShape(shapeList[i]);
  14253. }
  14254. }
  14255. },
  14256. _getAnimationKey: function (shape) {
  14257. if (this.type != ecConfig.CHART_TYPE_MAP && this.type != ecConfig.CHART_TYPE_TREEMAP && this.type != ecConfig.CHART_TYPE_VENN && this.type != ecConfig.CHART_TYPE_TREE) {
  14258. return ecData.get(shape, 'seriesIndex') + '_' + ecData.get(shape, 'dataIndex') + (shape._mark ? shape._mark : '') + (this.type === ecConfig.CHART_TYPE_RADAR ? ecData.get(shape, 'special') : '');
  14259. } else {
  14260. return ecData.get(shape, 'seriesIndex') + '_' + ecData.get(shape, 'dataIndex') + (shape._mark ? shape._mark : 'undefined');
  14261. }
  14262. },
  14263. _animateMod: function (oldShape, newShape, duration, easing, delay, isUpdate) {
  14264. switch (newShape.type) {
  14265. case 'polyline':
  14266. case 'half-smooth-polygon':
  14267. ecAnimation.pointList(this.zr, oldShape, newShape, duration, easing);
  14268. break;
  14269. case 'rectangle':
  14270. ecAnimation.rectangle(this.zr, oldShape, newShape, duration, easing);
  14271. break;
  14272. case 'image':
  14273. case 'icon':
  14274. ecAnimation.icon(this.zr, oldShape, newShape, duration, easing, delay);
  14275. break;
  14276. case 'candle':
  14277. if (!isUpdate) {
  14278. ecAnimation.candle(this.zr, oldShape, newShape, duration, easing);
  14279. } else {
  14280. this.zr.addShape(newShape);
  14281. }
  14282. break;
  14283. case 'ring':
  14284. case 'sector':
  14285. case 'circle':
  14286. if (!isUpdate) {
  14287. ecAnimation.ring(this.zr, oldShape, newShape, duration + (ecData.get(newShape, 'dataIndex') || 0) % 20 * 100, easing);
  14288. } else if (newShape.type === 'sector') {
  14289. ecAnimation.sector(this.zr, oldShape, newShape, duration, easing);
  14290. } else {
  14291. this.zr.addShape(newShape);
  14292. }
  14293. break;
  14294. case 'text':
  14295. ecAnimation.text(this.zr, oldShape, newShape, duration, easing);
  14296. break;
  14297. case 'polygon':
  14298. if (!isUpdate) {
  14299. ecAnimation.polygon(this.zr, oldShape, newShape, duration, easing);
  14300. } else {
  14301. ecAnimation.pointList(this.zr, oldShape, newShape, duration, easing);
  14302. }
  14303. break;
  14304. case 'ribbon':
  14305. ecAnimation.ribbon(this.zr, oldShape, newShape, duration, easing);
  14306. break;
  14307. case 'gauge-pointer':
  14308. ecAnimation.gaugePointer(this.zr, oldShape, newShape, duration, easing);
  14309. break;
  14310. case 'mark-line':
  14311. ecAnimation.markline(this.zr, oldShape, newShape, duration, easing);
  14312. break;
  14313. case 'bezier-curve':
  14314. case 'line':
  14315. ecAnimation.line(this.zr, oldShape, newShape, duration, easing);
  14316. break;
  14317. default:
  14318. this.zr.addShape(newShape);
  14319. break;
  14320. }
  14321. },
  14322. animationMark: function (duration, easing, shapeList) {
  14323. var shapeList = shapeList || this.shapeList;
  14324. for (var i = 0, l = shapeList.length; i < l; i++) {
  14325. if (!shapeList[i]._mark) {
  14326. continue;
  14327. }
  14328. this._animateMod(false, shapeList[i], duration, easing, 0, true);
  14329. }
  14330. this.animationEffect(shapeList);
  14331. },
  14332. animationEffect: function (shapeList) {
  14333. !shapeList && this.clearEffectShape();
  14334. shapeList = shapeList || this.shapeList;
  14335. if (shapeList == null) {
  14336. return;
  14337. }
  14338. var zlevel = ecConfig.EFFECT_ZLEVEL;
  14339. if (this.canvasSupported) {
  14340. this.zr.modLayer(zlevel, {
  14341. motionBlur: true,
  14342. lastFrameAlpha: this.option.effectBlendAlpha || ecConfig.effectBlendAlpha
  14343. });
  14344. }
  14345. var shape;
  14346. for (var i = 0, l = shapeList.length; i < l; i++) {
  14347. shape = shapeList[i];
  14348. if (!(shape._mark && shape.effect && shape.effect.show && ecEffect[shape._mark])) {
  14349. continue;
  14350. }
  14351. ecEffect[shape._mark](this.zr, this.effectList, shape, zlevel);
  14352. this.effectList[this.effectList.length - 1]._mark = shape._mark;
  14353. }
  14354. },
  14355. clearEffectShape: function (clearMotionBlur) {
  14356. var effectList = this.effectList;
  14357. if (this.zr && effectList && effectList.length > 0) {
  14358. clearMotionBlur && this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, { motionBlur: false });
  14359. this.zr.delShape(effectList);
  14360. for (var i = 0; i < effectList.length; i++) {
  14361. if (effectList[i].effectAnimator) {
  14362. effectList[i].effectAnimator.stop();
  14363. }
  14364. }
  14365. }
  14366. this.effectList = [];
  14367. },
  14368. addMark: function (seriesIndex, markData, markType) {
  14369. var serie = this.series[seriesIndex];
  14370. if (this.selectedMap[serie.name]) {
  14371. var duration = this.query(this.option, 'animationDurationUpdate');
  14372. var easing = this.query(this.option, 'animationEasing');
  14373. var oriMarkData = serie[markType].data;
  14374. var lastLength = this.shapeList.length;
  14375. serie[markType].data = markData.data;
  14376. this['_build' + markType.replace('m', 'M')](seriesIndex);
  14377. if (this.option.animation && !this.option.renderAsImage) {
  14378. this.animationMark(duration, easing, this.shapeList.slice(lastLength));
  14379. } else {
  14380. for (var i = lastLength, l = this.shapeList.length; i < l; i++) {
  14381. this.zr.addShape(this.shapeList[i]);
  14382. }
  14383. this.zr.refreshNextFrame();
  14384. }
  14385. serie[markType].data = oriMarkData;
  14386. }
  14387. },
  14388. delMark: function (seriesIndex, markName, markType) {
  14389. markType = markType.replace('mark', '').replace('large', '').toLowerCase();
  14390. var serie = this.series[seriesIndex];
  14391. if (this.selectedMap[serie.name]) {
  14392. var needRefresh = false;
  14393. var shapeList = [
  14394. this.shapeList,
  14395. this.effectList
  14396. ];
  14397. var len = 2;
  14398. while (len--) {
  14399. for (var i = 0, l = shapeList[len].length; i < l; i++) {
  14400. if (shapeList[len][i]._mark == markType && ecData.get(shapeList[len][i], 'seriesIndex') == seriesIndex && ecData.get(shapeList[len][i], 'name') == markName) {
  14401. this.zr.delShape(shapeList[len][i].id);
  14402. shapeList[len].splice(i, 1);
  14403. needRefresh = true;
  14404. break;
  14405. }
  14406. }
  14407. }
  14408. needRefresh && this.zr.refreshNextFrame();
  14409. }
  14410. }
  14411. };
  14412. zrUtil.inherits(Base, ComponentBase);
  14413. return Base;
  14414. });define('zrender/shape/Circle', [
  14415. 'require',
  14416. './Base',
  14417. '../tool/util'
  14418. ], function (require) {
  14419. 'use strict';
  14420. var Base = require('./Base');
  14421. var Circle = function (options) {
  14422. Base.call(this, options);
  14423. };
  14424. Circle.prototype = {
  14425. type: 'circle',
  14426. buildPath: function (ctx, style) {
  14427. ctx.moveTo(style.x + style.r, style.y);
  14428. ctx.arc(style.x, style.y, style.r, 0, Math.PI * 2, true);
  14429. return;
  14430. },
  14431. getRect: function (style) {
  14432. if (style.__rect) {
  14433. return style.__rect;
  14434. }
  14435. var lineWidth;
  14436. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  14437. lineWidth = style.lineWidth || 1;
  14438. } else {
  14439. lineWidth = 0;
  14440. }
  14441. style.__rect = {
  14442. x: Math.round(style.x - style.r - lineWidth / 2),
  14443. y: Math.round(style.y - style.r - lineWidth / 2),
  14444. width: style.r * 2 + lineWidth,
  14445. height: style.r * 2 + lineWidth
  14446. };
  14447. return style.__rect;
  14448. }
  14449. };
  14450. require('../tool/util').inherits(Circle, Base);
  14451. return Circle;
  14452. });define('echarts/util/accMath', [], function () {
  14453. function accDiv(arg1, arg2) {
  14454. var s1 = arg1.toString();
  14455. var s2 = arg2.toString();
  14456. var m = 0;
  14457. try {
  14458. m = s2.split('.')[1].length;
  14459. } catch (e) {
  14460. }
  14461. try {
  14462. m -= s1.split('.')[1].length;
  14463. } catch (e) {
  14464. }
  14465. return (s1.replace('.', '') - 0) / (s2.replace('.', '') - 0) * Math.pow(10, m);
  14466. }
  14467. function accMul(arg1, arg2) {
  14468. var s1 = arg1.toString();
  14469. var s2 = arg2.toString();
  14470. var m = 0;
  14471. try {
  14472. m += s1.split('.')[1].length;
  14473. } catch (e) {
  14474. }
  14475. try {
  14476. m += s2.split('.')[1].length;
  14477. } catch (e) {
  14478. }
  14479. return (s1.replace('.', '') - 0) * (s2.replace('.', '') - 0) / Math.pow(10, m);
  14480. }
  14481. function accAdd(arg1, arg2) {
  14482. var r1 = 0;
  14483. var r2 = 0;
  14484. try {
  14485. r1 = arg1.toString().split('.')[1].length;
  14486. } catch (e) {
  14487. }
  14488. try {
  14489. r2 = arg2.toString().split('.')[1].length;
  14490. } catch (e) {
  14491. }
  14492. var m = Math.pow(10, Math.max(r1, r2));
  14493. return (Math.round(arg1 * m) + Math.round(arg2 * m)) / m;
  14494. }
  14495. function accSub(arg1, arg2) {
  14496. return accAdd(arg1, -arg2);
  14497. }
  14498. return {
  14499. accDiv: accDiv,
  14500. accMul: accMul,
  14501. accAdd: accAdd,
  14502. accSub: accSub
  14503. };
  14504. });define('echarts/util/shape/Icon', [
  14505. 'require',
  14506. 'zrender/tool/util',
  14507. 'zrender/shape/Star',
  14508. 'zrender/shape/Heart',
  14509. 'zrender/shape/Droplet',
  14510. 'zrender/shape/Image',
  14511. 'zrender/shape/Base'
  14512. ], function (require) {
  14513. var zrUtil = require('zrender/tool/util');
  14514. function _iconMark(ctx, style) {
  14515. var x = style.x;
  14516. var y = style.y;
  14517. var dx = style.width / 16;
  14518. var dy = style.height / 16;
  14519. ctx.moveTo(x, y + style.height);
  14520. ctx.lineTo(x + 5 * dx, y + 14 * dy);
  14521. ctx.lineTo(x + style.width, y + 3 * dy);
  14522. ctx.lineTo(x + 13 * dx, y);
  14523. ctx.lineTo(x + 2 * dx, y + 11 * dy);
  14524. ctx.lineTo(x, y + style.height);
  14525. ctx.moveTo(x + 6 * dx, y + 10 * dy);
  14526. ctx.lineTo(x + 14 * dx, y + 2 * dy);
  14527. ctx.moveTo(x + 10 * dx, y + 13 * dy);
  14528. ctx.lineTo(x + style.width, y + 13 * dy);
  14529. ctx.moveTo(x + 13 * dx, y + 10 * dy);
  14530. ctx.lineTo(x + 13 * dx, y + style.height);
  14531. }
  14532. function _iconMarkUndo(ctx, style) {
  14533. var x = style.x;
  14534. var y = style.y;
  14535. var dx = style.width / 16;
  14536. var dy = style.height / 16;
  14537. ctx.moveTo(x, y + style.height);
  14538. ctx.lineTo(x + 5 * dx, y + 14 * dy);
  14539. ctx.lineTo(x + style.width, y + 3 * dy);
  14540. ctx.lineTo(x + 13 * dx, y);
  14541. ctx.lineTo(x + 2 * dx, y + 11 * dy);
  14542. ctx.lineTo(x, y + style.height);
  14543. ctx.moveTo(x + 6 * dx, y + 10 * dy);
  14544. ctx.lineTo(x + 14 * dx, y + 2 * dy);
  14545. ctx.moveTo(x + 10 * dx, y + 13 * dy);
  14546. ctx.lineTo(x + style.width, y + 13 * dy);
  14547. }
  14548. function _iconMarkClear(ctx, style) {
  14549. var x = style.x;
  14550. var y = style.y;
  14551. var dx = style.width / 16;
  14552. var dy = style.height / 16;
  14553. ctx.moveTo(x + 4 * dx, y + 15 * dy);
  14554. ctx.lineTo(x + 9 * dx, y + 13 * dy);
  14555. ctx.lineTo(x + 14 * dx, y + 8 * dy);
  14556. ctx.lineTo(x + 11 * dx, y + 5 * dy);
  14557. ctx.lineTo(x + 6 * dx, y + 10 * dy);
  14558. ctx.lineTo(x + 4 * dx, y + 15 * dy);
  14559. ctx.moveTo(x + 5 * dx, y);
  14560. ctx.lineTo(x + 11 * dx, y);
  14561. ctx.moveTo(x + 5 * dx, y + dy);
  14562. ctx.lineTo(x + 11 * dx, y + dy);
  14563. ctx.moveTo(x, y + 2 * dy);
  14564. ctx.lineTo(x + style.width, y + 2 * dy);
  14565. ctx.moveTo(x, y + 5 * dy);
  14566. ctx.lineTo(x + 3 * dx, y + style.height);
  14567. ctx.lineTo(x + 13 * dx, y + style.height);
  14568. ctx.lineTo(x + style.width, y + 5 * dy);
  14569. }
  14570. function _iconDataZoom(ctx, style) {
  14571. var x = style.x;
  14572. var y = style.y;
  14573. var dx = style.width / 16;
  14574. var dy = style.height / 16;
  14575. ctx.moveTo(x, y + 3 * dy);
  14576. ctx.lineTo(x + 6 * dx, y + 3 * dy);
  14577. ctx.moveTo(x + 3 * dx, y);
  14578. ctx.lineTo(x + 3 * dx, y + 6 * dy);
  14579. ctx.moveTo(x + 3 * dx, y + 8 * dy);
  14580. ctx.lineTo(x + 3 * dx, y + style.height);
  14581. ctx.lineTo(x + style.width, y + style.height);
  14582. ctx.lineTo(x + style.width, y + 3 * dy);
  14583. ctx.lineTo(x + 8 * dx, y + 3 * dy);
  14584. }
  14585. function _iconDataZoomReset(ctx, style) {
  14586. var x = style.x;
  14587. var y = style.y;
  14588. var dx = style.width / 16;
  14589. var dy = style.height / 16;
  14590. ctx.moveTo(x + 6 * dx, y);
  14591. ctx.lineTo(x + 2 * dx, y + 3 * dy);
  14592. ctx.lineTo(x + 6 * dx, y + 6 * dy);
  14593. ctx.moveTo(x + 2 * dx, y + 3 * dy);
  14594. ctx.lineTo(x + 14 * dx, y + 3 * dy);
  14595. ctx.lineTo(x + 14 * dx, y + 11 * dy);
  14596. ctx.moveTo(x + 2 * dx, y + 5 * dy);
  14597. ctx.lineTo(x + 2 * dx, y + 13 * dy);
  14598. ctx.lineTo(x + 14 * dx, y + 13 * dy);
  14599. ctx.moveTo(x + 10 * dx, y + 10 * dy);
  14600. ctx.lineTo(x + 14 * dx, y + 13 * dy);
  14601. ctx.lineTo(x + 10 * dx, y + style.height);
  14602. }
  14603. function _iconRestore(ctx, style) {
  14604. var x = style.x;
  14605. var y = style.y;
  14606. var dx = style.width / 16;
  14607. var dy = style.height / 16;
  14608. var r = style.width / 2;
  14609. ctx.lineWidth = 1.5;
  14610. ctx.arc(x + r, y + r, r - dx, 0, Math.PI * 2 / 3);
  14611. ctx.moveTo(x + 3 * dx, y + style.height);
  14612. ctx.lineTo(x + 0 * dx, y + 12 * dy);
  14613. ctx.lineTo(x + 5 * dx, y + 11 * dy);
  14614. ctx.moveTo(x, y + 8 * dy);
  14615. ctx.arc(x + r, y + r, r - dx, Math.PI, Math.PI * 5 / 3);
  14616. ctx.moveTo(x + 13 * dx, y);
  14617. ctx.lineTo(x + style.width, y + 4 * dy);
  14618. ctx.lineTo(x + 11 * dx, y + 5 * dy);
  14619. }
  14620. function _iconLineChart(ctx, style) {
  14621. var x = style.x;
  14622. var y = style.y;
  14623. var dx = style.width / 16;
  14624. var dy = style.height / 16;
  14625. ctx.moveTo(x, y);
  14626. ctx.lineTo(x, y + style.height);
  14627. ctx.lineTo(x + style.width, y + style.height);
  14628. ctx.moveTo(x + 2 * dx, y + 14 * dy);
  14629. ctx.lineTo(x + 7 * dx, y + 6 * dy);
  14630. ctx.lineTo(x + 11 * dx, y + 11 * dy);
  14631. ctx.lineTo(x + 15 * dx, y + 2 * dy);
  14632. }
  14633. function _iconBarChart(ctx, style) {
  14634. var x = style.x;
  14635. var y = style.y;
  14636. var dx = style.width / 16;
  14637. var dy = style.height / 16;
  14638. ctx.moveTo(x, y);
  14639. ctx.lineTo(x, y + style.height);
  14640. ctx.lineTo(x + style.width, y + style.height);
  14641. ctx.moveTo(x + 3 * dx, y + 14 * dy);
  14642. ctx.lineTo(x + 3 * dx, y + 6 * dy);
  14643. ctx.lineTo(x + 4 * dx, y + 6 * dy);
  14644. ctx.lineTo(x + 4 * dx, y + 14 * dy);
  14645. ctx.moveTo(x + 7 * dx, y + 14 * dy);
  14646. ctx.lineTo(x + 7 * dx, y + 2 * dy);
  14647. ctx.lineTo(x + 8 * dx, y + 2 * dy);
  14648. ctx.lineTo(x + 8 * dx, y + 14 * dy);
  14649. ctx.moveTo(x + 11 * dx, y + 14 * dy);
  14650. ctx.lineTo(x + 11 * dx, y + 9 * dy);
  14651. ctx.lineTo(x + 12 * dx, y + 9 * dy);
  14652. ctx.lineTo(x + 12 * dx, y + 14 * dy);
  14653. }
  14654. function _iconPieChart(ctx, style) {
  14655. var x = style.x;
  14656. var y = style.y;
  14657. var width = style.width - 2;
  14658. var height = style.height - 2;
  14659. var r = Math.min(width, height) / 2;
  14660. y += 2;
  14661. ctx.moveTo(x + r + 3, y + r - 3);
  14662. ctx.arc(x + r + 3, y + r - 3, r - 1, 0, -Math.PI / 2, true);
  14663. ctx.lineTo(x + r + 3, y + r - 3);
  14664. ctx.moveTo(x + r, y);
  14665. ctx.lineTo(x + r, y + r);
  14666. ctx.arc(x + r, y + r, r, -Math.PI / 2, Math.PI * 2, true);
  14667. ctx.lineTo(x + r, y + r);
  14668. ctx.lineWidth = 1.5;
  14669. }
  14670. function _iconFunnelChart(ctx, style) {
  14671. var x = style.x;
  14672. var y = style.y;
  14673. var dx = style.width / 16;
  14674. var dy = style.height / 16;
  14675. y -= dy;
  14676. ctx.moveTo(x + 1 * dx, y + 2 * dy);
  14677. ctx.lineTo(x + 15 * dx, y + 2 * dy);
  14678. ctx.lineTo(x + 14 * dx, y + 3 * dy);
  14679. ctx.lineTo(x + 2 * dx, y + 3 * dy);
  14680. ctx.moveTo(x + 3 * dx, y + 6 * dy);
  14681. ctx.lineTo(x + 13 * dx, y + 6 * dy);
  14682. ctx.lineTo(x + 12 * dx, y + 7 * dy);
  14683. ctx.lineTo(x + 4 * dx, y + 7 * dy);
  14684. ctx.moveTo(x + 5 * dx, y + 10 * dy);
  14685. ctx.lineTo(x + 11 * dx, y + 10 * dy);
  14686. ctx.lineTo(x + 10 * dx, y + 11 * dy);
  14687. ctx.lineTo(x + 6 * dx, y + 11 * dy);
  14688. ctx.moveTo(x + 7 * dx, y + 14 * dy);
  14689. ctx.lineTo(x + 9 * dx, y + 14 * dy);
  14690. ctx.lineTo(x + 8 * dx, y + 15 * dy);
  14691. ctx.lineTo(x + 7 * dx, y + 15 * dy);
  14692. }
  14693. function _iconForceChart(ctx, style) {
  14694. var x = style.x;
  14695. var y = style.y;
  14696. var width = style.width;
  14697. var height = style.height;
  14698. var dx = width / 16;
  14699. var dy = height / 16;
  14700. var r = Math.min(dx, dy) * 2;
  14701. ctx.moveTo(x + dx + r, y + dy + r);
  14702. ctx.arc(x + dx, y + dy, r, Math.PI / 4, Math.PI * 3);
  14703. ctx.lineTo(x + 7 * dx - r, y + 6 * dy - r);
  14704. ctx.arc(x + 7 * dx, y + 6 * dy, r, Math.PI / 4 * 5, Math.PI * 4);
  14705. ctx.arc(x + 7 * dx, y + 6 * dy, r / 2, Math.PI / 4 * 5, Math.PI * 4);
  14706. ctx.moveTo(x + 7 * dx - r / 2, y + 6 * dy + r);
  14707. ctx.lineTo(x + dx + r, y + 14 * dy - r);
  14708. ctx.arc(x + dx, y + 14 * dy, r, -Math.PI / 4, Math.PI * 2);
  14709. ctx.moveTo(x + 7 * dx + r / 2, y + 6 * dy);
  14710. ctx.lineTo(x + 14 * dx - r, y + 10 * dy - r / 2);
  14711. ctx.moveTo(x + 16 * dx, y + 10 * dy);
  14712. ctx.arc(x + 14 * dx, y + 10 * dy, r, 0, Math.PI * 3);
  14713. ctx.lineWidth = 1.5;
  14714. }
  14715. function _iconChordChart(ctx, style) {
  14716. var x = style.x;
  14717. var y = style.y;
  14718. var width = style.width;
  14719. var height = style.height;
  14720. var r = Math.min(width, height) / 2;
  14721. ctx.moveTo(x + width, y + height / 2);
  14722. ctx.arc(x + r, y + r, r, 0, Math.PI * 2);
  14723. ctx.arc(x + r, y, r, Math.PI / 4, Math.PI / 5 * 4);
  14724. ctx.arc(x, y + r, r, -Math.PI / 3, Math.PI / 3);
  14725. ctx.arc(x + width, y + height, r, Math.PI, Math.PI / 2 * 3);
  14726. ctx.lineWidth = 1.5;
  14727. }
  14728. function _iconStackChart(ctx, style) {
  14729. var x = style.x;
  14730. var y = style.y;
  14731. var width = style.width;
  14732. var height = style.height;
  14733. var dy = Math.round(height / 3);
  14734. var delta = Math.round((dy - 2) / 2);
  14735. var len = 3;
  14736. while (len--) {
  14737. ctx.rect(x, y + dy * len + delta, width, 2);
  14738. }
  14739. }
  14740. function _iconTiledChart(ctx, style) {
  14741. var x = style.x;
  14742. var y = style.y;
  14743. var width = style.width;
  14744. var height = style.height;
  14745. var dx = Math.round(width / 3);
  14746. var delta = Math.round((dx - 2) / 2);
  14747. var len = 3;
  14748. while (len--) {
  14749. ctx.rect(x + dx * len + delta, y, 2, height);
  14750. }
  14751. }
  14752. function _iconDataView(ctx, style) {
  14753. var x = style.x;
  14754. var y = style.y;
  14755. var dx = style.width / 16;
  14756. ctx.moveTo(x + dx, y);
  14757. ctx.lineTo(x + dx, y + style.height);
  14758. ctx.lineTo(x + 15 * dx, y + style.height);
  14759. ctx.lineTo(x + 15 * dx, y);
  14760. ctx.lineTo(x + dx, y);
  14761. ctx.moveTo(x + 3 * dx, y + 3 * dx);
  14762. ctx.lineTo(x + 13 * dx, y + 3 * dx);
  14763. ctx.moveTo(x + 3 * dx, y + 6 * dx);
  14764. ctx.lineTo(x + 13 * dx, y + 6 * dx);
  14765. ctx.moveTo(x + 3 * dx, y + 9 * dx);
  14766. ctx.lineTo(x + 13 * dx, y + 9 * dx);
  14767. ctx.moveTo(x + 3 * dx, y + 12 * dx);
  14768. ctx.lineTo(x + 9 * dx, y + 12 * dx);
  14769. }
  14770. function _iconSave(ctx, style) {
  14771. var x = style.x;
  14772. var y = style.y;
  14773. var dx = style.width / 16;
  14774. var dy = style.height / 16;
  14775. ctx.moveTo(x, y);
  14776. ctx.lineTo(x, y + style.height);
  14777. ctx.lineTo(x + style.width, y + style.height);
  14778. ctx.lineTo(x + style.width, y);
  14779. ctx.lineTo(x, y);
  14780. ctx.moveTo(x + 4 * dx, y);
  14781. ctx.lineTo(x + 4 * dx, y + 8 * dy);
  14782. ctx.lineTo(x + 12 * dx, y + 8 * dy);
  14783. ctx.lineTo(x + 12 * dx, y);
  14784. ctx.moveTo(x + 6 * dx, y + 11 * dy);
  14785. ctx.lineTo(x + 6 * dx, y + 13 * dy);
  14786. ctx.lineTo(x + 10 * dx, y + 13 * dy);
  14787. ctx.lineTo(x + 10 * dx, y + 11 * dy);
  14788. ctx.lineTo(x + 6 * dx, y + 11 * dy);
  14789. }
  14790. function _iconCross(ctx, style) {
  14791. var x = style.x;
  14792. var y = style.y;
  14793. var width = style.width;
  14794. var height = style.height;
  14795. ctx.moveTo(x, y + height / 2);
  14796. ctx.lineTo(x + width, y + height / 2);
  14797. ctx.moveTo(x + width / 2, y);
  14798. ctx.lineTo(x + width / 2, y + height);
  14799. }
  14800. function _iconCircle(ctx, style) {
  14801. var width = style.width / 2;
  14802. var height = style.height / 2;
  14803. var r = Math.min(width, height);
  14804. ctx.moveTo(style.x + width + r, style.y + height);
  14805. ctx.arc(style.x + width, style.y + height, r, 0, Math.PI * 2);
  14806. ctx.closePath();
  14807. }
  14808. function _iconRectangle(ctx, style) {
  14809. ctx.rect(style.x, style.y, style.width, style.height);
  14810. ctx.closePath();
  14811. }
  14812. function _iconTriangle(ctx, style) {
  14813. var width = style.width / 2;
  14814. var height = style.height / 2;
  14815. var x = style.x + width;
  14816. var y = style.y + height;
  14817. var symbolSize = Math.min(width, height);
  14818. ctx.moveTo(x, y - symbolSize);
  14819. ctx.lineTo(x + symbolSize, y + symbolSize);
  14820. ctx.lineTo(x - symbolSize, y + symbolSize);
  14821. ctx.lineTo(x, y - symbolSize);
  14822. ctx.closePath();
  14823. }
  14824. function _iconDiamond(ctx, style) {
  14825. var width = style.width / 2;
  14826. var height = style.height / 2;
  14827. var x = style.x + width;
  14828. var y = style.y + height;
  14829. var symbolSize = Math.min(width, height);
  14830. ctx.moveTo(x, y - symbolSize);
  14831. ctx.lineTo(x + symbolSize, y);
  14832. ctx.lineTo(x, y + symbolSize);
  14833. ctx.lineTo(x - symbolSize, y);
  14834. ctx.lineTo(x, y - symbolSize);
  14835. ctx.closePath();
  14836. }
  14837. function _iconArrow(ctx, style) {
  14838. var x = style.x;
  14839. var y = style.y;
  14840. var dx = style.width / 16;
  14841. ctx.moveTo(x + 8 * dx, y);
  14842. ctx.lineTo(x + dx, y + style.height);
  14843. ctx.lineTo(x + 8 * dx, y + style.height / 4 * 3);
  14844. ctx.lineTo(x + 15 * dx, y + style.height);
  14845. ctx.lineTo(x + 8 * dx, y);
  14846. ctx.closePath();
  14847. }
  14848. function _iconStar(ctx, style) {
  14849. var StarShape = require('zrender/shape/Star');
  14850. var width = style.width / 2;
  14851. var height = style.height / 2;
  14852. StarShape.prototype.buildPath(ctx, {
  14853. x: style.x + width,
  14854. y: style.y + height,
  14855. r: Math.min(width, height),
  14856. n: style.n || 5
  14857. });
  14858. }
  14859. function _iconHeart(ctx, style) {
  14860. var HeartShape = require('zrender/shape/Heart');
  14861. HeartShape.prototype.buildPath(ctx, {
  14862. x: style.x + style.width / 2,
  14863. y: style.y + style.height * 0.2,
  14864. a: style.width / 2,
  14865. b: style.height * 0.8
  14866. });
  14867. }
  14868. function _iconDroplet(ctx, style) {
  14869. var DropletShape = require('zrender/shape/Droplet');
  14870. DropletShape.prototype.buildPath(ctx, {
  14871. x: style.x + style.width * 0.5,
  14872. y: style.y + style.height * 0.5,
  14873. a: style.width * 0.5,
  14874. b: style.height * 0.8
  14875. });
  14876. }
  14877. function _iconPin(ctx, style) {
  14878. var x = style.x;
  14879. var y = style.y - style.height / 2 * 1.5;
  14880. var width = style.width / 2;
  14881. var height = style.height / 2;
  14882. var r = Math.min(width, height);
  14883. ctx.arc(x + width, y + height, r, Math.PI / 5 * 4, Math.PI / 5);
  14884. ctx.lineTo(x + width, y + height + r * 1.5);
  14885. ctx.closePath();
  14886. }
  14887. function _iconImage(ctx, style, refreshNextFrame) {
  14888. var ImageShape = require('zrender/shape/Image');
  14889. this._imageShape = this._imageShape || new ImageShape({ style: {} });
  14890. for (var name in style) {
  14891. this._imageShape.style[name] = style[name];
  14892. }
  14893. this._imageShape.brush(ctx, false, refreshNextFrame);
  14894. }
  14895. var Base = require('zrender/shape/Base');
  14896. function Icon(options) {
  14897. Base.call(this, options);
  14898. }
  14899. Icon.prototype = {
  14900. type: 'icon',
  14901. iconLibrary: {
  14902. mark: _iconMark,
  14903. markUndo: _iconMarkUndo,
  14904. markClear: _iconMarkClear,
  14905. dataZoom: _iconDataZoom,
  14906. dataZoomReset: _iconDataZoomReset,
  14907. restore: _iconRestore,
  14908. lineChart: _iconLineChart,
  14909. barChart: _iconBarChart,
  14910. pieChart: _iconPieChart,
  14911. funnelChart: _iconFunnelChart,
  14912. forceChart: _iconForceChart,
  14913. chordChart: _iconChordChart,
  14914. stackChart: _iconStackChart,
  14915. tiledChart: _iconTiledChart,
  14916. dataView: _iconDataView,
  14917. saveAsImage: _iconSave,
  14918. cross: _iconCross,
  14919. circle: _iconCircle,
  14920. rectangle: _iconRectangle,
  14921. triangle: _iconTriangle,
  14922. diamond: _iconDiamond,
  14923. arrow: _iconArrow,
  14924. star: _iconStar,
  14925. heart: _iconHeart,
  14926. droplet: _iconDroplet,
  14927. pin: _iconPin,
  14928. image: _iconImage
  14929. },
  14930. brush: function (ctx, isHighlight, refreshNextFrame) {
  14931. var style = isHighlight ? this.highlightStyle : this.style;
  14932. style = style || {};
  14933. var iconType = style.iconType || this.style.iconType;
  14934. if (iconType === 'image') {
  14935. var ImageShape = require('zrender/shape/Image');
  14936. ImageShape.prototype.brush.call(this, ctx, isHighlight, refreshNextFrame);
  14937. } else {
  14938. var style = this.beforeBrush(ctx, isHighlight);
  14939. ctx.beginPath();
  14940. this.buildPath(ctx, style, refreshNextFrame);
  14941. switch (style.brushType) {
  14942. case 'both':
  14943. ctx.fill();
  14944. case 'stroke':
  14945. style.lineWidth > 0 && ctx.stroke();
  14946. break;
  14947. default:
  14948. ctx.fill();
  14949. }
  14950. this.drawText(ctx, style, this.style);
  14951. this.afterBrush(ctx);
  14952. }
  14953. },
  14954. buildPath: function (ctx, style, refreshNextFrame) {
  14955. if (this.iconLibrary[style.iconType]) {
  14956. this.iconLibrary[style.iconType].call(this, ctx, style, refreshNextFrame);
  14957. } else {
  14958. ctx.moveTo(style.x, style.y);
  14959. ctx.lineTo(style.x + style.width, style.y);
  14960. ctx.lineTo(style.x + style.width, style.y + style.height);
  14961. ctx.lineTo(style.x, style.y + style.height);
  14962. ctx.lineTo(style.x, style.y);
  14963. ctx.closePath();
  14964. }
  14965. return;
  14966. },
  14967. getRect: function (style) {
  14968. if (style.__rect) {
  14969. return style.__rect;
  14970. }
  14971. style.__rect = {
  14972. x: Math.round(style.x),
  14973. y: Math.round(style.y - (style.iconType == 'pin' ? style.height / 2 * 1.5 : 0)),
  14974. width: style.width,
  14975. height: style.height * (style.iconType === 'pin' ? 1.25 : 1)
  14976. };
  14977. return style.__rect;
  14978. },
  14979. isCover: function (x, y) {
  14980. var originPos = this.transformCoordToLocal(x, y);
  14981. x = originPos[0];
  14982. y = originPos[1];
  14983. var rect = this.style.__rect;
  14984. if (!rect) {
  14985. rect = this.style.__rect = this.getRect(this.style);
  14986. }
  14987. var delta = rect.height < 8 || rect.width < 8 ? 4 : 0;
  14988. return x >= rect.x - delta && x <= rect.x + rect.width + delta && y >= rect.y - delta && y <= rect.y + rect.height + delta;
  14989. }
  14990. };
  14991. zrUtil.inherits(Icon, Base);
  14992. return Icon;
  14993. });define('echarts/util/shape/MarkLine', [
  14994. 'require',
  14995. 'zrender/shape/Base',
  14996. './Icon',
  14997. 'zrender/shape/Line',
  14998. 'zrender/shape/BezierCurve',
  14999. 'zrender/tool/area',
  15000. 'zrender/shape/util/dashedLineTo',
  15001. 'zrender/tool/util',
  15002. 'zrender/tool/curve'
  15003. ], function (require) {
  15004. var Base = require('zrender/shape/Base');
  15005. var IconShape = require('./Icon');
  15006. var LineShape = require('zrender/shape/Line');
  15007. var lineInstance = new LineShape({});
  15008. var CurveShape = require('zrender/shape/BezierCurve');
  15009. var curveInstance = new CurveShape({});
  15010. var area = require('zrender/tool/area');
  15011. var dashedLineTo = require('zrender/shape/util/dashedLineTo');
  15012. var zrUtil = require('zrender/tool/util');
  15013. var curveTool = require('zrender/tool/curve');
  15014. function MarkLine(options) {
  15015. Base.call(this, options);
  15016. if (this.style.curveness > 0) {
  15017. this.updatePoints(this.style);
  15018. }
  15019. if (this.highlightStyle.curveness > 0) {
  15020. this.updatePoints(this.highlightStyle);
  15021. }
  15022. }
  15023. MarkLine.prototype = {
  15024. type: 'mark-line',
  15025. brush: function (ctx, isHighlight) {
  15026. var style = this.style;
  15027. if (isHighlight) {
  15028. style = this.getHighlightStyle(style, this.highlightStyle || {});
  15029. }
  15030. ctx.save();
  15031. this.setContext(ctx, style);
  15032. this.setTransform(ctx);
  15033. ctx.save();
  15034. ctx.beginPath();
  15035. this.buildPath(ctx, style);
  15036. ctx.stroke();
  15037. ctx.restore();
  15038. this.brushSymbol(ctx, style, 0);
  15039. this.brushSymbol(ctx, style, 1);
  15040. this.drawText(ctx, style, this.style);
  15041. ctx.restore();
  15042. },
  15043. buildPath: function (ctx, style) {
  15044. var lineType = style.lineType || 'solid';
  15045. ctx.moveTo(style.xStart, style.yStart);
  15046. if (style.curveness > 0) {
  15047. var lineDash = null;
  15048. switch (lineType) {
  15049. case 'dashed':
  15050. lineDash = [
  15051. 5,
  15052. 5
  15053. ];
  15054. break;
  15055. case 'dotted':
  15056. lineDash = [
  15057. 1,
  15058. 1
  15059. ];
  15060. break;
  15061. }
  15062. if (lineDash && ctx.setLineDash) {
  15063. ctx.setLineDash(lineDash);
  15064. }
  15065. ctx.quadraticCurveTo(style.cpX1, style.cpY1, style.xEnd, style.yEnd);
  15066. } else {
  15067. if (lineType == 'solid') {
  15068. ctx.lineTo(style.xEnd, style.yEnd);
  15069. } else {
  15070. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  15071. dashedLineTo(ctx, style.xStart, style.yStart, style.xEnd, style.yEnd, dashLength);
  15072. }
  15073. }
  15074. },
  15075. updatePoints: function (style) {
  15076. var curveness = style.curveness || 0;
  15077. var inv = 1;
  15078. var x0 = style.xStart;
  15079. var y0 = style.yStart;
  15080. var x2 = style.xEnd;
  15081. var y2 = style.yEnd;
  15082. var x1 = (x0 + x2) / 2 - inv * (y0 - y2) * curveness;
  15083. var y1 = (y0 + y2) / 2 - inv * (x2 - x0) * curveness;
  15084. style.cpX1 = x1;
  15085. style.cpY1 = y1;
  15086. },
  15087. brushSymbol: function (ctx, style, idx) {
  15088. if (style.symbol[idx] == 'none') {
  15089. return;
  15090. }
  15091. ctx.save();
  15092. ctx.beginPath();
  15093. ctx.lineWidth = style.symbolBorder;
  15094. ctx.strokeStyle = style.symbolBorderColor;
  15095. var symbol = style.symbol[idx].replace('empty', '').toLowerCase();
  15096. if (style.symbol[idx].match('empty')) {
  15097. ctx.fillStyle = '#fff';
  15098. }
  15099. var x0 = style.xStart;
  15100. var y0 = style.yStart;
  15101. var x2 = style.xEnd;
  15102. var y2 = style.yEnd;
  15103. var x = idx === 0 ? x0 : x2;
  15104. var y = idx === 0 ? y0 : y2;
  15105. var curveness = style.curveness || 0;
  15106. var rotate = style.symbolRotate[idx] != null ? style.symbolRotate[idx] - 0 : 0;
  15107. rotate = rotate / 180 * Math.PI;
  15108. if (symbol == 'arrow' && rotate === 0) {
  15109. if (curveness === 0) {
  15110. var sign = idx === 0 ? -1 : 1;
  15111. rotate = Math.PI / 2 + Math.atan2(sign * (y2 - y0), sign * (x2 - x0));
  15112. } else {
  15113. var x1 = style.cpX1;
  15114. var y1 = style.cpY1;
  15115. var quadraticDerivativeAt = curveTool.quadraticDerivativeAt;
  15116. var dx = quadraticDerivativeAt(x0, x1, x2, idx);
  15117. var dy = quadraticDerivativeAt(y0, y1, y2, idx);
  15118. rotate = Math.PI / 2 + Math.atan2(dy, dx);
  15119. }
  15120. }
  15121. ctx.translate(x, y);
  15122. if (rotate !== 0) {
  15123. ctx.rotate(rotate);
  15124. }
  15125. var symbolSize = style.symbolSize[idx];
  15126. IconShape.prototype.buildPath(ctx, {
  15127. x: -symbolSize,
  15128. y: -symbolSize,
  15129. width: symbolSize * 2,
  15130. height: symbolSize * 2,
  15131. iconType: symbol
  15132. });
  15133. ctx.closePath();
  15134. ctx.fill();
  15135. ctx.stroke();
  15136. ctx.restore();
  15137. },
  15138. getRect: function (style) {
  15139. style.curveness > 0 ? curveInstance.getRect(style) : lineInstance.getRect(style);
  15140. return style.__rect;
  15141. },
  15142. isCover: function (x, y) {
  15143. var originPos = this.transformCoordToLocal(x, y);
  15144. x = originPos[0];
  15145. y = originPos[1];
  15146. if (this.isCoverRect(x, y)) {
  15147. return this.style.curveness > 0 ? area.isInside(curveInstance, this.style, x, y) : area.isInside(lineInstance, this.style, x, y);
  15148. }
  15149. return false;
  15150. }
  15151. };
  15152. zrUtil.inherits(MarkLine, Base);
  15153. return MarkLine;
  15154. });define('echarts/util/shape/Symbol', [
  15155. 'require',
  15156. 'zrender/shape/Base',
  15157. 'zrender/shape/Polygon',
  15158. 'zrender/tool/util',
  15159. './normalIsCover'
  15160. ], function (require) {
  15161. var Base = require('zrender/shape/Base');
  15162. var PolygonShape = require('zrender/shape/Polygon');
  15163. var polygonInstance = new PolygonShape({});
  15164. var zrUtil = require('zrender/tool/util');
  15165. function Symbol(options) {
  15166. Base.call(this, options);
  15167. }
  15168. Symbol.prototype = {
  15169. type: 'symbol',
  15170. buildPath: function (ctx, style) {
  15171. var pointList = style.pointList;
  15172. var len = pointList.length;
  15173. if (len === 0) {
  15174. return;
  15175. }
  15176. var subSize = 10000;
  15177. var subSetLength = Math.ceil(len / subSize);
  15178. var sub;
  15179. var subLen;
  15180. var isArray = pointList[0] instanceof Array;
  15181. var size = style.size ? style.size : 2;
  15182. var curSize = size;
  15183. var halfSize = size / 2;
  15184. var PI2 = Math.PI * 2;
  15185. var percent;
  15186. var x;
  15187. var y;
  15188. for (var j = 0; j < subSetLength; j++) {
  15189. ctx.beginPath();
  15190. sub = j * subSize;
  15191. subLen = sub + subSize;
  15192. subLen = subLen > len ? len : subLen;
  15193. for (var i = sub; i < subLen; i++) {
  15194. if (style.random) {
  15195. percent = style['randomMap' + i % 20] / 100;
  15196. curSize = size * percent * percent;
  15197. halfSize = curSize / 2;
  15198. }
  15199. if (isArray) {
  15200. x = pointList[i][0];
  15201. y = pointList[i][1];
  15202. } else {
  15203. x = pointList[i].x;
  15204. y = pointList[i].y;
  15205. }
  15206. if (curSize < 3) {
  15207. ctx.rect(x - halfSize, y - halfSize, curSize, curSize);
  15208. } else {
  15209. switch (style.iconType) {
  15210. case 'circle':
  15211. ctx.moveTo(x, y);
  15212. ctx.arc(x, y, halfSize, 0, PI2, true);
  15213. break;
  15214. case 'diamond':
  15215. ctx.moveTo(x, y - halfSize);
  15216. ctx.lineTo(x + halfSize / 3, y - halfSize / 3);
  15217. ctx.lineTo(x + halfSize, y);
  15218. ctx.lineTo(x + halfSize / 3, y + halfSize / 3);
  15219. ctx.lineTo(x, y + halfSize);
  15220. ctx.lineTo(x - halfSize / 3, y + halfSize / 3);
  15221. ctx.lineTo(x - halfSize, y);
  15222. ctx.lineTo(x - halfSize / 3, y - halfSize / 3);
  15223. ctx.lineTo(x, y - halfSize);
  15224. break;
  15225. default:
  15226. ctx.rect(x - halfSize, y - halfSize, curSize, curSize);
  15227. }
  15228. }
  15229. }
  15230. ctx.closePath();
  15231. if (j < subSetLength - 1) {
  15232. switch (style.brushType) {
  15233. case 'both':
  15234. ctx.fill();
  15235. style.lineWidth > 0 && ctx.stroke();
  15236. break;
  15237. case 'stroke':
  15238. style.lineWidth > 0 && ctx.stroke();
  15239. break;
  15240. default:
  15241. ctx.fill();
  15242. }
  15243. }
  15244. }
  15245. },
  15246. getRect: function (style) {
  15247. return style.__rect || polygonInstance.getRect(style);
  15248. },
  15249. isCover: require('./normalIsCover')
  15250. };
  15251. zrUtil.inherits(Symbol, Base);
  15252. return Symbol;
  15253. });define('zrender/shape/Polyline', [
  15254. 'require',
  15255. './Base',
  15256. './util/smoothSpline',
  15257. './util/smoothBezier',
  15258. './util/dashedLineTo',
  15259. './Polygon',
  15260. '../tool/util'
  15261. ], function (require) {
  15262. var Base = require('./Base');
  15263. var smoothSpline = require('./util/smoothSpline');
  15264. var smoothBezier = require('./util/smoothBezier');
  15265. var dashedLineTo = require('./util/dashedLineTo');
  15266. var Polyline = function (options) {
  15267. this.brushTypeOnly = 'stroke';
  15268. this.textPosition = 'end';
  15269. Base.call(this, options);
  15270. };
  15271. Polyline.prototype = {
  15272. type: 'polyline',
  15273. buildPath: function (ctx, style) {
  15274. var pointList = style.pointList;
  15275. if (pointList.length < 2) {
  15276. return;
  15277. }
  15278. var len = Math.min(style.pointList.length, Math.round(style.pointListLength || style.pointList.length));
  15279. if (style.smooth && style.smooth !== 'spline') {
  15280. if (!style.controlPointList) {
  15281. this.updateControlPoints(style);
  15282. }
  15283. var controlPointList = style.controlPointList;
  15284. ctx.moveTo(pointList[0][0], pointList[0][1]);
  15285. var cp1;
  15286. var cp2;
  15287. var p;
  15288. for (var i = 0; i < len - 1; i++) {
  15289. cp1 = controlPointList[i * 2];
  15290. cp2 = controlPointList[i * 2 + 1];
  15291. p = pointList[i + 1];
  15292. ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
  15293. }
  15294. } else {
  15295. if (style.smooth === 'spline') {
  15296. pointList = smoothSpline(pointList);
  15297. len = pointList.length;
  15298. }
  15299. if (!style.lineType || style.lineType == 'solid') {
  15300. ctx.moveTo(pointList[0][0], pointList[0][1]);
  15301. for (var i = 1; i < len; i++) {
  15302. ctx.lineTo(pointList[i][0], pointList[i][1]);
  15303. }
  15304. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  15305. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  15306. ctx.moveTo(pointList[0][0], pointList[0][1]);
  15307. for (var i = 1; i < len; i++) {
  15308. dashedLineTo(ctx, pointList[i - 1][0], pointList[i - 1][1], pointList[i][0], pointList[i][1], dashLength);
  15309. }
  15310. }
  15311. }
  15312. return;
  15313. },
  15314. updateControlPoints: function (style) {
  15315. style.controlPointList = smoothBezier(style.pointList, style.smooth, false, style.smoothConstraint);
  15316. },
  15317. getRect: function (style) {
  15318. return require('./Polygon').prototype.getRect(style);
  15319. }
  15320. };
  15321. require('../tool/util').inherits(Polyline, Base);
  15322. return Polyline;
  15323. });define('zrender/shape/ShapeBundle', [
  15324. 'require',
  15325. './Base',
  15326. '../tool/util'
  15327. ], function (require) {
  15328. var Base = require('./Base');
  15329. var ShapeBundle = function (options) {
  15330. Base.call(this, options);
  15331. };
  15332. ShapeBundle.prototype = {
  15333. constructor: ShapeBundle,
  15334. type: 'shape-bundle',
  15335. brush: function (ctx, isHighlight) {
  15336. var style = this.beforeBrush(ctx, isHighlight);
  15337. ctx.beginPath();
  15338. for (var i = 0; i < style.shapeList.length; i++) {
  15339. var subShape = style.shapeList[i];
  15340. var subShapeStyle = subShape.style;
  15341. if (isHighlight) {
  15342. subShapeStyle = subShape.getHighlightStyle(subShapeStyle, subShape.highlightStyle || {}, subShape.brushTypeOnly);
  15343. }
  15344. subShape.buildPath(ctx, subShapeStyle);
  15345. }
  15346. switch (style.brushType) {
  15347. case 'both':
  15348. ctx.fill();
  15349. case 'stroke':
  15350. style.lineWidth > 0 && ctx.stroke();
  15351. break;
  15352. default:
  15353. ctx.fill();
  15354. }
  15355. this.drawText(ctx, style, this.style);
  15356. this.afterBrush(ctx);
  15357. },
  15358. getRect: function (style) {
  15359. if (style.__rect) {
  15360. return style.__rect;
  15361. }
  15362. var minX = Infinity;
  15363. var maxX = -Infinity;
  15364. var minY = Infinity;
  15365. var maxY = -Infinity;
  15366. for (var i = 0; i < style.shapeList.length; i++) {
  15367. var subShape = style.shapeList[i];
  15368. var subRect = subShape.getRect(subShape.style);
  15369. var minX = Math.min(subRect.x, minX);
  15370. var minY = Math.min(subRect.y, minY);
  15371. var maxX = Math.max(subRect.x + subRect.width, maxX);
  15372. var maxY = Math.max(subRect.y + subRect.height, maxY);
  15373. }
  15374. style.__rect = {
  15375. x: minX,
  15376. y: minY,
  15377. width: maxX - minX,
  15378. height: maxY - minY
  15379. };
  15380. return style.__rect;
  15381. },
  15382. isCover: function (x, y) {
  15383. var originPos = this.transformCoordToLocal(x, y);
  15384. x = originPos[0];
  15385. y = originPos[1];
  15386. if (this.isCoverRect(x, y)) {
  15387. for (var i = 0; i < this.style.shapeList.length; i++) {
  15388. var subShape = this.style.shapeList[i];
  15389. if (subShape.isCover(x, y)) {
  15390. return true;
  15391. }
  15392. }
  15393. }
  15394. return false;
  15395. }
  15396. };
  15397. require('../tool/util').inherits(ShapeBundle, Base);
  15398. return ShapeBundle;
  15399. });define('echarts/util/ecAnimation', [
  15400. 'require',
  15401. 'zrender/tool/util',
  15402. 'zrender/tool/curve',
  15403. 'zrender/shape/Polygon'
  15404. ], function (require) {
  15405. var zrUtil = require('zrender/tool/util');
  15406. var curveTool = require('zrender/tool/curve');
  15407. function pointList(zr, oldShape, newShape, duration, easing) {
  15408. var newPointList = newShape.style.pointList;
  15409. var newPointListLen = newPointList.length;
  15410. var oldPointList;
  15411. if (!oldShape) {
  15412. oldPointList = [];
  15413. if (newShape._orient != 'vertical') {
  15414. var y = newPointList[0][1];
  15415. for (var i = 0; i < newPointListLen; i++) {
  15416. oldPointList[i] = [
  15417. newPointList[i][0],
  15418. y
  15419. ];
  15420. }
  15421. } else {
  15422. var x = newPointList[0][0];
  15423. for (var i = 0; i < newPointListLen; i++) {
  15424. oldPointList[i] = [
  15425. x,
  15426. newPointList[i][1]
  15427. ];
  15428. }
  15429. }
  15430. if (newShape.type == 'half-smooth-polygon') {
  15431. oldPointList[newPointListLen - 1] = zrUtil.clone(newPointList[newPointListLen - 1]);
  15432. oldPointList[newPointListLen - 2] = zrUtil.clone(newPointList[newPointListLen - 2]);
  15433. }
  15434. oldShape = { style: { pointList: oldPointList } };
  15435. }
  15436. oldPointList = oldShape.style.pointList;
  15437. var oldPointListLen = oldPointList.length;
  15438. if (oldPointListLen == newPointListLen) {
  15439. newShape.style.pointList = oldPointList;
  15440. } else if (oldPointListLen < newPointListLen) {
  15441. newShape.style.pointList = oldPointList.concat(newPointList.slice(oldPointListLen));
  15442. } else {
  15443. newShape.style.pointList = oldPointList.slice(0, newPointListLen);
  15444. }
  15445. zr.addShape(newShape);
  15446. newShape.__animating = true;
  15447. zr.animate(newShape.id, 'style').when(duration, { pointList: newPointList }).during(function () {
  15448. if (newShape.updateControlPoints) {
  15449. newShape.updateControlPoints(newShape.style);
  15450. }
  15451. }).done(function () {
  15452. newShape.__animating = false;
  15453. }).start(easing);
  15454. }
  15455. function cloneStyle(target, source) {
  15456. var len = arguments.length;
  15457. for (var i = 2; i < len; i++) {
  15458. var prop = arguments[i];
  15459. target.style[prop] = source.style[prop];
  15460. }
  15461. }
  15462. function rectangle(zr, oldShape, newShape, duration, easing) {
  15463. var newShapeStyle = newShape.style;
  15464. if (!oldShape) {
  15465. oldShape = {
  15466. position: newShape.position,
  15467. style: {
  15468. x: newShapeStyle.x,
  15469. y: newShape._orient == 'vertical' ? newShapeStyle.y + newShapeStyle.height : newShapeStyle.y,
  15470. width: newShape._orient == 'vertical' ? newShapeStyle.width : 0,
  15471. height: newShape._orient != 'vertical' ? newShapeStyle.height : 0
  15472. }
  15473. };
  15474. }
  15475. var newX = newShapeStyle.x;
  15476. var newY = newShapeStyle.y;
  15477. var newWidth = newShapeStyle.width;
  15478. var newHeight = newShapeStyle.height;
  15479. var newPosition = [
  15480. newShape.position[0],
  15481. newShape.position[1]
  15482. ];
  15483. cloneStyle(newShape, oldShape, 'x', 'y', 'width', 'height');
  15484. newShape.position = oldShape.position;
  15485. zr.addShape(newShape);
  15486. if (newPosition[0] != oldShape.position[0] || newPosition[1] != oldShape.position[1]) {
  15487. zr.animate(newShape.id, '').when(duration, { position: newPosition }).start(easing);
  15488. }
  15489. newShape.__animating = true;
  15490. zr.animate(newShape.id, 'style').when(duration, {
  15491. x: newX,
  15492. y: newY,
  15493. width: newWidth,
  15494. height: newHeight
  15495. }).done(function () {
  15496. newShape.__animating = false;
  15497. }).start(easing);
  15498. }
  15499. function candle(zr, oldShape, newShape, duration, easing) {
  15500. if (!oldShape) {
  15501. var y = newShape.style.y;
  15502. oldShape = {
  15503. style: {
  15504. y: [
  15505. y[0],
  15506. y[0],
  15507. y[0],
  15508. y[0]
  15509. ]
  15510. }
  15511. };
  15512. }
  15513. var newY = newShape.style.y;
  15514. newShape.style.y = oldShape.style.y;
  15515. zr.addShape(newShape);
  15516. newShape.__animating = true;
  15517. zr.animate(newShape.id, 'style').when(duration, { y: newY }).done(function () {
  15518. newShape.__animating = false;
  15519. }).start(easing);
  15520. }
  15521. function ring(zr, oldShape, newShape, duration, easing) {
  15522. var x = newShape.style.x;
  15523. var y = newShape.style.y;
  15524. var r0 = newShape.style.r0;
  15525. var r = newShape.style.r;
  15526. newShape.__animating = true;
  15527. if (newShape._animationAdd != 'r') {
  15528. newShape.style.r0 = 0;
  15529. newShape.style.r = 0;
  15530. newShape.rotation = [
  15531. Math.PI * 2,
  15532. x,
  15533. y
  15534. ];
  15535. zr.addShape(newShape);
  15536. zr.animate(newShape.id, 'style').when(duration, {
  15537. r0: r0,
  15538. r: r
  15539. }).done(function () {
  15540. newShape.__animating = false;
  15541. }).start(easing);
  15542. zr.animate(newShape.id, '').when(duration, {
  15543. rotation: [
  15544. 0,
  15545. x,
  15546. y
  15547. ]
  15548. }).start(easing);
  15549. } else {
  15550. newShape.style.r0 = newShape.style.r;
  15551. zr.addShape(newShape);
  15552. zr.animate(newShape.id, 'style').when(duration, { r0: r0 }).done(function () {
  15553. newShape.__animating = false;
  15554. }).start(easing);
  15555. }
  15556. }
  15557. function sector(zr, oldShape, newShape, duration, easing) {
  15558. if (!oldShape) {
  15559. if (newShape._animationAdd != 'r') {
  15560. oldShape = {
  15561. style: {
  15562. startAngle: newShape.style.startAngle,
  15563. endAngle: newShape.style.startAngle
  15564. }
  15565. };
  15566. } else {
  15567. oldShape = { style: { r0: newShape.style.r } };
  15568. }
  15569. }
  15570. var startAngle = newShape.style.startAngle;
  15571. var endAngle = newShape.style.endAngle;
  15572. cloneStyle(newShape, oldShape, 'startAngle', 'endAngle');
  15573. zr.addShape(newShape);
  15574. newShape.__animating = true;
  15575. zr.animate(newShape.id, 'style').when(duration, {
  15576. startAngle: startAngle,
  15577. endAngle: endAngle
  15578. }).done(function () {
  15579. newShape.__animating = false;
  15580. }).start(easing);
  15581. }
  15582. function text(zr, oldShape, newShape, duration, easing) {
  15583. if (!oldShape) {
  15584. oldShape = {
  15585. style: {
  15586. x: newShape.style.textAlign == 'left' ? newShape.style.x + 100 : newShape.style.x - 100,
  15587. y: newShape.style.y
  15588. }
  15589. };
  15590. }
  15591. var x = newShape.style.x;
  15592. var y = newShape.style.y;
  15593. cloneStyle(newShape, oldShape, 'x', 'y');
  15594. zr.addShape(newShape);
  15595. newShape.__animating = true;
  15596. zr.animate(newShape.id, 'style').when(duration, {
  15597. x: x,
  15598. y: y
  15599. }).done(function () {
  15600. newShape.__animating = false;
  15601. }).start(easing);
  15602. }
  15603. function polygon(zr, oldShape, newShape, duration, easing) {
  15604. var rect = require('zrender/shape/Polygon').prototype.getRect(newShape.style);
  15605. var x = rect.x + rect.width / 2;
  15606. var y = rect.y + rect.height / 2;
  15607. newShape.scale = [
  15608. 0.1,
  15609. 0.1,
  15610. x,
  15611. y
  15612. ];
  15613. zr.addShape(newShape);
  15614. newShape.__animating = true;
  15615. zr.animate(newShape.id, '').when(duration, {
  15616. scale: [
  15617. 1,
  15618. 1,
  15619. x,
  15620. y
  15621. ]
  15622. }).done(function () {
  15623. newShape.__animating = false;
  15624. }).start(easing);
  15625. }
  15626. function ribbon(zr, oldShape, newShape, duration, easing) {
  15627. if (!oldShape) {
  15628. oldShape = {
  15629. style: {
  15630. source0: 0,
  15631. source1: newShape.style.source1 > 0 ? 360 : -360,
  15632. target0: 0,
  15633. target1: newShape.style.target1 > 0 ? 360 : -360
  15634. }
  15635. };
  15636. }
  15637. var source0 = newShape.style.source0;
  15638. var source1 = newShape.style.source1;
  15639. var target0 = newShape.style.target0;
  15640. var target1 = newShape.style.target1;
  15641. if (oldShape.style) {
  15642. cloneStyle(newShape, oldShape, 'source0', 'source1', 'target0', 'target1');
  15643. }
  15644. zr.addShape(newShape);
  15645. newShape.__animating = true;
  15646. zr.animate(newShape.id, 'style').when(duration, {
  15647. source0: source0,
  15648. source1: source1,
  15649. target0: target0,
  15650. target1: target1
  15651. }).done(function () {
  15652. newShape.__animating = false;
  15653. }).start(easing);
  15654. }
  15655. function gaugePointer(zr, oldShape, newShape, duration, easing) {
  15656. if (!oldShape) {
  15657. oldShape = { style: { angle: newShape.style.startAngle } };
  15658. }
  15659. var angle = newShape.style.angle;
  15660. newShape.style.angle = oldShape.style.angle;
  15661. zr.addShape(newShape);
  15662. newShape.__animating = true;
  15663. zr.animate(newShape.id, 'style').when(duration, { angle: angle }).done(function () {
  15664. newShape.__animating = false;
  15665. }).start(easing);
  15666. }
  15667. function icon(zr, oldShape, newShape, duration, easing, delay) {
  15668. newShape.style._x = newShape.style.x;
  15669. newShape.style._y = newShape.style.y;
  15670. newShape.style._width = newShape.style.width;
  15671. newShape.style._height = newShape.style.height;
  15672. if (!oldShape) {
  15673. var x = newShape._x || 0;
  15674. var y = newShape._y || 0;
  15675. newShape.scale = [
  15676. 0.01,
  15677. 0.01,
  15678. x,
  15679. y
  15680. ];
  15681. zr.addShape(newShape);
  15682. newShape.__animating = true;
  15683. zr.animate(newShape.id, '').delay(delay).when(duration, {
  15684. scale: [
  15685. 1,
  15686. 1,
  15687. x,
  15688. y
  15689. ]
  15690. }).done(function () {
  15691. newShape.__animating = false;
  15692. }).start(easing || 'QuinticOut');
  15693. } else {
  15694. rectangle(zr, oldShape, newShape, duration, easing);
  15695. }
  15696. }
  15697. function line(zr, oldShape, newShape, duration, easing) {
  15698. if (!oldShape) {
  15699. oldShape = {
  15700. style: {
  15701. xStart: newShape.style.xStart,
  15702. yStart: newShape.style.yStart,
  15703. xEnd: newShape.style.xStart,
  15704. yEnd: newShape.style.yStart
  15705. }
  15706. };
  15707. }
  15708. var xStart = newShape.style.xStart;
  15709. var xEnd = newShape.style.xEnd;
  15710. var yStart = newShape.style.yStart;
  15711. var yEnd = newShape.style.yEnd;
  15712. cloneStyle(newShape, oldShape, 'xStart', 'xEnd', 'yStart', 'yEnd');
  15713. zr.addShape(newShape);
  15714. newShape.__animating = true;
  15715. zr.animate(newShape.id, 'style').when(duration, {
  15716. xStart: xStart,
  15717. xEnd: xEnd,
  15718. yStart: yStart,
  15719. yEnd: yEnd
  15720. }).done(function () {
  15721. newShape.__animating = false;
  15722. }).start(easing);
  15723. }
  15724. function markline(zr, oldShape, newShape, duration, easing) {
  15725. easing = easing || 'QuinticOut';
  15726. newShape.__animating = true;
  15727. zr.addShape(newShape);
  15728. var newShapeStyle = newShape.style;
  15729. var animationDone = function () {
  15730. newShape.__animating = false;
  15731. };
  15732. var x0 = newShapeStyle.xStart;
  15733. var y0 = newShapeStyle.yStart;
  15734. var x2 = newShapeStyle.xEnd;
  15735. var y2 = newShapeStyle.yEnd;
  15736. if (newShapeStyle.curveness > 0) {
  15737. newShape.updatePoints(newShapeStyle);
  15738. var obj = { p: 0 };
  15739. var x1 = newShapeStyle.cpX1;
  15740. var y1 = newShapeStyle.cpY1;
  15741. var newXArr = [];
  15742. var newYArr = [];
  15743. var subdivide = curveTool.quadraticSubdivide;
  15744. zr.animation.animate(obj).when(duration, { p: 1 }).during(function () {
  15745. subdivide(x0, x1, x2, obj.p, newXArr);
  15746. subdivide(y0, y1, y2, obj.p, newYArr);
  15747. newShapeStyle.cpX1 = newXArr[1];
  15748. newShapeStyle.cpY1 = newYArr[1];
  15749. newShapeStyle.xEnd = newXArr[2];
  15750. newShapeStyle.yEnd = newYArr[2];
  15751. zr.modShape(newShape);
  15752. }).done(animationDone).start(easing);
  15753. } else {
  15754. zr.animate(newShape.id, 'style').when(0, {
  15755. xEnd: x0,
  15756. yEnd: y0
  15757. }).when(duration, {
  15758. xEnd: x2,
  15759. yEnd: y2
  15760. }).done(animationDone).start(easing);
  15761. }
  15762. }
  15763. return {
  15764. pointList: pointList,
  15765. rectangle: rectangle,
  15766. candle: candle,
  15767. ring: ring,
  15768. sector: sector,
  15769. text: text,
  15770. polygon: polygon,
  15771. ribbon: ribbon,
  15772. gaugePointer: gaugePointer,
  15773. icon: icon,
  15774. line: line,
  15775. markline: markline
  15776. };
  15777. });define('echarts/util/ecEffect', [
  15778. 'require',
  15779. '../util/ecData',
  15780. 'zrender/shape/Circle',
  15781. 'zrender/shape/Image',
  15782. 'zrender/tool/curve',
  15783. '../util/shape/Icon',
  15784. '../util/shape/Symbol',
  15785. 'zrender/shape/ShapeBundle',
  15786. 'zrender/shape/Polyline',
  15787. 'zrender/tool/vector',
  15788. 'zrender/tool/env'
  15789. ], function (require) {
  15790. var ecData = require('../util/ecData');
  15791. var CircleShape = require('zrender/shape/Circle');
  15792. var ImageShape = require('zrender/shape/Image');
  15793. var curveTool = require('zrender/tool/curve');
  15794. var IconShape = require('../util/shape/Icon');
  15795. var SymbolShape = require('../util/shape/Symbol');
  15796. var ShapeBundle = require('zrender/shape/ShapeBundle');
  15797. var Polyline = require('zrender/shape/Polyline');
  15798. var vec2 = require('zrender/tool/vector');
  15799. var canvasSupported = require('zrender/tool/env').canvasSupported;
  15800. function point(zr, effectList, shape, zlevel) {
  15801. var effect = shape.effect;
  15802. var color = effect.color || shape.style.strokeColor || shape.style.color;
  15803. var shadowColor = effect.shadowColor || color;
  15804. var size = effect.scaleSize;
  15805. var distance = effect.bounceDistance;
  15806. var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size;
  15807. var effectShape;
  15808. if (shape.type !== 'image') {
  15809. effectShape = new IconShape({
  15810. zlevel: zlevel,
  15811. style: {
  15812. brushType: 'stroke',
  15813. iconType: shape.style.iconType != 'droplet' ? shape.style.iconType : 'circle',
  15814. x: shadowBlur + 1,
  15815. y: shadowBlur + 1,
  15816. n: shape.style.n,
  15817. width: shape.style._width * size,
  15818. height: shape.style._height * size,
  15819. lineWidth: 1,
  15820. strokeColor: color,
  15821. shadowColor: shadowColor,
  15822. shadowBlur: shadowBlur
  15823. },
  15824. draggable: false,
  15825. hoverable: false
  15826. });
  15827. if (shape.style.iconType == 'pin') {
  15828. effectShape.style.y += effectShape.style.height / 2 * 1.5;
  15829. }
  15830. if (canvasSupported) {
  15831. effectShape.style.image = zr.shapeToImage(effectShape, effectShape.style.width + shadowBlur * 2 + 2, effectShape.style.height + shadowBlur * 2 + 2).style.image;
  15832. effectShape = new ImageShape({
  15833. zlevel: effectShape.zlevel,
  15834. style: effectShape.style,
  15835. draggable: false,
  15836. hoverable: false
  15837. });
  15838. }
  15839. } else {
  15840. effectShape = new ImageShape({
  15841. zlevel: zlevel,
  15842. style: shape.style,
  15843. draggable: false,
  15844. hoverable: false
  15845. });
  15846. }
  15847. ecData.clone(shape, effectShape);
  15848. effectShape.position = shape.position;
  15849. effectList.push(effectShape);
  15850. zr.addShape(effectShape);
  15851. var devicePixelRatio = shape.type !== 'image' ? window.devicePixelRatio || 1 : 1;
  15852. var offset = (effectShape.style.width / devicePixelRatio - shape.style._width) / 2;
  15853. effectShape.style.x = shape.style._x - offset;
  15854. effectShape.style.y = shape.style._y - offset;
  15855. if (shape.style.iconType == 'pin') {
  15856. effectShape.style.y -= shape.style.height / 2 * 1.5;
  15857. }
  15858. var duration = (effect.period + Math.random() * 10) * 100;
  15859. zr.modShape(shape.id, { invisible: true });
  15860. var centerX = effectShape.style.x + effectShape.style.width / 2 / devicePixelRatio;
  15861. var centerY = effectShape.style.y + effectShape.style.height / 2 / devicePixelRatio;
  15862. if (effect.type === 'scale') {
  15863. zr.modShape(effectShape.id, {
  15864. scale: [
  15865. 0.1,
  15866. 0.1,
  15867. centerX,
  15868. centerY
  15869. ]
  15870. });
  15871. zr.animate(effectShape.id, '', effect.loop).when(duration, {
  15872. scale: [
  15873. 1,
  15874. 1,
  15875. centerX,
  15876. centerY
  15877. ]
  15878. }).done(function () {
  15879. shape.effect.show = false;
  15880. zr.delShape(effectShape.id);
  15881. }).start();
  15882. } else {
  15883. zr.animate(effectShape.id, 'style', effect.loop).when(duration, { y: effectShape.style.y - distance }).when(duration * 2, { y: effectShape.style.y }).done(function () {
  15884. shape.effect.show = false;
  15885. zr.delShape(effectShape.id);
  15886. }).start();
  15887. }
  15888. }
  15889. function largePoint(zr, effectList, shape, zlevel) {
  15890. var effect = shape.effect;
  15891. var color = effect.color || shape.style.strokeColor || shape.style.color;
  15892. var size = effect.scaleSize;
  15893. var shadowColor = effect.shadowColor || color;
  15894. var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size * 2;
  15895. var devicePixelRatio = window.devicePixelRatio || 1;
  15896. var effectShape = new SymbolShape({
  15897. zlevel: zlevel,
  15898. position: shape.position,
  15899. scale: shape.scale,
  15900. style: {
  15901. pointList: shape.style.pointList,
  15902. iconType: shape.style.iconType,
  15903. color: color,
  15904. strokeColor: color,
  15905. shadowColor: shadowColor,
  15906. shadowBlur: shadowBlur * devicePixelRatio,
  15907. random: true,
  15908. brushType: 'fill',
  15909. lineWidth: 1,
  15910. size: shape.style.size
  15911. },
  15912. draggable: false,
  15913. hoverable: false
  15914. });
  15915. effectList.push(effectShape);
  15916. zr.addShape(effectShape);
  15917. zr.modShape(shape.id, { invisible: true });
  15918. var duration = Math.round(effect.period * 100);
  15919. var clip1 = {};
  15920. var clip2 = {};
  15921. for (var i = 0; i < 20; i++) {
  15922. effectShape.style['randomMap' + i] = 0;
  15923. clip1 = {};
  15924. clip1['randomMap' + i] = 100;
  15925. clip2 = {};
  15926. clip2['randomMap' + i] = 0;
  15927. effectShape.style['randomMap' + i] = Math.random() * 100;
  15928. zr.animate(effectShape.id, 'style', true).when(duration, clip1).when(duration * 2, clip2).when(duration * 3, clip1).when(duration * 4, clip1).delay(Math.random() * duration * i).start();
  15929. }
  15930. }
  15931. function line(zr, effectList, shape, zlevel, isLarge) {
  15932. var effect = shape.effect;
  15933. var shapeStyle = shape.style;
  15934. var color = effect.color || shapeStyle.strokeColor || shapeStyle.color;
  15935. var shadowColor = effect.shadowColor || shapeStyle.strokeColor || color;
  15936. var size = shapeStyle.lineWidth * effect.scaleSize;
  15937. var shadowBlur = typeof effect.shadowBlur != 'undefined' ? effect.shadowBlur : size;
  15938. var effectShape = new CircleShape({
  15939. zlevel: zlevel,
  15940. style: {
  15941. x: shadowBlur,
  15942. y: shadowBlur,
  15943. r: size,
  15944. color: color,
  15945. shadowColor: shadowColor,
  15946. shadowBlur: shadowBlur
  15947. },
  15948. hoverable: false
  15949. });
  15950. var offset = 0;
  15951. if (canvasSupported && !isLarge) {
  15952. var zlevel = effectShape.zlevel;
  15953. effectShape = zr.shapeToImage(effectShape, (size + shadowBlur) * 2, (size + shadowBlur) * 2);
  15954. effectShape.zlevel = zlevel;
  15955. effectShape.hoverable = false;
  15956. offset = shadowBlur;
  15957. }
  15958. if (!isLarge) {
  15959. ecData.clone(shape, effectShape);
  15960. effectShape.position = shape.position;
  15961. effectList.push(effectShape);
  15962. zr.addShape(effectShape);
  15963. }
  15964. var effectDone = function () {
  15965. if (!isLarge) {
  15966. shape.effect.show = false;
  15967. zr.delShape(effectShape.id);
  15968. }
  15969. effectShape.effectAnimator = null;
  15970. };
  15971. if (shape instanceof Polyline) {
  15972. var distanceList = [0];
  15973. var totalDist = 0;
  15974. var pointList = shapeStyle.pointList;
  15975. var controlPointList = shapeStyle.controlPointList;
  15976. for (var i = 1; i < pointList.length; i++) {
  15977. if (controlPointList) {
  15978. var cp1 = controlPointList[(i - 1) * 2];
  15979. var cp2 = controlPointList[(i - 1) * 2 + 1];
  15980. totalDist += vec2.dist(pointList[i - 1], cp1) + vec2.dist(cp1, cp2) + vec2.dist(cp2, pointList[i]);
  15981. } else {
  15982. totalDist += vec2.dist(pointList[i - 1], pointList[i]);
  15983. }
  15984. distanceList.push(totalDist);
  15985. }
  15986. var obj = { p: 0 };
  15987. var animator = zr.animation.animate(obj, { loop: effect.loop });
  15988. for (var i = 0; i < distanceList.length; i++) {
  15989. animator.when(distanceList[i] * effect.period, { p: i });
  15990. }
  15991. animator.during(function () {
  15992. var i = Math.floor(obj.p);
  15993. var x, y;
  15994. if (i == pointList.length - 1) {
  15995. x = pointList[i][0];
  15996. y = pointList[i][1];
  15997. } else {
  15998. var t = obj.p - i;
  15999. var p0 = pointList[i];
  16000. var p1 = pointList[i + 1];
  16001. if (controlPointList) {
  16002. var cp1 = controlPointList[i * 2];
  16003. var cp2 = controlPointList[i * 2 + 1];
  16004. x = curveTool.cubicAt(p0[0], cp1[0], cp2[0], p1[0], t);
  16005. y = curveTool.cubicAt(p0[1], cp1[1], cp2[1], p1[1], t);
  16006. } else {
  16007. x = (p1[0] - p0[0]) * t + p0[0];
  16008. y = (p1[1] - p0[1]) * t + p0[1];
  16009. }
  16010. }
  16011. effectShape.style.x = x;
  16012. effectShape.style.y = y;
  16013. if (!isLarge) {
  16014. zr.modShape(effectShape);
  16015. }
  16016. }).done(effectDone).start();
  16017. animator.duration = totalDist * effect.period;
  16018. effectShape.effectAnimator = animator;
  16019. } else {
  16020. var x0 = shapeStyle.xStart - offset;
  16021. var y0 = shapeStyle.yStart - offset;
  16022. var x2 = shapeStyle.xEnd - offset;
  16023. var y2 = shapeStyle.yEnd - offset;
  16024. effectShape.style.x = x0;
  16025. effectShape.style.y = y0;
  16026. var distance = (x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0);
  16027. var duration = Math.round(Math.sqrt(Math.round(distance * effect.period * effect.period)));
  16028. if (shape.style.curveness > 0) {
  16029. var x1 = shapeStyle.cpX1 - offset;
  16030. var y1 = shapeStyle.cpY1 - offset;
  16031. effectShape.effectAnimator = zr.animation.animate(effectShape, { loop: effect.loop }).when(duration, { p: 1 }).during(function (target, t) {
  16032. effectShape.style.x = curveTool.quadraticAt(x0, x1, x2, t);
  16033. effectShape.style.y = curveTool.quadraticAt(y0, y1, y2, t);
  16034. if (!isLarge) {
  16035. zr.modShape(effectShape);
  16036. }
  16037. }).done(effectDone).start();
  16038. } else {
  16039. effectShape.effectAnimator = zr.animation.animate(effectShape.style, { loop: effect.loop }).when(duration, {
  16040. x: x2,
  16041. y: y2
  16042. }).during(function () {
  16043. if (!isLarge) {
  16044. zr.modShape(effectShape);
  16045. }
  16046. }).done(effectDone).start();
  16047. }
  16048. effectShape.effectAnimator.duration = duration;
  16049. }
  16050. return effectShape;
  16051. }
  16052. function largeLine(zr, effectList, shape, zlevel) {
  16053. var effectShape = new ShapeBundle({
  16054. style: { shapeList: [] },
  16055. zlevel: zlevel,
  16056. hoverable: false
  16057. });
  16058. var shapeList = shape.style.shapeList;
  16059. var effect = shape.effect;
  16060. effectShape.position = shape.position;
  16061. var maxDuration = 0;
  16062. var subEffectAnimators = [];
  16063. for (var i = 0; i < shapeList.length; i++) {
  16064. shapeList[i].effect = effect;
  16065. var subEffectShape = line(zr, null, shapeList[i], zlevel, true);
  16066. var subEffectAnimator = subEffectShape.effectAnimator;
  16067. effectShape.style.shapeList.push(subEffectShape);
  16068. if (subEffectAnimator.duration > maxDuration) {
  16069. maxDuration = subEffectAnimator.duration;
  16070. }
  16071. if (i === 0) {
  16072. effectShape.style.color = subEffectShape.style.color;
  16073. effectShape.style.shadowBlur = subEffectShape.style.shadowBlur;
  16074. effectShape.style.shadowColor = subEffectShape.style.shadowColor;
  16075. }
  16076. subEffectAnimators.push(subEffectAnimator);
  16077. }
  16078. effectList.push(effectShape);
  16079. zr.addShape(effectShape);
  16080. var clearAllAnimators = function () {
  16081. for (var i = 0; i < subEffectAnimators.length; i++) {
  16082. subEffectAnimators[i].stop();
  16083. }
  16084. };
  16085. if (maxDuration) {
  16086. effectShape.__dummy = 0;
  16087. var animator = zr.animate(effectShape.id, '', effect.loop).when(maxDuration, { __dummy: 1 }).during(function () {
  16088. zr.modShape(effectShape);
  16089. }).done(function () {
  16090. shape.effect.show = false;
  16091. zr.delShape(effectShape.id);
  16092. }).start();
  16093. var oldStop = animator.stop;
  16094. animator.stop = function () {
  16095. clearAllAnimators();
  16096. oldStop.call(this);
  16097. };
  16098. }
  16099. }
  16100. return {
  16101. point: point,
  16102. largePoint: largePoint,
  16103. line: line,
  16104. largeLine: largeLine
  16105. };
  16106. });define('echarts/component/base', [
  16107. 'require',
  16108. '../config',
  16109. '../util/ecData',
  16110. '../util/ecQuery',
  16111. '../util/number',
  16112. 'zrender/tool/util',
  16113. 'zrender/tool/env'
  16114. ], function (require) {
  16115. var ecConfig = require('../config');
  16116. var ecData = require('../util/ecData');
  16117. var ecQuery = require('../util/ecQuery');
  16118. var number = require('../util/number');
  16119. var zrUtil = require('zrender/tool/util');
  16120. function Base(ecTheme, messageCenter, zr, option, myChart) {
  16121. this.ecTheme = ecTheme;
  16122. this.messageCenter = messageCenter;
  16123. this.zr = zr;
  16124. this.option = option;
  16125. this.series = option.series;
  16126. this.myChart = myChart;
  16127. this.component = myChart.component;
  16128. this.shapeList = [];
  16129. this.effectList = [];
  16130. var self = this;
  16131. self._onlegendhoverlink = function (param) {
  16132. if (self.legendHoverLink) {
  16133. var targetName = param.target;
  16134. var name;
  16135. for (var i = self.shapeList.length - 1; i >= 0; i--) {
  16136. name = self.type == ecConfig.CHART_TYPE_PIE || self.type == ecConfig.CHART_TYPE_FUNNEL ? ecData.get(self.shapeList[i], 'name') : (ecData.get(self.shapeList[i], 'series') || {}).name;
  16137. if (name == targetName && !self.shapeList[i].invisible && !self.shapeList[i].__animating) {
  16138. self.zr.addHoverShape(self.shapeList[i]);
  16139. }
  16140. }
  16141. }
  16142. };
  16143. messageCenter && messageCenter.bind(ecConfig.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink);
  16144. }
  16145. Base.prototype = {
  16146. canvasSupported: require('zrender/tool/env').canvasSupported,
  16147. _getZ: function (zWhat) {
  16148. if (this[zWhat] != null) {
  16149. return this[zWhat];
  16150. }
  16151. var opt = this.ecTheme[this.type];
  16152. if (opt && opt[zWhat] != null) {
  16153. return opt[zWhat];
  16154. }
  16155. opt = ecConfig[this.type];
  16156. if (opt && opt[zWhat] != null) {
  16157. return opt[zWhat];
  16158. }
  16159. return 0;
  16160. },
  16161. getZlevelBase: function () {
  16162. return this._getZ('zlevel');
  16163. },
  16164. getZBase: function () {
  16165. return this._getZ('z');
  16166. },
  16167. reformOption: function (opt) {
  16168. opt = zrUtil.merge(zrUtil.merge(opt || {}, zrUtil.clone(this.ecTheme[this.type] || {})), zrUtil.clone(ecConfig[this.type] || {}));
  16169. this.z = opt.z;
  16170. this.zlevel = opt.zlevel;
  16171. return opt;
  16172. },
  16173. reformCssArray: function (p) {
  16174. if (p instanceof Array) {
  16175. switch (p.length + '') {
  16176. case '4':
  16177. return p;
  16178. case '3':
  16179. return [
  16180. p[0],
  16181. p[1],
  16182. p[2],
  16183. p[1]
  16184. ];
  16185. case '2':
  16186. return [
  16187. p[0],
  16188. p[1],
  16189. p[0],
  16190. p[1]
  16191. ];
  16192. case '1':
  16193. return [
  16194. p[0],
  16195. p[0],
  16196. p[0],
  16197. p[0]
  16198. ];
  16199. case '0':
  16200. return [
  16201. 0,
  16202. 0,
  16203. 0,
  16204. 0
  16205. ];
  16206. }
  16207. } else {
  16208. return [
  16209. p,
  16210. p,
  16211. p,
  16212. p
  16213. ];
  16214. }
  16215. },
  16216. getShapeById: function (id) {
  16217. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  16218. if (this.shapeList[i].id === id) {
  16219. return this.shapeList[i];
  16220. }
  16221. }
  16222. return null;
  16223. },
  16224. getFont: function (textStyle) {
  16225. var finalTextStyle = this.getTextStyle(zrUtil.clone(textStyle));
  16226. return finalTextStyle.fontStyle + ' ' + finalTextStyle.fontWeight + ' ' + finalTextStyle.fontSize + 'px ' + finalTextStyle.fontFamily;
  16227. },
  16228. getTextStyle: function (targetStyle) {
  16229. return zrUtil.merge(zrUtil.merge(targetStyle || {}, this.ecTheme.textStyle), ecConfig.textStyle);
  16230. },
  16231. getItemStyleColor: function (itemColor, seriesIndex, dataIndex, data) {
  16232. return typeof itemColor === 'function' ? itemColor.call(this.myChart, {
  16233. seriesIndex: seriesIndex,
  16234. series: this.series[seriesIndex],
  16235. dataIndex: dataIndex,
  16236. data: data
  16237. }) : itemColor;
  16238. },
  16239. getDataFromOption: function (data, defaultData) {
  16240. return data != null ? data.value != null ? data.value : data : defaultData;
  16241. },
  16242. subPixelOptimize: function (position, lineWidth) {
  16243. if (lineWidth % 2 === 1) {
  16244. position = Math.floor(position) + 0.5;
  16245. } else {
  16246. position = Math.round(position);
  16247. }
  16248. return position;
  16249. },
  16250. resize: function () {
  16251. this.refresh && this.refresh();
  16252. this.clearEffectShape && this.clearEffectShape(true);
  16253. var self = this;
  16254. setTimeout(function () {
  16255. self.animationEffect && self.animationEffect();
  16256. }, 200);
  16257. },
  16258. clear: function () {
  16259. this.clearEffectShape && this.clearEffectShape();
  16260. this.zr && this.zr.delShape(this.shapeList);
  16261. this.shapeList = [];
  16262. },
  16263. dispose: function () {
  16264. this.onbeforDispose && this.onbeforDispose();
  16265. this.clear();
  16266. this.shapeList = null;
  16267. this.effectList = null;
  16268. this.messageCenter && this.messageCenter.unbind(ecConfig.EVENT.LEGEND_HOVERLINK, this._onlegendhoverlink);
  16269. this.onafterDispose && this.onafterDispose();
  16270. },
  16271. query: ecQuery.query,
  16272. deepQuery: ecQuery.deepQuery,
  16273. deepMerge: ecQuery.deepMerge,
  16274. parsePercent: number.parsePercent,
  16275. parseCenter: number.parseCenter,
  16276. parseRadius: number.parseRadius,
  16277. numAddCommas: number.addCommas,
  16278. getPrecision: number.getPrecision
  16279. };
  16280. return Base;
  16281. });define('echarts/layout/EdgeBundling', [
  16282. 'require',
  16283. '../data/KDTree',
  16284. 'zrender/tool/vector'
  16285. ], function (require) {
  16286. var KDTree = require('../data/KDTree');
  16287. var vec2 = require('zrender/tool/vector');
  16288. var v2Create = vec2.create;
  16289. var v2DistSquare = vec2.distSquare;
  16290. var v2Dist = vec2.dist;
  16291. var v2Copy = vec2.copy;
  16292. var v2Clone = vec2.clone;
  16293. function squaredDistance(a, b) {
  16294. a = a.array;
  16295. b = b.array;
  16296. var x = b[0] - a[0];
  16297. var y = b[1] - a[1];
  16298. var z = b[2] - a[2];
  16299. var w = b[3] - a[3];
  16300. return x * x + y * y + z * z + w * w;
  16301. }
  16302. function CoarsenedEdge(group) {
  16303. this.points = [
  16304. group.mp0,
  16305. group.mp1
  16306. ];
  16307. this.group = group;
  16308. }
  16309. function Edge(edge) {
  16310. var points = edge.points;
  16311. if (points[0][1] < points[1][1] || edge instanceof CoarsenedEdge) {
  16312. this.array = [
  16313. points[0][0],
  16314. points[0][1],
  16315. points[1][0],
  16316. points[1][1]
  16317. ];
  16318. this._startPoint = points[0];
  16319. this._endPoint = points[1];
  16320. } else {
  16321. this.array = [
  16322. points[1][0],
  16323. points[1][1],
  16324. points[0][0],
  16325. points[0][1]
  16326. ];
  16327. this._startPoint = points[1];
  16328. this._endPoint = points[0];
  16329. }
  16330. this.ink = v2Dist(points[0], points[1]);
  16331. this.edge = edge;
  16332. this.group = null;
  16333. }
  16334. Edge.prototype.getStartPoint = function () {
  16335. return this._startPoint;
  16336. };
  16337. Edge.prototype.getEndPoint = function () {
  16338. return this._endPoint;
  16339. };
  16340. function BundledEdgeGroup() {
  16341. this.edgeList = [];
  16342. this.mp0 = v2Create();
  16343. this.mp1 = v2Create();
  16344. this.ink = 0;
  16345. }
  16346. BundledEdgeGroup.prototype.addEdge = function (edge) {
  16347. edge.group = this;
  16348. this.edgeList.push(edge);
  16349. };
  16350. BundledEdgeGroup.prototype.removeEdge = function (edge) {
  16351. edge.group = null;
  16352. this.edgeList.splice(this.edgeList.indexOf(edge), 1);
  16353. };
  16354. function EdgeBundling() {
  16355. this.maxNearestEdge = 6;
  16356. this.maxTurningAngle = Math.PI / 4;
  16357. this.maxIteration = 20;
  16358. }
  16359. EdgeBundling.prototype = {
  16360. constructor: EdgeBundling,
  16361. run: function (rawEdges) {
  16362. var res = this._iterate(rawEdges);
  16363. var nIterate = 0;
  16364. while (nIterate++ < this.maxIteration) {
  16365. var coarsenedEdges = [];
  16366. for (var i = 0; i < res.groups.length; i++) {
  16367. coarsenedEdges.push(new CoarsenedEdge(res.groups[i]));
  16368. }
  16369. var newRes = this._iterate(coarsenedEdges);
  16370. if (newRes.savedInk <= 0) {
  16371. break;
  16372. } else {
  16373. res = newRes;
  16374. }
  16375. }
  16376. var newEdges = [];
  16377. function pointApproxEqual(p0, p1) {
  16378. return v2DistSquare(p0, p1) < 1e-10;
  16379. }
  16380. function cleanEdgePoints(edgePoints, rawEdgePoints) {
  16381. var res = [];
  16382. var off = 0;
  16383. for (var i = 0; i < edgePoints.length; i++) {
  16384. if (!(off > 0 && pointApproxEqual(edgePoints[i], res[off - 1]))) {
  16385. res[off++] = v2Clone(edgePoints[i]);
  16386. }
  16387. }
  16388. if (rawEdgePoints[0] && !pointApproxEqual(res[0], rawEdgePoints[0])) {
  16389. res = res.reverse();
  16390. }
  16391. return res;
  16392. }
  16393. var buildNewEdges = function (groups, fromEdgePoints) {
  16394. var newEdgePoints;
  16395. for (var i = 0; i < groups.length; i++) {
  16396. var group = groups[i];
  16397. if (group.edgeList[0] && group.edgeList[0].edge instanceof CoarsenedEdge) {
  16398. var newGroups = [];
  16399. for (var j = 0; j < group.edgeList.length; j++) {
  16400. newGroups.push(group.edgeList[j].edge.group);
  16401. }
  16402. if (!fromEdgePoints) {
  16403. newEdgePoints = [];
  16404. } else {
  16405. newEdgePoints = fromEdgePoints.slice();
  16406. }
  16407. newEdgePoints.unshift(group.mp0);
  16408. newEdgePoints.push(group.mp1);
  16409. buildNewEdges(newGroups, newEdgePoints);
  16410. } else {
  16411. for (var j = 0; j < group.edgeList.length; j++) {
  16412. var edge = group.edgeList[j];
  16413. if (!fromEdgePoints) {
  16414. newEdgePoints = [];
  16415. } else {
  16416. newEdgePoints = fromEdgePoints.slice();
  16417. }
  16418. newEdgePoints.unshift(group.mp0);
  16419. newEdgePoints.push(group.mp1);
  16420. newEdgePoints.unshift(edge.getStartPoint());
  16421. newEdgePoints.push(edge.getEndPoint());
  16422. newEdges.push({
  16423. points: cleanEdgePoints(newEdgePoints, edge.edge.points),
  16424. rawEdge: edge.edge
  16425. });
  16426. }
  16427. }
  16428. }
  16429. };
  16430. buildNewEdges(res.groups);
  16431. return newEdges;
  16432. },
  16433. _iterate: function (rawEdges) {
  16434. var edges = [];
  16435. var groups = [];
  16436. var totalSavedInk = 0;
  16437. for (var i = 0; i < rawEdges.length; i++) {
  16438. var edge = new Edge(rawEdges[i]);
  16439. edges.push(edge);
  16440. }
  16441. var tree = new KDTree(edges, 4);
  16442. var nearests = [];
  16443. var _mp0 = v2Create();
  16444. var _mp1 = v2Create();
  16445. var _newGroupInk = 0;
  16446. var mp0 = v2Create();
  16447. var mp1 = v2Create();
  16448. var newGroupInk = 0;
  16449. for (var i = 0; i < edges.length; i++) {
  16450. var edge = edges[i];
  16451. if (edge.group) {
  16452. continue;
  16453. }
  16454. tree.nearestN(edge, this.maxNearestEdge, squaredDistance, nearests);
  16455. var maxSavedInk = 0;
  16456. var mostSavingInkEdge = null;
  16457. var lastCheckedGroup = null;
  16458. for (var j = 0; j < nearests.length; j++) {
  16459. var nearest = nearests[j];
  16460. var savedInk = 0;
  16461. if (nearest.group) {
  16462. if (nearest.group !== lastCheckedGroup) {
  16463. lastCheckedGroup = nearest.group;
  16464. _newGroupInk = this._calculateGroupEdgeInk(nearest.group, edge, _mp0, _mp1);
  16465. savedInk = nearest.group.ink + edge.ink - _newGroupInk;
  16466. }
  16467. } else {
  16468. _newGroupInk = this._calculateEdgeEdgeInk(edge, nearest, _mp0, _mp1);
  16469. savedInk = nearest.ink + edge.ink - _newGroupInk;
  16470. }
  16471. if (savedInk > maxSavedInk) {
  16472. maxSavedInk = savedInk;
  16473. mostSavingInkEdge = nearest;
  16474. v2Copy(mp1, _mp1);
  16475. v2Copy(mp0, _mp0);
  16476. newGroupInk = _newGroupInk;
  16477. }
  16478. }
  16479. if (mostSavingInkEdge) {
  16480. totalSavedInk += maxSavedInk;
  16481. var group;
  16482. if (!mostSavingInkEdge.group) {
  16483. group = new BundledEdgeGroup();
  16484. groups.push(group);
  16485. group.addEdge(mostSavingInkEdge);
  16486. }
  16487. group = mostSavingInkEdge.group;
  16488. v2Copy(group.mp0, mp0);
  16489. v2Copy(group.mp1, mp1);
  16490. group.ink = newGroupInk;
  16491. mostSavingInkEdge.group.addEdge(edge);
  16492. } else {
  16493. var group = new BundledEdgeGroup();
  16494. groups.push(group);
  16495. v2Copy(group.mp0, edge.getStartPoint());
  16496. v2Copy(group.mp1, edge.getEndPoint());
  16497. group.ink = edge.ink;
  16498. group.addEdge(edge);
  16499. }
  16500. }
  16501. return {
  16502. groups: groups,
  16503. edges: edges,
  16504. savedInk: totalSavedInk
  16505. };
  16506. },
  16507. _calculateEdgeEdgeInk: function () {
  16508. var startPointSet = [];
  16509. var endPointSet = [];
  16510. return function (e0, e1, mp0, mp1) {
  16511. startPointSet[0] = e0.getStartPoint();
  16512. startPointSet[1] = e1.getStartPoint();
  16513. endPointSet[0] = e0.getEndPoint();
  16514. endPointSet[1] = e1.getEndPoint();
  16515. this._calculateMeetPoints(startPointSet, endPointSet, mp0, mp1);
  16516. var ink = v2Dist(startPointSet[0], mp0) + v2Dist(mp0, mp1) + v2Dist(mp1, endPointSet[0]) + v2Dist(startPointSet[1], mp0) + v2Dist(mp1, endPointSet[1]);
  16517. return ink;
  16518. };
  16519. }(),
  16520. _calculateGroupEdgeInk: function (group, edgeTryAdd, mp0, mp1) {
  16521. var startPointSet = [];
  16522. var endPointSet = [];
  16523. for (var i = 0; i < group.edgeList.length; i++) {
  16524. var edge = group.edgeList[i];
  16525. startPointSet.push(edge.getStartPoint());
  16526. endPointSet.push(edge.getEndPoint());
  16527. }
  16528. startPointSet.push(edgeTryAdd.getStartPoint());
  16529. endPointSet.push(edgeTryAdd.getEndPoint());
  16530. this._calculateMeetPoints(startPointSet, endPointSet, mp0, mp1);
  16531. var ink = v2Dist(mp0, mp1);
  16532. for (var i = 0; i < startPointSet.length; i++) {
  16533. ink += v2Dist(startPointSet[i], mp0) + v2Dist(endPointSet[i], mp1);
  16534. }
  16535. return ink;
  16536. },
  16537. _calculateMeetPoints: function () {
  16538. var cp0 = v2Create();
  16539. var cp1 = v2Create();
  16540. return function (startPointSet, endPointSet, mp0, mp1) {
  16541. vec2.set(cp0, 0, 0);
  16542. vec2.set(cp1, 0, 0);
  16543. var len = startPointSet.length;
  16544. for (var i = 0; i < len; i++) {
  16545. vec2.add(cp0, cp0, startPointSet[i]);
  16546. }
  16547. vec2.scale(cp0, cp0, 1 / len);
  16548. len = endPointSet.length;
  16549. for (var i = 0; i < len; i++) {
  16550. vec2.add(cp1, cp1, endPointSet[i]);
  16551. }
  16552. vec2.scale(cp1, cp1, 1 / len);
  16553. this._limitTurningAngle(startPointSet, cp0, cp1, mp0);
  16554. this._limitTurningAngle(endPointSet, cp1, cp0, mp1);
  16555. };
  16556. }(),
  16557. _limitTurningAngle: function () {
  16558. var v10 = v2Create();
  16559. var vTmp = v2Create();
  16560. var project = v2Create();
  16561. var tmpOut = v2Create();
  16562. return function (pointSet, p0, p1, out) {
  16563. var maxTurningAngleCos = Math.cos(this.maxTurningAngle);
  16564. var maxTurningAngleTan = Math.tan(this.maxTurningAngle);
  16565. vec2.sub(v10, p0, p1);
  16566. vec2.normalize(v10, v10);
  16567. vec2.copy(out, p0);
  16568. var maxMovement = 0;
  16569. for (var i = 0; i < pointSet.length; i++) {
  16570. var p = pointSet[i];
  16571. vec2.sub(vTmp, p, p0);
  16572. var len = vec2.len(vTmp);
  16573. vec2.scale(vTmp, vTmp, 1 / len);
  16574. var turningAngleCos = vec2.dot(vTmp, v10);
  16575. if (turningAngleCos < maxTurningAngleCos) {
  16576. vec2.scaleAndAdd(project, p0, v10, len * turningAngleCos);
  16577. var distance = v2Dist(project, p);
  16578. var d = distance / maxTurningAngleTan;
  16579. vec2.scaleAndAdd(tmpOut, project, v10, -d);
  16580. var movement = v2DistSquare(tmpOut, p0);
  16581. if (movement > maxMovement) {
  16582. maxMovement = movement;
  16583. vec2.copy(out, tmpOut);
  16584. }
  16585. }
  16586. }
  16587. };
  16588. }()
  16589. };
  16590. return EdgeBundling;
  16591. });define('zrender/shape/Star', [
  16592. 'require',
  16593. '../tool/math',
  16594. './Base',
  16595. '../tool/util'
  16596. ], function (require) {
  16597. var math = require('../tool/math');
  16598. var sin = math.sin;
  16599. var cos = math.cos;
  16600. var PI = Math.PI;
  16601. var Base = require('./Base');
  16602. var Star = function (options) {
  16603. Base.call(this, options);
  16604. };
  16605. Star.prototype = {
  16606. type: 'star',
  16607. buildPath: function (ctx, style) {
  16608. var n = style.n;
  16609. if (!n || n < 2) {
  16610. return;
  16611. }
  16612. var x = style.x;
  16613. var y = style.y;
  16614. var r = style.r;
  16615. var r0 = style.r0;
  16616. if (r0 == null) {
  16617. r0 = n > 4 ? r * cos(2 * PI / n) / cos(PI / n) : r / 3;
  16618. }
  16619. var dStep = PI / n;
  16620. var deg = -PI / 2;
  16621. var xStart = x + r * cos(deg);
  16622. var yStart = y + r * sin(deg);
  16623. deg += dStep;
  16624. var pointList = style.pointList = [];
  16625. pointList.push([
  16626. xStart,
  16627. yStart
  16628. ]);
  16629. for (var i = 0, end = n * 2 - 1, ri; i < end; i++) {
  16630. ri = i % 2 === 0 ? r0 : r;
  16631. pointList.push([
  16632. x + ri * cos(deg),
  16633. y + ri * sin(deg)
  16634. ]);
  16635. deg += dStep;
  16636. }
  16637. pointList.push([
  16638. xStart,
  16639. yStart
  16640. ]);
  16641. ctx.moveTo(pointList[0][0], pointList[0][1]);
  16642. for (var i = 0; i < pointList.length; i++) {
  16643. ctx.lineTo(pointList[i][0], pointList[i][1]);
  16644. }
  16645. ctx.closePath();
  16646. return;
  16647. },
  16648. getRect: function (style) {
  16649. if (style.__rect) {
  16650. return style.__rect;
  16651. }
  16652. var lineWidth;
  16653. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  16654. lineWidth = style.lineWidth || 1;
  16655. } else {
  16656. lineWidth = 0;
  16657. }
  16658. style.__rect = {
  16659. x: Math.round(style.x - style.r - lineWidth / 2),
  16660. y: Math.round(style.y - style.r - lineWidth / 2),
  16661. width: style.r * 2 + lineWidth,
  16662. height: style.r * 2 + lineWidth
  16663. };
  16664. return style.__rect;
  16665. }
  16666. };
  16667. require('../tool/util').inherits(Star, Base);
  16668. return Star;
  16669. });define('zrender/shape/Heart', [
  16670. 'require',
  16671. './Base',
  16672. './util/PathProxy',
  16673. '../tool/area',
  16674. '../tool/util'
  16675. ], function (require) {
  16676. 'use strict';
  16677. var Base = require('./Base');
  16678. var PathProxy = require('./util/PathProxy');
  16679. var area = require('../tool/area');
  16680. var Heart = function (options) {
  16681. Base.call(this, options);
  16682. this._pathProxy = new PathProxy();
  16683. };
  16684. Heart.prototype = {
  16685. type: 'heart',
  16686. buildPath: function (ctx, style) {
  16687. var path = this._pathProxy || new PathProxy();
  16688. path.begin(ctx);
  16689. path.moveTo(style.x, style.y);
  16690. path.bezierCurveTo(style.x + style.a / 2, style.y - style.b * 2 / 3, style.x + style.a * 2, style.y + style.b / 3, style.x, style.y + style.b);
  16691. path.bezierCurveTo(style.x - style.a * 2, style.y + style.b / 3, style.x - style.a / 2, style.y - style.b * 2 / 3, style.x, style.y);
  16692. path.closePath();
  16693. return;
  16694. },
  16695. getRect: function (style) {
  16696. if (style.__rect) {
  16697. return style.__rect;
  16698. }
  16699. if (!this._pathProxy.isEmpty()) {
  16700. this.buildPath(null, style);
  16701. }
  16702. return this._pathProxy.fastBoundingRect();
  16703. },
  16704. isCover: function (x, y) {
  16705. var originPos = this.transformCoordToLocal(x, y);
  16706. x = originPos[0];
  16707. y = originPos[1];
  16708. if (this.isCoverRect(x, y)) {
  16709. return area.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, x, y);
  16710. }
  16711. }
  16712. };
  16713. require('../tool/util').inherits(Heart, Base);
  16714. return Heart;
  16715. });define('zrender/shape/Droplet', [
  16716. 'require',
  16717. './Base',
  16718. './util/PathProxy',
  16719. '../tool/area',
  16720. '../tool/util'
  16721. ], function (require) {
  16722. 'use strict';
  16723. var Base = require('./Base');
  16724. var PathProxy = require('./util/PathProxy');
  16725. var area = require('../tool/area');
  16726. var Droplet = function (options) {
  16727. Base.call(this, options);
  16728. this._pathProxy = new PathProxy();
  16729. };
  16730. Droplet.prototype = {
  16731. type: 'droplet',
  16732. buildPath: function (ctx, style) {
  16733. var path = this._pathProxy || new PathProxy();
  16734. path.begin(ctx);
  16735. path.moveTo(style.x, style.y + style.a);
  16736. path.bezierCurveTo(style.x + style.a, style.y + style.a, style.x + style.a * 3 / 2, style.y - style.a / 3, style.x, style.y - style.b);
  16737. path.bezierCurveTo(style.x - style.a * 3 / 2, style.y - style.a / 3, style.x - style.a, style.y + style.a, style.x, style.y + style.a);
  16738. path.closePath();
  16739. },
  16740. getRect: function (style) {
  16741. if (style.__rect) {
  16742. return style.__rect;
  16743. }
  16744. if (!this._pathProxy.isEmpty()) {
  16745. this.buildPath(null, style);
  16746. }
  16747. return this._pathProxy.fastBoundingRect();
  16748. },
  16749. isCover: function (x, y) {
  16750. var originPos = this.transformCoordToLocal(x, y);
  16751. x = originPos[0];
  16752. y = originPos[1];
  16753. if (this.isCoverRect(x, y)) {
  16754. return area.isInsidePath(this._pathProxy.pathCommands, this.style.lineWidth, this.style.brushType, x, y);
  16755. }
  16756. }
  16757. };
  16758. require('../tool/util').inherits(Droplet, Base);
  16759. return Droplet;
  16760. });define('zrender/tool/math', [], function () {
  16761. var _radians = Math.PI / 180;
  16762. function sin(angle, isDegrees) {
  16763. return Math.sin(isDegrees ? angle * _radians : angle);
  16764. }
  16765. function cos(angle, isDegrees) {
  16766. return Math.cos(isDegrees ? angle * _radians : angle);
  16767. }
  16768. function degreeToRadian(angle) {
  16769. return angle * _radians;
  16770. }
  16771. function radianToDegree(angle) {
  16772. return angle / _radians;
  16773. }
  16774. return {
  16775. sin: sin,
  16776. cos: cos,
  16777. degreeToRadian: degreeToRadian,
  16778. radianToDegree: radianToDegree
  16779. };
  16780. });define('zrender/shape/util/PathProxy', [
  16781. 'require',
  16782. '../../tool/vector'
  16783. ], function (require) {
  16784. var vector = require('../../tool/vector');
  16785. var PathSegment = function (command, points) {
  16786. this.command = command;
  16787. this.points = points || null;
  16788. };
  16789. var PathProxy = function () {
  16790. this.pathCommands = [];
  16791. this._ctx = null;
  16792. this._min = [];
  16793. this._max = [];
  16794. };
  16795. PathProxy.prototype.fastBoundingRect = function () {
  16796. var min = this._min;
  16797. var max = this._max;
  16798. min[0] = min[1] = Infinity;
  16799. max[0] = max[1] = -Infinity;
  16800. for (var i = 0; i < this.pathCommands.length; i++) {
  16801. var seg = this.pathCommands[i];
  16802. var p = seg.points;
  16803. switch (seg.command) {
  16804. case 'M':
  16805. vector.min(min, min, p);
  16806. vector.max(max, max, p);
  16807. break;
  16808. case 'L':
  16809. vector.min(min, min, p);
  16810. vector.max(max, max, p);
  16811. break;
  16812. case 'C':
  16813. for (var j = 0; j < 6; j += 2) {
  16814. min[0] = Math.min(min[0], min[0], p[j]);
  16815. min[1] = Math.min(min[1], min[1], p[j + 1]);
  16816. max[0] = Math.max(max[0], max[0], p[j]);
  16817. max[1] = Math.max(max[1], max[1], p[j + 1]);
  16818. }
  16819. break;
  16820. case 'Q':
  16821. for (var j = 0; j < 4; j += 2) {
  16822. min[0] = Math.min(min[0], min[0], p[j]);
  16823. min[1] = Math.min(min[1], min[1], p[j + 1]);
  16824. max[0] = Math.max(max[0], max[0], p[j]);
  16825. max[1] = Math.max(max[1], max[1], p[j + 1]);
  16826. }
  16827. break;
  16828. case 'A':
  16829. var cx = p[0];
  16830. var cy = p[1];
  16831. var rx = p[2];
  16832. var ry = p[3];
  16833. min[0] = Math.min(min[0], min[0], cx - rx);
  16834. min[1] = Math.min(min[1], min[1], cy - ry);
  16835. max[0] = Math.max(max[0], max[0], cx + rx);
  16836. max[1] = Math.max(max[1], max[1], cy + ry);
  16837. break;
  16838. }
  16839. }
  16840. return {
  16841. x: min[0],
  16842. y: min[1],
  16843. width: max[0] - min[0],
  16844. height: max[1] - min[1]
  16845. };
  16846. };
  16847. PathProxy.prototype.begin = function (ctx) {
  16848. this._ctx = ctx || null;
  16849. this.pathCommands.length = 0;
  16850. return this;
  16851. };
  16852. PathProxy.prototype.moveTo = function (x, y) {
  16853. this.pathCommands.push(new PathSegment('M', [
  16854. x,
  16855. y
  16856. ]));
  16857. if (this._ctx) {
  16858. this._ctx.moveTo(x, y);
  16859. }
  16860. return this;
  16861. };
  16862. PathProxy.prototype.lineTo = function (x, y) {
  16863. this.pathCommands.push(new PathSegment('L', [
  16864. x,
  16865. y
  16866. ]));
  16867. if (this._ctx) {
  16868. this._ctx.lineTo(x, y);
  16869. }
  16870. return this;
  16871. };
  16872. PathProxy.prototype.bezierCurveTo = function (x1, y1, x2, y2, x3, y3) {
  16873. this.pathCommands.push(new PathSegment('C', [
  16874. x1,
  16875. y1,
  16876. x2,
  16877. y2,
  16878. x3,
  16879. y3
  16880. ]));
  16881. if (this._ctx) {
  16882. this._ctx.bezierCurveTo(x1, y1, x2, y2, x3, y3);
  16883. }
  16884. return this;
  16885. };
  16886. PathProxy.prototype.quadraticCurveTo = function (x1, y1, x2, y2) {
  16887. this.pathCommands.push(new PathSegment('Q', [
  16888. x1,
  16889. y1,
  16890. x2,
  16891. y2
  16892. ]));
  16893. if (this._ctx) {
  16894. this._ctx.quadraticCurveTo(x1, y1, x2, y2);
  16895. }
  16896. return this;
  16897. };
  16898. PathProxy.prototype.arc = function (cx, cy, r, startAngle, endAngle, anticlockwise) {
  16899. this.pathCommands.push(new PathSegment('A', [
  16900. cx,
  16901. cy,
  16902. r,
  16903. r,
  16904. startAngle,
  16905. endAngle - startAngle,
  16906. 0,
  16907. anticlockwise ? 0 : 1
  16908. ]));
  16909. if (this._ctx) {
  16910. this._ctx.arc(cx, cy, r, startAngle, endAngle, anticlockwise);
  16911. }
  16912. return this;
  16913. };
  16914. PathProxy.prototype.arcTo = function (x1, y1, x2, y2, radius) {
  16915. if (this._ctx) {
  16916. this._ctx.arcTo(x1, y1, x2, y2, radius);
  16917. }
  16918. return this;
  16919. };
  16920. PathProxy.prototype.rect = function (x, y, w, h) {
  16921. if (this._ctx) {
  16922. this._ctx.rect(x, y, w, h);
  16923. }
  16924. return this;
  16925. };
  16926. PathProxy.prototype.closePath = function () {
  16927. this.pathCommands.push(new PathSegment('z'));
  16928. if (this._ctx) {
  16929. this._ctx.closePath();
  16930. }
  16931. return this;
  16932. };
  16933. PathProxy.prototype.isEmpty = function () {
  16934. return this.pathCommands.length === 0;
  16935. };
  16936. PathProxy.PathSegment = PathSegment;
  16937. return PathProxy;
  16938. });define('zrender/shape/Line', [
  16939. 'require',
  16940. './Base',
  16941. './util/dashedLineTo',
  16942. '../tool/util'
  16943. ], function (require) {
  16944. var Base = require('./Base');
  16945. var dashedLineTo = require('./util/dashedLineTo');
  16946. var Line = function (options) {
  16947. this.brushTypeOnly = 'stroke';
  16948. this.textPosition = 'end';
  16949. Base.call(this, options);
  16950. };
  16951. Line.prototype = {
  16952. type: 'line',
  16953. buildPath: function (ctx, style) {
  16954. if (!style.lineType || style.lineType == 'solid') {
  16955. ctx.moveTo(style.xStart, style.yStart);
  16956. ctx.lineTo(style.xEnd, style.yEnd);
  16957. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  16958. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  16959. dashedLineTo(ctx, style.xStart, style.yStart, style.xEnd, style.yEnd, dashLength);
  16960. }
  16961. },
  16962. getRect: function (style) {
  16963. if (style.__rect) {
  16964. return style.__rect;
  16965. }
  16966. var lineWidth = style.lineWidth || 1;
  16967. style.__rect = {
  16968. x: Math.min(style.xStart, style.xEnd) - lineWidth,
  16969. y: Math.min(style.yStart, style.yEnd) - lineWidth,
  16970. width: Math.abs(style.xStart - style.xEnd) + lineWidth,
  16971. height: Math.abs(style.yStart - style.yEnd) + lineWidth
  16972. };
  16973. return style.__rect;
  16974. }
  16975. };
  16976. require('../tool/util').inherits(Line, Base);
  16977. return Line;
  16978. });define('zrender/shape/BezierCurve', [
  16979. 'require',
  16980. './Base',
  16981. '../tool/util'
  16982. ], function (require) {
  16983. 'use strict';
  16984. var Base = require('./Base');
  16985. var BezierCurve = function (options) {
  16986. this.brushTypeOnly = 'stroke';
  16987. this.textPosition = 'end';
  16988. Base.call(this, options);
  16989. };
  16990. BezierCurve.prototype = {
  16991. type: 'bezier-curve',
  16992. buildPath: function (ctx, style) {
  16993. ctx.moveTo(style.xStart, style.yStart);
  16994. if (typeof style.cpX2 != 'undefined' && typeof style.cpY2 != 'undefined') {
  16995. ctx.bezierCurveTo(style.cpX1, style.cpY1, style.cpX2, style.cpY2, style.xEnd, style.yEnd);
  16996. } else {
  16997. ctx.quadraticCurveTo(style.cpX1, style.cpY1, style.xEnd, style.yEnd);
  16998. }
  16999. },
  17000. getRect: function (style) {
  17001. if (style.__rect) {
  17002. return style.__rect;
  17003. }
  17004. var _minX = Math.min(style.xStart, style.xEnd, style.cpX1);
  17005. var _minY = Math.min(style.yStart, style.yEnd, style.cpY1);
  17006. var _maxX = Math.max(style.xStart, style.xEnd, style.cpX1);
  17007. var _maxY = Math.max(style.yStart, style.yEnd, style.cpY1);
  17008. var _x2 = style.cpX2;
  17009. var _y2 = style.cpY2;
  17010. if (typeof _x2 != 'undefined' && typeof _y2 != 'undefined') {
  17011. _minX = Math.min(_minX, _x2);
  17012. _minY = Math.min(_minY, _y2);
  17013. _maxX = Math.max(_maxX, _x2);
  17014. _maxY = Math.max(_maxY, _y2);
  17015. }
  17016. var lineWidth = style.lineWidth || 1;
  17017. style.__rect = {
  17018. x: _minX - lineWidth,
  17019. y: _minY - lineWidth,
  17020. width: _maxX - _minX + lineWidth,
  17021. height: _maxY - _minY + lineWidth
  17022. };
  17023. return style.__rect;
  17024. }
  17025. };
  17026. require('../tool/util').inherits(BezierCurve, Base);
  17027. return BezierCurve;
  17028. });define('zrender/shape/util/dashedLineTo', [], function () {
  17029. var dashPattern = [
  17030. 5,
  17031. 5
  17032. ];
  17033. return function (ctx, x1, y1, x2, y2, dashLength) {
  17034. if (ctx.setLineDash) {
  17035. dashPattern[0] = dashPattern[1] = dashLength;
  17036. ctx.setLineDash(dashPattern);
  17037. ctx.moveTo(x1, y1);
  17038. ctx.lineTo(x2, y2);
  17039. return;
  17040. }
  17041. dashLength = typeof dashLength != 'number' ? 5 : dashLength;
  17042. var dx = x2 - x1;
  17043. var dy = y2 - y1;
  17044. var numDashes = Math.floor(Math.sqrt(dx * dx + dy * dy) / dashLength);
  17045. dx = dx / numDashes;
  17046. dy = dy / numDashes;
  17047. var flag = true;
  17048. for (var i = 0; i < numDashes; ++i) {
  17049. if (flag) {
  17050. ctx.moveTo(x1, y1);
  17051. } else {
  17052. ctx.lineTo(x1, y1);
  17053. }
  17054. flag = !flag;
  17055. x1 += dx;
  17056. y1 += dy;
  17057. }
  17058. ctx.lineTo(x2, y2);
  17059. };
  17060. });define('zrender/shape/Polygon', [
  17061. 'require',
  17062. './Base',
  17063. './util/smoothSpline',
  17064. './util/smoothBezier',
  17065. './util/dashedLineTo',
  17066. '../tool/util'
  17067. ], function (require) {
  17068. var Base = require('./Base');
  17069. var smoothSpline = require('./util/smoothSpline');
  17070. var smoothBezier = require('./util/smoothBezier');
  17071. var dashedLineTo = require('./util/dashedLineTo');
  17072. var Polygon = function (options) {
  17073. Base.call(this, options);
  17074. };
  17075. Polygon.prototype = {
  17076. type: 'polygon',
  17077. buildPath: function (ctx, style) {
  17078. var pointList = style.pointList;
  17079. if (pointList.length < 2) {
  17080. return;
  17081. }
  17082. if (style.smooth && style.smooth !== 'spline') {
  17083. var controlPoints = smoothBezier(pointList, style.smooth, true, style.smoothConstraint);
  17084. ctx.moveTo(pointList[0][0], pointList[0][1]);
  17085. var cp1;
  17086. var cp2;
  17087. var p;
  17088. var len = pointList.length;
  17089. for (var i = 0; i < len; i++) {
  17090. cp1 = controlPoints[i * 2];
  17091. cp2 = controlPoints[i * 2 + 1];
  17092. p = pointList[(i + 1) % len];
  17093. ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
  17094. }
  17095. } else {
  17096. if (style.smooth === 'spline') {
  17097. pointList = smoothSpline(pointList, true);
  17098. }
  17099. if (!style.lineType || style.lineType == 'solid') {
  17100. ctx.moveTo(pointList[0][0], pointList[0][1]);
  17101. for (var i = 1, l = pointList.length; i < l; i++) {
  17102. ctx.lineTo(pointList[i][0], pointList[i][1]);
  17103. }
  17104. ctx.lineTo(pointList[0][0], pointList[0][1]);
  17105. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  17106. var dashLength = style._dashLength || (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  17107. style._dashLength = dashLength;
  17108. ctx.moveTo(pointList[0][0], pointList[0][1]);
  17109. for (var i = 1, l = pointList.length; i < l; i++) {
  17110. dashedLineTo(ctx, pointList[i - 1][0], pointList[i - 1][1], pointList[i][0], pointList[i][1], dashLength);
  17111. }
  17112. dashedLineTo(ctx, pointList[pointList.length - 1][0], pointList[pointList.length - 1][1], pointList[0][0], pointList[0][1], dashLength);
  17113. }
  17114. }
  17115. ctx.closePath();
  17116. return;
  17117. },
  17118. getRect: function (style) {
  17119. if (style.__rect) {
  17120. return style.__rect;
  17121. }
  17122. var minX = Number.MAX_VALUE;
  17123. var maxX = Number.MIN_VALUE;
  17124. var minY = Number.MAX_VALUE;
  17125. var maxY = Number.MIN_VALUE;
  17126. var pointList = style.pointList;
  17127. for (var i = 0, l = pointList.length; i < l; i++) {
  17128. if (pointList[i][0] < minX) {
  17129. minX = pointList[i][0];
  17130. }
  17131. if (pointList[i][0] > maxX) {
  17132. maxX = pointList[i][0];
  17133. }
  17134. if (pointList[i][1] < minY) {
  17135. minY = pointList[i][1];
  17136. }
  17137. if (pointList[i][1] > maxY) {
  17138. maxY = pointList[i][1];
  17139. }
  17140. }
  17141. var lineWidth;
  17142. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  17143. lineWidth = style.lineWidth || 1;
  17144. } else {
  17145. lineWidth = 0;
  17146. }
  17147. style.__rect = {
  17148. x: Math.round(minX - lineWidth / 2),
  17149. y: Math.round(minY - lineWidth / 2),
  17150. width: maxX - minX + lineWidth,
  17151. height: maxY - minY + lineWidth
  17152. };
  17153. return style.__rect;
  17154. }
  17155. };
  17156. require('../tool/util').inherits(Polygon, Base);
  17157. return Polygon;
  17158. });define('echarts/util/shape/normalIsCover', [], function () {
  17159. return function (x, y) {
  17160. var originPos = this.transformCoordToLocal(x, y);
  17161. x = originPos[0];
  17162. y = originPos[1];
  17163. return this.isCoverRect(x, y);
  17164. };
  17165. });define('zrender/shape/util/smoothSpline', [
  17166. 'require',
  17167. '../../tool/vector'
  17168. ], function (require) {
  17169. var vector = require('../../tool/vector');
  17170. function interpolate(p0, p1, p2, p3, t, t2, t3) {
  17171. var v0 = (p2 - p0) * 0.5;
  17172. var v1 = (p3 - p1) * 0.5;
  17173. return (2 * (p1 - p2) + v0 + v1) * t3 + (-3 * (p1 - p2) - 2 * v0 - v1) * t2 + v0 * t + p1;
  17174. }
  17175. return function (points, isLoop, constraint) {
  17176. var len = points.length;
  17177. var ret = [];
  17178. var distance = 0;
  17179. for (var i = 1; i < len; i++) {
  17180. distance += vector.distance(points[i - 1], points[i]);
  17181. }
  17182. var segs = distance / 5;
  17183. segs = segs < len ? len : segs;
  17184. for (var i = 0; i < segs; i++) {
  17185. var pos = i / (segs - 1) * (isLoop ? len : len - 1);
  17186. var idx = Math.floor(pos);
  17187. var w = pos - idx;
  17188. var p0;
  17189. var p1 = points[idx % len];
  17190. var p2;
  17191. var p3;
  17192. if (!isLoop) {
  17193. p0 = points[idx === 0 ? idx : idx - 1];
  17194. p2 = points[idx > len - 2 ? len - 1 : idx + 1];
  17195. p3 = points[idx > len - 3 ? len - 1 : idx + 2];
  17196. } else {
  17197. p0 = points[(idx - 1 + len) % len];
  17198. p2 = points[(idx + 1) % len];
  17199. p3 = points[(idx + 2) % len];
  17200. }
  17201. var w2 = w * w;
  17202. var w3 = w * w2;
  17203. ret.push([
  17204. interpolate(p0[0], p1[0], p2[0], p3[0], w, w2, w3),
  17205. interpolate(p0[1], p1[1], p2[1], p3[1], w, w2, w3)
  17206. ]);
  17207. }
  17208. return ret;
  17209. };
  17210. });define('zrender/shape/util/smoothBezier', [
  17211. 'require',
  17212. '../../tool/vector'
  17213. ], function (require) {
  17214. var vector = require('../../tool/vector');
  17215. return function (points, smooth, isLoop, constraint) {
  17216. var cps = [];
  17217. var v = [];
  17218. var v1 = [];
  17219. var v2 = [];
  17220. var prevPoint;
  17221. var nextPoint;
  17222. var hasConstraint = !!constraint;
  17223. var min, max;
  17224. if (hasConstraint) {
  17225. min = [
  17226. Infinity,
  17227. Infinity
  17228. ];
  17229. max = [
  17230. -Infinity,
  17231. -Infinity
  17232. ];
  17233. for (var i = 0, len = points.length; i < len; i++) {
  17234. vector.min(min, min, points[i]);
  17235. vector.max(max, max, points[i]);
  17236. }
  17237. vector.min(min, min, constraint[0]);
  17238. vector.max(max, max, constraint[1]);
  17239. }
  17240. for (var i = 0, len = points.length; i < len; i++) {
  17241. var point = points[i];
  17242. var prevPoint;
  17243. var nextPoint;
  17244. if (isLoop) {
  17245. prevPoint = points[i ? i - 1 : len - 1];
  17246. nextPoint = points[(i + 1) % len];
  17247. } else {
  17248. if (i === 0 || i === len - 1) {
  17249. cps.push(vector.clone(points[i]));
  17250. continue;
  17251. } else {
  17252. prevPoint = points[i - 1];
  17253. nextPoint = points[i + 1];
  17254. }
  17255. }
  17256. vector.sub(v, nextPoint, prevPoint);
  17257. vector.scale(v, v, smooth);
  17258. var d0 = vector.distance(point, prevPoint);
  17259. var d1 = vector.distance(point, nextPoint);
  17260. var sum = d0 + d1;
  17261. if (sum !== 0) {
  17262. d0 /= sum;
  17263. d1 /= sum;
  17264. }
  17265. vector.scale(v1, v, -d0);
  17266. vector.scale(v2, v, d1);
  17267. var cp0 = vector.add([], point, v1);
  17268. var cp1 = vector.add([], point, v2);
  17269. if (hasConstraint) {
  17270. vector.max(cp0, cp0, min);
  17271. vector.min(cp0, cp0, max);
  17272. vector.max(cp1, cp1, min);
  17273. vector.min(cp1, cp1, max);
  17274. }
  17275. cps.push(cp0);
  17276. cps.push(cp1);
  17277. }
  17278. if (isLoop) {
  17279. cps.push(vector.clone(cps.shift()));
  17280. }
  17281. return cps;
  17282. };
  17283. });define('echarts/util/ecQuery', [
  17284. 'require',
  17285. 'zrender/tool/util'
  17286. ], function (require) {
  17287. var zrUtil = require('zrender/tool/util');
  17288. function query(optionTarget, optionLocation) {
  17289. if (typeof optionTarget == 'undefined') {
  17290. return;
  17291. }
  17292. if (!optionLocation) {
  17293. return optionTarget;
  17294. }
  17295. optionLocation = optionLocation.split('.');
  17296. var length = optionLocation.length;
  17297. var curIdx = 0;
  17298. while (curIdx < length) {
  17299. optionTarget = optionTarget[optionLocation[curIdx]];
  17300. if (typeof optionTarget == 'undefined') {
  17301. return;
  17302. }
  17303. curIdx++;
  17304. }
  17305. return optionTarget;
  17306. }
  17307. function deepQuery(ctrList, optionLocation) {
  17308. var finalOption;
  17309. for (var i = 0, l = ctrList.length; i < l; i++) {
  17310. finalOption = query(ctrList[i], optionLocation);
  17311. if (typeof finalOption != 'undefined') {
  17312. return finalOption;
  17313. }
  17314. }
  17315. }
  17316. function deepMerge(ctrList, optionLocation) {
  17317. var finalOption;
  17318. var len = ctrList.length;
  17319. while (len--) {
  17320. var tempOption = query(ctrList[len], optionLocation);
  17321. if (typeof tempOption != 'undefined') {
  17322. if (typeof finalOption == 'undefined') {
  17323. finalOption = zrUtil.clone(tempOption);
  17324. } else {
  17325. zrUtil.merge(finalOption, tempOption, true);
  17326. }
  17327. }
  17328. }
  17329. return finalOption;
  17330. }
  17331. return {
  17332. query: query,
  17333. deepQuery: deepQuery,
  17334. deepMerge: deepMerge
  17335. };
  17336. });define('echarts/util/number', [], function () {
  17337. function _trim(str) {
  17338. return str.replace(/^\s+/, '').replace(/\s+$/, '');
  17339. }
  17340. function parsePercent(value, maxValue) {
  17341. if (typeof value === 'string') {
  17342. if (_trim(value).match(/%$/)) {
  17343. return parseFloat(value) / 100 * maxValue;
  17344. }
  17345. return parseFloat(value);
  17346. }
  17347. return value;
  17348. }
  17349. function parseCenter(zr, center) {
  17350. return [
  17351. parsePercent(center[0], zr.getWidth()),
  17352. parsePercent(center[1], zr.getHeight())
  17353. ];
  17354. }
  17355. function parseRadius(zr, radius) {
  17356. if (!(radius instanceof Array)) {
  17357. radius = [
  17358. 0,
  17359. radius
  17360. ];
  17361. }
  17362. var zrSize = Math.min(zr.getWidth(), zr.getHeight()) / 2;
  17363. return [
  17364. parsePercent(radius[0], zrSize),
  17365. parsePercent(radius[1], zrSize)
  17366. ];
  17367. }
  17368. function addCommas(x) {
  17369. if (isNaN(x)) {
  17370. return '-';
  17371. }
  17372. x = (x + '').split('.');
  17373. return x[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g, '$1,') + (x.length > 1 ? '.' + x[1] : '');
  17374. }
  17375. function getPrecision(val) {
  17376. var e = 1;
  17377. var count = 0;
  17378. while (Math.round(val * e) / e !== val) {
  17379. e *= 10;
  17380. count++;
  17381. }
  17382. return count;
  17383. }
  17384. return {
  17385. parsePercent: parsePercent,
  17386. parseCenter: parseCenter,
  17387. parseRadius: parseRadius,
  17388. addCommas: addCommas,
  17389. getPrecision: getPrecision
  17390. };
  17391. });define('echarts/data/KDTree', [
  17392. 'require',
  17393. './quickSelect'
  17394. ], function (require) {
  17395. var quickSelect = require('./quickSelect');
  17396. function Node(axis, data) {
  17397. this.left = null;
  17398. this.right = null;
  17399. this.axis = axis;
  17400. this.data = data;
  17401. }
  17402. var KDTree = function (points, dimension) {
  17403. if (!points.length) {
  17404. return;
  17405. }
  17406. if (!dimension) {
  17407. dimension = points[0].array.length;
  17408. }
  17409. this.dimension = dimension;
  17410. this.root = this._buildTree(points, 0, points.length - 1, 0);
  17411. this._stack = [];
  17412. this._nearstNList = [];
  17413. };
  17414. KDTree.prototype._buildTree = function (points, left, right, axis) {
  17415. if (right < left) {
  17416. return null;
  17417. }
  17418. var medianIndex = Math.floor((left + right) / 2);
  17419. medianIndex = quickSelect(points, left, right, medianIndex, function (a, b) {
  17420. return a.array[axis] - b.array[axis];
  17421. });
  17422. var median = points[medianIndex];
  17423. var node = new Node(axis, median);
  17424. axis = (axis + 1) % this.dimension;
  17425. if (right > left) {
  17426. node.left = this._buildTree(points, left, medianIndex - 1, axis);
  17427. node.right = this._buildTree(points, medianIndex + 1, right, axis);
  17428. }
  17429. return node;
  17430. };
  17431. KDTree.prototype.nearest = function (target, squaredDistance) {
  17432. var curr = this.root;
  17433. var stack = this._stack;
  17434. var idx = 0;
  17435. var minDist = Infinity;
  17436. var nearestNode = null;
  17437. if (curr.data !== target) {
  17438. minDist = squaredDistance(curr.data, target);
  17439. nearestNode = curr;
  17440. }
  17441. if (target.array[curr.axis] < curr.data.array[curr.axis]) {
  17442. curr.right && (stack[idx++] = curr.right);
  17443. curr.left && (stack[idx++] = curr.left);
  17444. } else {
  17445. curr.left && (stack[idx++] = curr.left);
  17446. curr.right && (stack[idx++] = curr.right);
  17447. }
  17448. while (idx--) {
  17449. curr = stack[idx];
  17450. var currDist = target.array[curr.axis] - curr.data.array[curr.axis];
  17451. var isLeft = currDist < 0;
  17452. var needsCheckOtherSide = false;
  17453. currDist = currDist * currDist;
  17454. if (currDist < minDist) {
  17455. currDist = squaredDistance(curr.data, target);
  17456. if (currDist < minDist && curr.data !== target) {
  17457. minDist = currDist;
  17458. nearestNode = curr;
  17459. }
  17460. needsCheckOtherSide = true;
  17461. }
  17462. if (isLeft) {
  17463. if (needsCheckOtherSide) {
  17464. curr.right && (stack[idx++] = curr.right);
  17465. }
  17466. curr.left && (stack[idx++] = curr.left);
  17467. } else {
  17468. if (needsCheckOtherSide) {
  17469. curr.left && (stack[idx++] = curr.left);
  17470. }
  17471. curr.right && (stack[idx++] = curr.right);
  17472. }
  17473. }
  17474. return nearestNode.data;
  17475. };
  17476. KDTree.prototype._addNearest = function (found, dist, node) {
  17477. var nearestNList = this._nearstNList;
  17478. for (var i = found - 1; i > 0; i--) {
  17479. if (dist >= nearestNList[i - 1].dist) {
  17480. break;
  17481. } else {
  17482. nearestNList[i].dist = nearestNList[i - 1].dist;
  17483. nearestNList[i].node = nearestNList[i - 1].node;
  17484. }
  17485. }
  17486. nearestNList[i].dist = dist;
  17487. nearestNList[i].node = node;
  17488. };
  17489. KDTree.prototype.nearestN = function (target, N, squaredDistance, output) {
  17490. if (N <= 0) {
  17491. output.length = 0;
  17492. return output;
  17493. }
  17494. var curr = this.root;
  17495. var stack = this._stack;
  17496. var idx = 0;
  17497. var nearestNList = this._nearstNList;
  17498. for (var i = 0; i < N; i++) {
  17499. if (!nearestNList[i]) {
  17500. nearestNList[i] = {};
  17501. }
  17502. nearestNList[i].dist = 0;
  17503. nearestNList[i].node = null;
  17504. }
  17505. var currDist = squaredDistance(curr.data, target);
  17506. var found = 0;
  17507. if (curr.data !== target) {
  17508. found++;
  17509. this._addNearest(found, currDist, curr);
  17510. }
  17511. if (target.array[curr.axis] < curr.data.array[curr.axis]) {
  17512. curr.right && (stack[idx++] = curr.right);
  17513. curr.left && (stack[idx++] = curr.left);
  17514. } else {
  17515. curr.left && (stack[idx++] = curr.left);
  17516. curr.right && (stack[idx++] = curr.right);
  17517. }
  17518. while (idx--) {
  17519. curr = stack[idx];
  17520. var currDist = target.array[curr.axis] - curr.data.array[curr.axis];
  17521. var isLeft = currDist < 0;
  17522. var needsCheckOtherSide = false;
  17523. currDist = currDist * currDist;
  17524. if (found < N || currDist < nearestNList[found - 1].dist) {
  17525. currDist = squaredDistance(curr.data, target);
  17526. if ((found < N || currDist < nearestNList[found - 1].dist) && curr.data !== target) {
  17527. if (found < N) {
  17528. found++;
  17529. }
  17530. this._addNearest(found, currDist, curr);
  17531. }
  17532. needsCheckOtherSide = true;
  17533. }
  17534. if (isLeft) {
  17535. if (needsCheckOtherSide) {
  17536. curr.right && (stack[idx++] = curr.right);
  17537. }
  17538. curr.left && (stack[idx++] = curr.left);
  17539. } else {
  17540. if (needsCheckOtherSide) {
  17541. curr.left && (stack[idx++] = curr.left);
  17542. }
  17543. curr.right && (stack[idx++] = curr.right);
  17544. }
  17545. }
  17546. for (var i = 0; i < found; i++) {
  17547. output[i] = nearestNList[i].node.data;
  17548. }
  17549. output.length = found;
  17550. return output;
  17551. };
  17552. return KDTree;
  17553. });define('echarts/data/quickSelect', ['require'], function (require) {
  17554. function defaultCompareFunc(a, b) {
  17555. return a - b;
  17556. }
  17557. function swapElement(list, idx0, idx1) {
  17558. var tmp = list[idx0];
  17559. list[idx0] = list[idx1];
  17560. list[idx1] = tmp;
  17561. }
  17562. function select(list, left, right, nth, compareFunc) {
  17563. var pivotIdx = left;
  17564. while (right > left) {
  17565. var pivotIdx = Math.round((right + left) / 2);
  17566. var pivotValue = list[pivotIdx];
  17567. swapElement(list, pivotIdx, right);
  17568. pivotIdx = left;
  17569. for (var i = left; i <= right - 1; i++) {
  17570. if (compareFunc(pivotValue, list[i]) >= 0) {
  17571. swapElement(list, i, pivotIdx);
  17572. pivotIdx++;
  17573. }
  17574. }
  17575. swapElement(list, right, pivotIdx);
  17576. if (pivotIdx === nth) {
  17577. return pivotIdx;
  17578. } else if (pivotIdx < nth) {
  17579. left = pivotIdx + 1;
  17580. } else {
  17581. right = pivotIdx - 1;
  17582. }
  17583. }
  17584. return left;
  17585. }
  17586. function quickSelect(list, left, right, nth, compareFunc) {
  17587. if (arguments.length <= 3) {
  17588. nth = left;
  17589. if (arguments.length == 2) {
  17590. compareFunc = defaultCompareFunc;
  17591. } else {
  17592. compareFunc = right;
  17593. }
  17594. left = 0;
  17595. right = list.length - 1;
  17596. }
  17597. return select(list, left, right, nth, compareFunc);
  17598. }
  17599. return quickSelect;
  17600. });define('echarts/component/dataView', [
  17601. 'require',
  17602. './base',
  17603. '../config',
  17604. 'zrender/tool/util',
  17605. '../component'
  17606. ], function (require) {
  17607. var Base = require('./base');
  17608. var ecConfig = require('../config');
  17609. var zrUtil = require('zrender/tool/util');
  17610. function DataView(ecTheme, messageCenter, zr, option, myChart) {
  17611. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  17612. this.dom = myChart.dom;
  17613. this._tDom = document.createElement('div');
  17614. this._textArea = document.createElement('textArea');
  17615. this._buttonRefresh = document.createElement('button');
  17616. this._buttonRefresh.setAttribute('type', 'button');
  17617. this._buttonClose = document.createElement('button');
  17618. this._buttonClose.setAttribute('type', 'button');
  17619. this._hasShow = false;
  17620. this._zrHeight = zr.getHeight();
  17621. this._zrWidth = zr.getWidth();
  17622. this._tDom.className = 'echarts-dataview';
  17623. this.hide();
  17624. this.dom.firstChild.appendChild(this._tDom);
  17625. if (window.addEventListener) {
  17626. this._tDom.addEventListener('click', this._stop);
  17627. this._tDom.addEventListener('mousewheel', this._stop);
  17628. this._tDom.addEventListener('mousemove', this._stop);
  17629. this._tDom.addEventListener('mousedown', this._stop);
  17630. this._tDom.addEventListener('mouseup', this._stop);
  17631. this._tDom.addEventListener('touchstart', this._stop);
  17632. this._tDom.addEventListener('touchmove', this._stop);
  17633. this._tDom.addEventListener('touchend', this._stop);
  17634. } else {
  17635. this._tDom.attachEvent('onclick', this._stop);
  17636. this._tDom.attachEvent('onmousewheel', this._stop);
  17637. this._tDom.attachEvent('onmousemove', this._stop);
  17638. this._tDom.attachEvent('onmousedown', this._stop);
  17639. this._tDom.attachEvent('onmouseup', this._stop);
  17640. }
  17641. }
  17642. DataView.prototype = {
  17643. type: ecConfig.COMPONENT_TYPE_DATAVIEW,
  17644. _lang: [
  17645. 'Data View',
  17646. 'close',
  17647. 'refresh'
  17648. ],
  17649. _gCssText: 'position:absolute;' + 'display:block;' + 'overflow:hidden;' + 'transition:height 0.8s,background-color 1s;' + '-moz-transition:height 0.8s,background-color 1s;' + '-webkit-transition:height 0.8s,background-color 1s;' + '-o-transition:height 0.8s,background-color 1s;' + 'z-index:1;' + 'left:0;' + 'top:0;',
  17650. hide: function () {
  17651. this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + 0 + 'px;' + 'background-color:#f0ffff;';
  17652. this._tDom.style.cssText = this._gCssText + this._sizeCssText;
  17653. },
  17654. show: function (newOption) {
  17655. this._hasShow = true;
  17656. var lang = this.query(this.option, 'toolbox.feature.dataView.lang') || this._lang;
  17657. this.option = newOption;
  17658. this._tDom.innerHTML = '<p style="padding:8px 0;margin:0 0 10px 0;' + 'border-bottom:1px solid #eee">' + (lang[0] || this._lang[0]) + '</p>';
  17659. var customContent = this.query(this.option, 'toolbox.feature.dataView.optionToContent');
  17660. if (typeof customContent != 'function') {
  17661. this._textArea.value = this._optionToContent();
  17662. } else {
  17663. this._textArea = document.createElement('div');
  17664. this._textArea.innerHTML = customContent(this.option);
  17665. }
  17666. this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;' + 'width:100%;' + 'height:' + (this._zrHeight - 100) + 'px;';
  17667. this._tDom.appendChild(this._textArea);
  17668. this._buttonClose.style.cssText = 'float:right;padding:1px 6px;';
  17669. this._buttonClose.innerHTML = lang[1] || this._lang[1];
  17670. var self = this;
  17671. this._buttonClose.onclick = function () {
  17672. self.hide();
  17673. };
  17674. this._tDom.appendChild(this._buttonClose);
  17675. if (this.query(this.option, 'toolbox.feature.dataView.readOnly') === false) {
  17676. this._buttonRefresh.style.cssText = 'float:right;margin-right:10px;padding:1px 6px;';
  17677. this._buttonRefresh.innerHTML = lang[2] || this._lang[2];
  17678. this._buttonRefresh.onclick = function () {
  17679. self._save();
  17680. };
  17681. this._textArea.readOnly = false;
  17682. this._textArea.style.cursor = 'default';
  17683. } else {
  17684. this._buttonRefresh.style.cssText = 'display:none';
  17685. this._textArea.readOnly = true;
  17686. this._textArea.style.cursor = 'text';
  17687. }
  17688. this._tDom.appendChild(this._buttonRefresh);
  17689. this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + this._zrHeight + 'px;' + 'background-color:#fff;';
  17690. this._tDom.style.cssText = this._gCssText + this._sizeCssText;
  17691. },
  17692. _optionToContent: function () {
  17693. var i;
  17694. var j;
  17695. var k;
  17696. var len;
  17697. var data;
  17698. var valueList;
  17699. var axisList = [];
  17700. var content = '';
  17701. if (this.option.xAxis) {
  17702. if (this.option.xAxis instanceof Array) {
  17703. axisList = this.option.xAxis;
  17704. } else {
  17705. axisList = [this.option.xAxis];
  17706. }
  17707. for (i = 0, len = axisList.length; i < len; i++) {
  17708. if ((axisList[i].type || 'category') == 'category') {
  17709. valueList = [];
  17710. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17711. valueList.push(this.getDataFromOption(axisList[i].data[j]));
  17712. }
  17713. content += valueList.join(', ') + '\n\n';
  17714. }
  17715. }
  17716. }
  17717. if (this.option.yAxis) {
  17718. if (this.option.yAxis instanceof Array) {
  17719. axisList = this.option.yAxis;
  17720. } else {
  17721. axisList = [this.option.yAxis];
  17722. }
  17723. for (i = 0, len = axisList.length; i < len; i++) {
  17724. if (axisList[i].type == 'category') {
  17725. valueList = [];
  17726. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17727. valueList.push(this.getDataFromOption(axisList[i].data[j]));
  17728. }
  17729. content += valueList.join(', ') + '\n\n';
  17730. }
  17731. }
  17732. }
  17733. var series = this.option.series;
  17734. var itemName;
  17735. for (i = 0, len = series.length; i < len; i++) {
  17736. valueList = [];
  17737. for (j = 0, k = series[i].data.length; j < k; j++) {
  17738. data = series[i].data[j];
  17739. if (series[i].type == ecConfig.CHART_TYPE_PIE || series[i].type == ecConfig.CHART_TYPE_MAP) {
  17740. itemName = (data.name || '-') + ':';
  17741. } else {
  17742. itemName = '';
  17743. }
  17744. if (series[i].type == ecConfig.CHART_TYPE_SCATTER) {
  17745. data = this.getDataFromOption(data).join(', ');
  17746. }
  17747. valueList.push(itemName + this.getDataFromOption(data));
  17748. }
  17749. content += (series[i].name || '-') + ' : \n';
  17750. content += valueList.join(series[i].type == ecConfig.CHART_TYPE_SCATTER ? '\n' : ', ');
  17751. content += '\n\n';
  17752. }
  17753. return content;
  17754. },
  17755. _save: function () {
  17756. var customContent = this.query(this.option, 'toolbox.feature.dataView.contentToOption');
  17757. if (typeof customContent != 'function') {
  17758. var text = this._textArea.value.split('\n');
  17759. var content = [];
  17760. for (var i = 0, l = text.length; i < l; i++) {
  17761. text[i] = this._trim(text[i]);
  17762. if (text[i] !== '') {
  17763. content.push(text[i]);
  17764. }
  17765. }
  17766. this._contentToOption(content);
  17767. } else {
  17768. customContent(this._textArea, this.option);
  17769. }
  17770. this.hide();
  17771. var self = this;
  17772. setTimeout(function () {
  17773. self.messageCenter && self.messageCenter.dispatch(ecConfig.EVENT.DATA_VIEW_CHANGED, null, { option: self.option }, self.myChart);
  17774. }, self.canvasSupported ? 800 : 100);
  17775. },
  17776. _contentToOption: function (content) {
  17777. var i;
  17778. var j;
  17779. var k;
  17780. var len;
  17781. var data;
  17782. var axisList = [];
  17783. var contentIdx = 0;
  17784. var contentValueList;
  17785. var value;
  17786. if (this.option.xAxis) {
  17787. if (this.option.xAxis instanceof Array) {
  17788. axisList = this.option.xAxis;
  17789. } else {
  17790. axisList = [this.option.xAxis];
  17791. }
  17792. for (i = 0, len = axisList.length; i < len; i++) {
  17793. if ((axisList[i].type || 'category') == 'category') {
  17794. contentValueList = content[contentIdx].split(',');
  17795. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17796. value = this._trim(contentValueList[j] || '');
  17797. data = axisList[i].data[j];
  17798. if (typeof axisList[i].data[j].value != 'undefined') {
  17799. axisList[i].data[j].value = value;
  17800. } else {
  17801. axisList[i].data[j] = value;
  17802. }
  17803. }
  17804. contentIdx++;
  17805. }
  17806. }
  17807. }
  17808. if (this.option.yAxis) {
  17809. if (this.option.yAxis instanceof Array) {
  17810. axisList = this.option.yAxis;
  17811. } else {
  17812. axisList = [this.option.yAxis];
  17813. }
  17814. for (i = 0, len = axisList.length; i < len; i++) {
  17815. if (axisList[i].type == 'category') {
  17816. contentValueList = content[contentIdx].split(',');
  17817. for (j = 0, k = axisList[i].data.length; j < k; j++) {
  17818. value = this._trim(contentValueList[j] || '');
  17819. data = axisList[i].data[j];
  17820. if (typeof axisList[i].data[j].value != 'undefined') {
  17821. axisList[i].data[j].value = value;
  17822. } else {
  17823. axisList[i].data[j] = value;
  17824. }
  17825. }
  17826. contentIdx++;
  17827. }
  17828. }
  17829. }
  17830. var series = this.option.series;
  17831. for (i = 0, len = series.length; i < len; i++) {
  17832. contentIdx++;
  17833. if (series[i].type == ecConfig.CHART_TYPE_SCATTER) {
  17834. for (var j = 0, k = series[i].data.length; j < k; j++) {
  17835. contentValueList = content[contentIdx];
  17836. value = contentValueList.replace(' ', '').split(',');
  17837. if (typeof series[i].data[j].value != 'undefined') {
  17838. series[i].data[j].value = value;
  17839. } else {
  17840. series[i].data[j] = value;
  17841. }
  17842. contentIdx++;
  17843. }
  17844. } else {
  17845. contentValueList = content[contentIdx].split(',');
  17846. for (var j = 0, k = series[i].data.length; j < k; j++) {
  17847. value = (contentValueList[j] || '').replace(/.*:/, '');
  17848. value = this._trim(value);
  17849. value = value != '-' && value !== '' ? value - 0 : '-';
  17850. if (typeof series[i].data[j].value != 'undefined') {
  17851. series[i].data[j].value = value;
  17852. } else {
  17853. series[i].data[j] = value;
  17854. }
  17855. }
  17856. contentIdx++;
  17857. }
  17858. }
  17859. },
  17860. _trim: function (str) {
  17861. var trimer = new RegExp('(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)', 'g');
  17862. return str.replace(trimer, '');
  17863. },
  17864. _stop: function (e) {
  17865. e = e || window.event;
  17866. if (e.stopPropagation) {
  17867. e.stopPropagation();
  17868. } else {
  17869. e.cancelBubble = true;
  17870. }
  17871. },
  17872. resize: function () {
  17873. this._zrHeight = this.zr.getHeight();
  17874. this._zrWidth = this.zr.getWidth();
  17875. if (this._tDom.offsetHeight > 10) {
  17876. this._sizeCssText = 'width:' + this._zrWidth + 'px;' + 'height:' + this._zrHeight + 'px;' + 'background-color:#fff;';
  17877. this._tDom.style.cssText = this._gCssText + this._sizeCssText;
  17878. this._textArea.style.cssText = 'display:block;margin:0 0 8px 0;' + 'padding:4px 6px;overflow:auto;' + 'width:100%;' + 'height:' + (this._zrHeight - 100) + 'px;';
  17879. }
  17880. },
  17881. dispose: function () {
  17882. if (window.removeEventListener) {
  17883. this._tDom.removeEventListener('click', this._stop);
  17884. this._tDom.removeEventListener('mousewheel', this._stop);
  17885. this._tDom.removeEventListener('mousemove', this._stop);
  17886. this._tDom.removeEventListener('mousedown', this._stop);
  17887. this._tDom.removeEventListener('mouseup', this._stop);
  17888. this._tDom.removeEventListener('touchstart', this._stop);
  17889. this._tDom.removeEventListener('touchmove', this._stop);
  17890. this._tDom.removeEventListener('touchend', this._stop);
  17891. } else {
  17892. this._tDom.detachEvent('onclick', this._stop);
  17893. this._tDom.detachEvent('onmousewheel', this._stop);
  17894. this._tDom.detachEvent('onmousemove', this._stop);
  17895. this._tDom.detachEvent('onmousedown', this._stop);
  17896. this._tDom.detachEvent('onmouseup', this._stop);
  17897. }
  17898. this._buttonRefresh.onclick = null;
  17899. this._buttonClose.onclick = null;
  17900. if (this._hasShow) {
  17901. this._tDom.removeChild(this._textArea);
  17902. this._tDom.removeChild(this._buttonRefresh);
  17903. this._tDom.removeChild(this._buttonClose);
  17904. }
  17905. this._textArea = null;
  17906. this._buttonRefresh = null;
  17907. this._buttonClose = null;
  17908. this.dom.firstChild.removeChild(this._tDom);
  17909. this._tDom = null;
  17910. }
  17911. };
  17912. zrUtil.inherits(DataView, Base);
  17913. require('../component').define('dataView', DataView);
  17914. return DataView;
  17915. });define('echarts/util/shape/Cross', [
  17916. 'require',
  17917. 'zrender/shape/Base',
  17918. 'zrender/shape/Line',
  17919. 'zrender/tool/util',
  17920. './normalIsCover'
  17921. ], function (require) {
  17922. var Base = require('zrender/shape/Base');
  17923. var LineShape = require('zrender/shape/Line');
  17924. var zrUtil = require('zrender/tool/util');
  17925. function Cross(options) {
  17926. Base.call(this, options);
  17927. }
  17928. Cross.prototype = {
  17929. type: 'cross',
  17930. buildPath: function (ctx, style) {
  17931. var rect = style.rect;
  17932. style.xStart = rect.x;
  17933. style.xEnd = rect.x + rect.width;
  17934. style.yStart = style.yEnd = style.y;
  17935. LineShape.prototype.buildPath(ctx, style);
  17936. style.xStart = style.xEnd = style.x;
  17937. style.yStart = rect.y;
  17938. style.yEnd = rect.y + rect.height;
  17939. LineShape.prototype.buildPath(ctx, style);
  17940. },
  17941. getRect: function (style) {
  17942. return style.rect;
  17943. },
  17944. isCover: require('./normalIsCover')
  17945. };
  17946. zrUtil.inherits(Cross, Base);
  17947. return Cross;
  17948. });define('zrender/shape/Sector', [
  17949. 'require',
  17950. '../tool/math',
  17951. '../tool/computeBoundingBox',
  17952. '../tool/vector',
  17953. './Base',
  17954. '../tool/util'
  17955. ], function (require) {
  17956. var math = require('../tool/math');
  17957. var computeBoundingBox = require('../tool/computeBoundingBox');
  17958. var vec2 = require('../tool/vector');
  17959. var Base = require('./Base');
  17960. var min0 = vec2.create();
  17961. var min1 = vec2.create();
  17962. var max0 = vec2.create();
  17963. var max1 = vec2.create();
  17964. var Sector = function (options) {
  17965. Base.call(this, options);
  17966. };
  17967. Sector.prototype = {
  17968. type: 'sector',
  17969. buildPath: function (ctx, style) {
  17970. var x = style.x;
  17971. var y = style.y;
  17972. var r0 = style.r0 || 0;
  17973. var r = style.r;
  17974. var startAngle = style.startAngle;
  17975. var endAngle = style.endAngle;
  17976. var clockWise = style.clockWise || false;
  17977. startAngle = math.degreeToRadian(startAngle);
  17978. endAngle = math.degreeToRadian(endAngle);
  17979. if (!clockWise) {
  17980. startAngle = -startAngle;
  17981. endAngle = -endAngle;
  17982. }
  17983. var unitX = math.cos(startAngle);
  17984. var unitY = math.sin(startAngle);
  17985. ctx.moveTo(unitX * r0 + x, unitY * r0 + y);
  17986. ctx.lineTo(unitX * r + x, unitY * r + y);
  17987. ctx.arc(x, y, r, startAngle, endAngle, !clockWise);
  17988. ctx.lineTo(math.cos(endAngle) * r0 + x, math.sin(endAngle) * r0 + y);
  17989. if (r0 !== 0) {
  17990. ctx.arc(x, y, r0, endAngle, startAngle, clockWise);
  17991. }
  17992. ctx.closePath();
  17993. return;
  17994. },
  17995. getRect: function (style) {
  17996. if (style.__rect) {
  17997. return style.__rect;
  17998. }
  17999. var x = style.x;
  18000. var y = style.y;
  18001. var r0 = style.r0 || 0;
  18002. var r = style.r;
  18003. var startAngle = math.degreeToRadian(style.startAngle);
  18004. var endAngle = math.degreeToRadian(style.endAngle);
  18005. var clockWise = style.clockWise;
  18006. if (!clockWise) {
  18007. startAngle = -startAngle;
  18008. endAngle = -endAngle;
  18009. }
  18010. if (r0 > 1) {
  18011. computeBoundingBox.arc(x, y, r0, startAngle, endAngle, !clockWise, min0, max0);
  18012. } else {
  18013. min0[0] = max0[0] = x;
  18014. min0[1] = max0[1] = y;
  18015. }
  18016. computeBoundingBox.arc(x, y, r, startAngle, endAngle, !clockWise, min1, max1);
  18017. vec2.min(min0, min0, min1);
  18018. vec2.max(max0, max0, max1);
  18019. style.__rect = {
  18020. x: min0[0],
  18021. y: min0[1],
  18022. width: max0[0] - min0[0],
  18023. height: max0[1] - min0[1]
  18024. };
  18025. return style.__rect;
  18026. }
  18027. };
  18028. require('../tool/util').inherits(Sector, Base);
  18029. return Sector;
  18030. });define('echarts/util/shape/Candle', [
  18031. 'require',
  18032. 'zrender/shape/Base',
  18033. 'zrender/tool/util',
  18034. './normalIsCover'
  18035. ], function (require) {
  18036. var Base = require('zrender/shape/Base');
  18037. var zrUtil = require('zrender/tool/util');
  18038. function Candle(options) {
  18039. Base.call(this, options);
  18040. }
  18041. Candle.prototype = {
  18042. type: 'candle',
  18043. _numberOrder: function (a, b) {
  18044. return b - a;
  18045. },
  18046. buildPath: function (ctx, style) {
  18047. var yList = zrUtil.clone(style.y).sort(this._numberOrder);
  18048. ctx.moveTo(style.x, yList[3]);
  18049. ctx.lineTo(style.x, yList[2]);
  18050. ctx.moveTo(style.x - style.width / 2, yList[2]);
  18051. ctx.rect(style.x - style.width / 2, yList[2], style.width, yList[1] - yList[2]);
  18052. ctx.moveTo(style.x, yList[1]);
  18053. ctx.lineTo(style.x, yList[0]);
  18054. },
  18055. getRect: function (style) {
  18056. if (!style.__rect) {
  18057. var lineWidth = 0;
  18058. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  18059. lineWidth = style.lineWidth || 1;
  18060. }
  18061. var yList = zrUtil.clone(style.y).sort(this._numberOrder);
  18062. style.__rect = {
  18063. x: Math.round(style.x - style.width / 2 - lineWidth / 2),
  18064. y: Math.round(yList[3] - lineWidth / 2),
  18065. width: style.width + lineWidth,
  18066. height: yList[0] - yList[3] + lineWidth
  18067. };
  18068. }
  18069. return style.__rect;
  18070. },
  18071. isCover: require('./normalIsCover')
  18072. };
  18073. zrUtil.inherits(Candle, Base);
  18074. return Candle;
  18075. });define('zrender/tool/computeBoundingBox', [
  18076. 'require',
  18077. './vector',
  18078. './curve'
  18079. ], function (require) {
  18080. var vec2 = require('./vector');
  18081. var curve = require('./curve');
  18082. function computeBoundingBox(points, min, max) {
  18083. if (points.length === 0) {
  18084. return;
  18085. }
  18086. var left = points[0][0];
  18087. var right = points[0][0];
  18088. var top = points[0][1];
  18089. var bottom = points[0][1];
  18090. for (var i = 1; i < points.length; i++) {
  18091. var p = points[i];
  18092. if (p[0] < left) {
  18093. left = p[0];
  18094. }
  18095. if (p[0] > right) {
  18096. right = p[0];
  18097. }
  18098. if (p[1] < top) {
  18099. top = p[1];
  18100. }
  18101. if (p[1] > bottom) {
  18102. bottom = p[1];
  18103. }
  18104. }
  18105. min[0] = left;
  18106. min[1] = top;
  18107. max[0] = right;
  18108. max[1] = bottom;
  18109. }
  18110. function computeCubeBezierBoundingBox(p0, p1, p2, p3, min, max) {
  18111. var xDim = [];
  18112. curve.cubicExtrema(p0[0], p1[0], p2[0], p3[0], xDim);
  18113. for (var i = 0; i < xDim.length; i++) {
  18114. xDim[i] = curve.cubicAt(p0[0], p1[0], p2[0], p3[0], xDim[i]);
  18115. }
  18116. var yDim = [];
  18117. curve.cubicExtrema(p0[1], p1[1], p2[1], p3[1], yDim);
  18118. for (var i = 0; i < yDim.length; i++) {
  18119. yDim[i] = curve.cubicAt(p0[1], p1[1], p2[1], p3[1], yDim[i]);
  18120. }
  18121. xDim.push(p0[0], p3[0]);
  18122. yDim.push(p0[1], p3[1]);
  18123. var left = Math.min.apply(null, xDim);
  18124. var right = Math.max.apply(null, xDim);
  18125. var top = Math.min.apply(null, yDim);
  18126. var bottom = Math.max.apply(null, yDim);
  18127. min[0] = left;
  18128. min[1] = top;
  18129. max[0] = right;
  18130. max[1] = bottom;
  18131. }
  18132. function computeQuadraticBezierBoundingBox(p0, p1, p2, min, max) {
  18133. var t1 = curve.quadraticExtremum(p0[0], p1[0], p2[0]);
  18134. var t2 = curve.quadraticExtremum(p0[1], p1[1], p2[1]);
  18135. t1 = Math.max(Math.min(t1, 1), 0);
  18136. t2 = Math.max(Math.min(t2, 1), 0);
  18137. var ct1 = 1 - t1;
  18138. var ct2 = 1 - t2;
  18139. var x1 = ct1 * ct1 * p0[0] + 2 * ct1 * t1 * p1[0] + t1 * t1 * p2[0];
  18140. var y1 = ct1 * ct1 * p0[1] + 2 * ct1 * t1 * p1[1] + t1 * t1 * p2[1];
  18141. var x2 = ct2 * ct2 * p0[0] + 2 * ct2 * t2 * p1[0] + t2 * t2 * p2[0];
  18142. var y2 = ct2 * ct2 * p0[1] + 2 * ct2 * t2 * p1[1] + t2 * t2 * p2[1];
  18143. min[0] = Math.min(p0[0], p2[0], x1, x2);
  18144. min[1] = Math.min(p0[1], p2[1], y1, y2);
  18145. max[0] = Math.max(p0[0], p2[0], x1, x2);
  18146. max[1] = Math.max(p0[1], p2[1], y1, y2);
  18147. }
  18148. var start = vec2.create();
  18149. var end = vec2.create();
  18150. var extremity = vec2.create();
  18151. var computeArcBoundingBox = function (x, y, r, startAngle, endAngle, anticlockwise, min, max) {
  18152. if (Math.abs(startAngle - endAngle) >= Math.PI * 2) {
  18153. min[0] = x - r;
  18154. min[1] = y - r;
  18155. max[0] = x + r;
  18156. max[1] = y + r;
  18157. return;
  18158. }
  18159. start[0] = Math.cos(startAngle) * r + x;
  18160. start[1] = Math.sin(startAngle) * r + y;
  18161. end[0] = Math.cos(endAngle) * r + x;
  18162. end[1] = Math.sin(endAngle) * r + y;
  18163. vec2.min(min, start, end);
  18164. vec2.max(max, start, end);
  18165. startAngle = startAngle % (Math.PI * 2);
  18166. if (startAngle < 0) {
  18167. startAngle = startAngle + Math.PI * 2;
  18168. }
  18169. endAngle = endAngle % (Math.PI * 2);
  18170. if (endAngle < 0) {
  18171. endAngle = endAngle + Math.PI * 2;
  18172. }
  18173. if (startAngle > endAngle && !anticlockwise) {
  18174. endAngle += Math.PI * 2;
  18175. } else if (startAngle < endAngle && anticlockwise) {
  18176. startAngle += Math.PI * 2;
  18177. }
  18178. if (anticlockwise) {
  18179. var tmp = endAngle;
  18180. endAngle = startAngle;
  18181. startAngle = tmp;
  18182. }
  18183. for (var angle = 0; angle < endAngle; angle += Math.PI / 2) {
  18184. if (angle > startAngle) {
  18185. extremity[0] = Math.cos(angle) * r + x;
  18186. extremity[1] = Math.sin(angle) * r + y;
  18187. vec2.min(min, extremity, min);
  18188. vec2.max(max, extremity, max);
  18189. }
  18190. }
  18191. };
  18192. computeBoundingBox.cubeBezier = computeCubeBezierBoundingBox;
  18193. computeBoundingBox.quadraticBezier = computeQuadraticBezierBoundingBox;
  18194. computeBoundingBox.arc = computeArcBoundingBox;
  18195. return computeBoundingBox;
  18196. });define('echarts/util/shape/Chain', [
  18197. 'require',
  18198. 'zrender/shape/Base',
  18199. './Icon',
  18200. 'zrender/shape/util/dashedLineTo',
  18201. 'zrender/tool/util',
  18202. 'zrender/tool/matrix'
  18203. ], function (require) {
  18204. var Base = require('zrender/shape/Base');
  18205. var IconShape = require('./Icon');
  18206. var dashedLineTo = require('zrender/shape/util/dashedLineTo');
  18207. var zrUtil = require('zrender/tool/util');
  18208. var matrix = require('zrender/tool/matrix');
  18209. function Chain(options) {
  18210. Base.call(this, options);
  18211. }
  18212. Chain.prototype = {
  18213. type: 'chain',
  18214. brush: function (ctx, isHighlight) {
  18215. var style = this.style;
  18216. if (isHighlight) {
  18217. style = this.getHighlightStyle(style, this.highlightStyle || {});
  18218. }
  18219. ctx.save();
  18220. this.setContext(ctx, style);
  18221. this.setTransform(ctx);
  18222. ctx.save();
  18223. ctx.beginPath();
  18224. this.buildLinePath(ctx, style);
  18225. ctx.stroke();
  18226. ctx.restore();
  18227. this.brushSymbol(ctx, style);
  18228. ctx.restore();
  18229. return;
  18230. },
  18231. buildLinePath: function (ctx, style) {
  18232. var x = style.x;
  18233. var y = style.y + 5;
  18234. var width = style.width;
  18235. var height = style.height / 2 - 10;
  18236. ctx.moveTo(x, y);
  18237. ctx.lineTo(x, y + height);
  18238. ctx.moveTo(x + width, y);
  18239. ctx.lineTo(x + width, y + height);
  18240. ctx.moveTo(x, y + height / 2);
  18241. if (!style.lineType || style.lineType == 'solid') {
  18242. ctx.lineTo(x + width, y + height / 2);
  18243. } else if (style.lineType == 'dashed' || style.lineType == 'dotted') {
  18244. var dashLength = (style.lineWidth || 1) * (style.lineType == 'dashed' ? 5 : 1);
  18245. dashedLineTo(ctx, x, y + height / 2, x + width, y + height / 2, dashLength);
  18246. }
  18247. },
  18248. brushSymbol: function (ctx, style) {
  18249. var y = style.y + style.height / 4;
  18250. ctx.save();
  18251. var chainPoint = style.chainPoint;
  18252. var curPoint;
  18253. for (var idx = 0, l = chainPoint.length; idx < l; idx++) {
  18254. curPoint = chainPoint[idx];
  18255. if (curPoint.symbol != 'none') {
  18256. ctx.beginPath();
  18257. var symbolSize = curPoint.symbolSize;
  18258. IconShape.prototype.buildPath(ctx, {
  18259. iconType: curPoint.symbol,
  18260. x: curPoint.x - symbolSize,
  18261. y: y - symbolSize,
  18262. width: symbolSize * 2,
  18263. height: symbolSize * 2,
  18264. n: curPoint.n
  18265. });
  18266. ctx.fillStyle = curPoint.isEmpty ? '#fff' : style.strokeColor;
  18267. ctx.closePath();
  18268. ctx.fill();
  18269. ctx.stroke();
  18270. }
  18271. if (curPoint.showLabel) {
  18272. ctx.font = curPoint.textFont;
  18273. ctx.fillStyle = curPoint.textColor;
  18274. ctx.textAlign = curPoint.textAlign;
  18275. ctx.textBaseline = curPoint.textBaseline;
  18276. if (curPoint.rotation) {
  18277. ctx.save();
  18278. this._updateTextTransform(ctx, curPoint.rotation);
  18279. ctx.fillText(curPoint.name, curPoint.textX, curPoint.textY);
  18280. ctx.restore();
  18281. } else {
  18282. ctx.fillText(curPoint.name, curPoint.textX, curPoint.textY);
  18283. }
  18284. }
  18285. }
  18286. ctx.restore();
  18287. },
  18288. _updateTextTransform: function (ctx, rotation) {
  18289. var _transform = matrix.create();
  18290. matrix.identity(_transform);
  18291. if (rotation[0] !== 0) {
  18292. var originX = rotation[1] || 0;
  18293. var originY = rotation[2] || 0;
  18294. if (originX || originY) {
  18295. matrix.translate(_transform, _transform, [
  18296. -originX,
  18297. -originY
  18298. ]);
  18299. }
  18300. matrix.rotate(_transform, _transform, rotation[0]);
  18301. if (originX || originY) {
  18302. matrix.translate(_transform, _transform, [
  18303. originX,
  18304. originY
  18305. ]);
  18306. }
  18307. }
  18308. ctx.transform.apply(ctx, _transform);
  18309. },
  18310. isCover: function (x, y) {
  18311. var rect = this.style;
  18312. if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
  18313. return true;
  18314. } else {
  18315. return false;
  18316. }
  18317. }
  18318. };
  18319. zrUtil.inherits(Chain, Base);
  18320. return Chain;
  18321. });define('zrender/shape/Ring', [
  18322. 'require',
  18323. './Base',
  18324. '../tool/util'
  18325. ], function (require) {
  18326. var Base = require('./Base');
  18327. var Ring = function (options) {
  18328. Base.call(this, options);
  18329. };
  18330. Ring.prototype = {
  18331. type: 'ring',
  18332. buildPath: function (ctx, style) {
  18333. ctx.arc(style.x, style.y, style.r, 0, Math.PI * 2, false);
  18334. ctx.moveTo(style.x + style.r0, style.y);
  18335. ctx.arc(style.x, style.y, style.r0, 0, Math.PI * 2, true);
  18336. return;
  18337. },
  18338. getRect: function (style) {
  18339. if (style.__rect) {
  18340. return style.__rect;
  18341. }
  18342. var lineWidth;
  18343. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  18344. lineWidth = style.lineWidth || 1;
  18345. } else {
  18346. lineWidth = 0;
  18347. }
  18348. style.__rect = {
  18349. x: Math.round(style.x - style.r - lineWidth / 2),
  18350. y: Math.round(style.y - style.r - lineWidth / 2),
  18351. width: style.r * 2 + lineWidth,
  18352. height: style.r * 2 + lineWidth
  18353. };
  18354. return style.__rect;
  18355. }
  18356. };
  18357. require('../tool/util').inherits(Ring, Base);
  18358. return Ring;
  18359. });define('echarts/component/axis', [
  18360. 'require',
  18361. './base',
  18362. 'zrender/shape/Line',
  18363. '../config',
  18364. '../util/ecData',
  18365. 'zrender/tool/util',
  18366. 'zrender/tool/color',
  18367. './categoryAxis',
  18368. './valueAxis',
  18369. '../component'
  18370. ], function (require) {
  18371. var Base = require('./base');
  18372. var LineShape = require('zrender/shape/Line');
  18373. var ecConfig = require('../config');
  18374. var ecData = require('../util/ecData');
  18375. var zrUtil = require('zrender/tool/util');
  18376. var zrColor = require('zrender/tool/color');
  18377. function Axis(ecTheme, messageCenter, zr, option, myChart, axisType) {
  18378. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  18379. this.axisType = axisType;
  18380. this._axisList = [];
  18381. this.refresh(option);
  18382. }
  18383. Axis.prototype = {
  18384. type: ecConfig.COMPONENT_TYPE_AXIS,
  18385. axisBase: {
  18386. _buildAxisLine: function () {
  18387. var lineWidth = this.option.axisLine.lineStyle.width;
  18388. var halfLineWidth = lineWidth / 2;
  18389. var axShape = {
  18390. _axisShape: 'axisLine',
  18391. zlevel: this.getZlevelBase(),
  18392. z: this.getZBase() + 3,
  18393. hoverable: false
  18394. };
  18395. var grid = this.grid;
  18396. switch (this.option.position) {
  18397. case 'left':
  18398. axShape.style = {
  18399. xStart: grid.getX() - halfLineWidth,
  18400. yStart: grid.getYend(),
  18401. xEnd: grid.getX() - halfLineWidth,
  18402. yEnd: grid.getY(),
  18403. lineCap: 'round'
  18404. };
  18405. break;
  18406. case 'right':
  18407. axShape.style = {
  18408. xStart: grid.getXend() + halfLineWidth,
  18409. yStart: grid.getYend(),
  18410. xEnd: grid.getXend() + halfLineWidth,
  18411. yEnd: grid.getY(),
  18412. lineCap: 'round'
  18413. };
  18414. break;
  18415. case 'bottom':
  18416. axShape.style = {
  18417. xStart: grid.getX(),
  18418. yStart: grid.getYend() + halfLineWidth,
  18419. xEnd: grid.getXend(),
  18420. yEnd: grid.getYend() + halfLineWidth,
  18421. lineCap: 'round'
  18422. };
  18423. break;
  18424. case 'top':
  18425. axShape.style = {
  18426. xStart: grid.getX(),
  18427. yStart: grid.getY() - halfLineWidth,
  18428. xEnd: grid.getXend(),
  18429. yEnd: grid.getY() - halfLineWidth,
  18430. lineCap: 'round'
  18431. };
  18432. break;
  18433. }
  18434. var style = axShape.style;
  18435. if (this.option.name !== '') {
  18436. style.text = this.option.name;
  18437. style.textPosition = this.option.nameLocation;
  18438. style.textFont = this.getFont(this.option.nameTextStyle);
  18439. if (this.option.nameTextStyle.align) {
  18440. style.textAlign = this.option.nameTextStyle.align;
  18441. }
  18442. if (this.option.nameTextStyle.baseline) {
  18443. style.textBaseline = this.option.nameTextStyle.baseline;
  18444. }
  18445. if (this.option.nameTextStyle.color) {
  18446. style.textColor = this.option.nameTextStyle.color;
  18447. }
  18448. }
  18449. style.strokeColor = this.option.axisLine.lineStyle.color;
  18450. style.lineWidth = lineWidth;
  18451. if (this.isHorizontal()) {
  18452. style.yStart = style.yEnd = this.subPixelOptimize(style.yEnd, lineWidth);
  18453. } else {
  18454. style.xStart = style.xEnd = this.subPixelOptimize(style.xEnd, lineWidth);
  18455. }
  18456. style.lineType = this.option.axisLine.lineStyle.type;
  18457. axShape = new LineShape(axShape);
  18458. this.shapeList.push(axShape);
  18459. },
  18460. _axisLabelClickable: function (clickable, axShape) {
  18461. if (clickable) {
  18462. ecData.pack(axShape, undefined, -1, undefined, -1, axShape.style.text);
  18463. axShape.hoverable = true;
  18464. axShape.clickable = true;
  18465. axShape.highlightStyle = {
  18466. color: zrColor.lift(axShape.style.color, 1),
  18467. brushType: 'fill'
  18468. };
  18469. return axShape;
  18470. } else {
  18471. return axShape;
  18472. }
  18473. },
  18474. refixAxisShape: function (zeroX, zeroY) {
  18475. if (!this.option.axisLine.onZero) {
  18476. return;
  18477. }
  18478. var tickLength;
  18479. if (this.isHorizontal() && zeroY != null) {
  18480. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  18481. if (this.shapeList[i]._axisShape === 'axisLine') {
  18482. this.shapeList[i].style.yStart = this.shapeList[i].style.yEnd = this.subPixelOptimize(zeroY, this.shapeList[i].stylelineWidth);
  18483. this.zr.modShape(this.shapeList[i].id);
  18484. } else if (this.shapeList[i]._axisShape === 'axisTick') {
  18485. tickLength = this.shapeList[i].style.yEnd - this.shapeList[i].style.yStart;
  18486. this.shapeList[i].style.yStart = zeroY - tickLength;
  18487. this.shapeList[i].style.yEnd = zeroY;
  18488. this.zr.modShape(this.shapeList[i].id);
  18489. }
  18490. }
  18491. }
  18492. if (!this.isHorizontal() && zeroX != null) {
  18493. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  18494. if (this.shapeList[i]._axisShape === 'axisLine') {
  18495. this.shapeList[i].style.xStart = this.shapeList[i].style.xEnd = this.subPixelOptimize(zeroX, this.shapeList[i].stylelineWidth);
  18496. this.zr.modShape(this.shapeList[i].id);
  18497. } else if (this.shapeList[i]._axisShape === 'axisTick') {
  18498. tickLength = this.shapeList[i].style.xEnd - this.shapeList[i].style.xStart;
  18499. this.shapeList[i].style.xStart = zeroX;
  18500. this.shapeList[i].style.xEnd = zeroX + tickLength;
  18501. this.zr.modShape(this.shapeList[i].id);
  18502. }
  18503. }
  18504. }
  18505. },
  18506. getPosition: function () {
  18507. return this.option.position;
  18508. },
  18509. isHorizontal: function () {
  18510. return this.option.position === 'bottom' || this.option.position === 'top';
  18511. }
  18512. },
  18513. reformOption: function (opt) {
  18514. if (!opt || opt instanceof Array && opt.length === 0) {
  18515. opt = [{ type: ecConfig.COMPONENT_TYPE_AXIS_VALUE }];
  18516. } else if (!(opt instanceof Array)) {
  18517. opt = [opt];
  18518. }
  18519. if (opt.length > 2) {
  18520. opt = [
  18521. opt[0],
  18522. opt[1]
  18523. ];
  18524. }
  18525. if (this.axisType === 'xAxis') {
  18526. if (!opt[0].position || opt[0].position != 'bottom' && opt[0].position != 'top') {
  18527. opt[0].position = 'bottom';
  18528. }
  18529. if (opt.length > 1) {
  18530. opt[1].position = opt[0].position === 'bottom' ? 'top' : 'bottom';
  18531. }
  18532. for (var i = 0, l = opt.length; i < l; i++) {
  18533. opt[i].type = opt[i].type || 'category';
  18534. opt[i].xAxisIndex = i;
  18535. opt[i].yAxisIndex = -1;
  18536. }
  18537. } else {
  18538. if (!opt[0].position || opt[0].position != 'left' && opt[0].position != 'right') {
  18539. opt[0].position = 'left';
  18540. }
  18541. if (opt.length > 1) {
  18542. opt[1].position = opt[0].position === 'left' ? 'right' : 'left';
  18543. }
  18544. for (var i = 0, l = opt.length; i < l; i++) {
  18545. opt[i].type = opt[i].type || 'value';
  18546. opt[i].xAxisIndex = -1;
  18547. opt[i].yAxisIndex = i;
  18548. }
  18549. }
  18550. return opt;
  18551. },
  18552. refresh: function (newOption) {
  18553. var axisOption;
  18554. if (newOption) {
  18555. this.option = newOption;
  18556. if (this.axisType === 'xAxis') {
  18557. this.option.xAxis = this.reformOption(newOption.xAxis);
  18558. axisOption = this.option.xAxis;
  18559. } else {
  18560. this.option.yAxis = this.reformOption(newOption.yAxis);
  18561. axisOption = this.option.yAxis;
  18562. }
  18563. this.series = newOption.series;
  18564. }
  18565. var CategoryAxis = require('./categoryAxis');
  18566. var ValueAxis = require('./valueAxis');
  18567. var len = Math.max(axisOption && axisOption.length || 0, this._axisList.length);
  18568. for (var i = 0; i < len; i++) {
  18569. if (this._axisList[i] && newOption && (!axisOption[i] || this._axisList[i].type != axisOption[i].type)) {
  18570. this._axisList[i].dispose && this._axisList[i].dispose();
  18571. this._axisList[i] = false;
  18572. }
  18573. if (this._axisList[i]) {
  18574. this._axisList[i].refresh && this._axisList[i].refresh(axisOption ? axisOption[i] : false, this.series);
  18575. } else if (axisOption && axisOption[i]) {
  18576. this._axisList[i] = axisOption[i].type === 'category' ? new CategoryAxis(this.ecTheme, this.messageCenter, this.zr, axisOption[i], this.myChart, this.axisBase) : new ValueAxis(this.ecTheme, this.messageCenter, this.zr, axisOption[i], this.myChart, this.axisBase, this.series);
  18577. }
  18578. }
  18579. },
  18580. getAxis: function (idx) {
  18581. return this._axisList[idx];
  18582. },
  18583. getAxisCount: function () {
  18584. return this._axisList.length;
  18585. },
  18586. clear: function () {
  18587. for (var i = 0, l = this._axisList.length; i < l; i++) {
  18588. this._axisList[i].dispose && this._axisList[i].dispose();
  18589. }
  18590. this._axisList = [];
  18591. }
  18592. };
  18593. zrUtil.inherits(Axis, Base);
  18594. require('../component').define('axis', Axis);
  18595. return Axis;
  18596. });define('echarts/component/grid', [
  18597. 'require',
  18598. './base',
  18599. 'zrender/shape/Rectangle',
  18600. '../config',
  18601. 'zrender/tool/util',
  18602. '../component'
  18603. ], function (require) {
  18604. var Base = require('./base');
  18605. var RectangleShape = require('zrender/shape/Rectangle');
  18606. var ecConfig = require('../config');
  18607. ecConfig.grid = {
  18608. zlevel: 0,
  18609. z: 0,
  18610. x: 80,
  18611. y: 60,
  18612. x2: 80,
  18613. y2: 60,
  18614. backgroundColor: 'rgba(0,0,0,0)',
  18615. borderWidth: 1,
  18616. borderColor: '#ccc'
  18617. };
  18618. var zrUtil = require('zrender/tool/util');
  18619. function Grid(ecTheme, messageCenter, zr, option, myChart) {
  18620. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  18621. this.refresh(option);
  18622. }
  18623. Grid.prototype = {
  18624. type: ecConfig.COMPONENT_TYPE_GRID,
  18625. getX: function () {
  18626. return this._x;
  18627. },
  18628. getY: function () {
  18629. return this._y;
  18630. },
  18631. getWidth: function () {
  18632. return this._width;
  18633. },
  18634. getHeight: function () {
  18635. return this._height;
  18636. },
  18637. getXend: function () {
  18638. return this._x + this._width;
  18639. },
  18640. getYend: function () {
  18641. return this._y + this._height;
  18642. },
  18643. getArea: function () {
  18644. return {
  18645. x: this._x,
  18646. y: this._y,
  18647. width: this._width,
  18648. height: this._height
  18649. };
  18650. },
  18651. getBbox: function () {
  18652. return [
  18653. [
  18654. this._x,
  18655. this._y
  18656. ],
  18657. [
  18658. this.getXend(),
  18659. this.getYend()
  18660. ]
  18661. ];
  18662. },
  18663. refixAxisShape: function (component) {
  18664. var zeroX;
  18665. var zeroY;
  18666. var axisList = component.xAxis._axisList.concat(component.yAxis ? component.yAxis._axisList : []);
  18667. var len = axisList.length;
  18668. var axis;
  18669. while (len--) {
  18670. axis = axisList[len];
  18671. if (axis.type == ecConfig.COMPONENT_TYPE_AXIS_VALUE && axis._min < 0 && axis._max >= 0) {
  18672. axis.isHorizontal() ? zeroX = axis.getCoord(0) : zeroY = axis.getCoord(0);
  18673. }
  18674. }
  18675. if (typeof zeroX != 'undefined' || typeof zeroY != 'undefined') {
  18676. len = axisList.length;
  18677. while (len--) {
  18678. axisList[len].refixAxisShape(zeroX, zeroY);
  18679. }
  18680. }
  18681. },
  18682. refresh: function (newOption) {
  18683. if (newOption || this._zrWidth != this.zr.getWidth() || this._zrHeight != this.zr.getHeight()) {
  18684. this.clear();
  18685. this.option = newOption || this.option;
  18686. this.option.grid = this.reformOption(this.option.grid);
  18687. var gridOption = this.option.grid;
  18688. this._zrWidth = this.zr.getWidth();
  18689. this._zrHeight = this.zr.getHeight();
  18690. this._x = this.parsePercent(gridOption.x, this._zrWidth);
  18691. this._y = this.parsePercent(gridOption.y, this._zrHeight);
  18692. var x2 = this.parsePercent(gridOption.x2, this._zrWidth);
  18693. var y2 = this.parsePercent(gridOption.y2, this._zrHeight);
  18694. if (typeof gridOption.width == 'undefined') {
  18695. this._width = this._zrWidth - this._x - x2;
  18696. } else {
  18697. this._width = this.parsePercent(gridOption.width, this._zrWidth);
  18698. }
  18699. this._width = this._width <= 0 ? 10 : this._width;
  18700. if (typeof gridOption.height == 'undefined') {
  18701. this._height = this._zrHeight - this._y - y2;
  18702. } else {
  18703. this._height = this.parsePercent(gridOption.height, this._zrHeight);
  18704. }
  18705. this._height = this._height <= 0 ? 10 : this._height;
  18706. this._x = this.subPixelOptimize(this._x, gridOption.borderWidth);
  18707. this._y = this.subPixelOptimize(this._y, gridOption.borderWidth);
  18708. this.shapeList.push(new RectangleShape({
  18709. zlevel: this.getZlevelBase(),
  18710. z: this.getZBase(),
  18711. hoverable: false,
  18712. style: {
  18713. x: this._x,
  18714. y: this._y,
  18715. width: this._width,
  18716. height: this._height,
  18717. brushType: gridOption.borderWidth > 0 ? 'both' : 'fill',
  18718. color: gridOption.backgroundColor,
  18719. strokeColor: gridOption.borderColor,
  18720. lineWidth: gridOption.borderWidth
  18721. }
  18722. }));
  18723. this.zr.addShape(this.shapeList[0]);
  18724. }
  18725. }
  18726. };
  18727. zrUtil.inherits(Grid, Base);
  18728. require('../component').define('grid', Grid);
  18729. return Grid;
  18730. });define('echarts/component/dataZoom', [
  18731. 'require',
  18732. './base',
  18733. 'zrender/shape/Rectangle',
  18734. 'zrender/shape/Polygon',
  18735. '../util/shape/Icon',
  18736. '../config',
  18737. '../util/date',
  18738. 'zrender/tool/util',
  18739. '../component'
  18740. ], function (require) {
  18741. var Base = require('./base');
  18742. var RectangleShape = require('zrender/shape/Rectangle');
  18743. var PolygonShape = require('zrender/shape/Polygon');
  18744. var IconShape = require('../util/shape/Icon');
  18745. var ecConfig = require('../config');
  18746. ecConfig.dataZoom = {
  18747. zlevel: 0,
  18748. z: 4,
  18749. show: false,
  18750. orient: 'horizontal',
  18751. backgroundColor: 'rgba(0,0,0,0)',
  18752. dataBackgroundColor: '#eee',
  18753. fillerColor: 'rgba(144,197,237,0.2)',
  18754. handleColor: 'rgba(70,130,180,0.8)',
  18755. handleSize: 8,
  18756. showDetail: true,
  18757. realtime: true
  18758. };
  18759. var ecDate = require('../util/date');
  18760. var zrUtil = require('zrender/tool/util');
  18761. function DataZoom(ecTheme, messageCenter, zr, option, myChart) {
  18762. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  18763. var self = this;
  18764. self._ondrift = function (dx, dy) {
  18765. return self.__ondrift(this, dx, dy);
  18766. };
  18767. self._ondragend = function () {
  18768. return self.__ondragend();
  18769. };
  18770. this._fillerSize = 30;
  18771. this._isSilence = false;
  18772. this._zoom = {};
  18773. this.option.dataZoom = this.reformOption(this.option.dataZoom);
  18774. this.zoomOption = this.option.dataZoom;
  18775. this._handleSize = this.zoomOption.handleSize;
  18776. if (!this.myChart.canvasSupported) {
  18777. this.zoomOption.realtime = false;
  18778. }
  18779. this._location = this._getLocation();
  18780. this._zoom = this._getZoom();
  18781. this._backupData();
  18782. if (this.option.dataZoom.show) {
  18783. this._buildShape();
  18784. }
  18785. this._syncData();
  18786. }
  18787. DataZoom.prototype = {
  18788. type: ecConfig.COMPONENT_TYPE_DATAZOOM,
  18789. _buildShape: function () {
  18790. this._buildBackground();
  18791. this._buildFiller();
  18792. this._buildHandle();
  18793. this._buildFrame();
  18794. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  18795. this.zr.addShape(this.shapeList[i]);
  18796. }
  18797. this._syncFrameShape();
  18798. },
  18799. _getLocation: function () {
  18800. var x;
  18801. var y;
  18802. var width;
  18803. var height;
  18804. var grid = this.component.grid;
  18805. if (this.zoomOption.orient == 'horizontal') {
  18806. width = this.zoomOption.width || grid.getWidth();
  18807. height = this.zoomOption.height || this._fillerSize;
  18808. x = this.zoomOption.x != null ? this.zoomOption.x : grid.getX();
  18809. y = this.zoomOption.y != null ? this.zoomOption.y : this.zr.getHeight() - height - 2;
  18810. } else {
  18811. width = this.zoomOption.width || this._fillerSize;
  18812. height = this.zoomOption.height || grid.getHeight();
  18813. x = this.zoomOption.x != null ? this.zoomOption.x : 2;
  18814. y = this.zoomOption.y != null ? this.zoomOption.y : grid.getY();
  18815. }
  18816. return {
  18817. x: x,
  18818. y: y,
  18819. width: width,
  18820. height: height
  18821. };
  18822. },
  18823. _getZoom: function () {
  18824. var series = this.option.series;
  18825. var xAxis = this.option.xAxis;
  18826. if (xAxis && !(xAxis instanceof Array)) {
  18827. xAxis = [xAxis];
  18828. this.option.xAxis = xAxis;
  18829. }
  18830. var yAxis = this.option.yAxis;
  18831. if (yAxis && !(yAxis instanceof Array)) {
  18832. yAxis = [yAxis];
  18833. this.option.yAxis = yAxis;
  18834. }
  18835. var zoomSeriesIndex = [];
  18836. var xAxisIndex;
  18837. var yAxisIndex;
  18838. var zOptIdx = this.zoomOption.xAxisIndex;
  18839. if (xAxis && zOptIdx == null) {
  18840. xAxisIndex = [];
  18841. for (var i = 0, l = xAxis.length; i < l; i++) {
  18842. if (xAxis[i].type == 'category' || xAxis[i].type == null) {
  18843. xAxisIndex.push(i);
  18844. }
  18845. }
  18846. } else {
  18847. if (zOptIdx instanceof Array) {
  18848. xAxisIndex = zOptIdx;
  18849. } else if (zOptIdx != null) {
  18850. xAxisIndex = [zOptIdx];
  18851. } else {
  18852. xAxisIndex = [];
  18853. }
  18854. }
  18855. zOptIdx = this.zoomOption.yAxisIndex;
  18856. if (yAxis && zOptIdx == null) {
  18857. yAxisIndex = [];
  18858. for (var i = 0, l = yAxis.length; i < l; i++) {
  18859. if (yAxis[i].type == 'category') {
  18860. yAxisIndex.push(i);
  18861. }
  18862. }
  18863. } else {
  18864. if (zOptIdx instanceof Array) {
  18865. yAxisIndex = zOptIdx;
  18866. } else if (zOptIdx != null) {
  18867. yAxisIndex = [zOptIdx];
  18868. } else {
  18869. yAxisIndex = [];
  18870. }
  18871. }
  18872. var serie;
  18873. for (var i = 0, l = series.length; i < l; i++) {
  18874. serie = series[i];
  18875. if (serie.type != ecConfig.CHART_TYPE_LINE && serie.type != ecConfig.CHART_TYPE_BAR && serie.type != ecConfig.CHART_TYPE_SCATTER && serie.type != ecConfig.CHART_TYPE_K) {
  18876. continue;
  18877. }
  18878. for (var j = 0, k = xAxisIndex.length; j < k; j++) {
  18879. if (xAxisIndex[j] == (serie.xAxisIndex || 0)) {
  18880. zoomSeriesIndex.push(i);
  18881. break;
  18882. }
  18883. }
  18884. for (var j = 0, k = yAxisIndex.length; j < k; j++) {
  18885. if (yAxisIndex[j] == (serie.yAxisIndex || 0)) {
  18886. zoomSeriesIndex.push(i);
  18887. break;
  18888. }
  18889. }
  18890. if (this.zoomOption.xAxisIndex == null && this.zoomOption.yAxisIndex == null && serie.data && this.getDataFromOption(serie.data[0]) instanceof Array && (serie.type == ecConfig.CHART_TYPE_SCATTER || serie.type == ecConfig.CHART_TYPE_LINE || serie.type == ecConfig.CHART_TYPE_BAR)) {
  18891. zoomSeriesIndex.push(i);
  18892. }
  18893. }
  18894. var start = this._zoom.start != null ? this._zoom.start : this.zoomOption.start != null ? this.zoomOption.start : 0;
  18895. var end = this._zoom.end != null ? this._zoom.end : this.zoomOption.end != null ? this.zoomOption.end : 100;
  18896. if (start > end) {
  18897. start = start + end;
  18898. end = start - end;
  18899. start = start - end;
  18900. }
  18901. var size = Math.round((end - start) / 100 * (this.zoomOption.orient == 'horizontal' ? this._location.width : this._location.height));
  18902. return {
  18903. start: start,
  18904. end: end,
  18905. start2: 0,
  18906. end2: 100,
  18907. size: size,
  18908. xAxisIndex: xAxisIndex,
  18909. yAxisIndex: yAxisIndex,
  18910. seriesIndex: zoomSeriesIndex,
  18911. scatterMap: this._zoom.scatterMap || {}
  18912. };
  18913. },
  18914. _backupData: function () {
  18915. this._originalData = {
  18916. xAxis: {},
  18917. yAxis: {},
  18918. series: {}
  18919. };
  18920. var xAxis = this.option.xAxis;
  18921. var xAxisIndex = this._zoom.xAxisIndex;
  18922. for (var i = 0, l = xAxisIndex.length; i < l; i++) {
  18923. this._originalData.xAxis[xAxisIndex[i]] = xAxis[xAxisIndex[i]].data;
  18924. }
  18925. var yAxis = this.option.yAxis;
  18926. var yAxisIndex = this._zoom.yAxisIndex;
  18927. for (var i = 0, l = yAxisIndex.length; i < l; i++) {
  18928. this._originalData.yAxis[yAxisIndex[i]] = yAxis[yAxisIndex[i]].data;
  18929. }
  18930. var series = this.option.series;
  18931. var seriesIndex = this._zoom.seriesIndex;
  18932. var serie;
  18933. for (var i = 0, l = seriesIndex.length; i < l; i++) {
  18934. serie = series[seriesIndex[i]];
  18935. this._originalData.series[seriesIndex[i]] = serie.data;
  18936. if (serie.data && this.getDataFromOption(serie.data[0]) instanceof Array && (serie.type == ecConfig.CHART_TYPE_SCATTER || serie.type == ecConfig.CHART_TYPE_LINE || serie.type == ecConfig.CHART_TYPE_BAR)) {
  18937. this._backupScale();
  18938. this._calculScatterMap(seriesIndex[i]);
  18939. }
  18940. }
  18941. },
  18942. _calculScatterMap: function (seriesIndex) {
  18943. this._zoom.scatterMap = this._zoom.scatterMap || {};
  18944. this._zoom.scatterMap[seriesIndex] = this._zoom.scatterMap[seriesIndex] || {};
  18945. var componentLibrary = require('../component');
  18946. var Axis = componentLibrary.get('axis');
  18947. var axisOption = zrUtil.clone(this.option.xAxis);
  18948. if (axisOption[0].type == 'category') {
  18949. axisOption[0].type = 'value';
  18950. }
  18951. if (axisOption[1] && axisOption[1].type == 'category') {
  18952. axisOption[1].type = 'value';
  18953. }
  18954. var vAxis = new Axis(this.ecTheme, null, false, {
  18955. xAxis: axisOption,
  18956. series: this.option.series
  18957. }, this, 'xAxis');
  18958. var axisIndex = this.option.series[seriesIndex].xAxisIndex || 0;
  18959. this._zoom.scatterMap[seriesIndex].x = vAxis.getAxis(axisIndex).getExtremum();
  18960. vAxis.dispose();
  18961. axisOption = zrUtil.clone(this.option.yAxis);
  18962. if (axisOption[0].type == 'category') {
  18963. axisOption[0].type = 'value';
  18964. }
  18965. if (axisOption[1] && axisOption[1].type == 'category') {
  18966. axisOption[1].type = 'value';
  18967. }
  18968. vAxis = new Axis(this.ecTheme, null, false, {
  18969. yAxis: axisOption,
  18970. series: this.option.series
  18971. }, this, 'yAxis');
  18972. axisIndex = this.option.series[seriesIndex].yAxisIndex || 0;
  18973. this._zoom.scatterMap[seriesIndex].y = vAxis.getAxis(axisIndex).getExtremum();
  18974. vAxis.dispose();
  18975. },
  18976. _buildBackground: function () {
  18977. var width = this._location.width;
  18978. var height = this._location.height;
  18979. this.shapeList.push(new RectangleShape({
  18980. zlevel: this.getZlevelBase(),
  18981. z: this.getZBase(),
  18982. hoverable: false,
  18983. style: {
  18984. x: this._location.x,
  18985. y: this._location.y,
  18986. width: width,
  18987. height: height,
  18988. color: this.zoomOption.backgroundColor
  18989. }
  18990. }));
  18991. var maxLength = 0;
  18992. var xAxis = this._originalData.xAxis;
  18993. var xAxisIndex = this._zoom.xAxisIndex;
  18994. for (var i = 0, l = xAxisIndex.length; i < l; i++) {
  18995. maxLength = Math.max(maxLength, xAxis[xAxisIndex[i]].length);
  18996. }
  18997. var yAxis = this._originalData.yAxis;
  18998. var yAxisIndex = this._zoom.yAxisIndex;
  18999. for (var i = 0, l = yAxisIndex.length; i < l; i++) {
  19000. maxLength = Math.max(maxLength, yAxis[yAxisIndex[i]].length);
  19001. }
  19002. var seriesIndex = this._zoom.seriesIndex[0];
  19003. var data = this._originalData.series[seriesIndex];
  19004. var maxValue = Number.MIN_VALUE;
  19005. var minValue = Number.MAX_VALUE;
  19006. var value;
  19007. for (var i = 0, l = data.length; i < l; i++) {
  19008. value = this.getDataFromOption(data[i], 0);
  19009. if (this.option.series[seriesIndex].type == ecConfig.CHART_TYPE_K) {
  19010. value = value[1];
  19011. }
  19012. if (isNaN(value)) {
  19013. value = 0;
  19014. }
  19015. maxValue = Math.max(maxValue, value);
  19016. minValue = Math.min(minValue, value);
  19017. }
  19018. var valueRange = maxValue - minValue;
  19019. var pointList = [];
  19020. var x = width / (maxLength - (maxLength > 1 ? 1 : 0));
  19021. var y = height / (maxLength - (maxLength > 1 ? 1 : 0));
  19022. var step = 1;
  19023. if (this.zoomOption.orient == 'horizontal' && x < 1) {
  19024. step = Math.floor(maxLength * 3 / width);
  19025. } else if (this.zoomOption.orient == 'vertical' && y < 1) {
  19026. step = Math.floor(maxLength * 3 / height);
  19027. }
  19028. for (var i = 0, l = maxLength; i < l; i += step) {
  19029. value = this.getDataFromOption(data[i], 0);
  19030. if (this.option.series[seriesIndex].type == ecConfig.CHART_TYPE_K) {
  19031. value = value[1];
  19032. }
  19033. if (isNaN(value)) {
  19034. value = 0;
  19035. }
  19036. if (this.zoomOption.orient == 'horizontal') {
  19037. pointList.push([
  19038. this._location.x + x * i,
  19039. this._location.y + height - 1 - Math.round((value - minValue) / valueRange * (height - 10))
  19040. ]);
  19041. } else {
  19042. pointList.push([
  19043. this._location.x + 1 + Math.round((value - minValue) / valueRange * (width - 10)),
  19044. this._location.y + y * (l - i - 1)
  19045. ]);
  19046. }
  19047. }
  19048. if (this.zoomOption.orient == 'horizontal') {
  19049. pointList.push([
  19050. this._location.x + width,
  19051. this._location.y + height
  19052. ]);
  19053. pointList.push([
  19054. this._location.x,
  19055. this._location.y + height
  19056. ]);
  19057. } else {
  19058. pointList.push([
  19059. this._location.x,
  19060. this._location.y
  19061. ]);
  19062. pointList.push([
  19063. this._location.x,
  19064. this._location.y + height
  19065. ]);
  19066. }
  19067. this.shapeList.push(new PolygonShape({
  19068. zlevel: this.getZlevelBase(),
  19069. z: this.getZBase(),
  19070. style: {
  19071. pointList: pointList,
  19072. color: this.zoomOption.dataBackgroundColor
  19073. },
  19074. hoverable: false
  19075. }));
  19076. },
  19077. _buildFiller: function () {
  19078. this._fillerShae = {
  19079. zlevel: this.getZlevelBase(),
  19080. z: this.getZBase(),
  19081. draggable: true,
  19082. ondrift: this._ondrift,
  19083. ondragend: this._ondragend,
  19084. _type: 'filler'
  19085. };
  19086. if (this.zoomOption.orient == 'horizontal') {
  19087. this._fillerShae.style = {
  19088. x: this._location.x + Math.round(this._zoom.start / 100 * this._location.width) + this._handleSize,
  19089. y: this._location.y,
  19090. width: this._zoom.size - this._handleSize * 2,
  19091. height: this._location.height,
  19092. color: this.zoomOption.fillerColor,
  19093. text: ':::',
  19094. textPosition: 'inside'
  19095. };
  19096. } else {
  19097. this._fillerShae.style = {
  19098. x: this._location.x,
  19099. y: this._location.y + Math.round(this._zoom.start / 100 * this._location.height) + this._handleSize,
  19100. width: this._location.width,
  19101. height: this._zoom.size - this._handleSize * 2,
  19102. color: this.zoomOption.fillerColor,
  19103. text: '::',
  19104. textPosition: 'inside'
  19105. };
  19106. }
  19107. this._fillerShae.highlightStyle = {
  19108. brushType: 'fill',
  19109. color: 'rgba(0,0,0,0)'
  19110. };
  19111. this._fillerShae = new RectangleShape(this._fillerShae);
  19112. this.shapeList.push(this._fillerShae);
  19113. },
  19114. _buildHandle: function () {
  19115. var detail = this.zoomOption.showDetail ? this._getDetail() : {
  19116. start: '',
  19117. end: ''
  19118. };
  19119. this._startShape = {
  19120. zlevel: this.getZlevelBase(),
  19121. z: this.getZBase(),
  19122. draggable: true,
  19123. style: {
  19124. iconType: 'rectangle',
  19125. x: this._location.x,
  19126. y: this._location.y,
  19127. width: this._handleSize,
  19128. height: this._handleSize,
  19129. color: this.zoomOption.handleColor,
  19130. text: '=',
  19131. textPosition: 'inside'
  19132. },
  19133. highlightStyle: {
  19134. text: detail.start,
  19135. brushType: 'fill',
  19136. textPosition: 'left'
  19137. },
  19138. ondrift: this._ondrift,
  19139. ondragend: this._ondragend
  19140. };
  19141. if (this.zoomOption.orient == 'horizontal') {
  19142. this._startShape.style.height = this._location.height;
  19143. this._endShape = zrUtil.clone(this._startShape);
  19144. this._startShape.style.x = this._fillerShae.style.x - this._handleSize, this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
  19145. this._endShape.highlightStyle.text = detail.end;
  19146. this._endShape.highlightStyle.textPosition = 'right';
  19147. } else {
  19148. this._startShape.style.width = this._location.width;
  19149. this._endShape = zrUtil.clone(this._startShape);
  19150. this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
  19151. this._startShape.highlightStyle.textPosition = 'bottom';
  19152. this._endShape.style.y = this._fillerShae.style.y - this._handleSize;
  19153. this._endShape.highlightStyle.text = detail.end;
  19154. this._endShape.highlightStyle.textPosition = 'top';
  19155. }
  19156. this._startShape = new IconShape(this._startShape);
  19157. this._endShape = new IconShape(this._endShape);
  19158. this.shapeList.push(this._startShape);
  19159. this.shapeList.push(this._endShape);
  19160. },
  19161. _buildFrame: function () {
  19162. var x = this.subPixelOptimize(this._location.x, 1);
  19163. var y = this.subPixelOptimize(this._location.y, 1);
  19164. this._startFrameShape = {
  19165. zlevel: this.getZlevelBase(),
  19166. z: this.getZBase(),
  19167. hoverable: false,
  19168. style: {
  19169. x: x,
  19170. y: y,
  19171. width: this._location.width - (x > this._location.x ? 1 : 0),
  19172. height: this._location.height - (y > this._location.y ? 1 : 0),
  19173. lineWidth: 1,
  19174. brushType: 'stroke',
  19175. strokeColor: this.zoomOption.handleColor
  19176. }
  19177. };
  19178. this._endFrameShape = zrUtil.clone(this._startFrameShape);
  19179. this._startFrameShape = new RectangleShape(this._startFrameShape);
  19180. this._endFrameShape = new RectangleShape(this._endFrameShape);
  19181. this.shapeList.push(this._startFrameShape);
  19182. this.shapeList.push(this._endFrameShape);
  19183. return;
  19184. },
  19185. _syncHandleShape: function () {
  19186. if (this.zoomOption.orient == 'horizontal') {
  19187. this._startShape.style.x = this._fillerShae.style.x - this._handleSize;
  19188. this._endShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
  19189. this._zoom.start = (this._startShape.style.x - this._location.x) / this._location.width * 100;
  19190. this._zoom.end = (this._endShape.style.x + this._handleSize - this._location.x) / this._location.width * 100;
  19191. } else {
  19192. this._startShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
  19193. this._endShape.style.y = this._fillerShae.style.y - this._handleSize;
  19194. this._zoom.start = (this._location.y + this._location.height - this._startShape.style.y) / this._location.height * 100;
  19195. this._zoom.end = (this._location.y + this._location.height - this._endShape.style.y - this._handleSize) / this._location.height * 100;
  19196. }
  19197. this.zr.modShape(this._startShape.id);
  19198. this.zr.modShape(this._endShape.id);
  19199. this._syncFrameShape();
  19200. this.zr.refreshNextFrame();
  19201. },
  19202. _syncFillerShape: function () {
  19203. var a;
  19204. var b;
  19205. if (this.zoomOption.orient == 'horizontal') {
  19206. a = this._startShape.style.x;
  19207. b = this._endShape.style.x;
  19208. this._fillerShae.style.x = Math.min(a, b) + this._handleSize;
  19209. this._fillerShae.style.width = Math.abs(a - b) - this._handleSize;
  19210. this._zoom.start = (Math.min(a, b) - this._location.x) / this._location.width * 100;
  19211. this._zoom.end = (Math.max(a, b) + this._handleSize - this._location.x) / this._location.width * 100;
  19212. } else {
  19213. a = this._startShape.style.y;
  19214. b = this._endShape.style.y;
  19215. this._fillerShae.style.y = Math.min(a, b) + this._handleSize;
  19216. this._fillerShae.style.height = Math.abs(a - b) - this._handleSize;
  19217. this._zoom.start = (this._location.y + this._location.height - Math.max(a, b)) / this._location.height * 100;
  19218. this._zoom.end = (this._location.y + this._location.height - Math.min(a, b) - this._handleSize) / this._location.height * 100;
  19219. }
  19220. this.zr.modShape(this._fillerShae.id);
  19221. this._syncFrameShape();
  19222. this.zr.refreshNextFrame();
  19223. },
  19224. _syncFrameShape: function () {
  19225. if (this.zoomOption.orient == 'horizontal') {
  19226. this._startFrameShape.style.width = this._fillerShae.style.x - this._location.x;
  19227. this._endFrameShape.style.x = this._fillerShae.style.x + this._fillerShae.style.width;
  19228. this._endFrameShape.style.width = this._location.x + this._location.width - this._endFrameShape.style.x;
  19229. } else {
  19230. this._startFrameShape.style.y = this._fillerShae.style.y + this._fillerShae.style.height;
  19231. this._startFrameShape.style.height = this._location.y + this._location.height - this._startFrameShape.style.y;
  19232. this._endFrameShape.style.height = this._fillerShae.style.y - this._location.y;
  19233. }
  19234. this.zr.modShape(this._startFrameShape.id);
  19235. this.zr.modShape(this._endFrameShape.id);
  19236. },
  19237. _syncShape: function () {
  19238. if (!this.zoomOption.show) {
  19239. return;
  19240. }
  19241. if (this.zoomOption.orient == 'horizontal') {
  19242. this._startShape.style.x = this._location.x + this._zoom.start / 100 * this._location.width;
  19243. this._endShape.style.x = this._location.x + this._zoom.end / 100 * this._location.width - this._handleSize;
  19244. this._fillerShae.style.x = this._startShape.style.x + this._handleSize;
  19245. this._fillerShae.style.width = this._endShape.style.x - this._startShape.style.x - this._handleSize;
  19246. } else {
  19247. this._startShape.style.y = this._location.y + this._location.height - this._zoom.start / 100 * this._location.height;
  19248. this._endShape.style.y = this._location.y + this._location.height - this._zoom.end / 100 * this._location.height - this._handleSize;
  19249. this._fillerShae.style.y = this._endShape.style.y + this._handleSize;
  19250. this._fillerShae.style.height = this._startShape.style.y - this._endShape.style.y - this._handleSize;
  19251. }
  19252. this.zr.modShape(this._startShape.id);
  19253. this.zr.modShape(this._endShape.id);
  19254. this.zr.modShape(this._fillerShae.id);
  19255. this._syncFrameShape();
  19256. this.zr.refresh();
  19257. },
  19258. _syncData: function (dispatchNow) {
  19259. var target;
  19260. var start;
  19261. var end;
  19262. var length;
  19263. var data;
  19264. for (var key in this._originalData) {
  19265. target = this._originalData[key];
  19266. for (var idx in target) {
  19267. data = target[idx];
  19268. if (data == null) {
  19269. continue;
  19270. }
  19271. length = data.length;
  19272. start = Math.floor(this._zoom.start / 100 * length);
  19273. end = Math.ceil(this._zoom.end / 100 * length);
  19274. if (!(this.getDataFromOption(data[0]) instanceof Array) || this.option[key][idx].type == ecConfig.CHART_TYPE_K) {
  19275. this.option[key][idx].data = data.slice(start, end);
  19276. } else {
  19277. this._setScale();
  19278. this.option[key][idx].data = this._synScatterData(idx, data);
  19279. }
  19280. }
  19281. }
  19282. if (!this._isSilence && (this.zoomOption.realtime || dispatchNow)) {
  19283. this.messageCenter.dispatch(ecConfig.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart);
  19284. }
  19285. },
  19286. _synScatterData: function (seriesIndex, data) {
  19287. if (this._zoom.start === 0 && this._zoom.end == 100 && this._zoom.start2 === 0 && this._zoom.end2 == 100) {
  19288. return data;
  19289. }
  19290. var newData = [];
  19291. var scale = this._zoom.scatterMap[seriesIndex];
  19292. var total;
  19293. var xStart;
  19294. var xEnd;
  19295. var yStart;
  19296. var yEnd;
  19297. if (this.zoomOption.orient == 'horizontal') {
  19298. total = scale.x.max - scale.x.min;
  19299. xStart = this._zoom.start / 100 * total + scale.x.min;
  19300. xEnd = this._zoom.end / 100 * total + scale.x.min;
  19301. total = scale.y.max - scale.y.min;
  19302. yStart = this._zoom.start2 / 100 * total + scale.y.min;
  19303. yEnd = this._zoom.end2 / 100 * total + scale.y.min;
  19304. } else {
  19305. total = scale.x.max - scale.x.min;
  19306. xStart = this._zoom.start2 / 100 * total + scale.x.min;
  19307. xEnd = this._zoom.end2 / 100 * total + scale.x.min;
  19308. total = scale.y.max - scale.y.min;
  19309. yStart = this._zoom.start / 100 * total + scale.y.min;
  19310. yEnd = this._zoom.end / 100 * total + scale.y.min;
  19311. }
  19312. var dataMappingMethods;
  19313. if (dataMappingMethods = scale.x.dataMappingMethods) {
  19314. xStart = dataMappingMethods.coord2Value(xStart);
  19315. xEnd = dataMappingMethods.coord2Value(xEnd);
  19316. }
  19317. if (dataMappingMethods = scale.y.dataMappingMethods) {
  19318. yStart = dataMappingMethods.coord2Value(yStart);
  19319. yEnd = dataMappingMethods.coord2Value(yEnd);
  19320. }
  19321. var value;
  19322. for (var i = 0, l = data.length; i < l; i++) {
  19323. value = data[i].value || data[i];
  19324. if (value[0] >= xStart && value[0] <= xEnd && value[1] >= yStart && value[1] <= yEnd) {
  19325. newData.push(data[i]);
  19326. }
  19327. }
  19328. return newData;
  19329. },
  19330. _setScale: function () {
  19331. var needScale = this._zoom.start !== 0 || this._zoom.end !== 100 || this._zoom.start2 !== 0 || this._zoom.end2 !== 100;
  19332. var axis = {
  19333. xAxis: this.option.xAxis,
  19334. yAxis: this.option.yAxis
  19335. };
  19336. for (var key in axis) {
  19337. for (var i = 0, l = axis[key].length; i < l; i++) {
  19338. axis[key][i].scale = needScale || axis[key][i]._scale;
  19339. }
  19340. }
  19341. },
  19342. _backupScale: function () {
  19343. var axis = {
  19344. xAxis: this.option.xAxis,
  19345. yAxis: this.option.yAxis
  19346. };
  19347. for (var key in axis) {
  19348. for (var i = 0, l = axis[key].length; i < l; i++) {
  19349. axis[key][i]._scale = axis[key][i].scale;
  19350. }
  19351. }
  19352. },
  19353. _getDetail: function () {
  19354. var key = [
  19355. 'xAxis',
  19356. 'yAxis'
  19357. ];
  19358. for (var i = 0, l = key.length; i < l; i++) {
  19359. var target = this._originalData[key[i]];
  19360. for (var idx in target) {
  19361. var data = target[idx];
  19362. if (data == null) {
  19363. continue;
  19364. }
  19365. var length = data.length;
  19366. var start = Math.floor(this._zoom.start / 100 * length);
  19367. var end = Math.ceil(this._zoom.end / 100 * length);
  19368. end -= end > 0 ? 1 : 0;
  19369. return {
  19370. start: this.getDataFromOption(data[start]),
  19371. end: this.getDataFromOption(data[end])
  19372. };
  19373. }
  19374. }
  19375. key = this.zoomOption.orient == 'horizontal' ? 'xAxis' : 'yAxis';
  19376. var seriesIndex = this._zoom.seriesIndex[0];
  19377. var axisIndex = this.option.series[seriesIndex][key + 'Index'] || 0;
  19378. var axisType = this.option[key][axisIndex].type;
  19379. var min = this._zoom.scatterMap[seriesIndex][key.charAt(0)].min;
  19380. var max = this._zoom.scatterMap[seriesIndex][key.charAt(0)].max;
  19381. var gap = max - min;
  19382. if (axisType == 'value') {
  19383. return {
  19384. start: min + gap * this._zoom.start / 100,
  19385. end: min + gap * this._zoom.end / 100
  19386. };
  19387. } else if (axisType == 'time') {
  19388. max = min + gap * this._zoom.end / 100;
  19389. min = min + gap * this._zoom.start / 100;
  19390. var formatter = ecDate.getAutoFormatter(min, max).formatter;
  19391. return {
  19392. start: ecDate.format(formatter, min),
  19393. end: ecDate.format(formatter, max)
  19394. };
  19395. }
  19396. return {
  19397. start: '',
  19398. end: ''
  19399. };
  19400. },
  19401. __ondrift: function (shape, dx, dy) {
  19402. if (this.zoomOption.zoomLock) {
  19403. shape = this._fillerShae;
  19404. }
  19405. var detailSize = shape._type == 'filler' ? this._handleSize : 0;
  19406. if (this.zoomOption.orient == 'horizontal') {
  19407. if (shape.style.x + dx - detailSize <= this._location.x) {
  19408. shape.style.x = this._location.x + detailSize;
  19409. } else if (shape.style.x + dx + shape.style.width + detailSize >= this._location.x + this._location.width) {
  19410. shape.style.x = this._location.x + this._location.width - shape.style.width - detailSize;
  19411. } else {
  19412. shape.style.x += dx;
  19413. }
  19414. } else {
  19415. if (shape.style.y + dy - detailSize <= this._location.y) {
  19416. shape.style.y = this._location.y + detailSize;
  19417. } else if (shape.style.y + dy + shape.style.height + detailSize >= this._location.y + this._location.height) {
  19418. shape.style.y = this._location.y + this._location.height - shape.style.height - detailSize;
  19419. } else {
  19420. shape.style.y += dy;
  19421. }
  19422. }
  19423. if (shape._type == 'filler') {
  19424. this._syncHandleShape();
  19425. } else {
  19426. this._syncFillerShape();
  19427. }
  19428. if (this.zoomOption.realtime) {
  19429. this._syncData();
  19430. }
  19431. if (this.zoomOption.showDetail) {
  19432. var detail = this._getDetail();
  19433. this._startShape.style.text = this._startShape.highlightStyle.text = detail.start;
  19434. this._endShape.style.text = this._endShape.highlightStyle.text = detail.end;
  19435. this._startShape.style.textPosition = this._startShape.highlightStyle.textPosition;
  19436. this._endShape.style.textPosition = this._endShape.highlightStyle.textPosition;
  19437. }
  19438. return true;
  19439. },
  19440. __ondragend: function () {
  19441. if (this.zoomOption.showDetail) {
  19442. this._startShape.style.text = this._endShape.style.text = '=';
  19443. this._startShape.style.textPosition = this._endShape.style.textPosition = 'inside';
  19444. this.zr.modShape(this._startShape.id);
  19445. this.zr.modShape(this._endShape.id);
  19446. this.zr.refreshNextFrame();
  19447. }
  19448. this.isDragend = true;
  19449. },
  19450. ondragend: function (param, status) {
  19451. if (!this.isDragend || !param.target) {
  19452. return;
  19453. }
  19454. !this.zoomOption.realtime && this._syncData();
  19455. status.dragOut = true;
  19456. status.dragIn = true;
  19457. if (!this._isSilence && !this.zoomOption.realtime) {
  19458. this.messageCenter.dispatch(ecConfig.EVENT.DATA_ZOOM, null, { zoom: this._zoom }, this.myChart);
  19459. }
  19460. status.needRefresh = false;
  19461. this.isDragend = false;
  19462. return;
  19463. },
  19464. ondataZoom: function (param, status) {
  19465. status.needRefresh = true;
  19466. return;
  19467. },
  19468. absoluteZoom: function (param) {
  19469. this._zoom.start = param.start;
  19470. this._zoom.end = param.end;
  19471. this._zoom.start2 = param.start2;
  19472. this._zoom.end2 = param.end2;
  19473. this._syncShape();
  19474. this._syncData(true);
  19475. return;
  19476. },
  19477. rectZoom: function (param) {
  19478. if (!param) {
  19479. this._zoom.start = this._zoom.start2 = 0;
  19480. this._zoom.end = this._zoom.end2 = 100;
  19481. this._syncShape();
  19482. this._syncData(true);
  19483. return this._zoom;
  19484. }
  19485. var gridArea = this.component.grid.getArea();
  19486. var rect = {
  19487. x: param.x,
  19488. y: param.y,
  19489. width: param.width,
  19490. height: param.height
  19491. };
  19492. if (rect.width < 0) {
  19493. rect.x += rect.width;
  19494. rect.width = -rect.width;
  19495. }
  19496. if (rect.height < 0) {
  19497. rect.y += rect.height;
  19498. rect.height = -rect.height;
  19499. }
  19500. if (rect.x > gridArea.x + gridArea.width || rect.y > gridArea.y + gridArea.height) {
  19501. return false;
  19502. }
  19503. if (rect.x < gridArea.x) {
  19504. rect.x = gridArea.x;
  19505. }
  19506. if (rect.x + rect.width > gridArea.x + gridArea.width) {
  19507. rect.width = gridArea.x + gridArea.width - rect.x;
  19508. }
  19509. if (rect.y + rect.height > gridArea.y + gridArea.height) {
  19510. rect.height = gridArea.y + gridArea.height - rect.y;
  19511. }
  19512. var total;
  19513. var sdx = (rect.x - gridArea.x) / gridArea.width;
  19514. var edx = 1 - (rect.x + rect.width - gridArea.x) / gridArea.width;
  19515. var sdy = 1 - (rect.y + rect.height - gridArea.y) / gridArea.height;
  19516. var edy = (rect.y - gridArea.y) / gridArea.height;
  19517. if (this.zoomOption.orient == 'horizontal') {
  19518. total = this._zoom.end - this._zoom.start;
  19519. this._zoom.start += total * sdx;
  19520. this._zoom.end -= total * edx;
  19521. total = this._zoom.end2 - this._zoom.start2;
  19522. this._zoom.start2 += total * sdy;
  19523. this._zoom.end2 -= total * edy;
  19524. } else {
  19525. total = this._zoom.end - this._zoom.start;
  19526. this._zoom.start += total * sdy;
  19527. this._zoom.end -= total * edy;
  19528. total = this._zoom.end2 - this._zoom.start2;
  19529. this._zoom.start2 += total * sdx;
  19530. this._zoom.end2 -= total * edx;
  19531. }
  19532. this._syncShape();
  19533. this._syncData(true);
  19534. return this._zoom;
  19535. },
  19536. syncBackupData: function (curOption) {
  19537. var start;
  19538. var target = this._originalData['series'];
  19539. var curSeries = curOption.series;
  19540. var curData;
  19541. for (var i = 0, l = curSeries.length; i < l; i++) {
  19542. curData = curSeries[i].data || curSeries[i].eventList;
  19543. if (target[i]) {
  19544. start = Math.floor(this._zoom.start / 100 * target[i].length);
  19545. } else {
  19546. start = 0;
  19547. }
  19548. for (var j = 0, k = curData.length; j < k; j++) {
  19549. if (target[i]) {
  19550. target[i][j + start] = curData[j];
  19551. }
  19552. }
  19553. }
  19554. },
  19555. syncOption: function (magicOption) {
  19556. this.silence(true);
  19557. this.option = magicOption;
  19558. this.option.dataZoom = this.reformOption(this.option.dataZoom);
  19559. this.zoomOption = this.option.dataZoom;
  19560. if (!this.myChart.canvasSupported) {
  19561. this.zoomOption.realtime = false;
  19562. }
  19563. this.clear();
  19564. this._location = this._getLocation();
  19565. this._zoom = this._getZoom();
  19566. this._backupData();
  19567. if (this.option.dataZoom && this.option.dataZoom.show) {
  19568. this._buildShape();
  19569. }
  19570. this._syncData();
  19571. this.silence(false);
  19572. },
  19573. silence: function (s) {
  19574. this._isSilence = s;
  19575. },
  19576. getRealDataIndex: function (sIdx, dIdx) {
  19577. if (!this._originalData || this._zoom.start === 0 && this._zoom.end == 100) {
  19578. return dIdx;
  19579. }
  19580. var sreies = this._originalData.series;
  19581. if (sreies[sIdx]) {
  19582. return Math.floor(this._zoom.start / 100 * sreies[sIdx].length) + dIdx;
  19583. }
  19584. return -1;
  19585. },
  19586. resize: function () {
  19587. this.clear();
  19588. this._location = this._getLocation();
  19589. this._zoom = this._getZoom();
  19590. if (this.option.dataZoom.show) {
  19591. this._buildShape();
  19592. }
  19593. }
  19594. };
  19595. zrUtil.inherits(DataZoom, Base);
  19596. require('../component').define('dataZoom', DataZoom);
  19597. return DataZoom;
  19598. });define('echarts/component/categoryAxis', [
  19599. 'require',
  19600. './base',
  19601. 'zrender/shape/Text',
  19602. 'zrender/shape/Line',
  19603. 'zrender/shape/Rectangle',
  19604. '../config',
  19605. 'zrender/tool/util',
  19606. 'zrender/tool/area',
  19607. '../component'
  19608. ], function (require) {
  19609. var Base = require('./base');
  19610. var TextShape = require('zrender/shape/Text');
  19611. var LineShape = require('zrender/shape/Line');
  19612. var RectangleShape = require('zrender/shape/Rectangle');
  19613. var ecConfig = require('../config');
  19614. ecConfig.categoryAxis = {
  19615. zlevel: 0,
  19616. z: 0,
  19617. show: true,
  19618. position: 'bottom',
  19619. name: '',
  19620. nameLocation: 'end',
  19621. nameTextStyle: {},
  19622. boundaryGap: true,
  19623. axisLine: {
  19624. show: true,
  19625. onZero: true,
  19626. lineStyle: {
  19627. color: '#48b',
  19628. width: 2,
  19629. type: 'solid'
  19630. }
  19631. },
  19632. axisTick: {
  19633. show: true,
  19634. interval: 'auto',
  19635. inside: false,
  19636. length: 5,
  19637. lineStyle: {
  19638. color: '#333',
  19639. width: 1
  19640. }
  19641. },
  19642. axisLabel: {
  19643. show: true,
  19644. interval: 'auto',
  19645. rotate: 0,
  19646. margin: 8,
  19647. textStyle: { color: '#333' }
  19648. },
  19649. splitLine: {
  19650. show: true,
  19651. lineStyle: {
  19652. color: ['#ccc'],
  19653. width: 1,
  19654. type: 'solid'
  19655. }
  19656. },
  19657. splitArea: {
  19658. show: false,
  19659. areaStyle: {
  19660. color: [
  19661. 'rgba(250,250,250,0.3)',
  19662. 'rgba(200,200,200,0.3)'
  19663. ]
  19664. }
  19665. }
  19666. };
  19667. var zrUtil = require('zrender/tool/util');
  19668. var zrArea = require('zrender/tool/area');
  19669. function CategoryAxis(ecTheme, messageCenter, zr, option, myChart, axisBase) {
  19670. if (option.data.length < 1) {
  19671. console.error('option.data.length < 1.');
  19672. return;
  19673. }
  19674. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  19675. this.grid = this.component.grid;
  19676. for (var method in axisBase) {
  19677. this[method] = axisBase[method];
  19678. }
  19679. this.refresh(option);
  19680. }
  19681. CategoryAxis.prototype = {
  19682. type: ecConfig.COMPONENT_TYPE_AXIS_CATEGORY,
  19683. _getReformedLabel: function (idx) {
  19684. var data = this.getDataFromOption(this.option.data[idx]);
  19685. var formatter = this.option.data[idx].formatter || this.option.axisLabel.formatter;
  19686. if (formatter) {
  19687. if (typeof formatter == 'function') {
  19688. data = formatter.call(this.myChart, data);
  19689. } else if (typeof formatter == 'string') {
  19690. data = formatter.replace('{value}', data);
  19691. }
  19692. }
  19693. return data;
  19694. },
  19695. _getInterval: function () {
  19696. var interval = this.option.axisLabel.interval;
  19697. if (interval == 'auto') {
  19698. var fontSize = this.option.axisLabel.textStyle.fontSize;
  19699. var data = this.option.data;
  19700. var dataLength = this.option.data.length;
  19701. if (this.isHorizontal()) {
  19702. if (dataLength > 3) {
  19703. var gap = this.getGap();
  19704. var isEnough = false;
  19705. var labelSpace;
  19706. var labelSize;
  19707. var step = Math.floor(0.5 / gap);
  19708. step = step < 1 ? 1 : step;
  19709. interval = Math.floor(15 / gap);
  19710. while (!isEnough && interval < dataLength) {
  19711. interval += step;
  19712. isEnough = true;
  19713. labelSpace = Math.floor(gap * interval);
  19714. for (var i = Math.floor((dataLength - 1) / interval) * interval; i >= 0; i -= interval) {
  19715. if (this.option.axisLabel.rotate !== 0) {
  19716. labelSize = fontSize;
  19717. } else if (data[i].textStyle) {
  19718. labelSize = zrArea.getTextWidth(this._getReformedLabel(i), this.getFont(zrUtil.merge(data[i].textStyle, this.option.axisLabel.textStyle)));
  19719. } else {
  19720. var label = this._getReformedLabel(i) + '';
  19721. var wLen = (label.match(/\w/g) || '').length;
  19722. var oLen = label.length - wLen;
  19723. labelSize = wLen * fontSize * 2 / 3 + oLen * fontSize;
  19724. }
  19725. if (labelSpace < labelSize) {
  19726. isEnough = false;
  19727. break;
  19728. }
  19729. }
  19730. }
  19731. } else {
  19732. interval = 1;
  19733. }
  19734. } else {
  19735. if (dataLength > 3) {
  19736. var gap = this.getGap();
  19737. interval = Math.floor(11 / gap);
  19738. while (gap * interval - 6 < fontSize && interval < dataLength) {
  19739. interval++;
  19740. }
  19741. } else {
  19742. interval = 1;
  19743. }
  19744. }
  19745. } else {
  19746. interval = typeof interval == 'function' ? 1 : interval - 0 + 1;
  19747. }
  19748. return interval;
  19749. },
  19750. _buildShape: function () {
  19751. this._interval = this._getInterval();
  19752. if (!this.option.show) {
  19753. return;
  19754. }
  19755. this.option.splitArea.show && this._buildSplitArea();
  19756. this.option.splitLine.show && this._buildSplitLine();
  19757. this.option.axisLine.show && this._buildAxisLine();
  19758. this.option.axisTick.show && this._buildAxisTick();
  19759. this.option.axisLabel.show && this._buildAxisLabel();
  19760. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  19761. this.zr.addShape(this.shapeList[i]);
  19762. }
  19763. },
  19764. _buildAxisTick: function () {
  19765. var axShape;
  19766. var data = this.option.data;
  19767. var dataLength = this.option.data.length;
  19768. var tickOption = this.option.axisTick;
  19769. var length = tickOption.length;
  19770. var color = tickOption.lineStyle.color;
  19771. var lineWidth = tickOption.lineStyle.width;
  19772. var intervalFunction = typeof tickOption.interval == 'function' ? tickOption.interval : tickOption.interval == 'auto' ? typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false : false;
  19773. var interval = intervalFunction ? 1 : tickOption.interval == 'auto' ? this._interval : tickOption.interval - 0 + 1;
  19774. var onGap = tickOption.onGap;
  19775. var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
  19776. var startIndex = optGap > 0 ? -interval : 0;
  19777. if (this.isHorizontal()) {
  19778. var yPosition = this.option.position == 'bottom' ? tickOption.inside ? this.grid.getYend() - length - 1 : this.grid.getYend() + 1 : tickOption.inside ? this.grid.getY() + 1 : this.grid.getY() - length - 1;
  19779. var x;
  19780. for (var i = startIndex; i < dataLength; i += interval) {
  19781. if (intervalFunction && !intervalFunction(i, data[i])) {
  19782. continue;
  19783. }
  19784. x = this.subPixelOptimize(this.getCoordByIndex(i) + (i >= 0 ? optGap : 0), lineWidth);
  19785. axShape = {
  19786. _axisShape: 'axisTick',
  19787. zlevel: this.getZlevelBase(),
  19788. z: this.getZBase(),
  19789. hoverable: false,
  19790. style: {
  19791. xStart: x,
  19792. yStart: yPosition,
  19793. xEnd: x,
  19794. yEnd: yPosition + length,
  19795. strokeColor: color,
  19796. lineWidth: lineWidth
  19797. }
  19798. };
  19799. this.shapeList.push(new LineShape(axShape));
  19800. }
  19801. } else {
  19802. var xPosition = this.option.position == 'left' ? tickOption.inside ? this.grid.getX() + 1 : this.grid.getX() - length - 1 : tickOption.inside ? this.grid.getXend() - length - 1 : this.grid.getXend() + 1;
  19803. var y;
  19804. for (var i = startIndex; i < dataLength; i += interval) {
  19805. if (intervalFunction && !intervalFunction(i, data[i])) {
  19806. continue;
  19807. }
  19808. y = this.subPixelOptimize(this.getCoordByIndex(i) - (i >= 0 ? optGap : 0), lineWidth);
  19809. axShape = {
  19810. _axisShape: 'axisTick',
  19811. zlevel: this.getZlevelBase(),
  19812. z: this.getZBase(),
  19813. hoverable: false,
  19814. style: {
  19815. xStart: xPosition,
  19816. yStart: y,
  19817. xEnd: xPosition + length,
  19818. yEnd: y,
  19819. strokeColor: color,
  19820. lineWidth: lineWidth
  19821. }
  19822. };
  19823. this.shapeList.push(new LineShape(axShape));
  19824. }
  19825. }
  19826. },
  19827. _buildAxisLabel: function () {
  19828. var axShape;
  19829. var data = this.option.data;
  19830. var dataLength = this.option.data.length;
  19831. var labelOption = this.option.axisLabel;
  19832. var rotate = labelOption.rotate;
  19833. var margin = labelOption.margin;
  19834. var clickable = labelOption.clickable;
  19835. var textStyle = labelOption.textStyle;
  19836. var intervalFunction = typeof labelOption.interval == 'function' ? labelOption.interval : false;
  19837. var dataTextStyle;
  19838. if (this.isHorizontal()) {
  19839. var yPosition;
  19840. var baseLine;
  19841. if (this.option.position == 'bottom') {
  19842. yPosition = this.grid.getYend() + margin;
  19843. baseLine = 'top';
  19844. } else {
  19845. yPosition = this.grid.getY() - margin;
  19846. baseLine = 'bottom';
  19847. }
  19848. for (var i = 0; i < dataLength; i += this._interval) {
  19849. if (intervalFunction && !intervalFunction(i, data[i]) || this._getReformedLabel(i) === '') {
  19850. continue;
  19851. }
  19852. dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
  19853. axShape = {
  19854. zlevel: this.getZlevelBase(),
  19855. z: this.getZBase() + 3,
  19856. hoverable: false,
  19857. style: {
  19858. x: this.getCoordByIndex(i),
  19859. y: yPosition,
  19860. color: dataTextStyle.color,
  19861. text: this._getReformedLabel(i),
  19862. textFont: this.getFont(dataTextStyle),
  19863. textAlign: dataTextStyle.align || 'center',
  19864. textBaseline: dataTextStyle.baseline || baseLine
  19865. }
  19866. };
  19867. if (rotate) {
  19868. axShape.style.textAlign = rotate > 0 ? this.option.position == 'bottom' ? 'right' : 'left' : this.option.position == 'bottom' ? 'left' : 'right';
  19869. axShape.rotation = [
  19870. rotate * Math.PI / 180,
  19871. axShape.style.x,
  19872. axShape.style.y
  19873. ];
  19874. }
  19875. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  19876. }
  19877. } else {
  19878. var xPosition;
  19879. var align;
  19880. if (this.option.position == 'left') {
  19881. xPosition = this.grid.getX() - margin;
  19882. align = 'right';
  19883. } else {
  19884. xPosition = this.grid.getXend() + margin;
  19885. align = 'left';
  19886. }
  19887. for (var i = 0; i < dataLength; i += this._interval) {
  19888. if (intervalFunction && !intervalFunction(i, data[i]) || this._getReformedLabel(i) === '') {
  19889. continue;
  19890. }
  19891. dataTextStyle = zrUtil.merge(data[i].textStyle || {}, textStyle);
  19892. axShape = {
  19893. zlevel: this.getZlevelBase(),
  19894. z: this.getZBase() + 3,
  19895. hoverable: false,
  19896. style: {
  19897. x: xPosition,
  19898. y: this.getCoordByIndex(i),
  19899. color: dataTextStyle.color,
  19900. text: this._getReformedLabel(i),
  19901. textFont: this.getFont(dataTextStyle),
  19902. textAlign: dataTextStyle.align || align,
  19903. textBaseline: dataTextStyle.baseline || i === 0 && this.option.name !== '' ? 'bottom' : i == dataLength - 1 && this.option.name !== '' ? 'top' : 'middle'
  19904. }
  19905. };
  19906. if (rotate) {
  19907. axShape.rotation = [
  19908. rotate * Math.PI / 180,
  19909. axShape.style.x,
  19910. axShape.style.y
  19911. ];
  19912. }
  19913. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  19914. }
  19915. }
  19916. },
  19917. _buildSplitLine: function () {
  19918. var axShape;
  19919. var data = this.option.data;
  19920. var dataLength = this.option.data.length;
  19921. var sLineOption = this.option.splitLine;
  19922. var lineType = sLineOption.lineStyle.type;
  19923. var lineWidth = sLineOption.lineStyle.width;
  19924. var color = sLineOption.lineStyle.color;
  19925. color = color instanceof Array ? color : [color];
  19926. var colorLength = color.length;
  19927. var intervalFunction = typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false;
  19928. var onGap = sLineOption.onGap;
  19929. var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
  19930. dataLength -= onGap || typeof onGap == 'undefined' && this.option.boundaryGap ? 1 : 0;
  19931. if (this.isHorizontal()) {
  19932. var sy = this.grid.getY();
  19933. var ey = this.grid.getYend();
  19934. var x;
  19935. for (var i = 0; i < dataLength; i += this._interval) {
  19936. if (intervalFunction && !intervalFunction(i, data[i])) {
  19937. continue;
  19938. }
  19939. x = this.subPixelOptimize(this.getCoordByIndex(i) + optGap, lineWidth);
  19940. axShape = {
  19941. zlevel: this.getZlevelBase(),
  19942. z: this.getZBase(),
  19943. hoverable: false,
  19944. style: {
  19945. xStart: x,
  19946. yStart: sy,
  19947. xEnd: x,
  19948. yEnd: ey,
  19949. strokeColor: color[i / this._interval % colorLength],
  19950. lineType: lineType,
  19951. lineWidth: lineWidth
  19952. }
  19953. };
  19954. this.shapeList.push(new LineShape(axShape));
  19955. }
  19956. } else {
  19957. var sx = this.grid.getX();
  19958. var ex = this.grid.getXend();
  19959. var y;
  19960. for (var i = 0; i < dataLength; i += this._interval) {
  19961. if (intervalFunction && !intervalFunction(i, data[i])) {
  19962. continue;
  19963. }
  19964. y = this.subPixelOptimize(this.getCoordByIndex(i) - optGap, lineWidth);
  19965. axShape = {
  19966. zlevel: this.getZlevelBase(),
  19967. z: this.getZBase(),
  19968. hoverable: false,
  19969. style: {
  19970. xStart: sx,
  19971. yStart: y,
  19972. xEnd: ex,
  19973. yEnd: y,
  19974. strokeColor: color[i / this._interval % colorLength],
  19975. lineType: lineType,
  19976. lineWidth: lineWidth
  19977. }
  19978. };
  19979. this.shapeList.push(new LineShape(axShape));
  19980. }
  19981. }
  19982. },
  19983. _buildSplitArea: function () {
  19984. var axShape;
  19985. var data = this.option.data;
  19986. var sAreaOption = this.option.splitArea;
  19987. var color = sAreaOption.areaStyle.color;
  19988. if (!(color instanceof Array)) {
  19989. axShape = {
  19990. zlevel: this.getZlevelBase(),
  19991. z: this.getZBase(),
  19992. hoverable: false,
  19993. style: {
  19994. x: this.grid.getX(),
  19995. y: this.grid.getY(),
  19996. width: this.grid.getWidth(),
  19997. height: this.grid.getHeight(),
  19998. color: color
  19999. }
  20000. };
  20001. this.shapeList.push(new RectangleShape(axShape));
  20002. } else {
  20003. var colorLength = color.length;
  20004. var dataLength = this.option.data.length;
  20005. var intervalFunction = typeof this.option.axisLabel.interval == 'function' ? this.option.axisLabel.interval : false;
  20006. var onGap = sAreaOption.onGap;
  20007. var optGap = onGap ? this.getGap() / 2 : typeof onGap == 'undefined' ? this.option.boundaryGap ? this.getGap() / 2 : 0 : 0;
  20008. if (this.isHorizontal()) {
  20009. var y = this.grid.getY();
  20010. var height = this.grid.getHeight();
  20011. var lastX = this.grid.getX();
  20012. var curX;
  20013. for (var i = 0; i <= dataLength; i += this._interval) {
  20014. if (intervalFunction && !intervalFunction(i, data[i]) && i < dataLength) {
  20015. continue;
  20016. }
  20017. curX = i < dataLength ? this.getCoordByIndex(i) + optGap : this.grid.getXend();
  20018. axShape = {
  20019. zlevel: this.getZlevelBase(),
  20020. z: this.getZBase(),
  20021. hoverable: false,
  20022. style: {
  20023. x: lastX,
  20024. y: y,
  20025. width: curX - lastX,
  20026. height: height,
  20027. color: color[i / this._interval % colorLength]
  20028. }
  20029. };
  20030. this.shapeList.push(new RectangleShape(axShape));
  20031. lastX = curX;
  20032. }
  20033. } else {
  20034. var x = this.grid.getX();
  20035. var width = this.grid.getWidth();
  20036. var lastYend = this.grid.getYend();
  20037. var curY;
  20038. for (var i = 0; i <= dataLength; i += this._interval) {
  20039. if (intervalFunction && !intervalFunction(i, data[i]) && i < dataLength) {
  20040. continue;
  20041. }
  20042. curY = i < dataLength ? this.getCoordByIndex(i) - optGap : this.grid.getY();
  20043. axShape = {
  20044. zlevel: this.getZlevelBase(),
  20045. z: this.getZBase(),
  20046. hoverable: false,
  20047. style: {
  20048. x: x,
  20049. y: curY,
  20050. width: width,
  20051. height: lastYend - curY,
  20052. color: color[i / this._interval % colorLength]
  20053. }
  20054. };
  20055. this.shapeList.push(new RectangleShape(axShape));
  20056. lastYend = curY;
  20057. }
  20058. }
  20059. }
  20060. },
  20061. refresh: function (newOption) {
  20062. if (newOption) {
  20063. this.option = this.reformOption(newOption);
  20064. this.option.axisLabel.textStyle = this.getTextStyle(this.option.axisLabel.textStyle);
  20065. }
  20066. this.clear();
  20067. this._buildShape();
  20068. },
  20069. getGap: function () {
  20070. var dataLength = this.option.data.length;
  20071. var total = this.isHorizontal() ? this.grid.getWidth() : this.grid.getHeight();
  20072. if (this.option.boundaryGap) {
  20073. return total / dataLength;
  20074. } else {
  20075. return total / (dataLength > 1 ? dataLength - 1 : 1);
  20076. }
  20077. },
  20078. getCoord: function (value) {
  20079. var data = this.option.data;
  20080. var dataLength = data.length;
  20081. var gap = this.getGap();
  20082. var position = this.option.boundaryGap ? gap / 2 : 0;
  20083. for (var i = 0; i < dataLength; i++) {
  20084. if (this.getDataFromOption(data[i]) == value) {
  20085. if (this.isHorizontal()) {
  20086. position = this.grid.getX() + position;
  20087. } else {
  20088. position = this.grid.getYend() - position;
  20089. }
  20090. return position;
  20091. }
  20092. position += gap;
  20093. }
  20094. },
  20095. getCoordByIndex: function (dataIndex) {
  20096. if (dataIndex < 0) {
  20097. if (this.isHorizontal()) {
  20098. return this.grid.getX();
  20099. } else {
  20100. return this.grid.getYend();
  20101. }
  20102. } else if (dataIndex > this.option.data.length - 1) {
  20103. if (this.isHorizontal()) {
  20104. return this.grid.getXend();
  20105. } else {
  20106. return this.grid.getY();
  20107. }
  20108. } else {
  20109. var gap = this.getGap();
  20110. var position = this.option.boundaryGap ? gap / 2 : 0;
  20111. position += dataIndex * gap;
  20112. if (this.isHorizontal()) {
  20113. position = this.grid.getX() + position;
  20114. } else {
  20115. position = this.grid.getYend() - position;
  20116. }
  20117. return position;
  20118. }
  20119. },
  20120. getNameByIndex: function (dataIndex) {
  20121. return this.getDataFromOption(this.option.data[dataIndex]);
  20122. },
  20123. getIndexByName: function (name) {
  20124. var data = this.option.data;
  20125. var dataLength = data.length;
  20126. for (var i = 0; i < dataLength; i++) {
  20127. if (this.getDataFromOption(data[i]) == name) {
  20128. return i;
  20129. }
  20130. }
  20131. return -1;
  20132. },
  20133. getValueFromCoord: function () {
  20134. return '';
  20135. },
  20136. isMainAxis: function (dataIndex) {
  20137. return dataIndex % this._interval === 0;
  20138. }
  20139. };
  20140. zrUtil.inherits(CategoryAxis, Base);
  20141. require('../component').define('categoryAxis', CategoryAxis);
  20142. return CategoryAxis;
  20143. });define('echarts/component/valueAxis', [
  20144. 'require',
  20145. './base',
  20146. 'zrender/shape/Text',
  20147. 'zrender/shape/Line',
  20148. 'zrender/shape/Rectangle',
  20149. '../config',
  20150. '../util/date',
  20151. 'zrender/tool/util',
  20152. '../util/smartSteps',
  20153. '../util/accMath',
  20154. '../util/smartLogSteps',
  20155. '../component'
  20156. ], function (require) {
  20157. var Base = require('./base');
  20158. var TextShape = require('zrender/shape/Text');
  20159. var LineShape = require('zrender/shape/Line');
  20160. var RectangleShape = require('zrender/shape/Rectangle');
  20161. var ecConfig = require('../config');
  20162. ecConfig.valueAxis = {
  20163. zlevel: 0,
  20164. z: 0,
  20165. show: true,
  20166. position: 'left',
  20167. name: '',
  20168. nameLocation: 'end',
  20169. nameTextStyle: {},
  20170. boundaryGap: [
  20171. 0,
  20172. 0
  20173. ],
  20174. axisLine: {
  20175. show: true,
  20176. onZero: true,
  20177. lineStyle: {
  20178. color: '#48b',
  20179. width: 2,
  20180. type: 'solid'
  20181. }
  20182. },
  20183. axisTick: {
  20184. show: false,
  20185. inside: false,
  20186. length: 5,
  20187. lineStyle: {
  20188. color: '#333',
  20189. width: 1
  20190. }
  20191. },
  20192. axisLabel: {
  20193. show: true,
  20194. rotate: 0,
  20195. margin: 8,
  20196. textStyle: { color: '#333' }
  20197. },
  20198. splitLine: {
  20199. show: true,
  20200. lineStyle: {
  20201. color: ['#ccc'],
  20202. width: 1,
  20203. type: 'solid'
  20204. }
  20205. },
  20206. splitArea: {
  20207. show: false,
  20208. areaStyle: {
  20209. color: [
  20210. 'rgba(250,250,250,0.3)',
  20211. 'rgba(200,200,200,0.3)'
  20212. ]
  20213. }
  20214. }
  20215. };
  20216. var ecDate = require('../util/date');
  20217. var zrUtil = require('zrender/tool/util');
  20218. function ValueAxis(ecTheme, messageCenter, zr, option, myChart, axisBase, series) {
  20219. if (!series || series.length === 0) {
  20220. console.err('option.series.length == 0.');
  20221. return;
  20222. }
  20223. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  20224. this.series = series;
  20225. this.grid = this.component.grid;
  20226. for (var method in axisBase) {
  20227. this[method] = axisBase[method];
  20228. }
  20229. this.refresh(option, series);
  20230. }
  20231. ValueAxis.prototype = {
  20232. type: ecConfig.COMPONENT_TYPE_AXIS_VALUE,
  20233. _buildShape: function () {
  20234. this._hasData = false;
  20235. this._calculateValue();
  20236. if (!this._hasData || !this.option.show) {
  20237. return;
  20238. }
  20239. this.option.splitArea.show && this._buildSplitArea();
  20240. this.option.splitLine.show && this._buildSplitLine();
  20241. this.option.axisLine.show && this._buildAxisLine();
  20242. this.option.axisTick.show && this._buildAxisTick();
  20243. this.option.axisLabel.show && this._buildAxisLabel();
  20244. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  20245. this.zr.addShape(this.shapeList[i]);
  20246. }
  20247. },
  20248. _buildAxisTick: function () {
  20249. var axShape;
  20250. var data = this._valueList;
  20251. var dataLength = this._valueList.length;
  20252. var tickOption = this.option.axisTick;
  20253. var length = tickOption.length;
  20254. var color = tickOption.lineStyle.color;
  20255. var lineWidth = tickOption.lineStyle.width;
  20256. if (this.isHorizontal()) {
  20257. var yPosition = this.option.position === 'bottom' ? tickOption.inside ? this.grid.getYend() - length - 1 : this.grid.getYend() + 1 : tickOption.inside ? this.grid.getY() + 1 : this.grid.getY() - length - 1;
  20258. var x;
  20259. for (var i = 0; i < dataLength; i++) {
  20260. x = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20261. axShape = {
  20262. _axisShape: 'axisTick',
  20263. zlevel: this.getZlevelBase(),
  20264. z: this.getZBase(),
  20265. hoverable: false,
  20266. style: {
  20267. xStart: x,
  20268. yStart: yPosition,
  20269. xEnd: x,
  20270. yEnd: yPosition + length,
  20271. strokeColor: color,
  20272. lineWidth: lineWidth
  20273. }
  20274. };
  20275. this.shapeList.push(new LineShape(axShape));
  20276. }
  20277. } else {
  20278. var xPosition = this.option.position === 'left' ? tickOption.inside ? this.grid.getX() + 1 : this.grid.getX() - length - 1 : tickOption.inside ? this.grid.getXend() - length - 1 : this.grid.getXend() + 1;
  20279. var y;
  20280. for (var i = 0; i < dataLength; i++) {
  20281. y = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20282. axShape = {
  20283. _axisShape: 'axisTick',
  20284. zlevel: this.getZlevelBase(),
  20285. z: this.getZBase(),
  20286. hoverable: false,
  20287. style: {
  20288. xStart: xPosition,
  20289. yStart: y,
  20290. xEnd: xPosition + length,
  20291. yEnd: y,
  20292. strokeColor: color,
  20293. lineWidth: lineWidth
  20294. }
  20295. };
  20296. this.shapeList.push(new LineShape(axShape));
  20297. }
  20298. }
  20299. },
  20300. _buildAxisLabel: function () {
  20301. var axShape;
  20302. var data = this._valueList;
  20303. var dataLength = this._valueList.length;
  20304. var rotate = this.option.axisLabel.rotate;
  20305. var margin = this.option.axisLabel.margin;
  20306. var clickable = this.option.axisLabel.clickable;
  20307. var textStyle = this.option.axisLabel.textStyle;
  20308. if (this.isHorizontal()) {
  20309. var yPosition;
  20310. var baseLine;
  20311. if (this.option.position === 'bottom') {
  20312. yPosition = this.grid.getYend() + margin;
  20313. baseLine = 'top';
  20314. } else {
  20315. yPosition = this.grid.getY() - margin;
  20316. baseLine = 'bottom';
  20317. }
  20318. for (var i = 0; i < dataLength; i++) {
  20319. axShape = {
  20320. zlevel: this.getZlevelBase(),
  20321. z: this.getZBase() + 3,
  20322. hoverable: false,
  20323. style: {
  20324. x: this.getCoord(data[i]),
  20325. y: yPosition,
  20326. color: typeof textStyle.color === 'function' ? textStyle.color(data[i]) : textStyle.color,
  20327. text: this._valueLabel[i],
  20328. textFont: this.getFont(textStyle),
  20329. textAlign: textStyle.align || 'center',
  20330. textBaseline: textStyle.baseline || baseLine
  20331. }
  20332. };
  20333. if (rotate) {
  20334. axShape.style.textAlign = rotate > 0 ? this.option.position === 'bottom' ? 'right' : 'left' : this.option.position === 'bottom' ? 'left' : 'right';
  20335. axShape.rotation = [
  20336. rotate * Math.PI / 180,
  20337. axShape.style.x,
  20338. axShape.style.y
  20339. ];
  20340. }
  20341. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  20342. }
  20343. } else {
  20344. var xPosition;
  20345. var align;
  20346. if (this.option.position === 'left') {
  20347. xPosition = this.grid.getX() - margin;
  20348. align = 'right';
  20349. } else {
  20350. xPosition = this.grid.getXend() + margin;
  20351. align = 'left';
  20352. }
  20353. for (var i = 0; i < dataLength; i++) {
  20354. axShape = {
  20355. zlevel: this.getZlevelBase(),
  20356. z: this.getZBase() + 3,
  20357. hoverable: false,
  20358. style: {
  20359. x: xPosition,
  20360. y: this.getCoord(data[i]),
  20361. color: typeof textStyle.color === 'function' ? textStyle.color(data[i]) : textStyle.color,
  20362. text: this._valueLabel[i],
  20363. textFont: this.getFont(textStyle),
  20364. textAlign: textStyle.align || align,
  20365. textBaseline: textStyle.baseline || (i === 0 && this.option.name !== '' ? 'bottom' : i === dataLength - 1 && this.option.name !== '' ? 'top' : 'middle')
  20366. }
  20367. };
  20368. if (rotate) {
  20369. axShape.rotation = [
  20370. rotate * Math.PI / 180,
  20371. axShape.style.x,
  20372. axShape.style.y
  20373. ];
  20374. }
  20375. this.shapeList.push(new TextShape(this._axisLabelClickable(clickable, axShape)));
  20376. }
  20377. }
  20378. },
  20379. _buildSplitLine: function () {
  20380. var axShape;
  20381. var data = this._valueList;
  20382. var dataLength = this._valueList.length;
  20383. var sLineOption = this.option.splitLine;
  20384. var lineType = sLineOption.lineStyle.type;
  20385. var lineWidth = sLineOption.lineStyle.width;
  20386. var color = sLineOption.lineStyle.color;
  20387. color = color instanceof Array ? color : [color];
  20388. var colorLength = color.length;
  20389. if (this.isHorizontal()) {
  20390. var sy = this.grid.getY();
  20391. var ey = this.grid.getYend();
  20392. var x;
  20393. for (var i = 0; i < dataLength; i++) {
  20394. x = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20395. axShape = {
  20396. zlevel: this.getZlevelBase(),
  20397. z: this.getZBase(),
  20398. hoverable: false,
  20399. style: {
  20400. xStart: x,
  20401. yStart: sy,
  20402. xEnd: x,
  20403. yEnd: ey,
  20404. strokeColor: color[i % colorLength],
  20405. lineType: lineType,
  20406. lineWidth: lineWidth
  20407. }
  20408. };
  20409. this.shapeList.push(new LineShape(axShape));
  20410. }
  20411. } else {
  20412. var sx = this.grid.getX();
  20413. var ex = this.grid.getXend();
  20414. var y;
  20415. for (var i = 0; i < dataLength; i++) {
  20416. y = this.subPixelOptimize(this.getCoord(data[i]), lineWidth);
  20417. axShape = {
  20418. zlevel: this.getZlevelBase(),
  20419. z: this.getZBase(),
  20420. hoverable: false,
  20421. style: {
  20422. xStart: sx,
  20423. yStart: y,
  20424. xEnd: ex,
  20425. yEnd: y,
  20426. strokeColor: color[i % colorLength],
  20427. lineType: lineType,
  20428. lineWidth: lineWidth
  20429. }
  20430. };
  20431. this.shapeList.push(new LineShape(axShape));
  20432. }
  20433. }
  20434. },
  20435. _buildSplitArea: function () {
  20436. var axShape;
  20437. var color = this.option.splitArea.areaStyle.color;
  20438. if (!(color instanceof Array)) {
  20439. axShape = {
  20440. zlevel: this.getZlevelBase(),
  20441. z: this.getZBase(),
  20442. hoverable: false,
  20443. style: {
  20444. x: this.grid.getX(),
  20445. y: this.grid.getY(),
  20446. width: this.grid.getWidth(),
  20447. height: this.grid.getHeight(),
  20448. color: color
  20449. }
  20450. };
  20451. this.shapeList.push(new RectangleShape(axShape));
  20452. } else {
  20453. var colorLength = color.length;
  20454. var data = this._valueList;
  20455. var dataLength = this._valueList.length;
  20456. if (this.isHorizontal()) {
  20457. var y = this.grid.getY();
  20458. var height = this.grid.getHeight();
  20459. var lastX = this.grid.getX();
  20460. var curX;
  20461. for (var i = 0; i <= dataLength; i++) {
  20462. curX = i < dataLength ? this.getCoord(data[i]) : this.grid.getXend();
  20463. axShape = {
  20464. zlevel: this.getZlevelBase(),
  20465. z: this.getZBase(),
  20466. hoverable: false,
  20467. style: {
  20468. x: lastX,
  20469. y: y,
  20470. width: curX - lastX,
  20471. height: height,
  20472. color: color[i % colorLength]
  20473. }
  20474. };
  20475. this.shapeList.push(new RectangleShape(axShape));
  20476. lastX = curX;
  20477. }
  20478. } else {
  20479. var x = this.grid.getX();
  20480. var width = this.grid.getWidth();
  20481. var lastYend = this.grid.getYend();
  20482. var curY;
  20483. for (var i = 0; i <= dataLength; i++) {
  20484. curY = i < dataLength ? this.getCoord(data[i]) : this.grid.getY();
  20485. axShape = {
  20486. zlevel: this.getZlevelBase(),
  20487. z: this.getZBase(),
  20488. hoverable: false,
  20489. style: {
  20490. x: x,
  20491. y: curY,
  20492. width: width,
  20493. height: lastYend - curY,
  20494. color: color[i % colorLength]
  20495. }
  20496. };
  20497. this.shapeList.push(new RectangleShape(axShape));
  20498. lastYend = curY;
  20499. }
  20500. }
  20501. }
  20502. },
  20503. _calculateValue: function () {
  20504. if (isNaN(this.option.min - 0) || isNaN(this.option.max - 0)) {
  20505. var data = {};
  20506. var xIdx;
  20507. var yIdx;
  20508. var legend = this.component.legend;
  20509. for (var i = 0, l = this.series.length; i < l; i++) {
  20510. if (this.series[i].type != ecConfig.CHART_TYPE_LINE && this.series[i].type != ecConfig.CHART_TYPE_BAR && this.series[i].type != ecConfig.CHART_TYPE_SCATTER && this.series[i].type != ecConfig.CHART_TYPE_K && this.series[i].type != ecConfig.CHART_TYPE_EVENTRIVER) {
  20511. continue;
  20512. }
  20513. if (legend && !legend.isSelected(this.series[i].name)) {
  20514. continue;
  20515. }
  20516. xIdx = this.series[i].xAxisIndex || 0;
  20517. yIdx = this.series[i].yAxisIndex || 0;
  20518. if (this.option.xAxisIndex != xIdx && this.option.yAxisIndex != yIdx) {
  20519. continue;
  20520. }
  20521. this._calculSum(data, i);
  20522. }
  20523. var oriData;
  20524. for (var i in data) {
  20525. oriData = data[i];
  20526. for (var j = 0, k = oriData.length; j < k; j++) {
  20527. if (!isNaN(oriData[j])) {
  20528. this._hasData = true;
  20529. this._min = oriData[j];
  20530. this._max = oriData[j];
  20531. break;
  20532. }
  20533. }
  20534. if (this._hasData) {
  20535. break;
  20536. }
  20537. }
  20538. for (var i in data) {
  20539. oriData = data[i];
  20540. for (var j = 0, k = oriData.length; j < k; j++) {
  20541. if (!isNaN(oriData[j])) {
  20542. this._min = Math.min(this._min, oriData[j]);
  20543. this._max = Math.max(this._max, oriData[j]);
  20544. }
  20545. }
  20546. }
  20547. var boundaryGap = this.option.type !== 'log' ? this.option.boundaryGap : [
  20548. 0,
  20549. 0
  20550. ];
  20551. var gap = Math.abs(this._max - this._min);
  20552. this._min = isNaN(this.option.min - 0) ? this._min - Math.abs(gap * boundaryGap[0]) : this.option.min - 0;
  20553. this._max = isNaN(this.option.max - 0) ? this._max + Math.abs(gap * boundaryGap[1]) : this.option.max - 0;
  20554. if (this._min === this._max) {
  20555. if (this._max === 0) {
  20556. this._max = 1;
  20557. } else if (this._max > 0) {
  20558. this._min = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5;
  20559. } else {
  20560. this._max = this._max / this.option.splitNumber != null ? this.option.splitNumber : 5;
  20561. }
  20562. }
  20563. if (this.option.type === 'time') {
  20564. this._reformTimeValue();
  20565. } else if (this.option.type === 'log') {
  20566. this._reformLogValue();
  20567. } else {
  20568. this._reformValue(this.option.scale);
  20569. }
  20570. } else {
  20571. this._hasData = true;
  20572. this._min = this.option.min - 0;
  20573. this._max = this.option.max - 0;
  20574. if (this.option.type === 'time') {
  20575. this._reformTimeValue();
  20576. } else if (this.option.type === 'log') {
  20577. this._reformLogValue();
  20578. } else {
  20579. this._customerValue();
  20580. }
  20581. }
  20582. },
  20583. _calculSum: function (data, i) {
  20584. var key = this.series[i].name || 'kener';
  20585. var value;
  20586. var oriData;
  20587. if (!this.series[i].stack) {
  20588. data[key] = data[key] || [];
  20589. if (this.series[i].type != ecConfig.CHART_TYPE_EVENTRIVER) {
  20590. oriData = this.series[i].data;
  20591. for (var j = 0, k = oriData.length; j < k; j++) {
  20592. value = this.getDataFromOption(oriData[j]);
  20593. if (this.series[i].type === ecConfig.CHART_TYPE_K) {
  20594. data[key].push(value[0]);
  20595. data[key].push(value[1]);
  20596. data[key].push(value[2]);
  20597. data[key].push(value[3]);
  20598. } else if (value instanceof Array) {
  20599. if (this.option.xAxisIndex != -1) {
  20600. data[key].push(this.option.type != 'time' ? value[0] : ecDate.getNewDate(value[0]));
  20601. }
  20602. if (this.option.yAxisIndex != -1) {
  20603. data[key].push(this.option.type != 'time' ? value[1] : ecDate.getNewDate(value[1]));
  20604. }
  20605. } else {
  20606. data[key].push(value);
  20607. }
  20608. }
  20609. } else {
  20610. oriData = this.series[i].data;
  20611. for (var j = 0, k = oriData.length; j < k; j++) {
  20612. var evolution = oriData[j].evolution;
  20613. for (var m = 0, n = evolution.length; m < n; m++) {
  20614. data[key].push(ecDate.getNewDate(evolution[m].time));
  20615. }
  20616. }
  20617. }
  20618. } else {
  20619. var keyP = '__Magic_Key_Positive__' + this.series[i].stack;
  20620. var keyN = '__Magic_Key_Negative__' + this.series[i].stack;
  20621. data[keyP] = data[keyP] || [];
  20622. data[keyN] = data[keyN] || [];
  20623. data[key] = data[key] || [];
  20624. oriData = this.series[i].data;
  20625. for (var j = 0, k = oriData.length; j < k; j++) {
  20626. value = this.getDataFromOption(oriData[j]);
  20627. if (value === '-') {
  20628. continue;
  20629. }
  20630. value = value - 0;
  20631. if (value >= 0) {
  20632. if (data[keyP][j] != null) {
  20633. data[keyP][j] += value;
  20634. } else {
  20635. data[keyP][j] = value;
  20636. }
  20637. } else {
  20638. if (data[keyN][j] != null) {
  20639. data[keyN][j] += value;
  20640. } else {
  20641. data[keyN][j] = value;
  20642. }
  20643. }
  20644. if (this.option.scale) {
  20645. data[key].push(value);
  20646. }
  20647. }
  20648. }
  20649. },
  20650. _reformValue: function (scale) {
  20651. var smartSteps = require('../util/smartSteps');
  20652. var splitNumber = this.option.splitNumber;
  20653. if (!scale && this._min >= 0 && this._max >= 0) {
  20654. this._min = 0;
  20655. }
  20656. if (!scale && this._min <= 0 && this._max <= 0) {
  20657. this._max = 0;
  20658. }
  20659. var stepOpt = smartSteps(this._min, this._max, splitNumber);
  20660. splitNumber = splitNumber != null ? splitNumber : stepOpt.secs;
  20661. this._min = stepOpt.min;
  20662. this._max = stepOpt.max;
  20663. this._valueList = stepOpt.pnts;
  20664. this._reformLabelData();
  20665. },
  20666. _reformTimeValue: function () {
  20667. var splitNumber = this.option.splitNumber != null ? this.option.splitNumber : 5;
  20668. var curValue = ecDate.getAutoFormatter(this._min, this._max, splitNumber);
  20669. var formatter = curValue.formatter;
  20670. var gapValue = curValue.gapValue;
  20671. this._valueList = [ecDate.getNewDate(this._min)];
  20672. var startGap;
  20673. switch (formatter) {
  20674. case 'week':
  20675. startGap = ecDate.nextMonday(this._min);
  20676. break;
  20677. case 'month':
  20678. startGap = ecDate.nextNthOnMonth(this._min, 1);
  20679. break;
  20680. case 'quarter':
  20681. startGap = ecDate.nextNthOnQuarterYear(this._min, 1);
  20682. break;
  20683. case 'half-year':
  20684. startGap = ecDate.nextNthOnHalfYear(this._min, 1);
  20685. break;
  20686. case 'year':
  20687. startGap = ecDate.nextNthOnYear(this._min, 1);
  20688. break;
  20689. default:
  20690. if (gapValue <= 3600000 * 2) {
  20691. startGap = (Math.floor(this._min / gapValue) + 1) * gapValue;
  20692. } else {
  20693. startGap = ecDate.getNewDate(this._min - -gapValue);
  20694. startGap.setHours(Math.round(startGap.getHours() / 6) * 6);
  20695. startGap.setMinutes(0);
  20696. startGap.setSeconds(0);
  20697. }
  20698. break;
  20699. }
  20700. if (startGap - this._min < gapValue / 2) {
  20701. startGap -= -gapValue;
  20702. }
  20703. curValue = ecDate.getNewDate(startGap);
  20704. splitNumber *= 1.5;
  20705. while (splitNumber-- >= 0) {
  20706. if (formatter == 'month' || formatter == 'quarter' || formatter == 'half-year' || formatter == 'year') {
  20707. curValue.setDate(1);
  20708. }
  20709. if (this._max - curValue < gapValue / 2) {
  20710. break;
  20711. }
  20712. this._valueList.push(curValue);
  20713. curValue = ecDate.getNewDate(curValue - -gapValue);
  20714. }
  20715. this._valueList.push(ecDate.getNewDate(this._max));
  20716. this._reformLabelData(function (formatterStr) {
  20717. return function (value) {
  20718. return ecDate.format(formatterStr, value);
  20719. };
  20720. }(formatter));
  20721. },
  20722. _customerValue: function () {
  20723. var accMath = require('../util/accMath');
  20724. var splitNumber = this.option.splitNumber != null ? this.option.splitNumber : 5;
  20725. var splitGap = (this._max - this._min) / splitNumber;
  20726. this._valueList = [];
  20727. for (var i = 0; i <= splitNumber; i++) {
  20728. this._valueList.push(accMath.accAdd(this._min, accMath.accMul(splitGap, i)));
  20729. }
  20730. this._reformLabelData();
  20731. },
  20732. _reformLogValue: function () {
  20733. var thisOption = this.option;
  20734. var result = require('../util/smartLogSteps')({
  20735. dataMin: this._min,
  20736. dataMax: this._max,
  20737. logPositive: thisOption.logPositive,
  20738. logLabelBase: thisOption.logLabelBase,
  20739. splitNumber: thisOption.splitNumber
  20740. });
  20741. this._min = result.dataMin;
  20742. this._max = result.dataMax;
  20743. this._valueList = result.tickList;
  20744. this._dataMappingMethods = result.dataMappingMethods;
  20745. this._reformLabelData(result.labelFormatter);
  20746. },
  20747. _reformLabelData: function (innerFormatter) {
  20748. this._valueLabel = [];
  20749. var formatter = this.option.axisLabel.formatter;
  20750. if (formatter) {
  20751. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20752. if (typeof formatter === 'function') {
  20753. this._valueLabel.push(innerFormatter ? formatter.call(this.myChart, this._valueList[i], innerFormatter) : formatter.call(this.myChart, this._valueList[i]));
  20754. } else if (typeof formatter === 'string') {
  20755. this._valueLabel.push(innerFormatter ? ecDate.format(formatter, this._valueList[i]) : formatter.replace('{value}', this._valueList[i]));
  20756. }
  20757. }
  20758. } else {
  20759. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20760. this._valueLabel.push(innerFormatter ? innerFormatter(this._valueList[i]) : this.numAddCommas(this._valueList[i]));
  20761. }
  20762. }
  20763. },
  20764. getExtremum: function () {
  20765. this._calculateValue();
  20766. var dataMappingMethods = this._dataMappingMethods;
  20767. return {
  20768. min: this._min,
  20769. max: this._max,
  20770. dataMappingMethods: dataMappingMethods ? zrUtil.merge({}, dataMappingMethods) : null
  20771. };
  20772. },
  20773. refresh: function (newOption, newSeries) {
  20774. if (newOption) {
  20775. this.option = this.reformOption(newOption);
  20776. this.option.axisLabel.textStyle = zrUtil.merge(this.option.axisLabel.textStyle || {}, this.ecTheme.textStyle);
  20777. this.series = newSeries;
  20778. }
  20779. if (this.zr) {
  20780. this.clear();
  20781. this._buildShape();
  20782. }
  20783. },
  20784. getCoord: function (value) {
  20785. if (this._dataMappingMethods) {
  20786. value = this._dataMappingMethods.value2Coord(value);
  20787. }
  20788. value = value < this._min ? this._min : value;
  20789. value = value > this._max ? this._max : value;
  20790. var result;
  20791. if (!this.isHorizontal()) {
  20792. result = this.grid.getYend() - (value - this._min) / (this._max - this._min) * this.grid.getHeight();
  20793. } else {
  20794. result = this.grid.getX() + (value - this._min) / (this._max - this._min) * this.grid.getWidth();
  20795. }
  20796. return result;
  20797. },
  20798. getCoordSize: function (value) {
  20799. if (!this.isHorizontal()) {
  20800. return Math.abs(value / (this._max - this._min) * this.grid.getHeight());
  20801. } else {
  20802. return Math.abs(value / (this._max - this._min) * this.grid.getWidth());
  20803. }
  20804. },
  20805. getValueFromCoord: function (coord) {
  20806. var result;
  20807. if (!this.isHorizontal()) {
  20808. coord = coord < this.grid.getY() ? this.grid.getY() : coord;
  20809. coord = coord > this.grid.getYend() ? this.grid.getYend() : coord;
  20810. result = this._max - (coord - this.grid.getY()) / this.grid.getHeight() * (this._max - this._min);
  20811. } else {
  20812. coord = coord < this.grid.getX() ? this.grid.getX() : coord;
  20813. coord = coord > this.grid.getXend() ? this.grid.getXend() : coord;
  20814. result = this._min + (coord - this.grid.getX()) / this.grid.getWidth() * (this._max - this._min);
  20815. }
  20816. if (this._dataMappingMethods) {
  20817. result = this._dataMappingMethods.coord2Value(result);
  20818. }
  20819. return result.toFixed(2) - 0;
  20820. },
  20821. isMaindAxis: function (value) {
  20822. for (var i = 0, l = this._valueList.length; i < l; i++) {
  20823. if (this._valueList[i] === value) {
  20824. return true;
  20825. }
  20826. }
  20827. return false;
  20828. }
  20829. };
  20830. zrUtil.inherits(ValueAxis, Base);
  20831. require('../component').define('valueAxis', ValueAxis);
  20832. return ValueAxis;
  20833. });define('echarts/util/date', [], function () {
  20834. var _timeGap = [
  20835. {
  20836. formatter: 'hh : mm : ss',
  20837. value: 1000
  20838. },
  20839. {
  20840. formatter: 'hh : mm : ss',
  20841. value: 1000 * 5
  20842. },
  20843. {
  20844. formatter: 'hh : mm : ss',
  20845. value: 1000 * 10
  20846. },
  20847. {
  20848. formatter: 'hh : mm : ss',
  20849. value: 1000 * 15
  20850. },
  20851. {
  20852. formatter: 'hh : mm : ss',
  20853. value: 1000 * 30
  20854. },
  20855. {
  20856. formatter: 'hh : mm\nMM - dd',
  20857. value: 60000
  20858. },
  20859. {
  20860. formatter: 'hh : mm\nMM - dd',
  20861. value: 60000 * 5
  20862. },
  20863. {
  20864. formatter: 'hh : mm\nMM - dd',
  20865. value: 60000 * 10
  20866. },
  20867. {
  20868. formatter: 'hh : mm\nMM - dd',
  20869. value: 60000 * 15
  20870. },
  20871. {
  20872. formatter: 'hh : mm\nMM - dd',
  20873. value: 60000 * 30
  20874. },
  20875. {
  20876. formatter: 'hh : mm\nMM - dd',
  20877. value: 3600000
  20878. },
  20879. {
  20880. formatter: 'hh : mm\nMM - dd',
  20881. value: 3600000 * 2
  20882. },
  20883. {
  20884. formatter: 'hh : mm\nMM - dd',
  20885. value: 3600000 * 6
  20886. },
  20887. {
  20888. formatter: 'hh : mm\nMM - dd',
  20889. value: 3600000 * 12
  20890. },
  20891. {
  20892. formatter: 'MM - dd\nyyyy',
  20893. value: 3600000 * 24
  20894. },
  20895. {
  20896. formatter: 'week',
  20897. value: 3600000 * 24 * 7
  20898. },
  20899. {
  20900. formatter: 'month',
  20901. value: 3600000 * 24 * 31
  20902. },
  20903. {
  20904. formatter: 'quarter',
  20905. value: 3600000 * 24 * 380 / 4
  20906. },
  20907. {
  20908. formatter: 'half-year',
  20909. value: 3600000 * 24 * 380 / 2
  20910. },
  20911. {
  20912. formatter: 'year',
  20913. value: 3600000 * 24 * 380
  20914. }
  20915. ];
  20916. function getAutoFormatter(min, max, splitNumber) {
  20917. splitNumber = splitNumber > 1 ? splitNumber : 2;
  20918. var curValue;
  20919. var totalGap;
  20920. var formatter;
  20921. var gapValue;
  20922. for (var i = 0, l = _timeGap.length; i < l; i++) {
  20923. curValue = _timeGap[i].value;
  20924. totalGap = Math.ceil(max / curValue) * curValue - Math.floor(min / curValue) * curValue;
  20925. if (Math.round(totalGap / curValue) <= splitNumber * 1.2) {
  20926. formatter = _timeGap[i].formatter;
  20927. gapValue = _timeGap[i].value;
  20928. break;
  20929. }
  20930. }
  20931. if (formatter == null) {
  20932. formatter = 'year';
  20933. curValue = 3600000 * 24 * 367;
  20934. totalGap = Math.ceil(max / curValue) * curValue - Math.floor(min / curValue) * curValue;
  20935. gapValue = Math.round(totalGap / (splitNumber - 1) / curValue) * curValue;
  20936. }
  20937. return {
  20938. formatter: formatter,
  20939. gapValue: gapValue
  20940. };
  20941. }
  20942. function s2d(v) {
  20943. return v < 10 ? '0' + v : v;
  20944. }
  20945. function format(formatter, value) {
  20946. if (formatter == 'week' || formatter == 'month' || formatter == 'quarter' || formatter == 'half-year' || formatter == 'year') {
  20947. formatter = 'MM - dd\nyyyy';
  20948. }
  20949. var date = getNewDate(value);
  20950. var y = date.getFullYear();
  20951. var M = date.getMonth() + 1;
  20952. var d = date.getDate();
  20953. var h = date.getHours();
  20954. var m = date.getMinutes();
  20955. var s = date.getSeconds();
  20956. formatter = formatter.replace('MM', s2d(M));
  20957. formatter = formatter.toLowerCase();
  20958. formatter = formatter.replace('yyyy', y);
  20959. formatter = formatter.replace('yy', y % 100);
  20960. formatter = formatter.replace('dd', s2d(d));
  20961. formatter = formatter.replace('d', d);
  20962. formatter = formatter.replace('hh', s2d(h));
  20963. formatter = formatter.replace('h', h);
  20964. formatter = formatter.replace('mm', s2d(m));
  20965. formatter = formatter.replace('m', m);
  20966. formatter = formatter.replace('ss', s2d(s));
  20967. formatter = formatter.replace('s', s);
  20968. return formatter;
  20969. }
  20970. function nextMonday(value) {
  20971. value = getNewDate(value);
  20972. value.setDate(value.getDate() + 8 - value.getDay());
  20973. return value;
  20974. }
  20975. function nextNthPerNmonth(value, nth, nmon) {
  20976. value = getNewDate(value);
  20977. value.setMonth(Math.ceil((value.getMonth() + 1) / nmon) * nmon);
  20978. value.setDate(nth);
  20979. return value;
  20980. }
  20981. function nextNthOnMonth(value, nth) {
  20982. return nextNthPerNmonth(value, nth, 1);
  20983. }
  20984. function nextNthOnQuarterYear(value, nth) {
  20985. return nextNthPerNmonth(value, nth, 3);
  20986. }
  20987. function nextNthOnHalfYear(value, nth) {
  20988. return nextNthPerNmonth(value, nth, 6);
  20989. }
  20990. function nextNthOnYear(value, nth) {
  20991. return nextNthPerNmonth(value, nth, 12);
  20992. }
  20993. function getNewDate(value) {
  20994. return value instanceof Date ? value : new Date(typeof value == 'string' ? value.replace(/-/g, '/') : value);
  20995. }
  20996. return {
  20997. getAutoFormatter: getAutoFormatter,
  20998. getNewDate: getNewDate,
  20999. format: format,
  21000. nextMonday: nextMonday,
  21001. nextNthPerNmonth: nextNthPerNmonth,
  21002. nextNthOnMonth: nextNthOnMonth,
  21003. nextNthOnQuarterYear: nextNthOnQuarterYear,
  21004. nextNthOnHalfYear: nextNthOnHalfYear,
  21005. nextNthOnYear: nextNthOnYear
  21006. };
  21007. });define('echarts/util/smartSteps', [], function () {
  21008. var mySteps = [
  21009. 10,
  21010. 20,
  21011. 25,
  21012. 50
  21013. ];
  21014. var mySections = [
  21015. 4,
  21016. 5,
  21017. 6
  21018. ];
  21019. var custOpts;
  21020. var custSteps;
  21021. var custSecs;
  21022. var minLocked;
  21023. var maxLocked;
  21024. var MT = Math;
  21025. var MATH_ROUND = MT.round;
  21026. var MATH_FLOOR = MT.floor;
  21027. var MATH_CEIL = MT.ceil;
  21028. var MATH_ABS = MT.abs;
  21029. function MATH_LOG(n) {
  21030. return MT.log(MATH_ABS(n)) / MT.LN10;
  21031. }
  21032. function MATH_POW(n) {
  21033. return MT.pow(10, n);
  21034. }
  21035. function MATH_ISINT(n) {
  21036. return n === MATH_FLOOR(n);
  21037. }
  21038. function smartSteps(min, max, section, opts) {
  21039. custOpts = opts || {};
  21040. custSteps = custOpts.steps || mySteps;
  21041. custSecs = custOpts.secs || mySections;
  21042. section = MATH_ROUND(+section || 0) % 99;
  21043. min = +min || 0;
  21044. max = +max || 0;
  21045. minLocked = maxLocked = 0;
  21046. if ('min' in custOpts) {
  21047. min = +custOpts.min || 0;
  21048. minLocked = 1;
  21049. }
  21050. if ('max' in custOpts) {
  21051. max = +custOpts.max || 0;
  21052. maxLocked = 1;
  21053. }
  21054. if (min > max) {
  21055. max = [
  21056. min,
  21057. min = max
  21058. ][0];
  21059. }
  21060. var span = max - min;
  21061. if (minLocked && maxLocked) {
  21062. return bothLocked(min, max, section);
  21063. }
  21064. if (span < (section || 5)) {
  21065. if (MATH_ISINT(min) && MATH_ISINT(max)) {
  21066. return forInteger(min, max, section);
  21067. } else if (span === 0) {
  21068. return forSpan0(min, max, section);
  21069. }
  21070. }
  21071. return coreCalc(min, max, section);
  21072. }
  21073. function makeResult(newMin, newMax, section, expon) {
  21074. expon = expon || 0;
  21075. var expStep = expNum((newMax - newMin) / section, -1);
  21076. var expMin = expNum(newMin, -1, 1);
  21077. var expMax = expNum(newMax, -1);
  21078. var minExp = MT.min(expStep.e, expMin.e, expMax.e);
  21079. if (expMin.c === 0) {
  21080. minExp = MT.min(expStep.e, expMax.e);
  21081. } else if (expMax.c === 0) {
  21082. minExp = MT.min(expStep.e, expMin.e);
  21083. }
  21084. expFixTo(expStep, {
  21085. c: 0,
  21086. e: minExp
  21087. });
  21088. expFixTo(expMin, expStep, 1);
  21089. expFixTo(expMax, expStep);
  21090. expon += minExp;
  21091. newMin = expMin.c;
  21092. newMax = expMax.c;
  21093. var step = (newMax - newMin) / section;
  21094. var zoom = MATH_POW(expon);
  21095. var fixTo = 0;
  21096. var points = [];
  21097. for (var i = section + 1; i--;) {
  21098. points[i] = (newMin + step * i) * zoom;
  21099. }
  21100. if (expon < 0) {
  21101. fixTo = decimals(zoom);
  21102. step = +(step * zoom).toFixed(fixTo);
  21103. newMin = +(newMin * zoom).toFixed(fixTo);
  21104. newMax = +(newMax * zoom).toFixed(fixTo);
  21105. for (var i = points.length; i--;) {
  21106. points[i] = points[i].toFixed(fixTo);
  21107. +points[i] === 0 && (points[i] = '0');
  21108. }
  21109. } else {
  21110. newMin *= zoom;
  21111. newMax *= zoom;
  21112. step *= zoom;
  21113. }
  21114. custSecs = 0;
  21115. custSteps = 0;
  21116. custOpts = 0;
  21117. return {
  21118. min: newMin,
  21119. max: newMax,
  21120. secs: section,
  21121. step: step,
  21122. fix: fixTo,
  21123. exp: expon,
  21124. pnts: points
  21125. };
  21126. }
  21127. function expNum(num, digit, byFloor) {
  21128. digit = MATH_ROUND(digit % 10) || 2;
  21129. if (digit < 0) {
  21130. if (MATH_ISINT(num)) {
  21131. digit = ('' + MATH_ABS(num)).replace(/0+$/, '').length || 1;
  21132. } else {
  21133. num = num.toFixed(15).replace(/0+$/, '');
  21134. digit = num.replace('.', '').replace(/^[-0]+/, '').length;
  21135. num = +num;
  21136. }
  21137. }
  21138. var expon = MATH_FLOOR(MATH_LOG(num)) - digit + 1;
  21139. var cNum = +(num * MATH_POW(-expon)).toFixed(15) || 0;
  21140. cNum = byFloor ? MATH_FLOOR(cNum) : MATH_CEIL(cNum);
  21141. !cNum && (expon = 0);
  21142. if (('' + MATH_ABS(cNum)).length > digit) {
  21143. expon += 1;
  21144. cNum /= 10;
  21145. }
  21146. return {
  21147. c: cNum,
  21148. e: expon
  21149. };
  21150. }
  21151. function expFixTo(expnum1, expnum2, byFloor) {
  21152. var deltaExp = expnum2.e - expnum1.e;
  21153. if (deltaExp) {
  21154. expnum1.e += deltaExp;
  21155. expnum1.c *= MATH_POW(-deltaExp);
  21156. expnum1.c = byFloor ? MATH_FLOOR(expnum1.c) : MATH_CEIL(expnum1.c);
  21157. }
  21158. }
  21159. function expFixMin(expnum1, expnum2, byFloor) {
  21160. if (expnum1.e < expnum2.e) {
  21161. expFixTo(expnum2, expnum1, byFloor);
  21162. } else {
  21163. expFixTo(expnum1, expnum2, byFloor);
  21164. }
  21165. }
  21166. function getCeil(num, rounds) {
  21167. rounds = rounds || mySteps;
  21168. num = expNum(num);
  21169. var cNum = num.c;
  21170. var i = 0;
  21171. while (cNum > rounds[i]) {
  21172. i++;
  21173. }
  21174. if (!rounds[i]) {
  21175. cNum /= 10;
  21176. num.e += 1;
  21177. i = 0;
  21178. while (cNum > rounds[i]) {
  21179. i++;
  21180. }
  21181. }
  21182. num.c = rounds[i];
  21183. return num;
  21184. }
  21185. function coreCalc(min, max, section) {
  21186. var step;
  21187. var secs = section || +custSecs.slice(-1);
  21188. var expStep = getCeil((max - min) / secs, custSteps);
  21189. var expSpan = expNum(max - min);
  21190. var expMin = expNum(min, -1, 1);
  21191. var expMax = expNum(max, -1);
  21192. expFixTo(expSpan, expStep);
  21193. expFixTo(expMin, expStep, 1);
  21194. expFixTo(expMax, expStep);
  21195. if (!section) {
  21196. secs = look4sections(expMin, expMax);
  21197. } else {
  21198. step = look4step(expMin, expMax, secs);
  21199. }
  21200. if (MATH_ISINT(min) && MATH_ISINT(max) && min * max >= 0) {
  21201. if (max - min < secs) {
  21202. return forInteger(min, max, secs);
  21203. }
  21204. secs = tryForInt(min, max, section, expMin, expMax, secs);
  21205. }
  21206. var arrMM = cross0(min, max, expMin.c, expMax.c);
  21207. expMin.c = arrMM[0];
  21208. expMax.c = arrMM[1];
  21209. if (minLocked || maxLocked) {
  21210. singleLocked(min, max, expMin, expMax);
  21211. }
  21212. return makeResult(expMin.c, expMax.c, secs, expMax.e);
  21213. }
  21214. function look4sections(expMin, expMax) {
  21215. var section;
  21216. var tmpStep, tmpMin, tmpMax;
  21217. var reference = [];
  21218. for (var i = custSecs.length; i--;) {
  21219. section = custSecs[i];
  21220. tmpStep = getCeil((expMax.c - expMin.c) / section, custSteps);
  21221. tmpStep = tmpStep.c * MATH_POW(tmpStep.e);
  21222. tmpMin = MATH_FLOOR(expMin.c / tmpStep) * tmpStep;
  21223. tmpMax = MATH_CEIL(expMax.c / tmpStep) * tmpStep;
  21224. reference[i] = {
  21225. min: tmpMin,
  21226. max: tmpMax,
  21227. step: tmpStep,
  21228. span: tmpMax - tmpMin
  21229. };
  21230. }
  21231. reference.sort(function (a, b) {
  21232. var delta = a.span - b.span;
  21233. if (delta === 0) {
  21234. delta = a.step - b.step;
  21235. }
  21236. return delta;
  21237. });
  21238. reference = reference[0];
  21239. section = reference.span / reference.step;
  21240. expMin.c = reference.min;
  21241. expMax.c = reference.max;
  21242. return section < 3 ? section * 2 : section;
  21243. }
  21244. function look4step(expMin, expMax, secs) {
  21245. var span;
  21246. var tmpMax;
  21247. var tmpMin = expMax.c;
  21248. var tmpStep = (expMax.c - expMin.c) / secs - 1;
  21249. while (tmpMin > expMin.c) {
  21250. tmpStep = getCeil(tmpStep + 1, custSteps);
  21251. tmpStep = tmpStep.c * MATH_POW(tmpStep.e);
  21252. span = tmpStep * secs;
  21253. tmpMax = MATH_CEIL(expMax.c / tmpStep) * tmpStep;
  21254. tmpMin = tmpMax - span;
  21255. }
  21256. var deltaMin = expMin.c - tmpMin;
  21257. var deltaMax = tmpMax - expMax.c;
  21258. var deltaDelta = deltaMin - deltaMax;
  21259. if (deltaDelta > tmpStep * 1.1) {
  21260. deltaDelta = MATH_ROUND(deltaDelta / tmpStep / 2) * tmpStep;
  21261. tmpMin += deltaDelta;
  21262. tmpMax += deltaDelta;
  21263. }
  21264. expMin.c = tmpMin;
  21265. expMax.c = tmpMax;
  21266. return tmpStep;
  21267. }
  21268. function tryForInt(min, max, section, expMin, expMax, secs) {
  21269. var span = expMax.c - expMin.c;
  21270. var step = span / secs * MATH_POW(expMax.e);
  21271. if (!MATH_ISINT(step)) {
  21272. step = MATH_FLOOR(step);
  21273. span = step * secs;
  21274. if (span < max - min) {
  21275. step += 1;
  21276. span = step * secs;
  21277. if (!section && step * (secs - 1) >= max - min) {
  21278. secs -= 1;
  21279. span = step * secs;
  21280. }
  21281. }
  21282. if (span >= max - min) {
  21283. var delta = span - (max - min);
  21284. expMin.c = MATH_ROUND(min - delta / 2);
  21285. expMax.c = MATH_ROUND(max + delta / 2);
  21286. expMin.e = 0;
  21287. expMax.e = 0;
  21288. }
  21289. }
  21290. return secs;
  21291. }
  21292. function forInteger(min, max, section) {
  21293. section = section || 5;
  21294. if (minLocked) {
  21295. max = min + section;
  21296. } else if (maxLocked) {
  21297. min = max - section;
  21298. } else {
  21299. var delta = section - (max - min);
  21300. var newMin = MATH_ROUND(min - delta / 2);
  21301. var newMax = MATH_ROUND(max + delta / 2);
  21302. var arrMM = cross0(min, max, newMin, newMax);
  21303. min = arrMM[0];
  21304. max = arrMM[1];
  21305. }
  21306. return makeResult(min, max, section);
  21307. }
  21308. function forSpan0(min, max, section) {
  21309. section = section || 5;
  21310. var delta = MT.min(MATH_ABS(max / section), section) / 2.1;
  21311. if (minLocked) {
  21312. max = min + delta;
  21313. } else if (maxLocked) {
  21314. min = max - delta;
  21315. } else {
  21316. min = min - delta;
  21317. max = max + delta;
  21318. }
  21319. return coreCalc(min, max, section);
  21320. }
  21321. function cross0(min, max, newMin, newMax) {
  21322. if (min >= 0 && newMin < 0) {
  21323. newMax -= newMin;
  21324. newMin = 0;
  21325. } else if (max <= 0 && newMax > 0) {
  21326. newMin -= newMax;
  21327. newMax = 0;
  21328. }
  21329. return [
  21330. newMin,
  21331. newMax
  21332. ];
  21333. }
  21334. function decimals(num) {
  21335. num = (+num).toFixed(15).split('.');
  21336. return num.pop().replace(/0+$/, '').length;
  21337. }
  21338. function singleLocked(min, max, emin, emax) {
  21339. if (minLocked) {
  21340. var expMin = expNum(min, 4, 1);
  21341. if (emin.e - expMin.e > 6) {
  21342. expMin = {
  21343. c: 0,
  21344. e: emin.e
  21345. };
  21346. }
  21347. expFixMin(emin, expMin);
  21348. expFixMin(emax, expMin);
  21349. emax.c += expMin.c - emin.c;
  21350. emin.c = expMin.c;
  21351. } else if (maxLocked) {
  21352. var expMax = expNum(max, 4);
  21353. if (emax.e - expMax.e > 6) {
  21354. expMax = {
  21355. c: 0,
  21356. e: emax.e
  21357. };
  21358. }
  21359. expFixMin(emin, expMax);
  21360. expFixMin(emax, expMax);
  21361. emin.c += expMax.c - emax.c;
  21362. emax.c = expMax.c;
  21363. }
  21364. }
  21365. function bothLocked(min, max, section) {
  21366. var trySecs = section ? [section] : custSecs;
  21367. var span = max - min;
  21368. if (span === 0) {
  21369. max = expNum(max, 3);
  21370. section = trySecs[0];
  21371. max.c = MATH_ROUND(max.c + section / 2);
  21372. return makeResult(max.c - section, max.c, section, max.e);
  21373. }
  21374. if (MATH_ABS(max / span) < 0.000001) {
  21375. max = 0;
  21376. }
  21377. if (MATH_ABS(min / span) < 0.000001) {
  21378. min = 0;
  21379. }
  21380. var step, deltaSpan, score;
  21381. var scoreS = [
  21382. [
  21383. 5,
  21384. 10
  21385. ],
  21386. [
  21387. 10,
  21388. 2
  21389. ],
  21390. [
  21391. 50,
  21392. 10
  21393. ],
  21394. [
  21395. 100,
  21396. 2
  21397. ]
  21398. ];
  21399. var reference = [];
  21400. var debugLog = [];
  21401. var expSpan = expNum(max - min, 3);
  21402. var expMin = expNum(min, -1, 1);
  21403. var expMax = expNum(max, -1);
  21404. expFixTo(expMin, expSpan, 1);
  21405. expFixTo(expMax, expSpan);
  21406. span = expMax.c - expMin.c;
  21407. expSpan.c = span;
  21408. for (var i = trySecs.length; i--;) {
  21409. section = trySecs[i];
  21410. step = MATH_CEIL(span / section);
  21411. deltaSpan = step * section - span;
  21412. score = (deltaSpan + 3) * 3;
  21413. score += (section - trySecs[0] + 2) * 2;
  21414. if (section % 5 === 0) {
  21415. score -= 10;
  21416. }
  21417. for (var j = scoreS.length; j--;) {
  21418. if (step % scoreS[j][0] === 0) {
  21419. score /= scoreS[j][1];
  21420. }
  21421. }
  21422. debugLog[i] = [
  21423. section,
  21424. step,
  21425. deltaSpan,
  21426. score
  21427. ].join();
  21428. reference[i] = {
  21429. secs: section,
  21430. step: step,
  21431. delta: deltaSpan,
  21432. score: score
  21433. };
  21434. }
  21435. reference.sort(function (a, b) {
  21436. return a.score - b.score;
  21437. });
  21438. reference = reference[0];
  21439. expMin.c = MATH_ROUND(expMin.c - reference.delta / 2);
  21440. expMax.c = MATH_ROUND(expMax.c + reference.delta / 2);
  21441. return makeResult(expMin.c, expMax.c, reference.secs, expSpan.e);
  21442. }
  21443. return smartSteps;
  21444. });define('echarts/util/smartLogSteps', [
  21445. 'require',
  21446. './number'
  21447. ], function (require) {
  21448. var number = require('./number');
  21449. var Mt = Math;
  21450. var mathLog = Mt.log;
  21451. var mathPow = Mt.pow;
  21452. var mathAbs = Mt.abs;
  21453. var mathCeil = Mt.ceil;
  21454. var mathFloor = Mt.floor;
  21455. var LOG_BASE = Mt.E;
  21456. var LN10 = Mt.LN10;
  21457. var LN2 = Mt.LN2;
  21458. var LN2D10 = LN2 / LN10;
  21459. var EPSILON = 1e-9;
  21460. var DEFAULT_SPLIT_NUMBER = 5;
  21461. var MIN_BASE_10_SPLIT_NUMBER = 2;
  21462. var SUPERSCRIPTS = {
  21463. '0': '⁰',
  21464. '1': '¹',
  21465. '2': '²',
  21466. '3': '³',
  21467. '4': '⁴',
  21468. '5': '⁵',
  21469. '6': '⁶',
  21470. '7': '⁷',
  21471. '8': '⁸',
  21472. '9': '⁹',
  21473. '-': '⁻'
  21474. };
  21475. var logPositive;
  21476. var logLabelBase;
  21477. var logLabelMode;
  21478. var lnBase;
  21479. var custOpts;
  21480. var splitNumber;
  21481. var logMappingOffset;
  21482. var absMin;
  21483. var absMax;
  21484. var tickList;
  21485. function smartLogSteps(opts) {
  21486. clearStaticVariables();
  21487. custOpts = opts || {};
  21488. reformSetting();
  21489. makeTicksList();
  21490. return [
  21491. makeResult(),
  21492. clearStaticVariables()
  21493. ][0];
  21494. }
  21495. function clearStaticVariables() {
  21496. logPositive = custOpts = logMappingOffset = lnBase = absMin = absMax = splitNumber = tickList = logLabelBase = logLabelMode = null;
  21497. }
  21498. function reformSetting() {
  21499. logLabelBase = custOpts.logLabelBase;
  21500. if (logLabelBase == null) {
  21501. logLabelMode = 'plain';
  21502. logLabelBase = 10;
  21503. lnBase = LN10;
  21504. } else {
  21505. logLabelBase = +logLabelBase;
  21506. if (logLabelBase < 1) {
  21507. logLabelBase = 10;
  21508. }
  21509. logLabelMode = 'exponent';
  21510. lnBase = mathLog(logLabelBase);
  21511. }
  21512. splitNumber = custOpts.splitNumber;
  21513. splitNumber == null && (splitNumber = DEFAULT_SPLIT_NUMBER);
  21514. var dataMin = parseFloat(custOpts.dataMin);
  21515. var dataMax = parseFloat(custOpts.dataMax);
  21516. if (!isFinite(dataMin) && !isFinite(dataMax)) {
  21517. dataMin = dataMax = 1;
  21518. } else if (!isFinite(dataMin)) {
  21519. dataMin = dataMax;
  21520. } else if (!isFinite(dataMax)) {
  21521. dataMax = dataMin;
  21522. } else if (dataMin > dataMax) {
  21523. dataMax = [
  21524. dataMin,
  21525. dataMin = dataMax
  21526. ][0];
  21527. }
  21528. logPositive = custOpts.logPositive;
  21529. if (logPositive == null) {
  21530. logPositive = dataMax > 0 || dataMin === 0;
  21531. }
  21532. absMin = logPositive ? dataMin : -dataMax;
  21533. absMax = logPositive ? dataMax : -dataMin;
  21534. absMin < EPSILON && (absMin = EPSILON);
  21535. absMax < EPSILON && (absMax = EPSILON);
  21536. }
  21537. function makeTicksList() {
  21538. tickList = [];
  21539. var maxDataLog = fixAccurate(mathLog(absMax) / lnBase);
  21540. var minDataLog = fixAccurate(mathLog(absMin) / lnBase);
  21541. var maxExpon = mathCeil(maxDataLog);
  21542. var minExpon = mathFloor(minDataLog);
  21543. var spanExpon = maxExpon - minExpon;
  21544. var spanDataLog = maxDataLog - minDataLog;
  21545. if (logLabelMode === 'exponent') {
  21546. baseAnalysis();
  21547. } else {
  21548. !(spanExpon <= MIN_BASE_10_SPLIT_NUMBER && splitNumber > MIN_BASE_10_SPLIT_NUMBER) ? baseAnalysis() : detailAnalysis();
  21549. }
  21550. function baseAnalysis() {
  21551. if (spanExpon < splitNumber) {
  21552. splitNumber = spanExpon;
  21553. }
  21554. var stepExpon = mathFloor(fixAccurate(spanExpon / splitNumber));
  21555. var splitNumberAdjust = mathCeil(fixAccurate(spanExpon / stepExpon));
  21556. var spanExponAdjust = stepExpon * splitNumberAdjust;
  21557. var halfDiff = (spanExponAdjust - spanDataLog) / 2;
  21558. var minExponAdjust = mathFloor(fixAccurate(minDataLog - halfDiff));
  21559. if (aroundZero(minExponAdjust - minDataLog)) {
  21560. minExponAdjust -= 1;
  21561. }
  21562. logMappingOffset = -minExponAdjust * lnBase;
  21563. for (var n = minExponAdjust; n - stepExpon <= maxDataLog; n += stepExpon) {
  21564. tickList.push(mathPow(logLabelBase, n));
  21565. }
  21566. }
  21567. function detailAnalysis() {
  21568. var minDecimal = toDecimalFrom4Hex(minExpon, 0);
  21569. var endDecimal = minDecimal + 2;
  21570. while (minDecimal < endDecimal && toH(minDecimal + 1) + toK(minDecimal + 1) * LN2D10 < minDataLog) {
  21571. minDecimal++;
  21572. }
  21573. var maxDecimal = toDecimalFrom4Hex(maxExpon, 0);
  21574. var endDecimal = maxDecimal - 2;
  21575. while (maxDecimal > endDecimal && toH(maxDecimal - 1) + toK(maxDecimal - 1) * LN2D10 > maxDataLog) {
  21576. maxDecimal--;
  21577. }
  21578. logMappingOffset = -(toH(minDecimal) * LN10 + toK(minDecimal) * LN2);
  21579. for (var i = minDecimal; i <= maxDecimal; i++) {
  21580. var h = toH(i);
  21581. var k = toK(i);
  21582. tickList.push(mathPow(10, h) * mathPow(2, k));
  21583. }
  21584. }
  21585. function toDecimalFrom4Hex(h, k) {
  21586. return h * 3 + k;
  21587. }
  21588. function toK(decimal) {
  21589. return decimal - toH(decimal) * 3;
  21590. }
  21591. function toH(decimal) {
  21592. return mathFloor(fixAccurate(decimal / 3));
  21593. }
  21594. }
  21595. function makeResult() {
  21596. var resultTickList = [];
  21597. for (var i = 0, len = tickList.length; i < len; i++) {
  21598. resultTickList[i] = (logPositive ? 1 : -1) * tickList[i];
  21599. }
  21600. !logPositive && resultTickList.reverse();
  21601. var dataMappingMethods = makeDataMappingMethods();
  21602. var value2Coord = dataMappingMethods.value2Coord;
  21603. var newDataMin = value2Coord(resultTickList[0]);
  21604. var newDataMax = value2Coord(resultTickList[resultTickList.length - 1]);
  21605. if (newDataMin === newDataMax) {
  21606. newDataMin -= 1;
  21607. newDataMax += 1;
  21608. }
  21609. return {
  21610. dataMin: newDataMin,
  21611. dataMax: newDataMax,
  21612. tickList: resultTickList,
  21613. logPositive: logPositive,
  21614. labelFormatter: makeLabelFormatter(),
  21615. dataMappingMethods: dataMappingMethods
  21616. };
  21617. }
  21618. function makeLabelFormatter() {
  21619. if (logLabelMode === 'exponent') {
  21620. var myLogLabelBase = logLabelBase;
  21621. var myLnBase = lnBase;
  21622. return function (value) {
  21623. if (!isFinite(parseFloat(value))) {
  21624. return '';
  21625. }
  21626. var sign = '';
  21627. if (value < 0) {
  21628. value = -value;
  21629. sign = '-';
  21630. }
  21631. return sign + myLogLabelBase + makeSuperscriptExponent(mathLog(value) / myLnBase);
  21632. };
  21633. } else {
  21634. return function (value) {
  21635. if (!isFinite(parseFloat(value))) {
  21636. return '';
  21637. }
  21638. return number.addCommas(formatNumber(value));
  21639. };
  21640. }
  21641. }
  21642. function makeDataMappingMethods() {
  21643. var myLogPositive = logPositive;
  21644. var myLogMappingOffset = logMappingOffset;
  21645. return {
  21646. value2Coord: function (x) {
  21647. if (x == null || isNaN(x) || !isFinite(x)) {
  21648. return x;
  21649. }
  21650. x = parseFloat(x);
  21651. if (!isFinite(x)) {
  21652. x = EPSILON;
  21653. } else if (myLogPositive && x < EPSILON) {
  21654. x = EPSILON;
  21655. } else if (!myLogPositive && x > -EPSILON) {
  21656. x = -EPSILON;
  21657. }
  21658. x = mathAbs(x);
  21659. return (myLogPositive ? 1 : -1) * (mathLog(x) + myLogMappingOffset);
  21660. },
  21661. coord2Value: function (x) {
  21662. if (x == null || isNaN(x) || !isFinite(x)) {
  21663. return x;
  21664. }
  21665. x = parseFloat(x);
  21666. if (!isFinite(x)) {
  21667. x = EPSILON;
  21668. }
  21669. return myLogPositive ? mathPow(LOG_BASE, x - myLogMappingOffset) : -mathPow(LOG_BASE, -x + myLogMappingOffset);
  21670. }
  21671. };
  21672. }
  21673. function fixAccurate(result) {
  21674. return +Number(+result).toFixed(14);
  21675. }
  21676. function formatNumber(num) {
  21677. return Number(num).toFixed(15).replace(/\.?0*$/, '');
  21678. }
  21679. function makeSuperscriptExponent(exponent) {
  21680. exponent = formatNumber(Math.round(exponent));
  21681. var result = [];
  21682. for (var i = 0, len = exponent.length; i < len; i++) {
  21683. var cha = exponent.charAt(i);
  21684. result.push(SUPERSCRIPTS[cha] || '');
  21685. }
  21686. return result.join('');
  21687. }
  21688. function aroundZero(val) {
  21689. return val > -EPSILON && val < EPSILON;
  21690. }
  21691. return smartLogSteps;
  21692. });define('echarts/chart/line', [
  21693. 'require',
  21694. './base',
  21695. 'zrender/shape/Polyline',
  21696. '../util/shape/Icon',
  21697. '../util/shape/HalfSmoothPolygon',
  21698. '../component/axis',
  21699. '../component/grid',
  21700. '../component/dataZoom',
  21701. '../config',
  21702. '../util/ecData',
  21703. 'zrender/tool/util',
  21704. 'zrender/tool/color',
  21705. '../chart'
  21706. ], function (require) {
  21707. var ChartBase = require('./base');
  21708. var PolylineShape = require('zrender/shape/Polyline');
  21709. var IconShape = require('../util/shape/Icon');
  21710. var HalfSmoothPolygonShape = require('../util/shape/HalfSmoothPolygon');
  21711. require('../component/axis');
  21712. require('../component/grid');
  21713. require('../component/dataZoom');
  21714. var ecConfig = require('../config');
  21715. ecConfig.line = {
  21716. zlevel: 0,
  21717. z: 2,
  21718. clickable: true,
  21719. legendHoverLink: true,
  21720. xAxisIndex: 0,
  21721. yAxisIndex: 0,
  21722. dataFilter: 'nearest',
  21723. itemStyle: {
  21724. normal: {
  21725. label: { show: false },
  21726. lineStyle: {
  21727. width: 2,
  21728. type: 'solid',
  21729. shadowColor: 'rgba(0,0,0,0)',
  21730. shadowBlur: 0,
  21731. shadowOffsetX: 0,
  21732. shadowOffsetY: 0
  21733. }
  21734. },
  21735. emphasis: { label: { show: false } }
  21736. },
  21737. symbolSize: 2,
  21738. showAllSymbol: false
  21739. };
  21740. var ecData = require('../util/ecData');
  21741. var zrUtil = require('zrender/tool/util');
  21742. var zrColor = require('zrender/tool/color');
  21743. function Line(ecTheme, messageCenter, zr, option, myChart) {
  21744. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  21745. this.refresh(option);
  21746. }
  21747. Line.prototype = {
  21748. type: ecConfig.CHART_TYPE_LINE,
  21749. _buildShape: function () {
  21750. this.finalPLMap = {};
  21751. this._buildPosition();
  21752. },
  21753. _buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  21754. var series = this.series;
  21755. var seriesIndex = locationMap[0][0];
  21756. var serie = series[seriesIndex];
  21757. var categoryAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
  21758. var valueAxis;
  21759. var x;
  21760. var y;
  21761. var lastYP;
  21762. var baseYP;
  21763. var lastYN;
  21764. var baseYN;
  21765. var curPLMap = {};
  21766. var data;
  21767. var value;
  21768. for (var i = 0, l = maxDataLength; i < l; i++) {
  21769. if (categoryAxis.getNameByIndex(i) == null) {
  21770. break;
  21771. }
  21772. x = categoryAxis.getCoordByIndex(i);
  21773. for (var j = 0, k = locationMap.length; j < k; j++) {
  21774. valueAxis = this.component.yAxis.getAxis(series[locationMap[j][0]].yAxisIndex || 0);
  21775. baseYP = lastYP = baseYN = lastYN = valueAxis.getCoord(0);
  21776. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21777. seriesIndex = locationMap[j][m];
  21778. serie = series[seriesIndex];
  21779. data = serie.data[i];
  21780. value = this.getDataFromOption(data, '-');
  21781. curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
  21782. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  21783. min: Number.POSITIVE_INFINITY,
  21784. max: Number.NEGATIVE_INFINITY,
  21785. sum: 0,
  21786. counter: 0,
  21787. average: 0
  21788. };
  21789. if (value === '-') {
  21790. if (curPLMap[seriesIndex].length > 0) {
  21791. this.finalPLMap[seriesIndex] = this.finalPLMap[seriesIndex] || [];
  21792. this.finalPLMap[seriesIndex].push(curPLMap[seriesIndex]);
  21793. curPLMap[seriesIndex] = [];
  21794. }
  21795. continue;
  21796. }
  21797. if (value >= 0) {
  21798. lastYP -= m > 0 ? valueAxis.getCoordSize(value) : baseYP - valueAxis.getCoord(value);
  21799. y = lastYP;
  21800. } else if (value < 0) {
  21801. lastYN += m > 0 ? valueAxis.getCoordSize(value) : valueAxis.getCoord(value) - baseYN;
  21802. y = lastYN;
  21803. }
  21804. curPLMap[seriesIndex].push([
  21805. x,
  21806. y,
  21807. i,
  21808. categoryAxis.getNameByIndex(i),
  21809. x,
  21810. baseYP
  21811. ]);
  21812. if (xMarkMap[seriesIndex].min > value) {
  21813. xMarkMap[seriesIndex].min = value;
  21814. xMarkMap[seriesIndex].minY = y;
  21815. xMarkMap[seriesIndex].minX = x;
  21816. }
  21817. if (xMarkMap[seriesIndex].max < value) {
  21818. xMarkMap[seriesIndex].max = value;
  21819. xMarkMap[seriesIndex].maxY = y;
  21820. xMarkMap[seriesIndex].maxX = x;
  21821. }
  21822. xMarkMap[seriesIndex].sum += value;
  21823. xMarkMap[seriesIndex].counter++;
  21824. }
  21825. }
  21826. lastYP = this.component.grid.getY();
  21827. var symbolSize;
  21828. for (var j = 0, k = locationMap.length; j < k; j++) {
  21829. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21830. seriesIndex = locationMap[j][m];
  21831. serie = series[seriesIndex];
  21832. data = serie.data[i];
  21833. value = this.getDataFromOption(data, '-');
  21834. if (value != '-') {
  21835. continue;
  21836. }
  21837. if (this.deepQuery([
  21838. data,
  21839. serie,
  21840. this.option
  21841. ], 'calculable')) {
  21842. symbolSize = this.deepQuery([
  21843. data,
  21844. serie
  21845. ], 'symbolSize');
  21846. lastYP += symbolSize * 2 + 5;
  21847. y = lastYP;
  21848. this.shapeList.push(this._getCalculableItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y, 'horizontal'));
  21849. }
  21850. }
  21851. }
  21852. }
  21853. for (var sId in curPLMap) {
  21854. if (curPLMap[sId].length > 0) {
  21855. this.finalPLMap[sId] = this.finalPLMap[sId] || [];
  21856. this.finalPLMap[sId].push(curPLMap[sId]);
  21857. curPLMap[sId] = [];
  21858. }
  21859. }
  21860. this._calculMarkMapXY(xMarkMap, locationMap, 'y');
  21861. this._buildBorkenLine(seriesArray, this.finalPLMap, categoryAxis, 'horizontal');
  21862. },
  21863. _buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  21864. var series = this.series;
  21865. var seriesIndex = locationMap[0][0];
  21866. var serie = series[seriesIndex];
  21867. var categoryAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
  21868. var valueAxis;
  21869. var x;
  21870. var y;
  21871. var lastXP;
  21872. var baseXP;
  21873. var lastXN;
  21874. var baseXN;
  21875. var curPLMap = {};
  21876. var data;
  21877. var value;
  21878. for (var i = 0, l = maxDataLength; i < l; i++) {
  21879. if (categoryAxis.getNameByIndex(i) == null) {
  21880. break;
  21881. }
  21882. y = categoryAxis.getCoordByIndex(i);
  21883. for (var j = 0, k = locationMap.length; j < k; j++) {
  21884. valueAxis = this.component.xAxis.getAxis(series[locationMap[j][0]].xAxisIndex || 0);
  21885. baseXP = lastXP = baseXN = lastXN = valueAxis.getCoord(0);
  21886. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21887. seriesIndex = locationMap[j][m];
  21888. serie = series[seriesIndex];
  21889. data = serie.data[i];
  21890. value = this.getDataFromOption(data, '-');
  21891. curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
  21892. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  21893. min: Number.POSITIVE_INFINITY,
  21894. max: Number.NEGATIVE_INFINITY,
  21895. sum: 0,
  21896. counter: 0,
  21897. average: 0
  21898. };
  21899. if (value === '-') {
  21900. if (curPLMap[seriesIndex].length > 0) {
  21901. this.finalPLMap[seriesIndex] = this.finalPLMap[seriesIndex] || [];
  21902. this.finalPLMap[seriesIndex].push(curPLMap[seriesIndex]);
  21903. curPLMap[seriesIndex] = [];
  21904. }
  21905. continue;
  21906. }
  21907. if (value >= 0) {
  21908. lastXP += m > 0 ? valueAxis.getCoordSize(value) : valueAxis.getCoord(value) - baseXP;
  21909. x = lastXP;
  21910. } else if (value < 0) {
  21911. lastXN -= m > 0 ? valueAxis.getCoordSize(value) : baseXN - valueAxis.getCoord(value);
  21912. x = lastXN;
  21913. }
  21914. curPLMap[seriesIndex].push([
  21915. x,
  21916. y,
  21917. i,
  21918. categoryAxis.getNameByIndex(i),
  21919. baseXP,
  21920. y
  21921. ]);
  21922. if (xMarkMap[seriesIndex].min > value) {
  21923. xMarkMap[seriesIndex].min = value;
  21924. xMarkMap[seriesIndex].minX = x;
  21925. xMarkMap[seriesIndex].minY = y;
  21926. }
  21927. if (xMarkMap[seriesIndex].max < value) {
  21928. xMarkMap[seriesIndex].max = value;
  21929. xMarkMap[seriesIndex].maxX = x;
  21930. xMarkMap[seriesIndex].maxY = y;
  21931. }
  21932. xMarkMap[seriesIndex].sum += value;
  21933. xMarkMap[seriesIndex].counter++;
  21934. }
  21935. }
  21936. lastXP = this.component.grid.getXend();
  21937. var symbolSize;
  21938. for (var j = 0, k = locationMap.length; j < k; j++) {
  21939. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21940. seriesIndex = locationMap[j][m];
  21941. serie = series[seriesIndex];
  21942. data = serie.data[i];
  21943. value = this.getDataFromOption(data, '-');
  21944. if (value != '-') {
  21945. continue;
  21946. }
  21947. if (this.deepQuery([
  21948. data,
  21949. serie,
  21950. this.option
  21951. ], 'calculable')) {
  21952. symbolSize = this.deepQuery([
  21953. data,
  21954. serie
  21955. ], 'symbolSize');
  21956. lastXP -= symbolSize * 2 + 5;
  21957. x = lastXP;
  21958. this.shapeList.push(this._getCalculableItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y, 'vertical'));
  21959. }
  21960. }
  21961. }
  21962. }
  21963. for (var sId in curPLMap) {
  21964. if (curPLMap[sId].length > 0) {
  21965. this.finalPLMap[sId] = this.finalPLMap[sId] || [];
  21966. this.finalPLMap[sId].push(curPLMap[sId]);
  21967. curPLMap[sId] = [];
  21968. }
  21969. }
  21970. this._calculMarkMapXY(xMarkMap, locationMap, 'x');
  21971. this._buildBorkenLine(seriesArray, this.finalPLMap, categoryAxis, 'vertical');
  21972. },
  21973. _buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  21974. var series = this.series;
  21975. var curPLMap = {};
  21976. var xAxis;
  21977. for (var j = 0, k = locationMap.length; j < k; j++) {
  21978. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  21979. var seriesIndex = locationMap[j][m];
  21980. var serie = series[seriesIndex];
  21981. xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
  21982. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
  21983. var baseY = yAxis.getCoord(0);
  21984. curPLMap[seriesIndex] = curPLMap[seriesIndex] || [];
  21985. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  21986. min0: Number.POSITIVE_INFINITY,
  21987. min1: Number.POSITIVE_INFINITY,
  21988. max0: Number.NEGATIVE_INFINITY,
  21989. max1: Number.NEGATIVE_INFINITY,
  21990. sum0: 0,
  21991. sum1: 0,
  21992. counter0: 0,
  21993. counter1: 0,
  21994. average0: 0,
  21995. average1: 0
  21996. };
  21997. for (var i = 0, l = serie.data.length; i < l; i++) {
  21998. var data = serie.data[i];
  21999. var value = this.getDataFromOption(data, '-');
  22000. if (!(value instanceof Array)) {
  22001. continue;
  22002. }
  22003. var x = xAxis.getCoord(value[0]);
  22004. var y = yAxis.getCoord(value[1]);
  22005. curPLMap[seriesIndex].push([
  22006. x,
  22007. y,
  22008. i,
  22009. value[0],
  22010. x,
  22011. baseY
  22012. ]);
  22013. if (xMarkMap[seriesIndex].min0 > value[0]) {
  22014. xMarkMap[seriesIndex].min0 = value[0];
  22015. xMarkMap[seriesIndex].minY0 = y;
  22016. xMarkMap[seriesIndex].minX0 = x;
  22017. }
  22018. if (xMarkMap[seriesIndex].max0 < value[0]) {
  22019. xMarkMap[seriesIndex].max0 = value[0];
  22020. xMarkMap[seriesIndex].maxY0 = y;
  22021. xMarkMap[seriesIndex].maxX0 = x;
  22022. }
  22023. xMarkMap[seriesIndex].sum0 += value[0];
  22024. xMarkMap[seriesIndex].counter0++;
  22025. if (xMarkMap[seriesIndex].min1 > value[1]) {
  22026. xMarkMap[seriesIndex].min1 = value[1];
  22027. xMarkMap[seriesIndex].minY1 = y;
  22028. xMarkMap[seriesIndex].minX1 = x;
  22029. }
  22030. if (xMarkMap[seriesIndex].max1 < value[1]) {
  22031. xMarkMap[seriesIndex].max1 = value[1];
  22032. xMarkMap[seriesIndex].maxY1 = y;
  22033. xMarkMap[seriesIndex].maxX1 = x;
  22034. }
  22035. xMarkMap[seriesIndex].sum1 += value[1];
  22036. xMarkMap[seriesIndex].counter1++;
  22037. }
  22038. }
  22039. }
  22040. for (var sId in curPLMap) {
  22041. if (curPLMap[sId].length > 0) {
  22042. this.finalPLMap[sId] = this.finalPLMap[sId] || [];
  22043. this.finalPLMap[sId].push(curPLMap[sId]);
  22044. curPLMap[sId] = [];
  22045. }
  22046. }
  22047. this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
  22048. this._buildBorkenLine(seriesArray, this.finalPLMap, xAxis, 'other');
  22049. },
  22050. _buildBorkenLine: function (seriesArray, pointList, categoryAxis, curOrient) {
  22051. var orient = curOrient == 'other' ? 'horizontal' : curOrient;
  22052. var series = this.series;
  22053. var data;
  22054. for (var sIdx = seriesArray.length - 1; sIdx >= 0; sIdx--) {
  22055. var seriesIndex = seriesArray[sIdx];
  22056. var serie = series[seriesIndex];
  22057. var seriesPL = pointList[seriesIndex];
  22058. if (serie.type === this.type && seriesPL != null) {
  22059. var bbox = this._getBbox(seriesIndex, orient);
  22060. var defaultColor = this._sIndex2ColorMap[seriesIndex];
  22061. var lineWidth = this.query(serie, 'itemStyle.normal.lineStyle.width');
  22062. var lineType = this.query(serie, 'itemStyle.normal.lineStyle.type');
  22063. var lineColor = this.query(serie, 'itemStyle.normal.lineStyle.color');
  22064. var normalColor = this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1);
  22065. var isFill = this.query(serie, 'itemStyle.normal.areaStyle') != null;
  22066. var fillNormalColor = this.query(serie, 'itemStyle.normal.areaStyle.color');
  22067. for (var i = 0, l = seriesPL.length; i < l; i++) {
  22068. var singlePL = seriesPL[i];
  22069. var isLarge = curOrient != 'other' && this._isLarge(orient, singlePL);
  22070. if (!isLarge) {
  22071. for (var j = 0, k = singlePL.length; j < k; j++) {
  22072. data = serie.data[singlePL[j][2]];
  22073. if (this.deepQuery([
  22074. data,
  22075. serie,
  22076. this.option
  22077. ], 'calculable') || this.deepQuery([
  22078. data,
  22079. serie
  22080. ], 'showAllSymbol') || categoryAxis.type === 'categoryAxis' && categoryAxis.isMainAxis(singlePL[j][2]) && this.deepQuery([
  22081. data,
  22082. serie
  22083. ], 'symbol') != 'none') {
  22084. this.shapeList.push(this._getSymbol(seriesIndex, singlePL[j][2], singlePL[j][3], singlePL[j][0], singlePL[j][1], orient));
  22085. }
  22086. }
  22087. } else {
  22088. singlePL = this._getLargePointList(orient, singlePL, serie.dataFilter);
  22089. }
  22090. var polylineShape = new PolylineShape({
  22091. zlevel: serie.zlevel,
  22092. z: serie.z,
  22093. style: {
  22094. miterLimit: lineWidth,
  22095. pointList: singlePL,
  22096. strokeColor: lineColor || normalColor || defaultColor,
  22097. lineWidth: lineWidth,
  22098. lineType: lineType,
  22099. smooth: this._getSmooth(serie.smooth),
  22100. smoothConstraint: bbox,
  22101. shadowColor: this.query(serie, 'itemStyle.normal.lineStyle.shadowColor'),
  22102. shadowBlur: this.query(serie, 'itemStyle.normal.lineStyle.shadowBlur'),
  22103. shadowOffsetX: this.query(serie, 'itemStyle.normal.lineStyle.shadowOffsetX'),
  22104. shadowOffsetY: this.query(serie, 'itemStyle.normal.lineStyle.shadowOffsetY')
  22105. },
  22106. hoverable: false,
  22107. _main: true,
  22108. _seriesIndex: seriesIndex,
  22109. _orient: orient
  22110. });
  22111. ecData.pack(polylineShape, series[seriesIndex], seriesIndex, 0, i, series[seriesIndex].name);
  22112. this.shapeList.push(polylineShape);
  22113. if (isFill) {
  22114. var halfSmoothPolygonShape = new HalfSmoothPolygonShape({
  22115. zlevel: serie.zlevel,
  22116. z: serie.z,
  22117. style: {
  22118. miterLimit: lineWidth,
  22119. pointList: zrUtil.clone(singlePL).concat([
  22120. [
  22121. singlePL[singlePL.length - 1][4],
  22122. singlePL[singlePL.length - 1][5]
  22123. ],
  22124. [
  22125. singlePL[0][4],
  22126. singlePL[0][5]
  22127. ]
  22128. ]),
  22129. brushType: 'fill',
  22130. smooth: this._getSmooth(serie.smooth),
  22131. smoothConstraint: bbox,
  22132. color: fillNormalColor ? fillNormalColor : zrColor.alpha(defaultColor, 0.5)
  22133. },
  22134. highlightStyle: { brushType: 'fill' },
  22135. hoverable: false,
  22136. _main: true,
  22137. _seriesIndex: seriesIndex,
  22138. _orient: orient
  22139. });
  22140. ecData.pack(halfSmoothPolygonShape, series[seriesIndex], seriesIndex, 0, i, series[seriesIndex].name);
  22141. this.shapeList.push(halfSmoothPolygonShape);
  22142. }
  22143. }
  22144. }
  22145. }
  22146. },
  22147. _getBbox: function (seriesIndex, orient) {
  22148. var bbox = this.component.grid.getBbox();
  22149. var xMarkMap = this.xMarkMap[seriesIndex];
  22150. if (xMarkMap.minX0 != null) {
  22151. return [
  22152. [
  22153. Math.min(xMarkMap.minX0, xMarkMap.maxX0, xMarkMap.minX1, xMarkMap.maxX1),
  22154. Math.min(xMarkMap.minY0, xMarkMap.maxY0, xMarkMap.minY1, xMarkMap.maxY1)
  22155. ],
  22156. [
  22157. Math.max(xMarkMap.minX0, xMarkMap.maxX0, xMarkMap.minX1, xMarkMap.maxX1),
  22158. Math.max(xMarkMap.minY0, xMarkMap.maxY0, xMarkMap.minY1, xMarkMap.maxY1)
  22159. ]
  22160. ];
  22161. } else if (orient === 'horizontal') {
  22162. bbox[0][1] = Math.min(xMarkMap.minY, xMarkMap.maxY);
  22163. bbox[1][1] = Math.max(xMarkMap.minY, xMarkMap.maxY);
  22164. } else {
  22165. bbox[0][0] = Math.min(xMarkMap.minX, xMarkMap.maxX);
  22166. bbox[1][0] = Math.max(xMarkMap.minX, xMarkMap.maxX);
  22167. }
  22168. return bbox;
  22169. },
  22170. _isLarge: function (orient, singlePL) {
  22171. if (singlePL.length < 2) {
  22172. return false;
  22173. } else {
  22174. return orient === 'horizontal' ? Math.abs(singlePL[0][0] - singlePL[1][0]) < 0.5 : Math.abs(singlePL[0][1] - singlePL[1][1]) < 0.5;
  22175. }
  22176. },
  22177. _getLargePointList: function (orient, singlePL, filter) {
  22178. var total;
  22179. if (orient === 'horizontal') {
  22180. total = this.component.grid.getWidth();
  22181. } else {
  22182. total = this.component.grid.getHeight();
  22183. }
  22184. var len = singlePL.length;
  22185. var newList = [];
  22186. if (typeof filter != 'function') {
  22187. switch (filter) {
  22188. case 'min':
  22189. filter = function (arr) {
  22190. return Math.max.apply(null, arr);
  22191. };
  22192. break;
  22193. case 'max':
  22194. filter = function (arr) {
  22195. return Math.min.apply(null, arr);
  22196. };
  22197. break;
  22198. case 'average':
  22199. filter = function (arr) {
  22200. var total = 0;
  22201. for (var i = 0; i < arr.length; i++) {
  22202. total += arr[i];
  22203. }
  22204. return total / arr.length;
  22205. };
  22206. break;
  22207. default:
  22208. filter = function (arr) {
  22209. return arr[0];
  22210. };
  22211. }
  22212. }
  22213. var windowData = [];
  22214. for (var i = 0; i < total; i++) {
  22215. var idx0 = Math.floor(len / total * i);
  22216. var idx1 = Math.min(Math.floor(len / total * (i + 1)), len);
  22217. if (idx1 <= idx0) {
  22218. continue;
  22219. }
  22220. for (var j = idx0; j < idx1; j++) {
  22221. windowData[j - idx0] = orient === 'horizontal' ? singlePL[j][1] : singlePL[j][0];
  22222. }
  22223. windowData.length = idx1 - idx0;
  22224. var filteredVal = filter(windowData);
  22225. var nearestIdx = -1;
  22226. var minDist = Infinity;
  22227. for (var j = idx0; j < idx1; j++) {
  22228. var val = orient === 'horizontal' ? singlePL[j][1] : singlePL[j][0];
  22229. var dist = Math.abs(val - filteredVal);
  22230. if (dist < minDist) {
  22231. nearestIdx = j;
  22232. minDist = dist;
  22233. }
  22234. }
  22235. var newItem = singlePL[nearestIdx].slice();
  22236. if (orient === 'horizontal') {
  22237. newItem[1] = filteredVal;
  22238. } else {
  22239. newItem[0] = filteredVal;
  22240. }
  22241. newList.push(newItem);
  22242. }
  22243. return newList;
  22244. },
  22245. _getSmooth: function (isSmooth) {
  22246. if (isSmooth) {
  22247. return 0.3;
  22248. } else {
  22249. return 0;
  22250. }
  22251. },
  22252. _getCalculableItem: function (seriesIndex, dataIndex, name, x, y, orient) {
  22253. var series = this.series;
  22254. var color = series[seriesIndex].calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor;
  22255. var itemShape = this._getSymbol(seriesIndex, dataIndex, name, x, y, orient);
  22256. itemShape.style.color = color;
  22257. itemShape.style.strokeColor = color;
  22258. itemShape.rotation = [
  22259. 0,
  22260. 0
  22261. ];
  22262. itemShape.hoverable = false;
  22263. itemShape.draggable = false;
  22264. itemShape.style.text = undefined;
  22265. return itemShape;
  22266. },
  22267. _getSymbol: function (seriesIndex, dataIndex, name, x, y, orient) {
  22268. var series = this.series;
  22269. var serie = series[seriesIndex];
  22270. var data = serie.data[dataIndex];
  22271. var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], this._sIndex2ColorMap[seriesIndex], '#fff', orient === 'vertical' ? 'horizontal' : 'vertical');
  22272. itemShape.zlevel = serie.zlevel;
  22273. itemShape.z = serie.z + 1;
  22274. if (this.deepQuery([
  22275. data,
  22276. serie,
  22277. this.option
  22278. ], 'calculable')) {
  22279. this.setCalculable(itemShape);
  22280. itemShape.draggable = true;
  22281. }
  22282. return itemShape;
  22283. },
  22284. getMarkCoord: function (seriesIndex, mpData) {
  22285. var serie = this.series[seriesIndex];
  22286. var xMarkMap = this.xMarkMap[seriesIndex];
  22287. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  22288. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  22289. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
  22290. var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : xMarkMap.maxX0 != null ? '1' : '';
  22291. return [
  22292. xMarkMap[mpData.type + 'X' + valueIndex],
  22293. xMarkMap[mpData.type + 'Y' + valueIndex],
  22294. xMarkMap[mpData.type + 'Line' + valueIndex],
  22295. xMarkMap[mpData.type + valueIndex]
  22296. ];
  22297. }
  22298. return [
  22299. typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
  22300. typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
  22301. ];
  22302. },
  22303. refresh: function (newOption) {
  22304. if (newOption) {
  22305. this.option = newOption;
  22306. this.series = newOption.series;
  22307. }
  22308. this.backupShapeList();
  22309. this._buildShape();
  22310. },
  22311. ontooltipHover: function (param, tipShape) {
  22312. var seriesIndex = param.seriesIndex;
  22313. var dataIndex = param.dataIndex;
  22314. var seriesPL;
  22315. var singlePL;
  22316. var len = seriesIndex.length;
  22317. while (len--) {
  22318. seriesPL = this.finalPLMap[seriesIndex[len]];
  22319. if (seriesPL) {
  22320. for (var i = 0, l = seriesPL.length; i < l; i++) {
  22321. singlePL = seriesPL[i];
  22322. for (var j = 0, k = singlePL.length; j < k; j++) {
  22323. if (dataIndex === singlePL[j][2]) {
  22324. tipShape.push(this._getSymbol(seriesIndex[len], singlePL[j][2], singlePL[j][3], singlePL[j][0], singlePL[j][1], 'horizontal'));
  22325. }
  22326. }
  22327. }
  22328. }
  22329. }
  22330. },
  22331. addDataAnimation: function (params, done) {
  22332. var series = this.series;
  22333. var aniMap = {};
  22334. for (var i = 0, l = params.length; i < l; i++) {
  22335. aniMap[params[i][0]] = params[i];
  22336. }
  22337. var x;
  22338. var dx;
  22339. var y;
  22340. var dy;
  22341. var seriesIndex;
  22342. var pointList;
  22343. var isHorizontal;
  22344. var aniCount = 0;
  22345. function animationDone() {
  22346. aniCount--;
  22347. if (aniCount === 0) {
  22348. done && done();
  22349. }
  22350. }
  22351. function animationDuring(target) {
  22352. target.style.controlPointList = null;
  22353. }
  22354. for (var i = this.shapeList.length - 1; i >= 0; i--) {
  22355. seriesIndex = this.shapeList[i]._seriesIndex;
  22356. if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
  22357. if (this.shapeList[i]._main && this.shapeList[i].style.pointList.length > 1) {
  22358. pointList = this.shapeList[i].style.pointList;
  22359. dx = Math.abs(pointList[0][0] - pointList[1][0]);
  22360. dy = Math.abs(pointList[0][1] - pointList[1][1]);
  22361. isHorizontal = this.shapeList[i]._orient === 'horizontal';
  22362. if (aniMap[seriesIndex][2]) {
  22363. if (this.shapeList[i].type === 'half-smooth-polygon') {
  22364. var len = pointList.length;
  22365. this.shapeList[i].style.pointList[len - 3] = pointList[len - 2];
  22366. this.shapeList[i].style.pointList[len - 3][isHorizontal ? 0 : 1] = pointList[len - 4][isHorizontal ? 0 : 1];
  22367. this.shapeList[i].style.pointList[len - 2] = pointList[len - 1];
  22368. }
  22369. this.shapeList[i].style.pointList.pop();
  22370. isHorizontal ? (x = dx, y = 0) : (x = 0, y = -dy);
  22371. } else {
  22372. this.shapeList[i].style.pointList.shift();
  22373. if (this.shapeList[i].type === 'half-smooth-polygon') {
  22374. var targetPoint = this.shapeList[i].style.pointList.pop();
  22375. isHorizontal ? targetPoint[0] = pointList[0][0] : targetPoint[1] = pointList[0][1];
  22376. this.shapeList[i].style.pointList.push(targetPoint);
  22377. }
  22378. isHorizontal ? (x = -dx, y = 0) : (x = 0, y = dy);
  22379. }
  22380. this.shapeList[i].style.controlPointList = null;
  22381. this.zr.modShape(this.shapeList[i]);
  22382. } else {
  22383. if (aniMap[seriesIndex][2] && this.shapeList[i]._dataIndex === series[seriesIndex].data.length - 1) {
  22384. this.zr.delShape(this.shapeList[i].id);
  22385. continue;
  22386. } else if (!aniMap[seriesIndex][2] && this.shapeList[i]._dataIndex === 0) {
  22387. this.zr.delShape(this.shapeList[i].id);
  22388. continue;
  22389. }
  22390. }
  22391. this.shapeList[i].position = [
  22392. 0,
  22393. 0
  22394. ];
  22395. aniCount++;
  22396. this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
  22397. position: [
  22398. x,
  22399. y
  22400. ]
  22401. }).during(animationDuring).done(animationDone).start();
  22402. }
  22403. }
  22404. if (!aniCount) {
  22405. done && done();
  22406. }
  22407. }
  22408. };
  22409. function legendLineIcon(ctx, style, refreshNextFrame) {
  22410. var x = style.x;
  22411. var y = style.y;
  22412. var width = style.width;
  22413. var height = style.height;
  22414. var dy = height / 2;
  22415. if (style.symbol.match('empty')) {
  22416. ctx.fillStyle = '#fff';
  22417. }
  22418. style.brushType = 'both';
  22419. var symbol = style.symbol.replace('empty', '').toLowerCase();
  22420. if (symbol.match('star')) {
  22421. dy = symbol.replace('star', '') - 0 || 5;
  22422. y -= 1;
  22423. symbol = 'star';
  22424. } else if (symbol === 'rectangle' || symbol === 'arrow') {
  22425. x += (width - height) / 2;
  22426. width = height;
  22427. }
  22428. var imageLocation = '';
  22429. if (symbol.match('image')) {
  22430. imageLocation = symbol.replace(new RegExp('^image:\\/\\/'), '');
  22431. symbol = 'image';
  22432. x += Math.round((width - height) / 2) - 1;
  22433. width = height = height + 2;
  22434. }
  22435. symbol = IconShape.prototype.iconLibrary[symbol];
  22436. if (symbol) {
  22437. var x2 = style.x;
  22438. var y2 = style.y;
  22439. ctx.moveTo(x2, y2 + dy);
  22440. ctx.lineTo(x2 + 5, y2 + dy);
  22441. ctx.moveTo(x2 + style.width - 5, y2 + dy);
  22442. ctx.lineTo(x2 + style.width, y2 + dy);
  22443. var self = this;
  22444. symbol(ctx, {
  22445. x: x + 4,
  22446. y: y + 4,
  22447. width: width - 8,
  22448. height: height - 8,
  22449. n: dy,
  22450. image: imageLocation
  22451. }, function () {
  22452. self.modSelf();
  22453. refreshNextFrame();
  22454. });
  22455. } else {
  22456. ctx.moveTo(x, y + dy);
  22457. ctx.lineTo(x + width, y + dy);
  22458. }
  22459. }
  22460. IconShape.prototype.iconLibrary['legendLineIcon'] = legendLineIcon;
  22461. zrUtil.inherits(Line, ChartBase);
  22462. require('../chart').define('line', Line);
  22463. return Line;
  22464. });define('echarts/util/shape/HalfSmoothPolygon', [
  22465. 'require',
  22466. 'zrender/shape/Base',
  22467. 'zrender/shape/util/smoothBezier',
  22468. 'zrender/tool/util',
  22469. 'zrender/shape/Polygon'
  22470. ], function (require) {
  22471. var Base = require('zrender/shape/Base');
  22472. var smoothBezier = require('zrender/shape/util/smoothBezier');
  22473. var zrUtil = require('zrender/tool/util');
  22474. function HalfSmoothPolygon(options) {
  22475. Base.call(this, options);
  22476. }
  22477. HalfSmoothPolygon.prototype = {
  22478. type: 'half-smooth-polygon',
  22479. buildPath: function (ctx, style) {
  22480. var pointList = style.pointList;
  22481. if (pointList.length < 2) {
  22482. return;
  22483. }
  22484. if (style.smooth) {
  22485. var controlPoints = smoothBezier(pointList.slice(0, -2), style.smooth, false, style.smoothConstraint);
  22486. ctx.moveTo(pointList[0][0], pointList[0][1]);
  22487. var cp1;
  22488. var cp2;
  22489. var p;
  22490. var l = pointList.length;
  22491. for (var i = 0; i < l - 3; i++) {
  22492. cp1 = controlPoints[i * 2];
  22493. cp2 = controlPoints[i * 2 + 1];
  22494. p = pointList[i + 1];
  22495. ctx.bezierCurveTo(cp1[0], cp1[1], cp2[0], cp2[1], p[0], p[1]);
  22496. }
  22497. ctx.lineTo(pointList[l - 2][0], pointList[l - 2][1]);
  22498. ctx.lineTo(pointList[l - 1][0], pointList[l - 1][1]);
  22499. ctx.lineTo(pointList[0][0], pointList[0][1]);
  22500. } else {
  22501. require('zrender/shape/Polygon').prototype.buildPath(ctx, style);
  22502. }
  22503. return;
  22504. }
  22505. };
  22506. zrUtil.inherits(HalfSmoothPolygon, Base);
  22507. return HalfSmoothPolygon;
  22508. });define('echarts/chart/bar', [
  22509. 'require',
  22510. './base',
  22511. 'zrender/shape/Rectangle',
  22512. '../component/axis',
  22513. '../component/grid',
  22514. '../component/dataZoom',
  22515. '../config',
  22516. '../util/ecData',
  22517. 'zrender/tool/util',
  22518. 'zrender/tool/color',
  22519. '../chart'
  22520. ], function (require) {
  22521. var ChartBase = require('./base');
  22522. var RectangleShape = require('zrender/shape/Rectangle');
  22523. require('../component/axis');
  22524. require('../component/grid');
  22525. require('../component/dataZoom');
  22526. var ecConfig = require('../config');
  22527. ecConfig.bar = {
  22528. zlevel: 0,
  22529. z: 2,
  22530. clickable: true,
  22531. legendHoverLink: true,
  22532. xAxisIndex: 0,
  22533. yAxisIndex: 0,
  22534. barMinHeight: 0,
  22535. barGap: '30%',
  22536. barCategoryGap: '20%',
  22537. itemStyle: {
  22538. normal: {
  22539. barBorderColor: '#fff',
  22540. barBorderRadius: 0,
  22541. barBorderWidth: 0,
  22542. label: { show: false }
  22543. },
  22544. emphasis: {
  22545. barBorderColor: '#fff',
  22546. barBorderRadius: 0,
  22547. barBorderWidth: 0,
  22548. label: { show: false }
  22549. }
  22550. }
  22551. };
  22552. var ecData = require('../util/ecData');
  22553. var zrUtil = require('zrender/tool/util');
  22554. var zrColor = require('zrender/tool/color');
  22555. function Bar(ecTheme, messageCenter, zr, option, myChart) {
  22556. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  22557. this.refresh(option);
  22558. }
  22559. Bar.prototype = {
  22560. type: ecConfig.CHART_TYPE_BAR,
  22561. _buildShape: function () {
  22562. this._buildPosition();
  22563. },
  22564. _buildNormal: function (seriesArray, maxDataLength, locationMap, xMarkMap, orient) {
  22565. var series = this.series;
  22566. var seriesIndex = locationMap[0][0];
  22567. var serie = series[seriesIndex];
  22568. var isHorizontal = orient == 'horizontal';
  22569. var xAxis = this.component.xAxis;
  22570. var yAxis = this.component.yAxis;
  22571. var categoryAxis = isHorizontal ? xAxis.getAxis(serie.xAxisIndex) : yAxis.getAxis(serie.yAxisIndex);
  22572. var valueAxis;
  22573. var size = this._mapSize(categoryAxis, locationMap);
  22574. var gap = size.gap;
  22575. var barGap = size.barGap;
  22576. var barWidthMap = size.barWidthMap;
  22577. var barMaxWidthMap = size.barMaxWidthMap;
  22578. var barWidth = size.barWidth;
  22579. var barMinHeightMap = size.barMinHeightMap;
  22580. var barHeight;
  22581. var curBarWidth;
  22582. var interval = size.interval;
  22583. var x;
  22584. var y;
  22585. var lastP;
  22586. var baseP;
  22587. var lastN;
  22588. var baseN;
  22589. var barShape;
  22590. var data;
  22591. var value;
  22592. var islandR = this.deepQuery([
  22593. this.ecTheme,
  22594. ecConfig
  22595. ], 'island.r');
  22596. for (var i = 0, l = maxDataLength; i < l; i++) {
  22597. if (categoryAxis.getNameByIndex(i) == null) {
  22598. break;
  22599. }
  22600. isHorizontal ? x = categoryAxis.getCoordByIndex(i) - gap / 2 : y = categoryAxis.getCoordByIndex(i) + gap / 2;
  22601. for (var j = 0, k = locationMap.length; j < k; j++) {
  22602. var yAxisIndex = series[locationMap[j][0]].yAxisIndex || 0;
  22603. var xAxisIndex = series[locationMap[j][0]].xAxisIndex || 0;
  22604. valueAxis = isHorizontal ? yAxis.getAxis(yAxisIndex) : xAxis.getAxis(xAxisIndex);
  22605. baseP = lastP = baseN = lastN = valueAxis.getCoord(0);
  22606. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22607. seriesIndex = locationMap[j][m];
  22608. serie = series[seriesIndex];
  22609. data = serie.data[i];
  22610. value = this.getDataFromOption(data, '-');
  22611. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  22612. min: Number.POSITIVE_INFINITY,
  22613. max: Number.NEGATIVE_INFINITY,
  22614. sum: 0,
  22615. counter: 0,
  22616. average: 0
  22617. };
  22618. curBarWidth = Math.min(barMaxWidthMap[seriesIndex] || Number.MAX_VALUE, barWidthMap[seriesIndex] || barWidth);
  22619. if (value === '-') {
  22620. continue;
  22621. }
  22622. if (value > 0) {
  22623. barHeight = m > 0 ? valueAxis.getCoordSize(value) : isHorizontal ? baseP - valueAxis.getCoord(value) : valueAxis.getCoord(value) - baseP;
  22624. if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
  22625. barHeight = barMinHeightMap[seriesIndex];
  22626. }
  22627. if (isHorizontal) {
  22628. lastP -= barHeight;
  22629. y = lastP;
  22630. } else {
  22631. x = lastP;
  22632. lastP += barHeight;
  22633. }
  22634. } else if (value < 0) {
  22635. barHeight = m > 0 ? valueAxis.getCoordSize(value) : isHorizontal ? valueAxis.getCoord(value) - baseN : baseN - valueAxis.getCoord(value);
  22636. if (n === 1 && barMinHeightMap[seriesIndex] > barHeight) {
  22637. barHeight = barMinHeightMap[seriesIndex];
  22638. }
  22639. if (isHorizontal) {
  22640. y = lastN;
  22641. lastN += barHeight;
  22642. } else {
  22643. lastN -= barHeight;
  22644. x = lastN;
  22645. }
  22646. } else {
  22647. barHeight = 0;
  22648. if (isHorizontal) {
  22649. lastP -= barHeight;
  22650. y = lastP;
  22651. } else {
  22652. x = lastP;
  22653. lastP += barHeight;
  22654. }
  22655. }
  22656. xMarkMap[seriesIndex][i] = isHorizontal ? x + curBarWidth / 2 : y - curBarWidth / 2;
  22657. if (xMarkMap[seriesIndex].min > value) {
  22658. xMarkMap[seriesIndex].min = value;
  22659. if (isHorizontal) {
  22660. xMarkMap[seriesIndex].minY = y;
  22661. xMarkMap[seriesIndex].minX = xMarkMap[seriesIndex][i];
  22662. } else {
  22663. xMarkMap[seriesIndex].minX = x + barHeight;
  22664. xMarkMap[seriesIndex].minY = xMarkMap[seriesIndex][i];
  22665. }
  22666. }
  22667. if (xMarkMap[seriesIndex].max < value) {
  22668. xMarkMap[seriesIndex].max = value;
  22669. if (isHorizontal) {
  22670. xMarkMap[seriesIndex].maxY = y;
  22671. xMarkMap[seriesIndex].maxX = xMarkMap[seriesIndex][i];
  22672. } else {
  22673. xMarkMap[seriesIndex].maxX = x + barHeight;
  22674. xMarkMap[seriesIndex].maxY = xMarkMap[seriesIndex][i];
  22675. }
  22676. }
  22677. xMarkMap[seriesIndex].sum += value;
  22678. xMarkMap[seriesIndex].counter++;
  22679. if (i % interval === 0) {
  22680. barShape = this._getBarItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y - (isHorizontal ? 0 : curBarWidth), isHorizontal ? curBarWidth : barHeight, isHorizontal ? barHeight : curBarWidth, isHorizontal ? 'vertical' : 'horizontal');
  22681. this.shapeList.push(new RectangleShape(barShape));
  22682. }
  22683. }
  22684. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22685. seriesIndex = locationMap[j][m];
  22686. serie = series[seriesIndex];
  22687. data = serie.data[i];
  22688. value = this.getDataFromOption(data, '-');
  22689. curBarWidth = Math.min(barMaxWidthMap[seriesIndex] || Number.MAX_VALUE, barWidthMap[seriesIndex] || barWidth);
  22690. if (value != '-') {
  22691. continue;
  22692. }
  22693. if (this.deepQuery([
  22694. data,
  22695. serie,
  22696. this.option
  22697. ], 'calculable')) {
  22698. if (isHorizontal) {
  22699. lastP -= islandR;
  22700. y = lastP;
  22701. } else {
  22702. x = lastP;
  22703. lastP += islandR;
  22704. }
  22705. barShape = this._getBarItem(seriesIndex, i, categoryAxis.getNameByIndex(i), x, y - (isHorizontal ? 0 : curBarWidth), isHorizontal ? curBarWidth : islandR, isHorizontal ? islandR : curBarWidth, isHorizontal ? 'vertical' : 'horizontal');
  22706. barShape.hoverable = false;
  22707. barShape.draggable = false;
  22708. barShape.style.lineWidth = 1;
  22709. barShape.style.brushType = 'stroke';
  22710. barShape.style.strokeColor = serie.calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor;
  22711. this.shapeList.push(new RectangleShape(barShape));
  22712. }
  22713. }
  22714. isHorizontal ? x += curBarWidth + barGap : y -= curBarWidth + barGap;
  22715. }
  22716. }
  22717. this._calculMarkMapXY(xMarkMap, locationMap, isHorizontal ? 'y' : 'x');
  22718. },
  22719. _buildHorizontal: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  22720. return this._buildNormal(seriesArray, maxDataLength, locationMap, xMarkMap, 'horizontal');
  22721. },
  22722. _buildVertical: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  22723. return this._buildNormal(seriesArray, maxDataLength, locationMap, xMarkMap, 'vertical');
  22724. },
  22725. _buildOther: function (seriesArray, maxDataLength, locationMap, xMarkMap) {
  22726. var series = this.series;
  22727. for (var j = 0, k = locationMap.length; j < k; j++) {
  22728. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22729. var seriesIndex = locationMap[j][m];
  22730. var serie = series[seriesIndex];
  22731. var xAxisIndex = serie.xAxisIndex || 0;
  22732. var xAxis = this.component.xAxis.getAxis(xAxisIndex);
  22733. var baseX = xAxis.getCoord(0);
  22734. var yAxisIndex = serie.yAxisIndex || 0;
  22735. var yAxis = this.component.yAxis.getAxis(yAxisIndex);
  22736. var baseY = yAxis.getCoord(0);
  22737. xMarkMap[seriesIndex] = xMarkMap[seriesIndex] || {
  22738. min0: Number.POSITIVE_INFINITY,
  22739. min1: Number.POSITIVE_INFINITY,
  22740. max0: Number.NEGATIVE_INFINITY,
  22741. max1: Number.NEGATIVE_INFINITY,
  22742. sum0: 0,
  22743. sum1: 0,
  22744. counter0: 0,
  22745. counter1: 0,
  22746. average0: 0,
  22747. average1: 0
  22748. };
  22749. for (var i = 0, l = serie.data.length; i < l; i++) {
  22750. var data = serie.data[i];
  22751. var value = this.getDataFromOption(data, '-');
  22752. if (!(value instanceof Array)) {
  22753. continue;
  22754. }
  22755. var x = xAxis.getCoord(value[0]);
  22756. var y = yAxis.getCoord(value[1]);
  22757. var queryTarget = [
  22758. data,
  22759. serie
  22760. ];
  22761. var barWidth = this.deepQuery(queryTarget, 'barWidth') || 10;
  22762. var barHeight = this.deepQuery(queryTarget, 'barHeight');
  22763. var orient;
  22764. var barShape;
  22765. if (barHeight != null) {
  22766. orient = 'horizontal';
  22767. if (value[0] > 0) {
  22768. barWidth = x - baseX;
  22769. x -= barWidth;
  22770. } else if (value[0] < 0) {
  22771. barWidth = baseX - x;
  22772. } else {
  22773. barWidth = 0;
  22774. }
  22775. barShape = this._getBarItem(seriesIndex, i, value[0], x, y - barHeight / 2, barWidth, barHeight, orient);
  22776. } else {
  22777. orient = 'vertical';
  22778. if (value[1] > 0) {
  22779. barHeight = baseY - y;
  22780. } else if (value[1] < 0) {
  22781. barHeight = y - baseY;
  22782. y -= barHeight;
  22783. } else {
  22784. barHeight = 0;
  22785. }
  22786. barShape = this._getBarItem(seriesIndex, i, value[0], x - barWidth / 2, y, barWidth, barHeight, orient);
  22787. }
  22788. this.shapeList.push(new RectangleShape(barShape));
  22789. x = xAxis.getCoord(value[0]);
  22790. y = yAxis.getCoord(value[1]);
  22791. if (xMarkMap[seriesIndex].min0 > value[0]) {
  22792. xMarkMap[seriesIndex].min0 = value[0];
  22793. xMarkMap[seriesIndex].minY0 = y;
  22794. xMarkMap[seriesIndex].minX0 = x;
  22795. }
  22796. if (xMarkMap[seriesIndex].max0 < value[0]) {
  22797. xMarkMap[seriesIndex].max0 = value[0];
  22798. xMarkMap[seriesIndex].maxY0 = y;
  22799. xMarkMap[seriesIndex].maxX0 = x;
  22800. }
  22801. xMarkMap[seriesIndex].sum0 += value[0];
  22802. xMarkMap[seriesIndex].counter0++;
  22803. if (xMarkMap[seriesIndex].min1 > value[1]) {
  22804. xMarkMap[seriesIndex].min1 = value[1];
  22805. xMarkMap[seriesIndex].minY1 = y;
  22806. xMarkMap[seriesIndex].minX1 = x;
  22807. }
  22808. if (xMarkMap[seriesIndex].max1 < value[1]) {
  22809. xMarkMap[seriesIndex].max1 = value[1];
  22810. xMarkMap[seriesIndex].maxY1 = y;
  22811. xMarkMap[seriesIndex].maxX1 = x;
  22812. }
  22813. xMarkMap[seriesIndex].sum1 += value[1];
  22814. xMarkMap[seriesIndex].counter1++;
  22815. }
  22816. }
  22817. }
  22818. this._calculMarkMapXY(xMarkMap, locationMap, 'xy');
  22819. },
  22820. _mapSize: function (categoryAxis, locationMap, ignoreUserDefined) {
  22821. var res = this._findSpecialBarSzie(locationMap, ignoreUserDefined);
  22822. var barWidthMap = res.barWidthMap;
  22823. var barMaxWidthMap = res.barMaxWidthMap;
  22824. var barMinHeightMap = res.barMinHeightMap;
  22825. var sBarWidthCounter = res.sBarWidthCounter;
  22826. var sBarWidthTotal = res.sBarWidthTotal;
  22827. var barGap = res.barGap;
  22828. var barCategoryGap = res.barCategoryGap;
  22829. var gap;
  22830. var barWidth;
  22831. var interval = 1;
  22832. if (locationMap.length != sBarWidthCounter) {
  22833. if (!ignoreUserDefined) {
  22834. gap = typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/) ? (categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) - 0 : categoryAxis.getGap() - barCategoryGap;
  22835. if (typeof barGap === 'string' && barGap.match(/%$/)) {
  22836. barGap = parseFloat(barGap) / 100;
  22837. barWidth = +((gap - sBarWidthTotal) / ((locationMap.length - 1) * barGap + locationMap.length - sBarWidthCounter)).toFixed(2);
  22838. barGap = barWidth * barGap;
  22839. } else {
  22840. barGap = parseFloat(barGap);
  22841. barWidth = +((gap - sBarWidthTotal - barGap * (locationMap.length - 1)) / (locationMap.length - sBarWidthCounter)).toFixed(2);
  22842. }
  22843. if (barWidth <= 0) {
  22844. return this._mapSize(categoryAxis, locationMap, true);
  22845. }
  22846. } else {
  22847. gap = categoryAxis.getGap();
  22848. barGap = 0;
  22849. barWidth = +(gap / locationMap.length).toFixed(2);
  22850. if (barWidth <= 0) {
  22851. interval = Math.floor(locationMap.length / gap);
  22852. barWidth = 1;
  22853. }
  22854. }
  22855. } else {
  22856. gap = sBarWidthCounter > 1 ? typeof barCategoryGap === 'string' && barCategoryGap.match(/%$/) ? +(categoryAxis.getGap() * (100 - parseFloat(barCategoryGap)) / 100).toFixed(2) : categoryAxis.getGap() - barCategoryGap : sBarWidthTotal;
  22857. barWidth = 0;
  22858. barGap = sBarWidthCounter > 1 ? +((gap - sBarWidthTotal) / (sBarWidthCounter - 1)).toFixed(2) : 0;
  22859. if (barGap < 0) {
  22860. return this._mapSize(categoryAxis, locationMap, true);
  22861. }
  22862. }
  22863. return this._recheckBarMaxWidth(locationMap, barWidthMap, barMaxWidthMap, barMinHeightMap, gap, barWidth, barGap, interval);
  22864. },
  22865. _findSpecialBarSzie: function (locationMap, ignoreUserDefined) {
  22866. var series = this.series;
  22867. var barWidthMap = {};
  22868. var barMaxWidthMap = {};
  22869. var barMinHeightMap = {};
  22870. var sBarWidth;
  22871. var sBarMaxWidth;
  22872. var sBarWidthCounter = 0;
  22873. var sBarWidthTotal = 0;
  22874. var barGap;
  22875. var barCategoryGap;
  22876. for (var j = 0, k = locationMap.length; j < k; j++) {
  22877. var hasFound = {
  22878. barWidth: false,
  22879. barMaxWidth: false
  22880. };
  22881. for (var m = 0, n = locationMap[j].length; m < n; m++) {
  22882. var seriesIndex = locationMap[j][m];
  22883. var queryTarget = series[seriesIndex];
  22884. if (!ignoreUserDefined) {
  22885. if (!hasFound.barWidth) {
  22886. sBarWidth = this.query(queryTarget, 'barWidth');
  22887. if (sBarWidth != null) {
  22888. barWidthMap[seriesIndex] = sBarWidth;
  22889. sBarWidthTotal += sBarWidth;
  22890. sBarWidthCounter++;
  22891. hasFound.barWidth = true;
  22892. for (var ii = 0, ll = m; ii < ll; ii++) {
  22893. var pSeriesIndex = locationMap[j][ii];
  22894. barWidthMap[pSeriesIndex] = sBarWidth;
  22895. }
  22896. }
  22897. } else {
  22898. barWidthMap[seriesIndex] = sBarWidth;
  22899. }
  22900. if (!hasFound.barMaxWidth) {
  22901. sBarMaxWidth = this.query(queryTarget, 'barMaxWidth');
  22902. if (sBarMaxWidth != null) {
  22903. barMaxWidthMap[seriesIndex] = sBarMaxWidth;
  22904. hasFound.barMaxWidth = true;
  22905. for (var ii = 0, ll = m; ii < ll; ii++) {
  22906. var pSeriesIndex = locationMap[j][ii];
  22907. barMaxWidthMap[pSeriesIndex] = sBarMaxWidth;
  22908. }
  22909. }
  22910. } else {
  22911. barMaxWidthMap[seriesIndex] = sBarMaxWidth;
  22912. }
  22913. }
  22914. barMinHeightMap[seriesIndex] = this.query(queryTarget, 'barMinHeight');
  22915. barGap = barGap != null ? barGap : this.query(queryTarget, 'barGap');
  22916. barCategoryGap = barCategoryGap != null ? barCategoryGap : this.query(queryTarget, 'barCategoryGap');
  22917. }
  22918. }
  22919. return {
  22920. barWidthMap: barWidthMap,
  22921. barMaxWidthMap: barMaxWidthMap,
  22922. barMinHeightMap: barMinHeightMap,
  22923. sBarWidth: sBarWidth,
  22924. sBarMaxWidth: sBarMaxWidth,
  22925. sBarWidthCounter: sBarWidthCounter,
  22926. sBarWidthTotal: sBarWidthTotal,
  22927. barGap: barGap,
  22928. barCategoryGap: barCategoryGap
  22929. };
  22930. },
  22931. _recheckBarMaxWidth: function (locationMap, barWidthMap, barMaxWidthMap, barMinHeightMap, gap, barWidth, barGap, interval) {
  22932. for (var j = 0, k = locationMap.length; j < k; j++) {
  22933. var seriesIndex = locationMap[j][0];
  22934. if (barMaxWidthMap[seriesIndex] && barMaxWidthMap[seriesIndex] < barWidth) {
  22935. gap -= barWidth - barMaxWidthMap[seriesIndex];
  22936. }
  22937. }
  22938. return {
  22939. barWidthMap: barWidthMap,
  22940. barMaxWidthMap: barMaxWidthMap,
  22941. barMinHeightMap: barMinHeightMap,
  22942. gap: gap,
  22943. barWidth: barWidth,
  22944. barGap: barGap,
  22945. interval: interval
  22946. };
  22947. },
  22948. _getBarItem: function (seriesIndex, dataIndex, name, x, y, width, height, orient) {
  22949. var series = this.series;
  22950. var barShape;
  22951. var serie = series[seriesIndex];
  22952. var data = serie.data[dataIndex];
  22953. var defaultColor = this._sIndex2ColorMap[seriesIndex];
  22954. var queryTarget = [
  22955. data,
  22956. serie
  22957. ];
  22958. var normal = this.deepMerge(queryTarget, 'itemStyle.normal');
  22959. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis');
  22960. var normalBorderWidth = normal.barBorderWidth;
  22961. barShape = {
  22962. zlevel: serie.zlevel,
  22963. z: serie.z,
  22964. clickable: this.deepQuery(queryTarget, 'clickable'),
  22965. style: {
  22966. x: x,
  22967. y: y,
  22968. width: width,
  22969. height: height,
  22970. brushType: 'both',
  22971. color: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color') || defaultColor, seriesIndex, dataIndex, data),
  22972. radius: normal.barBorderRadius,
  22973. lineWidth: normalBorderWidth,
  22974. strokeColor: normal.barBorderColor
  22975. },
  22976. highlightStyle: {
  22977. color: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data),
  22978. radius: emphasis.barBorderRadius,
  22979. lineWidth: emphasis.barBorderWidth,
  22980. strokeColor: emphasis.barBorderColor
  22981. },
  22982. _orient: orient
  22983. };
  22984. var barShapeStyle = barShape.style;
  22985. barShape.highlightStyle.color = barShape.highlightStyle.color || (typeof barShapeStyle.color === 'string' ? zrColor.lift(barShapeStyle.color, -0.3) : barShapeStyle.color);
  22986. barShapeStyle.x = Math.floor(barShapeStyle.x);
  22987. barShapeStyle.y = Math.floor(barShapeStyle.y);
  22988. barShapeStyle.height = Math.ceil(barShapeStyle.height);
  22989. barShapeStyle.width = Math.ceil(barShapeStyle.width);
  22990. if (normalBorderWidth > 0 && barShapeStyle.height > normalBorderWidth && barShapeStyle.width > normalBorderWidth) {
  22991. barShapeStyle.y += normalBorderWidth / 2;
  22992. barShapeStyle.height -= normalBorderWidth;
  22993. barShapeStyle.x += normalBorderWidth / 2;
  22994. barShapeStyle.width -= normalBorderWidth;
  22995. } else {
  22996. barShapeStyle.brushType = 'fill';
  22997. }
  22998. barShape.highlightStyle.textColor = barShape.highlightStyle.color;
  22999. barShape = this.addLabel(barShape, serie, data, name, orient);
  23000. var barShapeStyleList = [
  23001. barShapeStyle,
  23002. barShape.highlightStyle
  23003. ];
  23004. for (var i = 0, l = barShapeStyleList.length; i < l; i++) {
  23005. var textPosition = barShapeStyleList[i].textPosition;
  23006. if (textPosition === 'insideLeft' || textPosition === 'insideRight' || textPosition === 'insideTop' || textPosition === 'insideBottom') {
  23007. var gap = 5;
  23008. switch (textPosition) {
  23009. case 'insideLeft':
  23010. barShapeStyleList[i].textX = barShapeStyle.x + gap;
  23011. barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
  23012. barShapeStyleList[i].textAlign = 'left';
  23013. barShapeStyleList[i].textBaseline = 'middle';
  23014. break;
  23015. case 'insideRight':
  23016. barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width - gap;
  23017. barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height / 2;
  23018. barShapeStyleList[i].textAlign = 'right';
  23019. barShapeStyleList[i].textBaseline = 'middle';
  23020. break;
  23021. case 'insideTop':
  23022. barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
  23023. barShapeStyleList[i].textY = barShapeStyle.y + gap / 2;
  23024. barShapeStyleList[i].textAlign = 'center';
  23025. barShapeStyleList[i].textBaseline = 'top';
  23026. break;
  23027. case 'insideBottom':
  23028. barShapeStyleList[i].textX = barShapeStyle.x + barShapeStyle.width / 2;
  23029. barShapeStyleList[i].textY = barShapeStyle.y + barShapeStyle.height - gap / 2;
  23030. barShapeStyleList[i].textAlign = 'center';
  23031. barShapeStyleList[i].textBaseline = 'bottom';
  23032. break;
  23033. }
  23034. barShapeStyleList[i].textPosition = 'specific';
  23035. barShapeStyleList[i].textColor = barShapeStyleList[i].textColor || '#fff';
  23036. }
  23037. }
  23038. if (this.deepQuery([
  23039. data,
  23040. serie,
  23041. this.option
  23042. ], 'calculable')) {
  23043. this.setCalculable(barShape);
  23044. barShape.draggable = true;
  23045. }
  23046. ecData.pack(barShape, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, name);
  23047. return barShape;
  23048. },
  23049. getMarkCoord: function (seriesIndex, mpData) {
  23050. var serie = this.series[seriesIndex];
  23051. var xMarkMap = this.xMarkMap[seriesIndex];
  23052. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  23053. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  23054. var dataIndex;
  23055. var pos;
  23056. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
  23057. var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : xMarkMap.maxX0 != null ? '1' : '';
  23058. pos = [
  23059. xMarkMap[mpData.type + 'X' + valueIndex],
  23060. xMarkMap[mpData.type + 'Y' + valueIndex],
  23061. xMarkMap[mpData.type + 'Line' + valueIndex],
  23062. xMarkMap[mpData.type + valueIndex]
  23063. ];
  23064. } else if (xMarkMap.isHorizontal) {
  23065. dataIndex = typeof mpData.xAxis === 'string' && xAxis.getIndexByName ? xAxis.getIndexByName(mpData.xAxis) : mpData.xAxis || 0;
  23066. var x = xMarkMap[dataIndex];
  23067. x = x != null ? x : typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0);
  23068. pos = [
  23069. x,
  23070. yAxis.getCoord(mpData.yAxis || 0)
  23071. ];
  23072. } else {
  23073. dataIndex = typeof mpData.yAxis === 'string' && yAxis.getIndexByName ? yAxis.getIndexByName(mpData.yAxis) : mpData.yAxis || 0;
  23074. var y = xMarkMap[dataIndex];
  23075. y = y != null ? y : typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0);
  23076. pos = [
  23077. xAxis.getCoord(mpData.xAxis || 0),
  23078. y
  23079. ];
  23080. }
  23081. return pos;
  23082. },
  23083. refresh: function (newOption) {
  23084. if (newOption) {
  23085. this.option = newOption;
  23086. this.series = newOption.series;
  23087. }
  23088. this.backupShapeList();
  23089. this._buildShape();
  23090. },
  23091. addDataAnimation: function (params, done) {
  23092. var series = this.series;
  23093. var aniMap = {};
  23094. for (var i = 0, l = params.length; i < l; i++) {
  23095. aniMap[params[i][0]] = params[i];
  23096. }
  23097. var x;
  23098. var dx;
  23099. var y;
  23100. var dy;
  23101. var serie;
  23102. var seriesIndex;
  23103. var dataIndex;
  23104. var aniCount = 0;
  23105. function animationDone() {
  23106. aniCount--;
  23107. if (aniCount === 0) {
  23108. done && done();
  23109. }
  23110. }
  23111. for (var i = this.shapeList.length - 1; i >= 0; i--) {
  23112. seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
  23113. if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
  23114. if (this.shapeList[i].type === 'rectangle') {
  23115. dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
  23116. serie = series[seriesIndex];
  23117. if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
  23118. this.zr.delShape(this.shapeList[i].id);
  23119. continue;
  23120. } else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
  23121. this.zr.delShape(this.shapeList[i].id);
  23122. continue;
  23123. }
  23124. if (this.shapeList[i]._orient === 'horizontal') {
  23125. dy = this.component.yAxis.getAxis(serie.yAxisIndex || 0).getGap();
  23126. y = aniMap[seriesIndex][2] ? -dy : dy;
  23127. x = 0;
  23128. } else {
  23129. dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
  23130. x = aniMap[seriesIndex][2] ? dx : -dx;
  23131. y = 0;
  23132. }
  23133. this.shapeList[i].position = [
  23134. 0,
  23135. 0
  23136. ];
  23137. aniCount++;
  23138. this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
  23139. position: [
  23140. x,
  23141. y
  23142. ]
  23143. }).done(animationDone).start();
  23144. }
  23145. }
  23146. }
  23147. if (!aniCount) {
  23148. done && done();
  23149. }
  23150. }
  23151. };
  23152. zrUtil.inherits(Bar, ChartBase);
  23153. require('../chart').define('bar', Bar);
  23154. return Bar;
  23155. });define('echarts/chart/scatter', [
  23156. 'require',
  23157. './base',
  23158. '../util/shape/Symbol',
  23159. '../component/axis',
  23160. '../component/grid',
  23161. '../component/dataZoom',
  23162. '../component/dataRange',
  23163. '../config',
  23164. 'zrender/tool/util',
  23165. 'zrender/tool/color',
  23166. '../chart'
  23167. ], function (require) {
  23168. var ChartBase = require('./base');
  23169. var SymbolShape = require('../util/shape/Symbol');
  23170. require('../component/axis');
  23171. require('../component/grid');
  23172. require('../component/dataZoom');
  23173. require('../component/dataRange');
  23174. var ecConfig = require('../config');
  23175. ecConfig.scatter = {
  23176. zlevel: 0,
  23177. z: 2,
  23178. clickable: true,
  23179. legendHoverLink: true,
  23180. xAxisIndex: 0,
  23181. yAxisIndex: 0,
  23182. symbolSize: 4,
  23183. large: false,
  23184. largeThreshold: 2000,
  23185. itemStyle: {
  23186. normal: { label: { show: false } },
  23187. emphasis: { label: { show: false } }
  23188. }
  23189. };
  23190. var zrUtil = require('zrender/tool/util');
  23191. var zrColor = require('zrender/tool/color');
  23192. function Scatter(ecTheme, messageCenter, zr, option, myChart) {
  23193. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  23194. this.refresh(option);
  23195. }
  23196. Scatter.prototype = {
  23197. type: ecConfig.CHART_TYPE_SCATTER,
  23198. _buildShape: function () {
  23199. var series = this.series;
  23200. this._sIndex2ColorMap = {};
  23201. this._symbol = this.option.symbolList;
  23202. this._sIndex2ShapeMap = {};
  23203. this.selectedMap = {};
  23204. this.xMarkMap = {};
  23205. var legend = this.component.legend;
  23206. var seriesArray = [];
  23207. var serie;
  23208. var serieName;
  23209. var iconShape;
  23210. var iconType;
  23211. for (var i = 0, l = series.length; i < l; i++) {
  23212. serie = series[i];
  23213. serieName = serie.name;
  23214. if (serie.type === ecConfig.CHART_TYPE_SCATTER) {
  23215. series[i] = this.reformOption(series[i]);
  23216. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  23217. this._sIndex2ShapeMap[i] = this.query(serie, 'symbol') || this._symbol[i % this._symbol.length];
  23218. if (legend) {
  23219. this.selectedMap[serieName] = legend.isSelected(serieName);
  23220. this._sIndex2ColorMap[i] = zrColor.alpha(legend.getColor(serieName), 0.5);
  23221. iconShape = legend.getItemShape(serieName);
  23222. if (iconShape) {
  23223. var iconType = this._sIndex2ShapeMap[i];
  23224. iconShape.style.brushType = iconType.match('empty') ? 'stroke' : 'both';
  23225. iconType = iconType.replace('empty', '').toLowerCase();
  23226. if (iconType.match('rectangle')) {
  23227. iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
  23228. iconShape.style.width = iconShape.style.height;
  23229. }
  23230. if (iconType.match('star')) {
  23231. iconShape.style.n = iconType.replace('star', '') - 0 || 5;
  23232. iconType = 'star';
  23233. }
  23234. if (iconType.match('image')) {
  23235. iconShape.style.image = iconType.replace(new RegExp('^image:\\/\\/'), '');
  23236. iconShape.style.x += Math.round((iconShape.style.width - iconShape.style.height) / 2);
  23237. iconShape.style.width = iconShape.style.height;
  23238. iconType = 'image';
  23239. }
  23240. iconShape.style.iconType = iconType;
  23241. legend.setItemShape(serieName, iconShape);
  23242. }
  23243. } else {
  23244. this.selectedMap[serieName] = true;
  23245. this._sIndex2ColorMap[i] = zrColor.alpha(this.zr.getColor(i), 0.5);
  23246. }
  23247. if (this.selectedMap[serieName]) {
  23248. seriesArray.push(i);
  23249. }
  23250. }
  23251. }
  23252. this._buildSeries(seriesArray);
  23253. this.addShapeList();
  23254. },
  23255. _buildSeries: function (seriesArray) {
  23256. if (seriesArray.length === 0) {
  23257. return;
  23258. }
  23259. var series = this.series;
  23260. var seriesIndex;
  23261. var serie;
  23262. var data;
  23263. var value;
  23264. var xAxis;
  23265. var yAxis;
  23266. var pointList = {};
  23267. var x;
  23268. var y;
  23269. for (var j = 0, k = seriesArray.length; j < k; j++) {
  23270. seriesIndex = seriesArray[j];
  23271. serie = series[seriesIndex];
  23272. if (serie.data.length === 0) {
  23273. continue;
  23274. }
  23275. xAxis = this.component.xAxis.getAxis(serie.xAxisIndex || 0);
  23276. yAxis = this.component.yAxis.getAxis(serie.yAxisIndex || 0);
  23277. pointList[seriesIndex] = [];
  23278. for (var i = 0, l = serie.data.length; i < l; i++) {
  23279. data = serie.data[i];
  23280. value = this.getDataFromOption(data, '-');
  23281. if (value === '-' || value.length < 2) {
  23282. continue;
  23283. }
  23284. x = xAxis.getCoord(value[0]);
  23285. y = yAxis.getCoord(value[1]);
  23286. pointList[seriesIndex].push([
  23287. x,
  23288. y,
  23289. i,
  23290. data.name || ''
  23291. ]);
  23292. }
  23293. this.xMarkMap[seriesIndex] = this._markMap(xAxis, yAxis, serie.data, pointList[seriesIndex]);
  23294. this.buildMark(seriesIndex);
  23295. }
  23296. this._buildPointList(pointList);
  23297. },
  23298. _markMap: function (xAxis, yAxis, data, pointList) {
  23299. var xMarkMap = {
  23300. min0: Number.POSITIVE_INFINITY,
  23301. max0: Number.NEGATIVE_INFINITY,
  23302. sum0: 0,
  23303. counter0: 0,
  23304. average0: 0,
  23305. min1: Number.POSITIVE_INFINITY,
  23306. max1: Number.NEGATIVE_INFINITY,
  23307. sum1: 0,
  23308. counter1: 0,
  23309. average1: 0
  23310. };
  23311. var value;
  23312. for (var i = 0, l = pointList.length; i < l; i++) {
  23313. value = data[pointList[i][2]].value || data[pointList[i][2]];
  23314. if (xMarkMap.min0 > value[0]) {
  23315. xMarkMap.min0 = value[0];
  23316. xMarkMap.minY0 = pointList[i][1];
  23317. xMarkMap.minX0 = pointList[i][0];
  23318. }
  23319. if (xMarkMap.max0 < value[0]) {
  23320. xMarkMap.max0 = value[0];
  23321. xMarkMap.maxY0 = pointList[i][1];
  23322. xMarkMap.maxX0 = pointList[i][0];
  23323. }
  23324. xMarkMap.sum0 += value[0];
  23325. xMarkMap.counter0++;
  23326. if (xMarkMap.min1 > value[1]) {
  23327. xMarkMap.min1 = value[1];
  23328. xMarkMap.minY1 = pointList[i][1];
  23329. xMarkMap.minX1 = pointList[i][0];
  23330. }
  23331. if (xMarkMap.max1 < value[1]) {
  23332. xMarkMap.max1 = value[1];
  23333. xMarkMap.maxY1 = pointList[i][1];
  23334. xMarkMap.maxX1 = pointList[i][0];
  23335. }
  23336. xMarkMap.sum1 += value[1];
  23337. xMarkMap.counter1++;
  23338. }
  23339. var gridX = this.component.grid.getX();
  23340. var gridXend = this.component.grid.getXend();
  23341. var gridY = this.component.grid.getY();
  23342. var gridYend = this.component.grid.getYend();
  23343. xMarkMap.average0 = xMarkMap.sum0 / xMarkMap.counter0;
  23344. var x = xAxis.getCoord(xMarkMap.average0);
  23345. xMarkMap.averageLine0 = [
  23346. [
  23347. x,
  23348. gridYend
  23349. ],
  23350. [
  23351. x,
  23352. gridY
  23353. ]
  23354. ];
  23355. xMarkMap.minLine0 = [
  23356. [
  23357. xMarkMap.minX0,
  23358. gridYend
  23359. ],
  23360. [
  23361. xMarkMap.minX0,
  23362. gridY
  23363. ]
  23364. ];
  23365. xMarkMap.maxLine0 = [
  23366. [
  23367. xMarkMap.maxX0,
  23368. gridYend
  23369. ],
  23370. [
  23371. xMarkMap.maxX0,
  23372. gridY
  23373. ]
  23374. ];
  23375. xMarkMap.average1 = xMarkMap.sum1 / xMarkMap.counter1;
  23376. var y = yAxis.getCoord(xMarkMap.average1);
  23377. xMarkMap.averageLine1 = [
  23378. [
  23379. gridX,
  23380. y
  23381. ],
  23382. [
  23383. gridXend,
  23384. y
  23385. ]
  23386. ];
  23387. xMarkMap.minLine1 = [
  23388. [
  23389. gridX,
  23390. xMarkMap.minY1
  23391. ],
  23392. [
  23393. gridXend,
  23394. xMarkMap.minY1
  23395. ]
  23396. ];
  23397. xMarkMap.maxLine1 = [
  23398. [
  23399. gridX,
  23400. xMarkMap.maxY1
  23401. ],
  23402. [
  23403. gridXend,
  23404. xMarkMap.maxY1
  23405. ]
  23406. ];
  23407. return xMarkMap;
  23408. },
  23409. _buildPointList: function (pointList) {
  23410. var series = this.series;
  23411. var serie;
  23412. var seriesPL;
  23413. var singlePoint;
  23414. var shape;
  23415. for (var seriesIndex in pointList) {
  23416. serie = series[seriesIndex];
  23417. seriesPL = pointList[seriesIndex];
  23418. if (serie.large && serie.data.length > serie.largeThreshold) {
  23419. this.shapeList.push(this._getLargeSymbol(serie, seriesPL, this.getItemStyleColor(this.query(serie, 'itemStyle.normal.color'), seriesIndex, -1) || this._sIndex2ColorMap[seriesIndex]));
  23420. continue;
  23421. }
  23422. for (var i = 0, l = seriesPL.length; i < l; i++) {
  23423. singlePoint = seriesPL[i];
  23424. shape = this._getSymbol(seriesIndex, singlePoint[2], singlePoint[3], singlePoint[0], singlePoint[1]);
  23425. shape && this.shapeList.push(shape);
  23426. }
  23427. }
  23428. },
  23429. _getSymbol: function (seriesIndex, dataIndex, name, x, y) {
  23430. var series = this.series;
  23431. var serie = series[seriesIndex];
  23432. var data = serie.data[dataIndex];
  23433. var dataRange = this.component.dataRange;
  23434. var rangColor;
  23435. if (dataRange) {
  23436. rangColor = isNaN(data[2]) ? this._sIndex2ColorMap[seriesIndex] : dataRange.getColor(data[2]);
  23437. if (!rangColor) {
  23438. return null;
  23439. }
  23440. } else {
  23441. rangColor = this._sIndex2ColorMap[seriesIndex];
  23442. }
  23443. var itemShape = this.getSymbolShape(serie, seriesIndex, data, dataIndex, name, x, y, this._sIndex2ShapeMap[seriesIndex], rangColor, 'rgba(0,0,0,0)', 'vertical');
  23444. itemShape.zlevel = serie.zlevel;
  23445. itemShape.z = serie.z;
  23446. itemShape._main = true;
  23447. return itemShape;
  23448. },
  23449. _getLargeSymbol: function (serie, pointList, nColor) {
  23450. return new SymbolShape({
  23451. zlevel: serie.zlevel,
  23452. z: serie.z,
  23453. _main: true,
  23454. hoverable: false,
  23455. style: {
  23456. pointList: pointList,
  23457. color: nColor,
  23458. strokeColor: nColor
  23459. },
  23460. highlightStyle: { pointList: [] }
  23461. });
  23462. },
  23463. getMarkCoord: function (seriesIndex, mpData) {
  23464. var serie = this.series[seriesIndex];
  23465. var xMarkMap = this.xMarkMap[seriesIndex];
  23466. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  23467. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  23468. var pos;
  23469. if (mpData.type && (mpData.type === 'max' || mpData.type === 'min' || mpData.type === 'average')) {
  23470. var valueIndex = mpData.valueIndex != null ? mpData.valueIndex : 1;
  23471. pos = [
  23472. xMarkMap[mpData.type + 'X' + valueIndex],
  23473. xMarkMap[mpData.type + 'Y' + valueIndex],
  23474. xMarkMap[mpData.type + 'Line' + valueIndex],
  23475. xMarkMap[mpData.type + valueIndex]
  23476. ];
  23477. } else {
  23478. pos = [
  23479. typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
  23480. typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
  23481. ];
  23482. }
  23483. return pos;
  23484. },
  23485. refresh: function (newOption) {
  23486. if (newOption) {
  23487. this.option = newOption;
  23488. this.series = newOption.series;
  23489. }
  23490. this.backupShapeList();
  23491. this._buildShape();
  23492. },
  23493. ondataRange: function (param, status) {
  23494. if (this.component.dataRange) {
  23495. this.refresh();
  23496. status.needRefresh = true;
  23497. }
  23498. return;
  23499. }
  23500. };
  23501. zrUtil.inherits(Scatter, ChartBase);
  23502. require('../chart').define('scatter', Scatter);
  23503. return Scatter;
  23504. });define('echarts/component/dataRange', [
  23505. 'require',
  23506. './base',
  23507. 'zrender/shape/Text',
  23508. 'zrender/shape/Rectangle',
  23509. '../util/shape/HandlePolygon',
  23510. '../config',
  23511. 'zrender/tool/util',
  23512. 'zrender/tool/event',
  23513. 'zrender/tool/area',
  23514. 'zrender/tool/color',
  23515. '../component'
  23516. ], function (require) {
  23517. var Base = require('./base');
  23518. var TextShape = require('zrender/shape/Text');
  23519. var RectangleShape = require('zrender/shape/Rectangle');
  23520. var HandlePolygonShape = require('../util/shape/HandlePolygon');
  23521. var ecConfig = require('../config');
  23522. ecConfig.dataRange = {
  23523. zlevel: 0,
  23524. z: 4,
  23525. show: true,
  23526. orient: 'vertical',
  23527. x: 'left',
  23528. y: 'bottom',
  23529. backgroundColor: 'rgba(0,0,0,0)',
  23530. borderColor: '#ccc',
  23531. borderWidth: 0,
  23532. padding: 5,
  23533. itemGap: 10,
  23534. itemWidth: 20,
  23535. itemHeight: 14,
  23536. precision: 0,
  23537. splitNumber: 5,
  23538. splitList: null,
  23539. calculable: false,
  23540. selectedMode: true,
  23541. hoverLink: true,
  23542. realtime: true,
  23543. color: [
  23544. '#006edd',
  23545. '#e0ffff'
  23546. ],
  23547. textStyle: { color: '#333' }
  23548. };
  23549. var zrUtil = require('zrender/tool/util');
  23550. var zrEvent = require('zrender/tool/event');
  23551. var zrArea = require('zrender/tool/area');
  23552. var zrColor = require('zrender/tool/color');
  23553. function DataRange(ecTheme, messageCenter, zr, option, myChart) {
  23554. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  23555. var self = this;
  23556. self._ondrift = function (dx, dy) {
  23557. return self.__ondrift(this, dx, dy);
  23558. };
  23559. self._ondragend = function () {
  23560. return self.__ondragend();
  23561. };
  23562. self._dataRangeSelected = function (param) {
  23563. return self.__dataRangeSelected(param);
  23564. };
  23565. self._dispatchHoverLink = function (param) {
  23566. return self.__dispatchHoverLink(param);
  23567. };
  23568. self._onhoverlink = function (params) {
  23569. return self.__onhoverlink(params);
  23570. };
  23571. this._selectedMap = {};
  23572. this._range = {};
  23573. this.refresh(option);
  23574. messageCenter.bind(ecConfig.EVENT.HOVER, this._onhoverlink);
  23575. }
  23576. DataRange.prototype = {
  23577. type: ecConfig.COMPONENT_TYPE_DATARANGE,
  23578. _textGap: 10,
  23579. _buildShape: function () {
  23580. this._itemGroupLocation = this._getItemGroupLocation();
  23581. this._buildBackground();
  23582. if (this._isContinuity()) {
  23583. this._buildGradient();
  23584. } else {
  23585. this._buildItem();
  23586. }
  23587. if (this.dataRangeOption.show) {
  23588. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  23589. this.zr.addShape(this.shapeList[i]);
  23590. }
  23591. }
  23592. this._syncShapeFromRange();
  23593. },
  23594. _buildItem: function () {
  23595. var data = this._valueTextList;
  23596. var dataLength = data.length;
  23597. var itemName;
  23598. var itemShape;
  23599. var textShape;
  23600. var font = this.getFont(this.dataRangeOption.textStyle);
  23601. var lastX = this._itemGroupLocation.x;
  23602. var lastY = this._itemGroupLocation.y;
  23603. var itemWidth = this.dataRangeOption.itemWidth;
  23604. var itemHeight = this.dataRangeOption.itemHeight;
  23605. var itemGap = this.dataRangeOption.itemGap;
  23606. var textHeight = zrArea.getTextHeight('国', font);
  23607. var color;
  23608. if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
  23609. lastX = this._itemGroupLocation.x + this._itemGroupLocation.width - itemWidth;
  23610. }
  23611. var needValueText = true;
  23612. if (this.dataRangeOption.text) {
  23613. needValueText = false;
  23614. if (this.dataRangeOption.text[0]) {
  23615. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
  23616. if (this.dataRangeOption.orient == 'horizontal') {
  23617. lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
  23618. } else {
  23619. lastY += textHeight + this._textGap;
  23620. textShape.style.y += textHeight / 2 + this._textGap;
  23621. textShape.style.textBaseline = 'bottom';
  23622. }
  23623. this.shapeList.push(new TextShape(textShape));
  23624. }
  23625. }
  23626. for (var i = 0; i < dataLength; i++) {
  23627. itemName = data[i];
  23628. color = this.getColorByIndex(i);
  23629. itemShape = this._getItemShape(lastX, lastY, itemWidth, itemHeight, this._selectedMap[i] ? color : '#ccc');
  23630. itemShape._idx = i;
  23631. itemShape.onmousemove = this._dispatchHoverLink;
  23632. if (this.dataRangeOption.selectedMode) {
  23633. itemShape.clickable = true;
  23634. itemShape.onclick = this._dataRangeSelected;
  23635. }
  23636. this.shapeList.push(new RectangleShape(itemShape));
  23637. if (needValueText) {
  23638. textShape = {
  23639. zlevel: this.getZlevelBase(),
  23640. z: this.getZBase(),
  23641. style: {
  23642. x: lastX + itemWidth + 5,
  23643. y: lastY,
  23644. color: this._selectedMap[i] ? this.dataRangeOption.textStyle.color : '#ccc',
  23645. text: data[i],
  23646. textFont: font,
  23647. textBaseline: 'top'
  23648. },
  23649. highlightStyle: { brushType: 'fill' }
  23650. };
  23651. if (this.dataRangeOption.orient == 'vertical' && this.dataRangeOption.x == 'right') {
  23652. textShape.style.x -= itemWidth + 10;
  23653. textShape.style.textAlign = 'right';
  23654. }
  23655. textShape._idx = i;
  23656. textShape.onmousemove = this._dispatchHoverLink;
  23657. if (this.dataRangeOption.selectedMode) {
  23658. textShape.clickable = true;
  23659. textShape.onclick = this._dataRangeSelected;
  23660. }
  23661. this.shapeList.push(new TextShape(textShape));
  23662. }
  23663. if (this.dataRangeOption.orient == 'horizontal') {
  23664. lastX += itemWidth + (needValueText ? 5 : 0) + (needValueText ? zrArea.getTextWidth(itemName, font) : 0) + itemGap;
  23665. } else {
  23666. lastY += itemHeight + itemGap;
  23667. }
  23668. }
  23669. if (!needValueText && this.dataRangeOption.text[1]) {
  23670. if (this.dataRangeOption.orient == 'horizontal') {
  23671. lastX = lastX - itemGap + this._textGap;
  23672. } else {
  23673. lastY = lastY - itemGap + this._textGap;
  23674. }
  23675. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
  23676. if (this.dataRangeOption.orient != 'horizontal') {
  23677. textShape.style.y -= 5;
  23678. textShape.style.textBaseline = 'top';
  23679. }
  23680. this.shapeList.push(new TextShape(textShape));
  23681. }
  23682. },
  23683. _buildGradient: function () {
  23684. var itemShape;
  23685. var textShape;
  23686. var font = this.getFont(this.dataRangeOption.textStyle);
  23687. var lastX = this._itemGroupLocation.x;
  23688. var lastY = this._itemGroupLocation.y;
  23689. var itemWidth = this.dataRangeOption.itemWidth;
  23690. var itemHeight = this.dataRangeOption.itemHeight;
  23691. var textHeight = zrArea.getTextHeight('国', font);
  23692. var mSize = 10;
  23693. var needValueText = true;
  23694. if (this.dataRangeOption.text) {
  23695. needValueText = false;
  23696. if (this.dataRangeOption.text[0]) {
  23697. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[0]);
  23698. if (this.dataRangeOption.orient == 'horizontal') {
  23699. lastX += zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap;
  23700. } else {
  23701. lastY += textHeight + this._textGap;
  23702. textShape.style.y += textHeight / 2 + this._textGap;
  23703. textShape.style.textBaseline = 'bottom';
  23704. }
  23705. this.shapeList.push(new TextShape(textShape));
  23706. }
  23707. }
  23708. var zrColor = require('zrender/tool/color');
  23709. var per = 1 / (this.dataRangeOption.color.length - 1);
  23710. var colorList = [];
  23711. for (var i = 0, l = this.dataRangeOption.color.length; i < l; i++) {
  23712. colorList.push([
  23713. i * per,
  23714. this.dataRangeOption.color[i]
  23715. ]);
  23716. }
  23717. if (this.dataRangeOption.orient == 'horizontal') {
  23718. itemShape = {
  23719. zlevel: this.getZlevelBase(),
  23720. z: this.getZBase(),
  23721. style: {
  23722. x: lastX,
  23723. y: lastY,
  23724. width: itemWidth * mSize,
  23725. height: itemHeight,
  23726. color: zrColor.getLinearGradient(lastX, lastY, lastX + itemWidth * mSize, lastY, colorList)
  23727. },
  23728. hoverable: false
  23729. };
  23730. lastX += itemWidth * mSize + this._textGap;
  23731. } else {
  23732. itemShape = {
  23733. zlevel: this.getZlevelBase(),
  23734. z: this.getZBase(),
  23735. style: {
  23736. x: lastX,
  23737. y: lastY,
  23738. width: itemWidth,
  23739. height: itemHeight * mSize,
  23740. color: zrColor.getLinearGradient(lastX, lastY, lastX, lastY + itemHeight * mSize, colorList)
  23741. },
  23742. hoverable: false
  23743. };
  23744. lastY += itemHeight * mSize + this._textGap;
  23745. }
  23746. this.shapeList.push(new RectangleShape(itemShape));
  23747. this._calculableLocation = itemShape.style;
  23748. if (this.dataRangeOption.calculable) {
  23749. this._buildFiller();
  23750. this._bulidMask();
  23751. this._bulidHandle();
  23752. }
  23753. this._buildIndicator();
  23754. if (!needValueText && this.dataRangeOption.text[1]) {
  23755. textShape = this._getTextShape(lastX, lastY, this.dataRangeOption.text[1]);
  23756. this.shapeList.push(new TextShape(textShape));
  23757. }
  23758. },
  23759. _buildIndicator: function () {
  23760. var x = this._calculableLocation.x;
  23761. var y = this._calculableLocation.y;
  23762. var width = this._calculableLocation.width;
  23763. var height = this._calculableLocation.height;
  23764. var size = 5;
  23765. var pointList;
  23766. var textPosition;
  23767. if (this.dataRangeOption.orient == 'horizontal') {
  23768. if (this.dataRangeOption.y != 'bottom') {
  23769. pointList = [
  23770. [
  23771. x,
  23772. y + height
  23773. ],
  23774. [
  23775. x - size,
  23776. y + height + size
  23777. ],
  23778. [
  23779. x + size,
  23780. y + height + size
  23781. ]
  23782. ];
  23783. textPosition = 'bottom';
  23784. } else {
  23785. pointList = [
  23786. [
  23787. x,
  23788. y
  23789. ],
  23790. [
  23791. x - size,
  23792. y - size
  23793. ],
  23794. [
  23795. x + size,
  23796. y - size
  23797. ]
  23798. ];
  23799. textPosition = 'top';
  23800. }
  23801. } else {
  23802. if (this.dataRangeOption.x != 'right') {
  23803. pointList = [
  23804. [
  23805. x + width,
  23806. y
  23807. ],
  23808. [
  23809. x + width + size,
  23810. y - size
  23811. ],
  23812. [
  23813. x + width + size,
  23814. y + size
  23815. ]
  23816. ];
  23817. textPosition = 'right';
  23818. } else {
  23819. pointList = [
  23820. [
  23821. x,
  23822. y
  23823. ],
  23824. [
  23825. x - size,
  23826. y - size
  23827. ],
  23828. [
  23829. x - size,
  23830. y + size
  23831. ]
  23832. ];
  23833. textPosition = 'left';
  23834. }
  23835. }
  23836. this._indicatorShape = {
  23837. style: {
  23838. pointList: pointList,
  23839. color: '#fff',
  23840. __rect: {
  23841. x: Math.min(pointList[0][0], pointList[1][0]),
  23842. y: Math.min(pointList[0][1], pointList[1][1]),
  23843. width: size * (this.dataRangeOption.orient == 'horizontal' ? 2 : 1),
  23844. height: size * (this.dataRangeOption.orient == 'horizontal' ? 1 : 2)
  23845. }
  23846. },
  23847. highlightStyle: {
  23848. brushType: 'fill',
  23849. textPosition: textPosition,
  23850. textColor: this.dataRangeOption.textStyle.color
  23851. },
  23852. hoverable: false
  23853. };
  23854. this._indicatorShape = new HandlePolygonShape(this._indicatorShape);
  23855. },
  23856. _buildFiller: function () {
  23857. this._fillerShape = {
  23858. zlevel: this.getZlevelBase(),
  23859. z: this.getZBase() + 1,
  23860. style: {
  23861. x: this._calculableLocation.x,
  23862. y: this._calculableLocation.y,
  23863. width: this._calculableLocation.width,
  23864. height: this._calculableLocation.height,
  23865. color: 'rgba(255,255,255,0)'
  23866. },
  23867. highlightStyle: {
  23868. strokeColor: 'rgba(255,255,255,0.5)',
  23869. lineWidth: 1
  23870. },
  23871. draggable: true,
  23872. ondrift: this._ondrift,
  23873. ondragend: this._ondragend,
  23874. onmousemove: this._dispatchHoverLink,
  23875. _type: 'filler'
  23876. };
  23877. this._fillerShape = new RectangleShape(this._fillerShape);
  23878. this.shapeList.push(this._fillerShape);
  23879. },
  23880. _bulidHandle: function () {
  23881. var x = this._calculableLocation.x;
  23882. var y = this._calculableLocation.y;
  23883. var width = this._calculableLocation.width;
  23884. var height = this._calculableLocation.height;
  23885. var font = this.getFont(this.dataRangeOption.textStyle);
  23886. var textHeight = zrArea.getTextHeight('国', font);
  23887. var textWidth = Math.max(zrArea.getTextWidth(this._textFormat(this.dataRangeOption.max), font), zrArea.getTextWidth(this._textFormat(this.dataRangeOption.min), font)) + 2;
  23888. var pointListStart;
  23889. var textXStart;
  23890. var textYStart;
  23891. var coverRectStart;
  23892. var pointListEnd;
  23893. var textXEnd;
  23894. var textYEnd;
  23895. var coverRectEnd;
  23896. if (this.dataRangeOption.orient == 'horizontal') {
  23897. if (this.dataRangeOption.y != 'bottom') {
  23898. pointListStart = [
  23899. [
  23900. x,
  23901. y
  23902. ],
  23903. [
  23904. x,
  23905. y + height + textHeight
  23906. ],
  23907. [
  23908. x - textHeight,
  23909. y + height + textHeight
  23910. ],
  23911. [
  23912. x - 1,
  23913. y + height
  23914. ],
  23915. [
  23916. x - 1,
  23917. y
  23918. ]
  23919. ];
  23920. textXStart = x - textWidth / 2 - textHeight;
  23921. textYStart = y + height + textHeight / 2 + 2;
  23922. coverRectStart = {
  23923. x: x - textWidth - textHeight,
  23924. y: y + height,
  23925. width: textWidth + textHeight,
  23926. height: textHeight
  23927. };
  23928. pointListEnd = [
  23929. [
  23930. x + width,
  23931. y
  23932. ],
  23933. [
  23934. x + width,
  23935. y + height + textHeight
  23936. ],
  23937. [
  23938. x + width + textHeight,
  23939. y + height + textHeight
  23940. ],
  23941. [
  23942. x + width + 1,
  23943. y + height
  23944. ],
  23945. [
  23946. x + width + 1,
  23947. y
  23948. ]
  23949. ];
  23950. textXEnd = x + width + textWidth / 2 + textHeight;
  23951. textYEnd = textYStart;
  23952. coverRectEnd = {
  23953. x: x + width,
  23954. y: y + height,
  23955. width: textWidth + textHeight,
  23956. height: textHeight
  23957. };
  23958. } else {
  23959. pointListStart = [
  23960. [
  23961. x,
  23962. y + height
  23963. ],
  23964. [
  23965. x,
  23966. y - textHeight
  23967. ],
  23968. [
  23969. x - textHeight,
  23970. y - textHeight
  23971. ],
  23972. [
  23973. x - 1,
  23974. y
  23975. ],
  23976. [
  23977. x - 1,
  23978. y + height
  23979. ]
  23980. ];
  23981. textXStart = x - textWidth / 2 - textHeight;
  23982. textYStart = y - textHeight / 2 - 2;
  23983. coverRectStart = {
  23984. x: x - textWidth - textHeight,
  23985. y: y - textHeight,
  23986. width: textWidth + textHeight,
  23987. height: textHeight
  23988. };
  23989. pointListEnd = [
  23990. [
  23991. x + width,
  23992. y + height
  23993. ],
  23994. [
  23995. x + width,
  23996. y - textHeight
  23997. ],
  23998. [
  23999. x + width + textHeight,
  24000. y - textHeight
  24001. ],
  24002. [
  24003. x + width + 1,
  24004. y
  24005. ],
  24006. [
  24007. x + width + 1,
  24008. y + height
  24009. ]
  24010. ];
  24011. textXEnd = x + width + textWidth / 2 + textHeight;
  24012. textYEnd = textYStart;
  24013. coverRectEnd = {
  24014. x: x + width,
  24015. y: y - textHeight,
  24016. width: textWidth + textHeight,
  24017. height: textHeight
  24018. };
  24019. }
  24020. } else {
  24021. textWidth += textHeight;
  24022. if (this.dataRangeOption.x != 'right') {
  24023. pointListStart = [
  24024. [
  24025. x,
  24026. y
  24027. ],
  24028. [
  24029. x + width + textHeight,
  24030. y
  24031. ],
  24032. [
  24033. x + width + textHeight,
  24034. y - textHeight
  24035. ],
  24036. [
  24037. x + width,
  24038. y - 1
  24039. ],
  24040. [
  24041. x,
  24042. y - 1
  24043. ]
  24044. ];
  24045. textXStart = x + width + textWidth / 2 + textHeight / 2;
  24046. textYStart = y - textHeight / 2;
  24047. coverRectStart = {
  24048. x: x + width,
  24049. y: y - textHeight,
  24050. width: textWidth + textHeight,
  24051. height: textHeight
  24052. };
  24053. pointListEnd = [
  24054. [
  24055. x,
  24056. y + height
  24057. ],
  24058. [
  24059. x + width + textHeight,
  24060. y + height
  24061. ],
  24062. [
  24063. x + width + textHeight,
  24064. y + textHeight + height
  24065. ],
  24066. [
  24067. x + width,
  24068. y + 1 + height
  24069. ],
  24070. [
  24071. x,
  24072. y + height + 1
  24073. ]
  24074. ];
  24075. textXEnd = textXStart;
  24076. textYEnd = y + height + textHeight / 2;
  24077. coverRectEnd = {
  24078. x: x + width,
  24079. y: y + height,
  24080. width: textWidth + textHeight,
  24081. height: textHeight
  24082. };
  24083. } else {
  24084. pointListStart = [
  24085. [
  24086. x + width,
  24087. y
  24088. ],
  24089. [
  24090. x - textHeight,
  24091. y
  24092. ],
  24093. [
  24094. x - textHeight,
  24095. y - textHeight
  24096. ],
  24097. [
  24098. x,
  24099. y - 1
  24100. ],
  24101. [
  24102. x + width,
  24103. y - 1
  24104. ]
  24105. ];
  24106. textXStart = x - textWidth / 2 - textHeight / 2;
  24107. textYStart = y - textHeight / 2;
  24108. coverRectStart = {
  24109. x: x - textWidth - textHeight,
  24110. y: y - textHeight,
  24111. width: textWidth + textHeight,
  24112. height: textHeight
  24113. };
  24114. pointListEnd = [
  24115. [
  24116. x + width,
  24117. y + height
  24118. ],
  24119. [
  24120. x - textHeight,
  24121. y + height
  24122. ],
  24123. [
  24124. x - textHeight,
  24125. y + textHeight + height
  24126. ],
  24127. [
  24128. x,
  24129. y + 1 + height
  24130. ],
  24131. [
  24132. x + width,
  24133. y + height + 1
  24134. ]
  24135. ];
  24136. textXEnd = textXStart;
  24137. textYEnd = y + height + textHeight / 2;
  24138. coverRectEnd = {
  24139. x: x - textWidth - textHeight,
  24140. y: y + height,
  24141. width: textWidth + textHeight,
  24142. height: textHeight
  24143. };
  24144. }
  24145. }
  24146. this._startShape = {
  24147. style: {
  24148. pointList: pointListStart,
  24149. text: this._textFormat(this.dataRangeOption.max),
  24150. textX: textXStart,
  24151. textY: textYStart,
  24152. textFont: font,
  24153. color: this.getColor(this.dataRangeOption.max),
  24154. rect: coverRectStart,
  24155. x: pointListStart[0][0],
  24156. y: pointListStart[0][1],
  24157. _x: pointListStart[0][0],
  24158. _y: pointListStart[0][1]
  24159. }
  24160. };
  24161. this._startShape.highlightStyle = {
  24162. strokeColor: this._startShape.style.color,
  24163. lineWidth: 1
  24164. };
  24165. this._endShape = {
  24166. style: {
  24167. pointList: pointListEnd,
  24168. text: this._textFormat(this.dataRangeOption.min),
  24169. textX: textXEnd,
  24170. textY: textYEnd,
  24171. textFont: font,
  24172. color: this.getColor(this.dataRangeOption.min),
  24173. rect: coverRectEnd,
  24174. x: pointListEnd[0][0],
  24175. y: pointListEnd[0][1],
  24176. _x: pointListEnd[0][0],
  24177. _y: pointListEnd[0][1]
  24178. }
  24179. };
  24180. this._endShape.highlightStyle = {
  24181. strokeColor: this._endShape.style.color,
  24182. lineWidth: 1
  24183. };
  24184. this._startShape.zlevel = this._endShape.zlevel = this.getZlevelBase();
  24185. this._startShape.z = this._endShape.z = this.getZBase() + 1;
  24186. this._startShape.draggable = this._endShape.draggable = true;
  24187. this._startShape.ondrift = this._endShape.ondrift = this._ondrift;
  24188. this._startShape.ondragend = this._endShape.ondragend = this._ondragend;
  24189. this._startShape.style.textColor = this._endShape.style.textColor = this.dataRangeOption.textStyle.color;
  24190. this._startShape.style.textAlign = this._endShape.style.textAlign = 'center';
  24191. this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
  24192. this._startShape.style.textBaseline = this._endShape.style.textBaseline = 'middle';
  24193. this._startShape.style.width = this._endShape.style.width = 0;
  24194. this._startShape.style.height = this._endShape.style.height = 0;
  24195. this._startShape.style.textPosition = this._endShape.style.textPosition = 'specific';
  24196. this._startShape = new HandlePolygonShape(this._startShape);
  24197. this._endShape = new HandlePolygonShape(this._endShape);
  24198. this.shapeList.push(this._startShape);
  24199. this.shapeList.push(this._endShape);
  24200. },
  24201. _bulidMask: function () {
  24202. var x = this._calculableLocation.x;
  24203. var y = this._calculableLocation.y;
  24204. var width = this._calculableLocation.width;
  24205. var height = this._calculableLocation.height;
  24206. this._startMask = {
  24207. zlevel: this.getZlevelBase(),
  24208. z: this.getZBase() + 1,
  24209. style: {
  24210. x: x,
  24211. y: y,
  24212. width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
  24213. height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
  24214. color: '#ccc'
  24215. },
  24216. hoverable: false
  24217. };
  24218. this._endMask = {
  24219. zlevel: this.getZlevelBase(),
  24220. z: this.getZBase() + 1,
  24221. style: {
  24222. x: this.dataRangeOption.orient == 'horizontal' ? x + width : x,
  24223. y: this.dataRangeOption.orient == 'horizontal' ? y : y + height,
  24224. width: this.dataRangeOption.orient == 'horizontal' ? 0 : width,
  24225. height: this.dataRangeOption.orient == 'horizontal' ? height : 0,
  24226. color: '#ccc'
  24227. },
  24228. hoverable: false
  24229. };
  24230. this._startMask = new RectangleShape(this._startMask);
  24231. this._endMask = new RectangleShape(this._endMask);
  24232. this.shapeList.push(this._startMask);
  24233. this.shapeList.push(this._endMask);
  24234. },
  24235. _buildBackground: function () {
  24236. var padding = this.reformCssArray(this.dataRangeOption.padding);
  24237. this.shapeList.push(new RectangleShape({
  24238. zlevel: this.getZlevelBase(),
  24239. z: this.getZBase(),
  24240. hoverable: false,
  24241. style: {
  24242. x: this._itemGroupLocation.x - padding[3],
  24243. y: this._itemGroupLocation.y - padding[0],
  24244. width: this._itemGroupLocation.width + padding[3] + padding[1],
  24245. height: this._itemGroupLocation.height + padding[0] + padding[2],
  24246. brushType: this.dataRangeOption.borderWidth === 0 ? 'fill' : 'both',
  24247. color: this.dataRangeOption.backgroundColor,
  24248. strokeColor: this.dataRangeOption.borderColor,
  24249. lineWidth: this.dataRangeOption.borderWidth
  24250. }
  24251. }));
  24252. },
  24253. _getItemGroupLocation: function () {
  24254. var data = this._valueTextList;
  24255. var dataLength = data.length;
  24256. var itemGap = this.dataRangeOption.itemGap;
  24257. var itemWidth = this.dataRangeOption.itemWidth;
  24258. var itemHeight = this.dataRangeOption.itemHeight;
  24259. var totalWidth = 0;
  24260. var totalHeight = 0;
  24261. var font = this.getFont(this.dataRangeOption.textStyle);
  24262. var textHeight = zrArea.getTextHeight('国', font);
  24263. var mSize = 10;
  24264. if (this.dataRangeOption.orient == 'horizontal') {
  24265. if (this.dataRangeOption.text || this._isContinuity()) {
  24266. totalWidth = (this._isContinuity() ? itemWidth * mSize + itemGap : dataLength * (itemWidth + itemGap)) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[0] != 'undefined' ? zrArea.getTextWidth(this.dataRangeOption.text[0], font) + this._textGap : 0) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[1] != 'undefined' ? zrArea.getTextWidth(this.dataRangeOption.text[1], font) + this._textGap : 0);
  24267. } else {
  24268. itemWidth += 5;
  24269. for (var i = 0; i < dataLength; i++) {
  24270. totalWidth += itemWidth + zrArea.getTextWidth(data[i], font) + itemGap;
  24271. }
  24272. }
  24273. totalWidth -= itemGap;
  24274. totalHeight = Math.max(textHeight, itemHeight);
  24275. } else {
  24276. var maxWidth;
  24277. if (this.dataRangeOption.text || this._isContinuity()) {
  24278. totalHeight = (this._isContinuity() ? itemHeight * mSize + itemGap : dataLength * (itemHeight + itemGap)) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[0] != 'undefined' ? this._textGap + textHeight : 0) + (this.dataRangeOption.text && typeof this.dataRangeOption.text[1] != 'undefined' ? this._textGap + textHeight : 0);
  24279. maxWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[0] || '', font), zrArea.getTextWidth(this.dataRangeOption.text && this.dataRangeOption.text[1] || '', font));
  24280. totalWidth = Math.max(itemWidth, maxWidth);
  24281. } else {
  24282. totalHeight = (itemHeight + itemGap) * dataLength;
  24283. itemWidth += 5;
  24284. maxWidth = 0;
  24285. for (var i = 0; i < dataLength; i++) {
  24286. maxWidth = Math.max(maxWidth, zrArea.getTextWidth(data[i], font));
  24287. }
  24288. totalWidth = itemWidth + maxWidth;
  24289. }
  24290. totalHeight -= itemGap;
  24291. }
  24292. var padding = this.reformCssArray(this.dataRangeOption.padding);
  24293. var x;
  24294. var zrWidth = this.zr.getWidth();
  24295. switch (this.dataRangeOption.x) {
  24296. case 'center':
  24297. x = Math.floor((zrWidth - totalWidth) / 2);
  24298. break;
  24299. case 'left':
  24300. x = padding[3] + this.dataRangeOption.borderWidth;
  24301. break;
  24302. case 'right':
  24303. x = zrWidth - totalWidth - padding[1] - this.dataRangeOption.borderWidth;
  24304. break;
  24305. default:
  24306. x = this.parsePercent(this.dataRangeOption.x, zrWidth);
  24307. x = isNaN(x) ? 0 : x;
  24308. break;
  24309. }
  24310. var y;
  24311. var zrHeight = this.zr.getHeight();
  24312. switch (this.dataRangeOption.y) {
  24313. case 'top':
  24314. y = padding[0] + this.dataRangeOption.borderWidth;
  24315. break;
  24316. case 'bottom':
  24317. y = zrHeight - totalHeight - padding[2] - this.dataRangeOption.borderWidth;
  24318. break;
  24319. case 'center':
  24320. y = Math.floor((zrHeight - totalHeight) / 2);
  24321. break;
  24322. default:
  24323. y = this.parsePercent(this.dataRangeOption.y, zrHeight);
  24324. y = isNaN(y) ? 0 : y;
  24325. break;
  24326. }
  24327. if (this.dataRangeOption.calculable) {
  24328. var handlerWidth = Math.max(zrArea.getTextWidth(this.dataRangeOption.max, font), zrArea.getTextWidth(this.dataRangeOption.min, font)) + textHeight;
  24329. if (this.dataRangeOption.orient == 'horizontal') {
  24330. if (x < handlerWidth) {
  24331. x = handlerWidth;
  24332. }
  24333. if (x + totalWidth + handlerWidth > zrWidth) {
  24334. x -= handlerWidth;
  24335. }
  24336. } else {
  24337. if (y < textHeight) {
  24338. y = textHeight;
  24339. }
  24340. if (y + totalHeight + textHeight > zrHeight) {
  24341. y -= textHeight;
  24342. }
  24343. }
  24344. }
  24345. return {
  24346. x: x,
  24347. y: y,
  24348. width: totalWidth,
  24349. height: totalHeight
  24350. };
  24351. },
  24352. _getTextShape: function (x, y, text) {
  24353. return {
  24354. zlevel: this.getZlevelBase(),
  24355. z: this.getZBase(),
  24356. style: {
  24357. x: this.dataRangeOption.orient == 'horizontal' ? x : this._itemGroupLocation.x + this._itemGroupLocation.width / 2,
  24358. y: this.dataRangeOption.orient == 'horizontal' ? this._itemGroupLocation.y + this._itemGroupLocation.height / 2 : y,
  24359. color: this.dataRangeOption.textStyle.color,
  24360. text: text,
  24361. textFont: this.getFont(this.dataRangeOption.textStyle),
  24362. textBaseline: this.dataRangeOption.orient == 'horizontal' ? 'middle' : 'top',
  24363. textAlign: this.dataRangeOption.orient == 'horizontal' ? 'left' : 'center'
  24364. },
  24365. hoverable: false
  24366. };
  24367. },
  24368. _getItemShape: function (x, y, width, height, color) {
  24369. return {
  24370. zlevel: this.getZlevelBase(),
  24371. z: this.getZBase(),
  24372. style: {
  24373. x: x,
  24374. y: y + 1,
  24375. width: width,
  24376. height: height - 2,
  24377. color: color
  24378. },
  24379. highlightStyle: {
  24380. strokeColor: color,
  24381. lineWidth: 1
  24382. }
  24383. };
  24384. },
  24385. __ondrift: function (shape, dx, dy) {
  24386. var x = this._calculableLocation.x;
  24387. var y = this._calculableLocation.y;
  24388. var width = this._calculableLocation.width;
  24389. var height = this._calculableLocation.height;
  24390. if (this.dataRangeOption.orient == 'horizontal') {
  24391. if (shape.style.x + dx <= x) {
  24392. shape.style.x = x;
  24393. } else if (shape.style.x + dx + shape.style.width >= x + width) {
  24394. shape.style.x = x + width - shape.style.width;
  24395. } else {
  24396. shape.style.x += dx;
  24397. }
  24398. } else {
  24399. if (shape.style.y + dy <= y) {
  24400. shape.style.y = y;
  24401. } else if (shape.style.y + dy + shape.style.height >= y + height) {
  24402. shape.style.y = y + height - shape.style.height;
  24403. } else {
  24404. shape.style.y += dy;
  24405. }
  24406. }
  24407. if (shape._type == 'filler') {
  24408. this._syncHandleShape();
  24409. } else {
  24410. this._syncFillerShape(shape);
  24411. }
  24412. if (this.dataRangeOption.realtime) {
  24413. this._dispatchDataRange();
  24414. }
  24415. return true;
  24416. },
  24417. __ondragend: function () {
  24418. this.isDragend = true;
  24419. },
  24420. ondragend: function (param, status) {
  24421. if (!this.isDragend || !param.target) {
  24422. return;
  24423. }
  24424. status.dragOut = true;
  24425. status.dragIn = true;
  24426. if (!this.dataRangeOption.realtime) {
  24427. this._dispatchDataRange();
  24428. }
  24429. status.needRefresh = false;
  24430. this.isDragend = false;
  24431. return;
  24432. },
  24433. _syncShapeFromRange: function () {
  24434. var range = this.dataRangeOption.range || {};
  24435. var optRangeStart = range.start;
  24436. var optRangeEnd = range.end;
  24437. if (optRangeEnd < optRangeStart) {
  24438. optRangeStart = [
  24439. optRangeEnd,
  24440. optRangeEnd = optRangeStart
  24441. ][0];
  24442. }
  24443. this._range.end = optRangeStart != null ? optRangeStart : this._range.end != null ? this._range.end : 0;
  24444. this._range.start = optRangeEnd != null ? optRangeEnd : this._range.start != null ? this._range.start : 100;
  24445. if (this._range.start != 100 || this._range.end !== 0) {
  24446. if (this.dataRangeOption.orient == 'horizontal') {
  24447. var width = this._fillerShape.style.width;
  24448. this._fillerShape.style.x += width * (100 - this._range.start) / 100;
  24449. this._fillerShape.style.width = width * (this._range.start - this._range.end) / 100;
  24450. } else {
  24451. var height = this._fillerShape.style.height;
  24452. this._fillerShape.style.y += height * (100 - this._range.start) / 100;
  24453. this._fillerShape.style.height = height * (this._range.start - this._range.end) / 100;
  24454. }
  24455. this.zr.modShape(this._fillerShape.id);
  24456. this._syncHandleShape();
  24457. }
  24458. },
  24459. _syncHandleShape: function () {
  24460. var x = this._calculableLocation.x;
  24461. var y = this._calculableLocation.y;
  24462. var width = this._calculableLocation.width;
  24463. var height = this._calculableLocation.height;
  24464. if (this.dataRangeOption.orient == 'horizontal') {
  24465. this._startShape.style.x = this._fillerShape.style.x;
  24466. this._startMask.style.width = this._startShape.style.x - x;
  24467. this._endShape.style.x = this._fillerShape.style.x + this._fillerShape.style.width;
  24468. this._endMask.style.x = this._endShape.style.x;
  24469. this._endMask.style.width = x + width - this._endShape.style.x;
  24470. this._range.start = Math.ceil(100 - (this._startShape.style.x - x) / width * 100);
  24471. this._range.end = Math.floor(100 - (this._endShape.style.x - x) / width * 100);
  24472. } else {
  24473. this._startShape.style.y = this._fillerShape.style.y;
  24474. this._startMask.style.height = this._startShape.style.y - y;
  24475. this._endShape.style.y = this._fillerShape.style.y + this._fillerShape.style.height;
  24476. this._endMask.style.y = this._endShape.style.y;
  24477. this._endMask.style.height = y + height - this._endShape.style.y;
  24478. this._range.start = Math.ceil(100 - (this._startShape.style.y - y) / height * 100);
  24479. this._range.end = Math.floor(100 - (this._endShape.style.y - y) / height * 100);
  24480. }
  24481. this._syncShape();
  24482. },
  24483. _syncFillerShape: function (e) {
  24484. var x = this._calculableLocation.x;
  24485. var y = this._calculableLocation.y;
  24486. var width = this._calculableLocation.width;
  24487. var height = this._calculableLocation.height;
  24488. var a;
  24489. var b;
  24490. if (this.dataRangeOption.orient == 'horizontal') {
  24491. a = this._startShape.style.x;
  24492. b = this._endShape.style.x;
  24493. if (e.id == this._startShape.id && a >= b) {
  24494. b = a;
  24495. this._endShape.style.x = a;
  24496. } else if (e.id == this._endShape.id && a >= b) {
  24497. a = b;
  24498. this._startShape.style.x = a;
  24499. }
  24500. this._fillerShape.style.x = a;
  24501. this._fillerShape.style.width = b - a;
  24502. this._startMask.style.width = a - x;
  24503. this._endMask.style.x = b;
  24504. this._endMask.style.width = x + width - b;
  24505. this._range.start = Math.ceil(100 - (a - x) / width * 100);
  24506. this._range.end = Math.floor(100 - (b - x) / width * 100);
  24507. } else {
  24508. a = this._startShape.style.y;
  24509. b = this._endShape.style.y;
  24510. if (e.id == this._startShape.id && a >= b) {
  24511. b = a;
  24512. this._endShape.style.y = a;
  24513. } else if (e.id == this._endShape.id && a >= b) {
  24514. a = b;
  24515. this._startShape.style.y = a;
  24516. }
  24517. this._fillerShape.style.y = a;
  24518. this._fillerShape.style.height = b - a;
  24519. this._startMask.style.height = a - y;
  24520. this._endMask.style.y = b;
  24521. this._endMask.style.height = y + height - b;
  24522. this._range.start = Math.ceil(100 - (a - y) / height * 100);
  24523. this._range.end = Math.floor(100 - (b - y) / height * 100);
  24524. }
  24525. this._syncShape();
  24526. },
  24527. _syncShape: function () {
  24528. this._startShape.position = [
  24529. this._startShape.style.x - this._startShape.style._x,
  24530. this._startShape.style.y - this._startShape.style._y
  24531. ];
  24532. this._startShape.style.text = this._textFormat(this._gap * this._range.start + this.dataRangeOption.min);
  24533. this._startShape.style.color = this._startShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.start + this.dataRangeOption.min);
  24534. this._endShape.position = [
  24535. this._endShape.style.x - this._endShape.style._x,
  24536. this._endShape.style.y - this._endShape.style._y
  24537. ];
  24538. this._endShape.style.text = this._textFormat(this._gap * this._range.end + this.dataRangeOption.min);
  24539. this._endShape.style.color = this._endShape.highlightStyle.strokeColor = this.getColor(this._gap * this._range.end + this.dataRangeOption.min);
  24540. this.zr.modShape(this._startShape.id);
  24541. this.zr.modShape(this._endShape.id);
  24542. this.zr.modShape(this._startMask.id);
  24543. this.zr.modShape(this._endMask.id);
  24544. this.zr.modShape(this._fillerShape.id);
  24545. this.zr.refreshNextFrame();
  24546. },
  24547. _dispatchDataRange: function () {
  24548. this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE, null, {
  24549. range: {
  24550. start: this._range.end,
  24551. end: this._range.start
  24552. }
  24553. }, this.myChart);
  24554. },
  24555. __dataRangeSelected: function (param) {
  24556. if (this.dataRangeOption.selectedMode === 'single') {
  24557. for (var k in this._selectedMap) {
  24558. this._selectedMap[k] = false;
  24559. }
  24560. }
  24561. var idx = param.target._idx;
  24562. this._selectedMap[idx] = !this._selectedMap[idx];
  24563. var valueMax;
  24564. var valueMin;
  24565. if (this._useCustomizedSplit()) {
  24566. valueMax = this._splitList[idx].max;
  24567. valueMin = this._splitList[idx].min;
  24568. } else {
  24569. valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
  24570. valueMin = valueMax - this._gap;
  24571. }
  24572. this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_SELECTED, param.event, {
  24573. selected: this._selectedMap,
  24574. target: idx,
  24575. valueMax: valueMax,
  24576. valueMin: valueMin
  24577. }, this.myChart);
  24578. this.messageCenter.dispatch(ecConfig.EVENT.REFRESH, null, null, this.myChart);
  24579. },
  24580. __dispatchHoverLink: function (param) {
  24581. var valueMin;
  24582. var valueMax;
  24583. if (this.dataRangeOption.calculable) {
  24584. var totalValue = this.dataRangeOption.max - this.dataRangeOption.min;
  24585. var curValue;
  24586. if (this.dataRangeOption.orient == 'horizontal') {
  24587. curValue = (1 - (zrEvent.getX(param.event) - this._calculableLocation.x) / this._calculableLocation.width) * totalValue;
  24588. } else {
  24589. curValue = (1 - (zrEvent.getY(param.event) - this._calculableLocation.y) / this._calculableLocation.height) * totalValue;
  24590. }
  24591. valueMin = curValue - totalValue * 0.05;
  24592. valueMax = curValue + totalValue * 0.05;
  24593. } else if (this._useCustomizedSplit()) {
  24594. var idx = param.target._idx;
  24595. valueMax = this._splitList[idx].max;
  24596. valueMin = this._splitList[idx].min;
  24597. } else {
  24598. var idx = param.target._idx;
  24599. valueMax = (this._colorList.length - idx) * this._gap + this.dataRangeOption.min;
  24600. valueMin = valueMax - this._gap;
  24601. }
  24602. this.messageCenter.dispatch(ecConfig.EVENT.DATA_RANGE_HOVERLINK, param.event, {
  24603. valueMin: valueMin,
  24604. valueMax: valueMax
  24605. }, this.myChart);
  24606. },
  24607. __onhoverlink: function (param) {
  24608. if (this.dataRangeOption.show && this.dataRangeOption.hoverLink && this._indicatorShape && param && param.seriesIndex != null && param.dataIndex != null) {
  24609. var curValue = param.value;
  24610. if (curValue === '' || isNaN(curValue)) {
  24611. return;
  24612. }
  24613. if (curValue < this.dataRangeOption.min) {
  24614. curValue = this.dataRangeOption.min;
  24615. } else if (curValue > this.dataRangeOption.max) {
  24616. curValue = this.dataRangeOption.max;
  24617. }
  24618. if (this.dataRangeOption.orient == 'horizontal') {
  24619. this._indicatorShape.position = [
  24620. (this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.width,
  24621. 0
  24622. ];
  24623. } else {
  24624. this._indicatorShape.position = [
  24625. 0,
  24626. (this.dataRangeOption.max - curValue) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._calculableLocation.height
  24627. ];
  24628. }
  24629. this._indicatorShape.style.text = this._textFormat(param.value);
  24630. this._indicatorShape.style.color = this.getColor(curValue);
  24631. this.zr.addHoverShape(this._indicatorShape);
  24632. }
  24633. },
  24634. _textFormat: function (valueStart, valueEnd) {
  24635. var dataRangeOption = this.dataRangeOption;
  24636. if (valueStart !== -Number.MAX_VALUE) {
  24637. valueStart = (+valueStart).toFixed(dataRangeOption.precision);
  24638. }
  24639. if (valueEnd != null && valueEnd !== Number.MAX_VALUE) {
  24640. valueEnd = (+valueEnd).toFixed(dataRangeOption.precision);
  24641. }
  24642. if (dataRangeOption.formatter) {
  24643. if (typeof dataRangeOption.formatter == 'string') {
  24644. return dataRangeOption.formatter.replace('{value}', valueStart === -Number.MAX_VALUE ? 'min' : valueStart).replace('{value2}', valueEnd === Number.MAX_VALUE ? 'max' : valueEnd);
  24645. } else if (typeof dataRangeOption.formatter == 'function') {
  24646. return dataRangeOption.formatter.call(this.myChart, valueStart, valueEnd);
  24647. }
  24648. }
  24649. if (valueEnd == null) {
  24650. return valueStart;
  24651. } else {
  24652. if (valueStart === -Number.MAX_VALUE) {
  24653. return '< ' + valueEnd;
  24654. } else if (valueEnd === Number.MAX_VALUE) {
  24655. return '> ' + valueStart;
  24656. } else {
  24657. return valueStart + ' - ' + valueEnd;
  24658. }
  24659. }
  24660. },
  24661. _isContinuity: function () {
  24662. var dataRangeOption = this.dataRangeOption;
  24663. return !(dataRangeOption.splitList ? dataRangeOption.splitList.length > 0 : dataRangeOption.splitNumber > 0) || dataRangeOption.calculable;
  24664. },
  24665. _useCustomizedSplit: function () {
  24666. var dataRangeOption = this.dataRangeOption;
  24667. return dataRangeOption.splitList && dataRangeOption.splitList.length > 0;
  24668. },
  24669. _buildColorList: function (splitNumber) {
  24670. this._colorList = zrColor.getGradientColors(this.dataRangeOption.color, Math.max((splitNumber - this.dataRangeOption.color.length) / (this.dataRangeOption.color.length - 1), 0) + 1);
  24671. if (this._colorList.length > splitNumber) {
  24672. var len = this._colorList.length;
  24673. var newColorList = [this._colorList[0]];
  24674. var step = len / (splitNumber - 1);
  24675. for (var i = 1; i < splitNumber - 1; i++) {
  24676. newColorList.push(this._colorList[Math.floor(i * step)]);
  24677. }
  24678. newColorList.push(this._colorList[len - 1]);
  24679. this._colorList = newColorList;
  24680. }
  24681. if (this._useCustomizedSplit()) {
  24682. var splitList = this._splitList;
  24683. for (var i = 0, len = splitList.length; i < len; i++) {
  24684. if (splitList[i].color) {
  24685. this._colorList[i] = splitList[i].color;
  24686. }
  24687. }
  24688. }
  24689. },
  24690. _buildGap: function (splitNumber) {
  24691. if (!this._useCustomizedSplit()) {
  24692. var precision = this.dataRangeOption.precision;
  24693. this._gap = (this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber;
  24694. while (this._gap.toFixed(precision) - 0 != this._gap && precision < 5) {
  24695. precision++;
  24696. }
  24697. this.dataRangeOption.precision = precision;
  24698. this._gap = ((this.dataRangeOption.max - this.dataRangeOption.min) / splitNumber).toFixed(precision) - 0;
  24699. }
  24700. },
  24701. _buildDataList: function (splitNumber) {
  24702. var valueTextList = this._valueTextList = [];
  24703. var dataRangeOption = this.dataRangeOption;
  24704. var useCustomizedSplit = this._useCustomizedSplit();
  24705. for (var i = 0; i < splitNumber; i++) {
  24706. this._selectedMap[i] = true;
  24707. var text = '';
  24708. if (useCustomizedSplit) {
  24709. var splitListItem = this._splitList[splitNumber - 1 - i];
  24710. if (splitListItem.label != null) {
  24711. text = splitListItem.label;
  24712. } else if (splitListItem.single != null) {
  24713. text = this._textFormat(splitListItem.single);
  24714. } else {
  24715. text = this._textFormat(splitListItem.min, splitListItem.max);
  24716. }
  24717. } else {
  24718. text = this._textFormat(i * this._gap + dataRangeOption.min, (i + 1) * this._gap + dataRangeOption.min);
  24719. }
  24720. valueTextList.unshift(text);
  24721. }
  24722. },
  24723. _buildSplitList: function () {
  24724. if (!this._useCustomizedSplit()) {
  24725. return;
  24726. }
  24727. var splitList = this.dataRangeOption.splitList;
  24728. var splitRangeList = this._splitList = [];
  24729. for (var i = 0, len = splitList.length; i < len; i++) {
  24730. var splitListItem = splitList[i];
  24731. if (!splitListItem || splitListItem.start == null && splitListItem.end == null) {
  24732. throw new Error('Empty item exists in splitList!');
  24733. }
  24734. var reformedItem = {
  24735. label: splitListItem.label,
  24736. color: splitListItem.color
  24737. };
  24738. reformedItem.min = splitListItem.start;
  24739. reformedItem.max = splitListItem.end;
  24740. if (reformedItem.min > reformedItem.max) {
  24741. reformedItem.min = [
  24742. reformedItem.max,
  24743. reformedItem.max = reformedItem.min
  24744. ][0];
  24745. }
  24746. if (reformedItem.min === reformedItem.max) {
  24747. reformedItem.single = reformedItem.max;
  24748. }
  24749. if (reformedItem.min == null) {
  24750. reformedItem.min = -Number.MAX_VALUE;
  24751. }
  24752. if (reformedItem.max == null) {
  24753. reformedItem.max = Number.MAX_VALUE;
  24754. }
  24755. splitRangeList.push(reformedItem);
  24756. }
  24757. },
  24758. refresh: function (newOption) {
  24759. if (newOption) {
  24760. this.option = newOption;
  24761. this.option.dataRange = this.reformOption(this.option.dataRange);
  24762. var dataRangeOption = this.dataRangeOption = this.option.dataRange;
  24763. if (!this._useCustomizedSplit() && (dataRangeOption.min == null || dataRangeOption.max == null)) {
  24764. throw new Error('option.dataRange.min or option.dataRange.max has not been defined.');
  24765. }
  24766. if (!this.myChart.canvasSupported) {
  24767. dataRangeOption.realtime = false;
  24768. }
  24769. var splitNumber = this._isContinuity() ? 100 : this._useCustomizedSplit() ? dataRangeOption.splitList.length : dataRangeOption.splitNumber;
  24770. this._buildSplitList();
  24771. this._buildColorList(splitNumber);
  24772. this._buildGap(splitNumber);
  24773. this._buildDataList(splitNumber);
  24774. }
  24775. this.clear();
  24776. this._buildShape();
  24777. },
  24778. getColor: function (value) {
  24779. if (isNaN(value)) {
  24780. return null;
  24781. }
  24782. var idx;
  24783. if (!this._useCustomizedSplit()) {
  24784. if (this.dataRangeOption.min == this.dataRangeOption.max) {
  24785. return this._colorList[0];
  24786. }
  24787. if (value < this.dataRangeOption.min) {
  24788. value = this.dataRangeOption.min;
  24789. } else if (value > this.dataRangeOption.max) {
  24790. value = this.dataRangeOption.max;
  24791. }
  24792. if (this.dataRangeOption.calculable) {
  24793. if (value - (this._gap * this._range.start + this.dataRangeOption.min) > 0.00005 || value - (this._gap * this._range.end + this.dataRangeOption.min) < -0.00005) {
  24794. return null;
  24795. }
  24796. }
  24797. idx = this._colorList.length - Math.ceil((value - this.dataRangeOption.min) / (this.dataRangeOption.max - this.dataRangeOption.min) * this._colorList.length);
  24798. if (idx == this._colorList.length) {
  24799. idx--;
  24800. }
  24801. } else {
  24802. var splitRangeList = this._splitList;
  24803. for (var i = 0, len = splitRangeList.length; i < len; i++) {
  24804. if (splitRangeList[i].min <= value && splitRangeList[i].max >= value) {
  24805. idx = i;
  24806. break;
  24807. }
  24808. }
  24809. }
  24810. if (this._selectedMap[idx]) {
  24811. return this._colorList[idx];
  24812. } else {
  24813. return null;
  24814. }
  24815. },
  24816. getColorByIndex: function (idx) {
  24817. if (idx >= this._colorList.length) {
  24818. idx = this._colorList.length - 1;
  24819. } else if (idx < 0) {
  24820. idx = 0;
  24821. }
  24822. return this._colorList[idx];
  24823. },
  24824. onbeforDispose: function () {
  24825. this.messageCenter.unbind(ecConfig.EVENT.HOVER, this._onhoverlink);
  24826. }
  24827. };
  24828. zrUtil.inherits(DataRange, Base);
  24829. require('../component').define('dataRange', DataRange);
  24830. return DataRange;
  24831. });define('echarts/util/shape/HandlePolygon', [
  24832. 'require',
  24833. 'zrender/shape/Base',
  24834. 'zrender/shape/Polygon',
  24835. 'zrender/tool/util'
  24836. ], function (require) {
  24837. var Base = require('zrender/shape/Base');
  24838. var PolygonShape = require('zrender/shape/Polygon');
  24839. var zrUtil = require('zrender/tool/util');
  24840. function HandlePolygon(options) {
  24841. Base.call(this, options);
  24842. }
  24843. HandlePolygon.prototype = {
  24844. type: 'handle-polygon',
  24845. buildPath: function (ctx, style) {
  24846. PolygonShape.prototype.buildPath(ctx, style);
  24847. },
  24848. isCover: function (x, y) {
  24849. var originPos = this.transformCoordToLocal(x, y);
  24850. x = originPos[0];
  24851. y = originPos[1];
  24852. var rect = this.style.rect;
  24853. if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
  24854. return true;
  24855. } else {
  24856. return false;
  24857. }
  24858. }
  24859. };
  24860. zrUtil.inherits(HandlePolygon, Base);
  24861. return HandlePolygon;
  24862. });define('echarts/chart/k', [
  24863. 'require',
  24864. './base',
  24865. '../util/shape/Candle',
  24866. '../component/axis',
  24867. '../component/grid',
  24868. '../component/dataZoom',
  24869. '../config',
  24870. '../util/ecData',
  24871. 'zrender/tool/util',
  24872. '../chart'
  24873. ], function (require) {
  24874. var ChartBase = require('./base');
  24875. var CandleShape = require('../util/shape/Candle');
  24876. require('../component/axis');
  24877. require('../component/grid');
  24878. require('../component/dataZoom');
  24879. var ecConfig = require('../config');
  24880. ecConfig.k = {
  24881. zlevel: 0,
  24882. z: 2,
  24883. clickable: true,
  24884. hoverable: true,
  24885. legendHoverLink: false,
  24886. xAxisIndex: 0,
  24887. yAxisIndex: 0,
  24888. itemStyle: {
  24889. normal: {
  24890. color: '#fff',
  24891. color0: '#00aa11',
  24892. lineStyle: {
  24893. width: 1,
  24894. color: '#ff3200',
  24895. color0: '#00aa11'
  24896. },
  24897. label: { show: false }
  24898. },
  24899. emphasis: { label: { show: false } }
  24900. }
  24901. };
  24902. var ecData = require('../util/ecData');
  24903. var zrUtil = require('zrender/tool/util');
  24904. function K(ecTheme, messageCenter, zr, option, myChart) {
  24905. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  24906. this.refresh(option);
  24907. }
  24908. K.prototype = {
  24909. type: ecConfig.CHART_TYPE_K,
  24910. _buildShape: function () {
  24911. var series = this.series;
  24912. this.selectedMap = {};
  24913. var _position2sIndexMap = {
  24914. top: [],
  24915. bottom: []
  24916. };
  24917. var xAxis;
  24918. for (var i = 0, l = series.length; i < l; i++) {
  24919. if (series[i].type === ecConfig.CHART_TYPE_K) {
  24920. series[i] = this.reformOption(series[i]);
  24921. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  24922. xAxis = this.component.xAxis.getAxis(series[i].xAxisIndex);
  24923. if (xAxis.type === ecConfig.COMPONENT_TYPE_AXIS_CATEGORY) {
  24924. _position2sIndexMap[xAxis.getPosition()].push(i);
  24925. }
  24926. }
  24927. }
  24928. for (var position in _position2sIndexMap) {
  24929. if (_position2sIndexMap[position].length > 0) {
  24930. this._buildSinglePosition(position, _position2sIndexMap[position]);
  24931. }
  24932. }
  24933. this.addShapeList();
  24934. },
  24935. _buildSinglePosition: function (position, seriesArray) {
  24936. var mapData = this._mapData(seriesArray);
  24937. var locationMap = mapData.locationMap;
  24938. var maxDataLength = mapData.maxDataLength;
  24939. if (maxDataLength === 0 || locationMap.length === 0) {
  24940. return;
  24941. }
  24942. this._buildHorizontal(seriesArray, maxDataLength, locationMap);
  24943. for (var i = 0, l = seriesArray.length; i < l; i++) {
  24944. this.buildMark(seriesArray[i]);
  24945. }
  24946. },
  24947. _mapData: function (seriesArray) {
  24948. var series = this.series;
  24949. var serie;
  24950. var serieName;
  24951. var legend = this.component.legend;
  24952. var locationMap = [];
  24953. var maxDataLength = 0;
  24954. for (var i = 0, l = seriesArray.length; i < l; i++) {
  24955. serie = series[seriesArray[i]];
  24956. serieName = serie.name;
  24957. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  24958. if (this.selectedMap[serieName]) {
  24959. locationMap.push(seriesArray[i]);
  24960. }
  24961. maxDataLength = Math.max(maxDataLength, serie.data.length);
  24962. }
  24963. return {
  24964. locationMap: locationMap,
  24965. maxDataLength: maxDataLength
  24966. };
  24967. },
  24968. _buildHorizontal: function (seriesArray, maxDataLength, locationMap) {
  24969. var series = this.series;
  24970. var seriesIndex;
  24971. var serie;
  24972. var xAxisIndex;
  24973. var categoryAxis;
  24974. var yAxisIndex;
  24975. var valueAxis;
  24976. var pointList = {};
  24977. var candleWidth;
  24978. var data;
  24979. var value;
  24980. var barMaxWidth;
  24981. for (var j = 0, k = locationMap.length; j < k; j++) {
  24982. seriesIndex = locationMap[j];
  24983. serie = series[seriesIndex];
  24984. xAxisIndex = serie.xAxisIndex || 0;
  24985. categoryAxis = this.component.xAxis.getAxis(xAxisIndex);
  24986. candleWidth = serie.barWidth || Math.floor(categoryAxis.getGap() / 2);
  24987. barMaxWidth = serie.barMaxWidth;
  24988. if (barMaxWidth && barMaxWidth < candleWidth) {
  24989. candleWidth = barMaxWidth;
  24990. }
  24991. yAxisIndex = serie.yAxisIndex || 0;
  24992. valueAxis = this.component.yAxis.getAxis(yAxisIndex);
  24993. pointList[seriesIndex] = [];
  24994. for (var i = 0, l = maxDataLength; i < l; i++) {
  24995. if (categoryAxis.getNameByIndex(i) == null) {
  24996. break;
  24997. }
  24998. data = serie.data[i];
  24999. value = this.getDataFromOption(data, '-');
  25000. if (value === '-' || value.length != 4) {
  25001. continue;
  25002. }
  25003. pointList[seriesIndex].push([
  25004. categoryAxis.getCoordByIndex(i),
  25005. candleWidth,
  25006. valueAxis.getCoord(value[0]),
  25007. valueAxis.getCoord(value[1]),
  25008. valueAxis.getCoord(value[2]),
  25009. valueAxis.getCoord(value[3]),
  25010. i,
  25011. categoryAxis.getNameByIndex(i)
  25012. ]);
  25013. }
  25014. }
  25015. this._buildKLine(seriesArray, pointList);
  25016. },
  25017. _buildKLine: function (seriesArray, pointList) {
  25018. var series = this.series;
  25019. var nLineWidth;
  25020. var nLineColor;
  25021. var nLineColor0;
  25022. var nColor;
  25023. var nColor0;
  25024. var eLineWidth;
  25025. var eLineColor;
  25026. var eLineColor0;
  25027. var eColor;
  25028. var eColor0;
  25029. var serie;
  25030. var queryTarget;
  25031. var data;
  25032. var seriesPL;
  25033. var singlePoint;
  25034. var candleType;
  25035. var seriesIndex;
  25036. for (var sIdx = 0, len = seriesArray.length; sIdx < len; sIdx++) {
  25037. seriesIndex = seriesArray[sIdx];
  25038. serie = series[seriesIndex];
  25039. seriesPL = pointList[seriesIndex];
  25040. if (this._isLarge(seriesPL)) {
  25041. seriesPL = this._getLargePointList(seriesPL);
  25042. }
  25043. if (serie.type === ecConfig.CHART_TYPE_K && seriesPL != null) {
  25044. queryTarget = serie;
  25045. nLineWidth = this.query(queryTarget, 'itemStyle.normal.lineStyle.width');
  25046. nLineColor = this.query(queryTarget, 'itemStyle.normal.lineStyle.color');
  25047. nLineColor0 = this.query(queryTarget, 'itemStyle.normal.lineStyle.color0');
  25048. nColor = this.query(queryTarget, 'itemStyle.normal.color');
  25049. nColor0 = this.query(queryTarget, 'itemStyle.normal.color0');
  25050. eLineWidth = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.width');
  25051. eLineColor = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color');
  25052. eLineColor0 = this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color0');
  25053. eColor = this.query(queryTarget, 'itemStyle.emphasis.color');
  25054. eColor0 = this.query(queryTarget, 'itemStyle.emphasis.color0');
  25055. for (var i = 0, l = seriesPL.length; i < l; i++) {
  25056. singlePoint = seriesPL[i];
  25057. data = serie.data[singlePoint[6]];
  25058. queryTarget = data;
  25059. candleType = singlePoint[3] < singlePoint[2];
  25060. this.shapeList.push(this._getCandle(seriesIndex, singlePoint[6], singlePoint[7], singlePoint[0], singlePoint[1], singlePoint[2], singlePoint[3], singlePoint[4], singlePoint[5], candleType ? this.query(queryTarget, 'itemStyle.normal.color') || nColor : this.query(queryTarget, 'itemStyle.normal.color0') || nColor0, this.query(queryTarget, 'itemStyle.normal.lineStyle.width') || nLineWidth, candleType ? this.query(queryTarget, 'itemStyle.normal.lineStyle.color') || nLineColor : this.query(queryTarget, 'itemStyle.normal.lineStyle.color0') || nLineColor0, candleType ? this.query(queryTarget, 'itemStyle.emphasis.color') || eColor || nColor : this.query(queryTarget, 'itemStyle.emphasis.color0') || eColor0 || nColor0, this.query(queryTarget, 'itemStyle.emphasis.lineStyle.width') || eLineWidth || nLineWidth, candleType ? this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color') || eLineColor || nLineColor : this.query(queryTarget, 'itemStyle.emphasis.lineStyle.color0') || eLineColor0 || nLineColor0));
  25061. }
  25062. }
  25063. }
  25064. },
  25065. _isLarge: function (singlePL) {
  25066. return singlePL[0][1] < 0.5;
  25067. },
  25068. _getLargePointList: function (singlePL) {
  25069. var total = this.component.grid.getWidth();
  25070. var len = singlePL.length;
  25071. var newList = [];
  25072. for (var i = 0; i < total; i++) {
  25073. newList[i] = singlePL[Math.floor(len / total * i)];
  25074. }
  25075. return newList;
  25076. },
  25077. _getCandle: function (seriesIndex, dataIndex, name, x, width, y0, y1, y2, y3, nColor, nLinewidth, nLineColor, eColor, eLinewidth, eLineColor) {
  25078. var series = this.series;
  25079. var serie = series[seriesIndex];
  25080. var data = serie.data[dataIndex];
  25081. var queryTarget = [
  25082. data,
  25083. serie
  25084. ];
  25085. var itemShape = {
  25086. zlevel: serie.zlevel,
  25087. z: serie.z,
  25088. clickable: this.deepQuery(queryTarget, 'clickable'),
  25089. hoverable: this.deepQuery(queryTarget, 'hoverable'),
  25090. style: {
  25091. x: x,
  25092. y: [
  25093. y0,
  25094. y1,
  25095. y2,
  25096. y3
  25097. ],
  25098. width: width,
  25099. color: nColor,
  25100. strokeColor: nLineColor,
  25101. lineWidth: nLinewidth,
  25102. brushType: 'both'
  25103. },
  25104. highlightStyle: {
  25105. color: eColor,
  25106. strokeColor: eLineColor,
  25107. lineWidth: eLinewidth
  25108. },
  25109. _seriesIndex: seriesIndex
  25110. };
  25111. itemShape = this.addLabel(itemShape, serie, data, name);
  25112. ecData.pack(itemShape, serie, seriesIndex, data, dataIndex, name);
  25113. itemShape = new CandleShape(itemShape);
  25114. return itemShape;
  25115. },
  25116. getMarkCoord: function (seriesIndex, mpData) {
  25117. var serie = this.series[seriesIndex];
  25118. var xAxis = this.component.xAxis.getAxis(serie.xAxisIndex);
  25119. var yAxis = this.component.yAxis.getAxis(serie.yAxisIndex);
  25120. return [
  25121. typeof mpData.xAxis != 'string' && xAxis.getCoordByIndex ? xAxis.getCoordByIndex(mpData.xAxis || 0) : xAxis.getCoord(mpData.xAxis || 0),
  25122. typeof mpData.yAxis != 'string' && yAxis.getCoordByIndex ? yAxis.getCoordByIndex(mpData.yAxis || 0) : yAxis.getCoord(mpData.yAxis || 0)
  25123. ];
  25124. },
  25125. refresh: function (newOption) {
  25126. if (newOption) {
  25127. this.option = newOption;
  25128. this.series = newOption.series;
  25129. }
  25130. this.backupShapeList();
  25131. this._buildShape();
  25132. },
  25133. addDataAnimation: function (params, done) {
  25134. var series = this.series;
  25135. var aniMap = {};
  25136. for (var i = 0, l = params.length; i < l; i++) {
  25137. aniMap[params[i][0]] = params[i];
  25138. }
  25139. var x;
  25140. var dx;
  25141. var y;
  25142. var serie;
  25143. var seriesIndex;
  25144. var dataIndex;
  25145. var aniCount = 0;
  25146. function animationDone() {
  25147. aniCount--;
  25148. if (aniCount === 0) {
  25149. done && done();
  25150. }
  25151. }
  25152. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  25153. seriesIndex = this.shapeList[i]._seriesIndex;
  25154. if (aniMap[seriesIndex] && !aniMap[seriesIndex][3]) {
  25155. if (this.shapeList[i].type === 'candle') {
  25156. dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
  25157. serie = series[seriesIndex];
  25158. if (aniMap[seriesIndex][2] && dataIndex === serie.data.length - 1) {
  25159. this.zr.delShape(this.shapeList[i].id);
  25160. continue;
  25161. } else if (!aniMap[seriesIndex][2] && dataIndex === 0) {
  25162. this.zr.delShape(this.shapeList[i].id);
  25163. continue;
  25164. }
  25165. dx = this.component.xAxis.getAxis(serie.xAxisIndex || 0).getGap();
  25166. x = aniMap[seriesIndex][2] ? dx : -dx;
  25167. y = 0;
  25168. aniCount++;
  25169. this.zr.animate(this.shapeList[i].id, '').when(this.query(this.option, 'animationDurationUpdate'), {
  25170. position: [
  25171. x,
  25172. y
  25173. ]
  25174. }).done(animationDone).start();
  25175. }
  25176. }
  25177. }
  25178. if (!aniCount) {
  25179. done && done();
  25180. }
  25181. }
  25182. };
  25183. zrUtil.inherits(K, ChartBase);
  25184. require('../chart').define('k', K);
  25185. return K;
  25186. });define('echarts/chart/pie', [
  25187. 'require',
  25188. './base',
  25189. 'zrender/shape/Text',
  25190. 'zrender/shape/Ring',
  25191. 'zrender/shape/Circle',
  25192. 'zrender/shape/Sector',
  25193. 'zrender/shape/Polyline',
  25194. '../config',
  25195. '../util/ecData',
  25196. 'zrender/tool/util',
  25197. 'zrender/tool/math',
  25198. 'zrender/tool/color',
  25199. '../chart'
  25200. ], function (require) {
  25201. var ChartBase = require('./base');
  25202. var TextShape = require('zrender/shape/Text');
  25203. var RingShape = require('zrender/shape/Ring');
  25204. var CircleShape = require('zrender/shape/Circle');
  25205. var SectorShape = require('zrender/shape/Sector');
  25206. var PolylineShape = require('zrender/shape/Polyline');
  25207. var ecConfig = require('../config');
  25208. ecConfig.pie = {
  25209. zlevel: 0,
  25210. z: 2,
  25211. clickable: true,
  25212. legendHoverLink: true,
  25213. center: [
  25214. '50%',
  25215. '50%'
  25216. ],
  25217. radius: [
  25218. 0,
  25219. '75%'
  25220. ],
  25221. clockWise: true,
  25222. startAngle: 90,
  25223. minAngle: 0,
  25224. selectedOffset: 10,
  25225. itemStyle: {
  25226. normal: {
  25227. borderColor: 'rgba(0,0,0,0)',
  25228. borderWidth: 1,
  25229. label: {
  25230. show: true,
  25231. position: 'outer'
  25232. },
  25233. labelLine: {
  25234. show: true,
  25235. length: 20,
  25236. lineStyle: {
  25237. width: 1,
  25238. type: 'solid'
  25239. }
  25240. }
  25241. },
  25242. emphasis: {
  25243. borderColor: 'rgba(0,0,0,0)',
  25244. borderWidth: 1,
  25245. label: { show: false },
  25246. labelLine: {
  25247. show: false,
  25248. length: 20,
  25249. lineStyle: {
  25250. width: 1,
  25251. type: 'solid'
  25252. }
  25253. }
  25254. }
  25255. }
  25256. };
  25257. var ecData = require('../util/ecData');
  25258. var zrUtil = require('zrender/tool/util');
  25259. var zrMath = require('zrender/tool/math');
  25260. var zrColor = require('zrender/tool/color');
  25261. function Pie(ecTheme, messageCenter, zr, option, myChart) {
  25262. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  25263. var self = this;
  25264. self.shapeHandler.onmouseover = function (param) {
  25265. var shape = param.target;
  25266. var seriesIndex = ecData.get(shape, 'seriesIndex');
  25267. var dataIndex = ecData.get(shape, 'dataIndex');
  25268. var percent = ecData.get(shape, 'special');
  25269. var center = [
  25270. shape.style.x,
  25271. shape.style.y
  25272. ];
  25273. var startAngle = shape.style.startAngle;
  25274. var endAngle = shape.style.endAngle;
  25275. var midAngle = ((endAngle + startAngle) / 2 + 360) % 360;
  25276. var defaultColor = shape.highlightStyle.color;
  25277. var label = self.getLabel(seriesIndex, dataIndex, percent, center, midAngle, defaultColor, true);
  25278. if (label) {
  25279. self.zr.addHoverShape(label);
  25280. }
  25281. var labelLine = self.getLabelLine(seriesIndex, dataIndex, center, shape.style.r0, shape.style.r, midAngle, defaultColor, true);
  25282. if (labelLine) {
  25283. self.zr.addHoverShape(labelLine);
  25284. }
  25285. };
  25286. this.refresh(option);
  25287. }
  25288. Pie.prototype = {
  25289. type: ecConfig.CHART_TYPE_PIE,
  25290. _buildShape: function () {
  25291. var series = this.series;
  25292. var legend = this.component.legend;
  25293. this.selectedMap = {};
  25294. this._selected = {};
  25295. var center;
  25296. var radius;
  25297. var pieCase;
  25298. this._selectedMode = false;
  25299. var serieName;
  25300. for (var i = 0, l = series.length; i < l; i++) {
  25301. if (series[i].type === ecConfig.CHART_TYPE_PIE) {
  25302. series[i] = this.reformOption(series[i]);
  25303. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  25304. serieName = series[i].name || '';
  25305. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  25306. if (!this.selectedMap[serieName]) {
  25307. continue;
  25308. }
  25309. center = this.parseCenter(this.zr, series[i].center);
  25310. radius = this.parseRadius(this.zr, series[i].radius);
  25311. this._selectedMode = this._selectedMode || series[i].selectedMode;
  25312. this._selected[i] = [];
  25313. if (this.deepQuery([
  25314. series[i],
  25315. this.option
  25316. ], 'calculable')) {
  25317. pieCase = {
  25318. zlevel: series[i].zlevel,
  25319. z: series[i].z,
  25320. hoverable: false,
  25321. style: {
  25322. x: center[0],
  25323. y: center[1],
  25324. r0: radius[0] <= 10 ? 0 : radius[0] - 10,
  25325. r: radius[1] + 10,
  25326. brushType: 'stroke',
  25327. lineWidth: 1,
  25328. strokeColor: series[i].calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor
  25329. }
  25330. };
  25331. ecData.pack(pieCase, series[i], i, undefined, -1);
  25332. this.setCalculable(pieCase);
  25333. pieCase = radius[0] <= 10 ? new CircleShape(pieCase) : new RingShape(pieCase);
  25334. this.shapeList.push(pieCase);
  25335. }
  25336. this._buildSinglePie(i);
  25337. this.buildMark(i);
  25338. }
  25339. }
  25340. this.addShapeList();
  25341. },
  25342. _buildSinglePie: function (seriesIndex) {
  25343. var series = this.series;
  25344. var serie = series[seriesIndex];
  25345. var data = serie.data;
  25346. var legend = this.component.legend;
  25347. var itemName;
  25348. var totalSelected = 0;
  25349. var totalSelectedValue0 = 0;
  25350. var totalValue = 0;
  25351. var maxValue = Number.NEGATIVE_INFINITY;
  25352. var singleShapeList = [];
  25353. for (var i = 0, l = data.length; i < l; i++) {
  25354. itemName = data[i].name;
  25355. this.selectedMap[itemName] = legend ? legend.isSelected(itemName) : true;
  25356. if (this.selectedMap[itemName] && !isNaN(data[i].value)) {
  25357. if (+data[i].value !== 0) {
  25358. totalSelected++;
  25359. } else {
  25360. totalSelectedValue0++;
  25361. }
  25362. totalValue += +data[i].value;
  25363. maxValue = Math.max(maxValue, +data[i].value);
  25364. }
  25365. }
  25366. if (totalValue === 0) {
  25367. return;
  25368. }
  25369. var percent = 100;
  25370. var clockWise = serie.clockWise;
  25371. var startAngle = (serie.startAngle.toFixed(2) - 0 + 360) % 360;
  25372. var endAngle;
  25373. var minAngle = serie.minAngle || 0.01;
  25374. var totalAngle = 360 - minAngle * totalSelected - 0.01 * totalSelectedValue0;
  25375. var defaultColor;
  25376. var roseType = serie.roseType;
  25377. var center;
  25378. var radius;
  25379. var r0;
  25380. var r1;
  25381. for (var i = 0, l = data.length; i < l; i++) {
  25382. itemName = data[i].name;
  25383. if (!this.selectedMap[itemName] || isNaN(data[i].value)) {
  25384. continue;
  25385. }
  25386. defaultColor = legend ? legend.getColor(itemName) : this.zr.getColor(i);
  25387. percent = data[i].value / totalValue;
  25388. if (roseType != 'area') {
  25389. endAngle = clockWise ? startAngle - percent * totalAngle - (percent !== 0 ? minAngle : 0.01) : percent * totalAngle + startAngle + (percent !== 0 ? minAngle : 0.01);
  25390. } else {
  25391. endAngle = clockWise ? startAngle - 360 / l : 360 / l + startAngle;
  25392. }
  25393. endAngle = endAngle.toFixed(2) - 0;
  25394. percent = (percent * 100).toFixed(2);
  25395. center = this.parseCenter(this.zr, serie.center);
  25396. radius = this.parseRadius(this.zr, serie.radius);
  25397. r0 = +radius[0];
  25398. r1 = +radius[1];
  25399. if (roseType === 'radius') {
  25400. r1 = data[i].value / maxValue * (r1 - r0) * 0.8 + (r1 - r0) * 0.2 + r0;
  25401. } else if (roseType === 'area') {
  25402. r1 = Math.sqrt(data[i].value / maxValue) * (r1 - r0) + r0;
  25403. }
  25404. if (clockWise) {
  25405. var temp;
  25406. temp = startAngle;
  25407. startAngle = endAngle;
  25408. endAngle = temp;
  25409. }
  25410. this._buildItem(singleShapeList, seriesIndex, i, percent, data[i].selected, center, r0, r1, startAngle, endAngle, defaultColor);
  25411. if (!clockWise) {
  25412. startAngle = endAngle;
  25413. }
  25414. }
  25415. this._autoLabelLayout(singleShapeList, center, r1);
  25416. for (var i = 0, l = singleShapeList.length; i < l; i++) {
  25417. this.shapeList.push(singleShapeList[i]);
  25418. }
  25419. singleShapeList = null;
  25420. },
  25421. _buildItem: function (singleShapeList, seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor) {
  25422. var series = this.series;
  25423. var midAngle = ((endAngle + startAngle) / 2 + 360) % 360;
  25424. var sector = this.getSector(seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor);
  25425. ecData.pack(sector, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
  25426. singleShapeList.push(sector);
  25427. var label = this.getLabel(seriesIndex, dataIndex, percent, center, midAngle, defaultColor, false);
  25428. var labelLine = this.getLabelLine(seriesIndex, dataIndex, center, r0, r1, midAngle, defaultColor, false);
  25429. if (labelLine) {
  25430. ecData.pack(labelLine, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
  25431. singleShapeList.push(labelLine);
  25432. }
  25433. if (label) {
  25434. ecData.pack(label, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name, percent);
  25435. label._labelLine = labelLine;
  25436. singleShapeList.push(label);
  25437. }
  25438. },
  25439. getSector: function (seriesIndex, dataIndex, percent, isSelected, center, r0, r1, startAngle, endAngle, defaultColor) {
  25440. var series = this.series;
  25441. var serie = series[seriesIndex];
  25442. var data = serie.data[dataIndex];
  25443. var queryTarget = [
  25444. data,
  25445. serie
  25446. ];
  25447. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  25448. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  25449. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  25450. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  25451. var sector = {
  25452. zlevel: serie.zlevel,
  25453. z: serie.z,
  25454. clickable: this.deepQuery(queryTarget, 'clickable'),
  25455. style: {
  25456. x: center[0],
  25457. y: center[1],
  25458. r0: r0,
  25459. r: r1,
  25460. startAngle: startAngle,
  25461. endAngle: endAngle,
  25462. brushType: 'both',
  25463. color: normalColor,
  25464. lineWidth: normal.borderWidth,
  25465. strokeColor: normal.borderColor,
  25466. lineJoin: 'round'
  25467. },
  25468. highlightStyle: {
  25469. color: emphasisColor,
  25470. lineWidth: emphasis.borderWidth,
  25471. strokeColor: emphasis.borderColor,
  25472. lineJoin: 'round'
  25473. },
  25474. _seriesIndex: seriesIndex,
  25475. _dataIndex: dataIndex
  25476. };
  25477. if (isSelected) {
  25478. var midAngle = ((sector.style.startAngle + sector.style.endAngle) / 2).toFixed(2) - 0;
  25479. sector.style._hasSelected = true;
  25480. sector.style._x = sector.style.x;
  25481. sector.style._y = sector.style.y;
  25482. var offset = this.query(serie, 'selectedOffset');
  25483. sector.style.x += zrMath.cos(midAngle, true) * offset;
  25484. sector.style.y -= zrMath.sin(midAngle, true) * offset;
  25485. this._selected[seriesIndex][dataIndex] = true;
  25486. } else {
  25487. this._selected[seriesIndex][dataIndex] = false;
  25488. }
  25489. if (this._selectedMode) {
  25490. sector.onclick = this.shapeHandler.onclick;
  25491. }
  25492. if (this.deepQuery([
  25493. data,
  25494. serie,
  25495. this.option
  25496. ], 'calculable')) {
  25497. this.setCalculable(sector);
  25498. sector.draggable = true;
  25499. }
  25500. if (this._needLabel(serie, data, true) || this._needLabelLine(serie, data, true)) {
  25501. sector.onmouseover = this.shapeHandler.onmouseover;
  25502. }
  25503. sector = new SectorShape(sector);
  25504. return sector;
  25505. },
  25506. getLabel: function (seriesIndex, dataIndex, percent, center, midAngle, defaultColor, isEmphasis) {
  25507. var series = this.series;
  25508. var serie = series[seriesIndex];
  25509. var data = serie.data[dataIndex];
  25510. if (!this._needLabel(serie, data, isEmphasis)) {
  25511. return;
  25512. }
  25513. var status = isEmphasis ? 'emphasis' : 'normal';
  25514. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  25515. var labelControl = itemStyle[status].label;
  25516. var textStyle = labelControl.textStyle || {};
  25517. var centerX = center[0];
  25518. var centerY = center[1];
  25519. var x;
  25520. var y;
  25521. var radius = this.parseRadius(this.zr, serie.radius);
  25522. var textAlign;
  25523. var textBaseline = 'middle';
  25524. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  25525. if (labelControl.position === 'center') {
  25526. x = centerX;
  25527. y = centerY;
  25528. textAlign = 'center';
  25529. } else if (labelControl.position === 'inner' || labelControl.position === 'inside') {
  25530. radius = (radius[0] + radius[1]) * (labelControl.distance || 0.5);
  25531. x = Math.round(centerX + radius * zrMath.cos(midAngle, true));
  25532. y = Math.round(centerY - radius * zrMath.sin(midAngle, true));
  25533. defaultColor = '#fff';
  25534. textAlign = 'center';
  25535. } else {
  25536. radius = radius[1] - -itemStyle[status].labelLine.length;
  25537. x = Math.round(centerX + radius * zrMath.cos(midAngle, true));
  25538. y = Math.round(centerY - radius * zrMath.sin(midAngle, true));
  25539. textAlign = midAngle >= 90 && midAngle <= 270 ? 'right' : 'left';
  25540. }
  25541. if (labelControl.position != 'center' && labelControl.position != 'inner' && labelControl.position != 'inside') {
  25542. x += textAlign === 'left' ? 20 : -20;
  25543. }
  25544. data.__labelX = x - (textAlign === 'left' ? 5 : -5);
  25545. data.__labelY = y;
  25546. var ts = new TextShape({
  25547. zlevel: serie.zlevel,
  25548. z: serie.z + 1,
  25549. hoverable: false,
  25550. style: {
  25551. x: x,
  25552. y: y,
  25553. color: textStyle.color || defaultColor,
  25554. text: this.getLabelText(seriesIndex, dataIndex, percent, status),
  25555. textAlign: textStyle.align || textAlign,
  25556. textBaseline: textStyle.baseline || textBaseline,
  25557. textFont: this.getFont(textStyle)
  25558. },
  25559. highlightStyle: { brushType: 'fill' }
  25560. });
  25561. ts._radius = radius;
  25562. ts._labelPosition = labelControl.position || 'outer';
  25563. ts._rect = ts.getRect(ts.style);
  25564. ts._seriesIndex = seriesIndex;
  25565. ts._dataIndex = dataIndex;
  25566. return ts;
  25567. },
  25568. getLabelText: function (seriesIndex, dataIndex, percent, status) {
  25569. var series = this.series;
  25570. var serie = series[seriesIndex];
  25571. var data = serie.data[dataIndex];
  25572. var formatter = this.deepQuery([
  25573. data,
  25574. serie
  25575. ], 'itemStyle.' + status + '.label.formatter');
  25576. if (formatter) {
  25577. if (typeof formatter === 'function') {
  25578. return formatter.call(this.myChart, {
  25579. seriesIndex: seriesIndex,
  25580. seriesName: serie.name || '',
  25581. series: serie,
  25582. dataIndex: dataIndex,
  25583. data: data,
  25584. name: data.name,
  25585. value: data.value,
  25586. percent: percent
  25587. });
  25588. } else if (typeof formatter === 'string') {
  25589. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{d}', '{d0}');
  25590. formatter = formatter.replace('{a0}', serie.name).replace('{b0}', data.name).replace('{c0}', data.value).replace('{d0}', percent);
  25591. return formatter;
  25592. }
  25593. } else {
  25594. return data.name;
  25595. }
  25596. },
  25597. getLabelLine: function (seriesIndex, dataIndex, center, r0, r1, midAngle, defaultColor, isEmphasis) {
  25598. var series = this.series;
  25599. var serie = series[seriesIndex];
  25600. var data = serie.data[dataIndex];
  25601. if (this._needLabelLine(serie, data, isEmphasis)) {
  25602. var status = isEmphasis ? 'emphasis' : 'normal';
  25603. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  25604. var labelLineControl = itemStyle[status].labelLine;
  25605. var lineStyle = labelLineControl.lineStyle || {};
  25606. var centerX = center[0];
  25607. var centerY = center[1];
  25608. var minRadius = r1;
  25609. var maxRadius = this.parseRadius(this.zr, serie.radius)[1] - -labelLineControl.length;
  25610. var cosValue = zrMath.cos(midAngle, true);
  25611. var sinValue = zrMath.sin(midAngle, true);
  25612. return new PolylineShape({
  25613. zlevel: serie.zlevel,
  25614. z: serie.z + 1,
  25615. hoverable: false,
  25616. style: {
  25617. pointList: [
  25618. [
  25619. centerX + minRadius * cosValue,
  25620. centerY - minRadius * sinValue
  25621. ],
  25622. [
  25623. centerX + maxRadius * cosValue,
  25624. centerY - maxRadius * sinValue
  25625. ],
  25626. [
  25627. data.__labelX,
  25628. data.__labelY
  25629. ]
  25630. ],
  25631. strokeColor: lineStyle.color || defaultColor,
  25632. lineType: lineStyle.type,
  25633. lineWidth: lineStyle.width
  25634. },
  25635. _seriesIndex: seriesIndex,
  25636. _dataIndex: dataIndex
  25637. });
  25638. } else {
  25639. return;
  25640. }
  25641. },
  25642. _needLabel: function (serie, data, isEmphasis) {
  25643. return this.deepQuery([
  25644. data,
  25645. serie
  25646. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.label.show');
  25647. },
  25648. _needLabelLine: function (serie, data, isEmphasis) {
  25649. return this.deepQuery([
  25650. data,
  25651. serie
  25652. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.labelLine.show');
  25653. },
  25654. _autoLabelLayout: function (sList, center, r) {
  25655. var leftList = [];
  25656. var rightList = [];
  25657. for (var i = 0, l = sList.length; i < l; i++) {
  25658. if (sList[i]._labelPosition === 'outer' || sList[i]._labelPosition === 'outside') {
  25659. sList[i]._rect._y = sList[i]._rect.y;
  25660. if (sList[i]._rect.x < center[0]) {
  25661. leftList.push(sList[i]);
  25662. } else {
  25663. rightList.push(sList[i]);
  25664. }
  25665. }
  25666. }
  25667. this._layoutCalculate(leftList, center, r, -1);
  25668. this._layoutCalculate(rightList, center, r, 1);
  25669. },
  25670. _layoutCalculate: function (tList, center, r, direction) {
  25671. tList.sort(function (a, b) {
  25672. return a._rect.y - b._rect.y;
  25673. });
  25674. function _changeDown(start, end, delta, direction) {
  25675. for (var j = start; j < end; j++) {
  25676. tList[j]._rect.y += delta;
  25677. tList[j].style.y += delta;
  25678. if (tList[j]._labelLine) {
  25679. tList[j]._labelLine.style.pointList[1][1] += delta;
  25680. tList[j]._labelLine.style.pointList[2][1] += delta;
  25681. }
  25682. if (j > start && j + 1 < end && tList[j + 1]._rect.y > tList[j]._rect.y + tList[j]._rect.height) {
  25683. _changeUp(j, delta / 2);
  25684. return;
  25685. }
  25686. }
  25687. _changeUp(end - 1, delta / 2);
  25688. }
  25689. function _changeUp(end, delta) {
  25690. for (var j = end; j >= 0; j--) {
  25691. tList[j]._rect.y -= delta;
  25692. tList[j].style.y -= delta;
  25693. if (tList[j]._labelLine) {
  25694. tList[j]._labelLine.style.pointList[1][1] -= delta;
  25695. tList[j]._labelLine.style.pointList[2][1] -= delta;
  25696. }
  25697. if (j > 0 && tList[j]._rect.y > tList[j - 1]._rect.y + tList[j - 1]._rect.height) {
  25698. break;
  25699. }
  25700. }
  25701. }
  25702. function _changeX(sList, isDownList, center, r, direction) {
  25703. var x = center[0];
  25704. var y = center[1];
  25705. var deltaX;
  25706. var deltaY;
  25707. var length;
  25708. var lastDeltaX = direction > 0 ? isDownList ? Number.MAX_VALUE : 0 : isDownList ? Number.MAX_VALUE : 0;
  25709. for (var i = 0, l = sList.length; i < l; i++) {
  25710. deltaY = Math.abs(sList[i]._rect.y - y);
  25711. length = sList[i]._radius - r;
  25712. deltaX = deltaY < r + length ? Math.sqrt((r + length + 20) * (r + length + 20) - Math.pow(sList[i]._rect.y - y, 2)) : Math.abs(sList[i]._rect.x + (direction > 0 ? 0 : sList[i]._rect.width) - x);
  25713. if (isDownList && deltaX >= lastDeltaX) {
  25714. deltaX = lastDeltaX - 10;
  25715. }
  25716. if (!isDownList && deltaX <= lastDeltaX) {
  25717. deltaX = lastDeltaX + 10;
  25718. }
  25719. sList[i]._rect.x = sList[i].style.x = x + deltaX * direction;
  25720. if (sList[i]._labelLine) {
  25721. sList[i]._labelLine.style.pointList[2][0] = x + (deltaX - 5) * direction;
  25722. sList[i]._labelLine.style.pointList[1][0] = x + (deltaX - 20) * direction;
  25723. }
  25724. lastDeltaX = deltaX;
  25725. }
  25726. }
  25727. var lastY = 0;
  25728. var delta;
  25729. var len = tList.length;
  25730. var upList = [];
  25731. var downList = [];
  25732. for (var i = 0; i < len; i++) {
  25733. delta = tList[i]._rect.y - lastY;
  25734. if (delta < 0) {
  25735. _changeDown(i, len, -delta, direction);
  25736. }
  25737. lastY = tList[i]._rect.y + tList[i]._rect.height;
  25738. }
  25739. if (this.zr.getHeight() - lastY < 0) {
  25740. _changeUp(len - 1, lastY - this.zr.getHeight());
  25741. }
  25742. for (var i = 0; i < len; i++) {
  25743. if (tList[i]._rect.y >= center[1]) {
  25744. downList.push(tList[i]);
  25745. } else {
  25746. upList.push(tList[i]);
  25747. }
  25748. }
  25749. _changeX(downList, true, center, r, direction);
  25750. _changeX(upList, false, center, r, direction);
  25751. },
  25752. reformOption: function (opt) {
  25753. var _merge = zrUtil.merge;
  25754. opt = _merge(_merge(opt || {}, zrUtil.clone(this.ecTheme.pie || {})), zrUtil.clone(ecConfig.pie));
  25755. opt.itemStyle.normal.label.textStyle = this.getTextStyle(opt.itemStyle.normal.label.textStyle);
  25756. opt.itemStyle.emphasis.label.textStyle = this.getTextStyle(opt.itemStyle.emphasis.label.textStyle);
  25757. this.z = opt.z;
  25758. this.zlevel = opt.zlevel;
  25759. return opt;
  25760. },
  25761. refresh: function (newOption) {
  25762. if (newOption) {
  25763. this.option = newOption;
  25764. this.series = newOption.series;
  25765. }
  25766. this.backupShapeList();
  25767. this._buildShape();
  25768. },
  25769. addDataAnimation: function (params, done) {
  25770. var series = this.series;
  25771. var aniMap = {};
  25772. for (var i = 0, l = params.length; i < l; i++) {
  25773. aniMap[params[i][0]] = params[i];
  25774. }
  25775. var aniCount = 0;
  25776. function animationDone() {
  25777. aniCount--;
  25778. if (aniCount === 0) {
  25779. done && done();
  25780. }
  25781. }
  25782. var sectorMap = {};
  25783. var textMap = {};
  25784. var lineMap = {};
  25785. var backupShapeList = this.shapeList;
  25786. this.shapeList = [];
  25787. var seriesIndex;
  25788. var isHead;
  25789. var dataGrow;
  25790. var deltaIdxMap = {};
  25791. for (var i = 0, l = params.length; i < l; i++) {
  25792. seriesIndex = params[i][0];
  25793. isHead = params[i][2];
  25794. dataGrow = params[i][3];
  25795. if (series[seriesIndex] && series[seriesIndex].type === ecConfig.CHART_TYPE_PIE) {
  25796. if (isHead) {
  25797. if (!dataGrow) {
  25798. sectorMap[seriesIndex + '_' + series[seriesIndex].data.length] = 'delete';
  25799. }
  25800. deltaIdxMap[seriesIndex] = 1;
  25801. } else {
  25802. if (!dataGrow) {
  25803. sectorMap[seriesIndex + '_-1'] = 'delete';
  25804. deltaIdxMap[seriesIndex] = -1;
  25805. } else {
  25806. deltaIdxMap[seriesIndex] = 0;
  25807. }
  25808. }
  25809. this._buildSinglePie(seriesIndex);
  25810. }
  25811. }
  25812. var dataIndex;
  25813. var key;
  25814. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  25815. seriesIndex = this.shapeList[i]._seriesIndex;
  25816. dataIndex = this.shapeList[i]._dataIndex;
  25817. key = seriesIndex + '_' + dataIndex;
  25818. switch (this.shapeList[i].type) {
  25819. case 'sector':
  25820. sectorMap[key] = this.shapeList[i];
  25821. break;
  25822. case 'text':
  25823. textMap[key] = this.shapeList[i];
  25824. break;
  25825. case 'polyline':
  25826. lineMap[key] = this.shapeList[i];
  25827. break;
  25828. }
  25829. }
  25830. this.shapeList = [];
  25831. var targeSector;
  25832. for (var i = 0, l = backupShapeList.length; i < l; i++) {
  25833. seriesIndex = backupShapeList[i]._seriesIndex;
  25834. if (aniMap[seriesIndex]) {
  25835. dataIndex = backupShapeList[i]._dataIndex + deltaIdxMap[seriesIndex];
  25836. key = seriesIndex + '_' + dataIndex;
  25837. targeSector = sectorMap[key];
  25838. if (!targeSector) {
  25839. continue;
  25840. }
  25841. if (backupShapeList[i].type === 'sector') {
  25842. if (targeSector != 'delete') {
  25843. aniCount++;
  25844. this.zr.animate(backupShapeList[i].id, 'style').when(400, {
  25845. startAngle: targeSector.style.startAngle,
  25846. endAngle: targeSector.style.endAngle
  25847. }).done(animationDone).start();
  25848. } else {
  25849. aniCount++;
  25850. this.zr.animate(backupShapeList[i].id, 'style').when(400, deltaIdxMap[seriesIndex] < 0 ? { startAngle: backupShapeList[i].style.startAngle } : { endAngle: backupShapeList[i].style.endAngle }).done(animationDone).start();
  25851. }
  25852. } else if (backupShapeList[i].type === 'text' || backupShapeList[i].type === 'polyline') {
  25853. if (targeSector === 'delete') {
  25854. this.zr.delShape(backupShapeList[i].id);
  25855. } else {
  25856. switch (backupShapeList[i].type) {
  25857. case 'text':
  25858. aniCount++;
  25859. targeSector = textMap[key];
  25860. this.zr.animate(backupShapeList[i].id, 'style').when(400, {
  25861. x: targeSector.style.x,
  25862. y: targeSector.style.y
  25863. }).done(animationDone).start();
  25864. break;
  25865. case 'polyline':
  25866. aniCount++;
  25867. targeSector = lineMap[key];
  25868. this.zr.animate(backupShapeList[i].id, 'style').when(400, { pointList: targeSector.style.pointList }).done(animationDone).start();
  25869. break;
  25870. }
  25871. }
  25872. }
  25873. }
  25874. }
  25875. this.shapeList = backupShapeList;
  25876. if (!aniCount) {
  25877. done && done();
  25878. }
  25879. },
  25880. onclick: function (param) {
  25881. var series = this.series;
  25882. if (!this.isClick || !param.target) {
  25883. return;
  25884. }
  25885. this.isClick = false;
  25886. var offset;
  25887. var target = param.target;
  25888. var style = target.style;
  25889. var seriesIndex = ecData.get(target, 'seriesIndex');
  25890. var dataIndex = ecData.get(target, 'dataIndex');
  25891. for (var i = 0, len = this.shapeList.length; i < len; i++) {
  25892. if (this.shapeList[i].id === target.id) {
  25893. seriesIndex = ecData.get(target, 'seriesIndex');
  25894. dataIndex = ecData.get(target, 'dataIndex');
  25895. if (!style._hasSelected) {
  25896. var midAngle = ((style.startAngle + style.endAngle) / 2).toFixed(2) - 0;
  25897. target.style._hasSelected = true;
  25898. this._selected[seriesIndex][dataIndex] = true;
  25899. target.style._x = target.style.x;
  25900. target.style._y = target.style.y;
  25901. offset = this.query(series[seriesIndex], 'selectedOffset');
  25902. target.style.x += zrMath.cos(midAngle, true) * offset;
  25903. target.style.y -= zrMath.sin(midAngle, true) * offset;
  25904. } else {
  25905. target.style.x = target.style._x;
  25906. target.style.y = target.style._y;
  25907. target.style._hasSelected = false;
  25908. this._selected[seriesIndex][dataIndex] = false;
  25909. }
  25910. this.zr.modShape(target.id);
  25911. } else if (this.shapeList[i].style._hasSelected && this._selectedMode === 'single') {
  25912. seriesIndex = ecData.get(this.shapeList[i], 'seriesIndex');
  25913. dataIndex = ecData.get(this.shapeList[i], 'dataIndex');
  25914. this.shapeList[i].style.x = this.shapeList[i].style._x;
  25915. this.shapeList[i].style.y = this.shapeList[i].style._y;
  25916. this.shapeList[i].style._hasSelected = false;
  25917. this._selected[seriesIndex][dataIndex] = false;
  25918. this.zr.modShape(this.shapeList[i].id);
  25919. }
  25920. }
  25921. this.messageCenter.dispatch(ecConfig.EVENT.PIE_SELECTED, param.event, {
  25922. selected: this._selected,
  25923. target: ecData.get(target, 'name')
  25924. }, this.myChart);
  25925. this.zr.refreshNextFrame();
  25926. }
  25927. };
  25928. zrUtil.inherits(Pie, ChartBase);
  25929. require('../chart').define('pie', Pie);
  25930. return Pie;
  25931. });define('echarts/chart/radar', [
  25932. 'require',
  25933. './base',
  25934. 'zrender/shape/Polygon',
  25935. '../component/polar',
  25936. '../config',
  25937. '../util/ecData',
  25938. 'zrender/tool/util',
  25939. 'zrender/tool/color',
  25940. '../util/accMath',
  25941. '../chart'
  25942. ], function (require) {
  25943. var ChartBase = require('./base');
  25944. var PolygonShape = require('zrender/shape/Polygon');
  25945. require('../component/polar');
  25946. var ecConfig = require('../config');
  25947. ecConfig.radar = {
  25948. zlevel: 0,
  25949. z: 2,
  25950. clickable: true,
  25951. legendHoverLink: true,
  25952. polarIndex: 0,
  25953. itemStyle: {
  25954. normal: {
  25955. label: { show: false },
  25956. lineStyle: {
  25957. width: 2,
  25958. type: 'solid'
  25959. }
  25960. },
  25961. emphasis: { label: { show: false } }
  25962. },
  25963. symbolSize: 2
  25964. };
  25965. var ecData = require('../util/ecData');
  25966. var zrUtil = require('zrender/tool/util');
  25967. var zrColor = require('zrender/tool/color');
  25968. function Radar(ecTheme, messageCenter, zr, option, myChart) {
  25969. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  25970. this.refresh(option);
  25971. }
  25972. Radar.prototype = {
  25973. type: ecConfig.CHART_TYPE_RADAR,
  25974. _buildShape: function () {
  25975. this.selectedMap = {};
  25976. this._symbol = this.option.symbolList;
  25977. this._queryTarget;
  25978. this._dropBoxList = [];
  25979. this._radarDataCounter = 0;
  25980. var series = this.series;
  25981. var legend = this.component.legend;
  25982. var serieName;
  25983. for (var i = 0, l = series.length; i < l; i++) {
  25984. if (series[i].type === ecConfig.CHART_TYPE_RADAR) {
  25985. this.serie = this.reformOption(series[i]);
  25986. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  25987. serieName = this.serie.name || '';
  25988. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  25989. if (this.selectedMap[serieName]) {
  25990. this._queryTarget = [
  25991. this.serie,
  25992. this.option
  25993. ];
  25994. if (this.deepQuery(this._queryTarget, 'calculable')) {
  25995. this._addDropBox(i);
  25996. }
  25997. this._buildSingleRadar(i);
  25998. this.buildMark(i);
  25999. }
  26000. }
  26001. }
  26002. this.addShapeList();
  26003. },
  26004. _buildSingleRadar: function (index) {
  26005. var legend = this.component.legend;
  26006. var iconShape;
  26007. var data = this.serie.data;
  26008. var defaultColor;
  26009. var name;
  26010. var pointList;
  26011. var calculable = this.deepQuery(this._queryTarget, 'calculable');
  26012. for (var i = 0; i < data.length; i++) {
  26013. name = data[i].name || '';
  26014. this.selectedMap[name] = legend ? legend.isSelected(name) : true;
  26015. if (!this.selectedMap[name]) {
  26016. continue;
  26017. }
  26018. if (legend) {
  26019. defaultColor = legend.getColor(name);
  26020. iconShape = legend.getItemShape(name);
  26021. if (iconShape) {
  26022. iconShape.style.brushType = this.deepQuery([
  26023. data[i],
  26024. this.serie
  26025. ], 'itemStyle.normal.areaStyle') ? 'both' : 'stroke';
  26026. legend.setItemShape(name, iconShape);
  26027. }
  26028. } else {
  26029. defaultColor = this.zr.getColor(i);
  26030. }
  26031. pointList = this._getPointList(this.serie.polarIndex, data[i]);
  26032. this._addSymbol(pointList, defaultColor, i, index, this.serie.polarIndex);
  26033. this._addDataShape(pointList, defaultColor, data[i], index, i, calculable);
  26034. this._radarDataCounter++;
  26035. }
  26036. },
  26037. _getPointList: function (polarIndex, dataArr) {
  26038. var pointList = [];
  26039. var vector;
  26040. var polar = this.component.polar;
  26041. var value;
  26042. for (var i = 0, l = dataArr.value.length; i < l; i++) {
  26043. value = this.getDataFromOption(dataArr.value[i]);
  26044. vector = value != '-' ? polar.getVector(polarIndex, i, value) : false;
  26045. if (vector) {
  26046. pointList.push(vector);
  26047. }
  26048. }
  26049. return pointList;
  26050. },
  26051. _addSymbol: function (pointList, defaultColor, dataIndex, seriesIndex, polarIndex) {
  26052. var series = this.series;
  26053. var itemShape;
  26054. var polar = this.component.polar;
  26055. for (var i = 0, l = pointList.length; i < l; i++) {
  26056. itemShape = this.getSymbolShape(this.deepMerge([
  26057. series[seriesIndex].data[dataIndex],
  26058. series[seriesIndex]
  26059. ]), seriesIndex, series[seriesIndex].data[dataIndex].value[i], i, polar.getIndicatorText(polarIndex, i), pointList[i][0], pointList[i][1], this._symbol[this._radarDataCounter % this._symbol.length], defaultColor, '#fff', 'vertical');
  26060. itemShape.zlevel = this.getZlevelBase();
  26061. itemShape.z = this.getZBase() + 1;
  26062. ecData.set(itemShape, 'data', series[seriesIndex].data[dataIndex]);
  26063. ecData.set(itemShape, 'value', series[seriesIndex].data[dataIndex].value);
  26064. ecData.set(itemShape, 'dataIndex', dataIndex);
  26065. ecData.set(itemShape, 'special', i);
  26066. this.shapeList.push(itemShape);
  26067. }
  26068. },
  26069. _addDataShape: function (pointList, defaultColor, data, seriesIndex, dataIndex, calculable) {
  26070. var series = this.series;
  26071. var queryTarget = [
  26072. data,
  26073. this.serie
  26074. ];
  26075. var nColor = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), seriesIndex, dataIndex, data);
  26076. var nLineWidth = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.width');
  26077. var nLineType = this.deepQuery(queryTarget, 'itemStyle.normal.lineStyle.type');
  26078. var nAreaColor = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');
  26079. var nIsAreaFill = this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle');
  26080. var shape = {
  26081. zlevel: this.getZlevelBase(),
  26082. z: this.getZBase(),
  26083. style: {
  26084. pointList: pointList,
  26085. brushType: nIsAreaFill ? 'both' : 'stroke',
  26086. color: nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),
  26087. strokeColor: nColor || defaultColor,
  26088. lineWidth: nLineWidth,
  26089. lineType: nLineType
  26090. },
  26091. highlightStyle: {
  26092. brushType: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle') || nIsAreaFill ? 'both' : 'stroke',
  26093. color: this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || nAreaColor || nColor || (typeof defaultColor === 'string' ? zrColor.alpha(defaultColor, 0.5) : defaultColor),
  26094. strokeColor: this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), seriesIndex, dataIndex, data) || nColor || defaultColor,
  26095. lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.width') || nLineWidth,
  26096. lineType: this.deepQuery(queryTarget, 'itemStyle.emphasis.lineStyle.type') || nLineType
  26097. }
  26098. };
  26099. ecData.pack(shape, series[seriesIndex], seriesIndex, data, dataIndex, data.name, this.component.polar.getIndicator(series[seriesIndex].polarIndex));
  26100. if (calculable) {
  26101. shape.draggable = true;
  26102. this.setCalculable(shape);
  26103. }
  26104. shape = new PolygonShape(shape);
  26105. this.shapeList.push(shape);
  26106. },
  26107. _addDropBox: function (index) {
  26108. var series = this.series;
  26109. var polarIndex = this.deepQuery(this._queryTarget, 'polarIndex');
  26110. if (!this._dropBoxList[polarIndex]) {
  26111. var shape = this.component.polar.getDropBox(polarIndex);
  26112. shape.zlevel = this.getZlevelBase();
  26113. shape.z = this.getZBase();
  26114. this.setCalculable(shape);
  26115. ecData.pack(shape, series, index, undefined, -1);
  26116. this.shapeList.push(shape);
  26117. this._dropBoxList[polarIndex] = true;
  26118. }
  26119. },
  26120. ondragend: function (param, status) {
  26121. var series = this.series;
  26122. if (!this.isDragend || !param.target) {
  26123. return;
  26124. }
  26125. var target = param.target;
  26126. var seriesIndex = ecData.get(target, 'seriesIndex');
  26127. var dataIndex = ecData.get(target, 'dataIndex');
  26128. this.component.legend && this.component.legend.del(series[seriesIndex].data[dataIndex].name);
  26129. series[seriesIndex].data.splice(dataIndex, 1);
  26130. status.dragOut = true;
  26131. status.needRefresh = true;
  26132. this.isDragend = false;
  26133. return;
  26134. },
  26135. ondrop: function (param, status) {
  26136. var series = this.series;
  26137. if (!this.isDrop || !param.target) {
  26138. return;
  26139. }
  26140. var target = param.target;
  26141. var dragged = param.dragged;
  26142. var seriesIndex = ecData.get(target, 'seriesIndex');
  26143. var dataIndex = ecData.get(target, 'dataIndex');
  26144. var data;
  26145. var legend = this.component.legend;
  26146. var value;
  26147. if (dataIndex === -1) {
  26148. data = {
  26149. value: ecData.get(dragged, 'value'),
  26150. name: ecData.get(dragged, 'name')
  26151. };
  26152. series[seriesIndex].data.push(data);
  26153. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  26154. } else {
  26155. var accMath = require('../util/accMath');
  26156. data = series[seriesIndex].data[dataIndex];
  26157. legend && legend.del(data.name);
  26158. data.name += this.option.nameConnector + ecData.get(dragged, 'name');
  26159. value = ecData.get(dragged, 'value');
  26160. for (var i = 0; i < value.length; i++) {
  26161. data.value[i] = accMath.accAdd(data.value[i], value[i]);
  26162. }
  26163. legend && legend.add(data.name, dragged.style.color || dragged.style.strokeColor);
  26164. }
  26165. status.dragIn = status.dragIn || true;
  26166. this.isDrop = false;
  26167. return;
  26168. },
  26169. refresh: function (newOption) {
  26170. if (newOption) {
  26171. this.option = newOption;
  26172. this.series = newOption.series;
  26173. }
  26174. this.backupShapeList();
  26175. this._buildShape();
  26176. }
  26177. };
  26178. zrUtil.inherits(Radar, ChartBase);
  26179. require('../chart').define('radar', Radar);
  26180. return Radar;
  26181. });define('echarts/component/polar', [
  26182. 'require',
  26183. './base',
  26184. 'zrender/shape/Text',
  26185. 'zrender/shape/Line',
  26186. 'zrender/shape/Polygon',
  26187. 'zrender/shape/Circle',
  26188. 'zrender/shape/Ring',
  26189. '../config',
  26190. 'zrender/tool/util',
  26191. '../util/coordinates',
  26192. '../util/accMath',
  26193. '../util/smartSteps',
  26194. '../component'
  26195. ], function (require) {
  26196. var Base = require('./base');
  26197. var TextShape = require('zrender/shape/Text');
  26198. var LineShape = require('zrender/shape/Line');
  26199. var PolygonShape = require('zrender/shape/Polygon');
  26200. var Circle = require('zrender/shape/Circle');
  26201. var Ring = require('zrender/shape/Ring');
  26202. var ecConfig = require('../config');
  26203. ecConfig.polar = {
  26204. zlevel: 0,
  26205. z: 0,
  26206. center: [
  26207. '50%',
  26208. '50%'
  26209. ],
  26210. radius: '75%',
  26211. startAngle: 90,
  26212. boundaryGap: [
  26213. 0,
  26214. 0
  26215. ],
  26216. splitNumber: 5,
  26217. name: {
  26218. show: true,
  26219. textStyle: { color: '#333' }
  26220. },
  26221. axisLine: {
  26222. show: true,
  26223. lineStyle: {
  26224. color: '#ccc',
  26225. width: 1,
  26226. type: 'solid'
  26227. }
  26228. },
  26229. axisLabel: {
  26230. show: false,
  26231. textStyle: { color: '#333' }
  26232. },
  26233. splitArea: {
  26234. show: true,
  26235. areaStyle: {
  26236. color: [
  26237. 'rgba(250,250,250,0.3)',
  26238. 'rgba(200,200,200,0.3)'
  26239. ]
  26240. }
  26241. },
  26242. splitLine: {
  26243. show: true,
  26244. lineStyle: {
  26245. width: 1,
  26246. color: '#ccc'
  26247. }
  26248. },
  26249. type: 'polygon'
  26250. };
  26251. var zrUtil = require('zrender/tool/util');
  26252. var ecCoordinates = require('../util/coordinates');
  26253. function Polar(ecTheme, messageCenter, zr, option, myChart) {
  26254. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  26255. this.refresh(option);
  26256. }
  26257. Polar.prototype = {
  26258. type: ecConfig.COMPONENT_TYPE_POLAR,
  26259. _buildShape: function () {
  26260. for (var i = 0; i < this.polar.length; i++) {
  26261. this._index = i;
  26262. this.reformOption(this.polar[i]);
  26263. this._queryTarget = [
  26264. this.polar[i],
  26265. this.option
  26266. ];
  26267. this._createVector(i);
  26268. this._buildSpiderWeb(i);
  26269. this._buildText(i);
  26270. this._adjustIndicatorValue(i);
  26271. this._addAxisLabel(i);
  26272. }
  26273. for (var i = 0; i < this.shapeList.length; i++) {
  26274. this.zr.addShape(this.shapeList[i]);
  26275. }
  26276. },
  26277. _createVector: function (index) {
  26278. var item = this.polar[index];
  26279. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  26280. var length = indicator.length;
  26281. var startAngle = item.startAngle;
  26282. var dStep = 2 * Math.PI / length;
  26283. var radius = this._getRadius();
  26284. var __ecIndicator = item.__ecIndicator = [];
  26285. var vector;
  26286. for (var i = 0; i < length; i++) {
  26287. vector = ecCoordinates.polar2cartesian(radius, startAngle * Math.PI / 180 + dStep * i);
  26288. __ecIndicator.push({
  26289. vector: [
  26290. vector[1],
  26291. -vector[0]
  26292. ]
  26293. });
  26294. }
  26295. },
  26296. _getRadius: function () {
  26297. var item = this.polar[this._index];
  26298. return this.parsePercent(item.radius, Math.min(this.zr.getWidth(), this.zr.getHeight()) / 2);
  26299. },
  26300. _buildSpiderWeb: function (index) {
  26301. var item = this.polar[index];
  26302. var __ecIndicator = item.__ecIndicator;
  26303. var splitArea = item.splitArea;
  26304. var splitLine = item.splitLine;
  26305. var center = this.getCenter(index);
  26306. var splitNumber = item.splitNumber;
  26307. var strokeColor = splitLine.lineStyle.color;
  26308. var lineWidth = splitLine.lineStyle.width;
  26309. var show = splitLine.show;
  26310. var axisLine = this.deepQuery(this._queryTarget, 'axisLine');
  26311. this._addArea(__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show);
  26312. axisLine.show && this._addLine(__ecIndicator, center, axisLine);
  26313. },
  26314. _addAxisLabel: function (index) {
  26315. var accMath = require('../util/accMath');
  26316. var item = this.polar[index];
  26317. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  26318. var __ecIndicator = item.__ecIndicator;
  26319. var axisLabel;
  26320. var vector;
  26321. var style;
  26322. var newStyle;
  26323. var splitNumber = this.deepQuery(this._queryTarget, 'splitNumber');
  26324. var center = this.getCenter(index);
  26325. var vector;
  26326. var value;
  26327. var text;
  26328. var theta;
  26329. var offset;
  26330. var interval;
  26331. for (var i = 0; i < indicator.length; i++) {
  26332. axisLabel = this.deepQuery([
  26333. indicator[i],
  26334. item,
  26335. this.option
  26336. ], 'axisLabel');
  26337. if (axisLabel.show) {
  26338. var textStyle = this.deepQuery([
  26339. axisLabel,
  26340. item,
  26341. this.option
  26342. ], 'textStyle');
  26343. var formatter = this.deepQuery([
  26344. axisLabel,
  26345. item
  26346. ], 'formatter');
  26347. style = {};
  26348. style.textFont = this.getFont(textStyle);
  26349. style.color = textStyle.color;
  26350. style = zrUtil.merge(style, axisLabel);
  26351. style.lineWidth = style.width;
  26352. vector = __ecIndicator[i].vector;
  26353. value = __ecIndicator[i].value;
  26354. theta = i / indicator.length * 2 * Math.PI;
  26355. offset = axisLabel.offset || 10;
  26356. interval = axisLabel.interval || 0;
  26357. if (!value) {
  26358. return;
  26359. }
  26360. for (var j = 1; j <= splitNumber; j += interval + 1) {
  26361. newStyle = zrUtil.merge({}, style);
  26362. text = accMath.accAdd(value.min, accMath.accMul(value.step, j));
  26363. if (typeof formatter === 'function') {
  26364. text = formatter(text);
  26365. } else if (typeof formatter === 'string') {
  26366. text = formatter.replace('{a}', '{a0}').replace('{a0}', text);
  26367. } else {
  26368. text = this.numAddCommas(text);
  26369. }
  26370. newStyle.text = text;
  26371. newStyle.x = j * vector[0] / splitNumber + Math.cos(theta) * offset + center[0];
  26372. newStyle.y = j * vector[1] / splitNumber + Math.sin(theta) * offset + center[1];
  26373. this.shapeList.push(new TextShape({
  26374. zlevel: this.getZlevelBase(),
  26375. z: this.getZBase(),
  26376. style: newStyle,
  26377. draggable: false,
  26378. hoverable: false
  26379. }));
  26380. }
  26381. }
  26382. }
  26383. },
  26384. _buildText: function (index) {
  26385. var item = this.polar[index];
  26386. var __ecIndicator = item.__ecIndicator;
  26387. var vector;
  26388. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  26389. var center = this.getCenter(index);
  26390. var style;
  26391. var textAlign;
  26392. var name;
  26393. var rotation;
  26394. var x = 0;
  26395. var y = 0;
  26396. var margin;
  26397. var textStyle;
  26398. for (var i = 0; i < indicator.length; i++) {
  26399. name = this.deepQuery([
  26400. indicator[i],
  26401. item,
  26402. this.option
  26403. ], 'name');
  26404. if (!name.show) {
  26405. continue;
  26406. }
  26407. textStyle = this.deepQuery([
  26408. name,
  26409. item,
  26410. this.option
  26411. ], 'textStyle');
  26412. style = {};
  26413. style.textFont = this.getFont(textStyle);
  26414. style.color = textStyle.color;
  26415. if (typeof name.formatter == 'function') {
  26416. style.text = name.formatter.call(this.myChart, indicator[i].text, i);
  26417. } else if (typeof name.formatter == 'string') {
  26418. style.text = name.formatter.replace('{value}', indicator[i].text);
  26419. } else {
  26420. style.text = indicator[i].text;
  26421. }
  26422. __ecIndicator[i].text = style.text;
  26423. vector = __ecIndicator[i].vector;
  26424. if (Math.round(vector[0]) > 0) {
  26425. textAlign = 'left';
  26426. } else if (Math.round(vector[0]) < 0) {
  26427. textAlign = 'right';
  26428. } else {
  26429. textAlign = 'center';
  26430. }
  26431. if (name.margin == null) {
  26432. vector = this._mapVector(vector, center, 1.1);
  26433. } else {
  26434. margin = name.margin;
  26435. x = vector[0] > 0 ? margin : -margin;
  26436. y = vector[1] > 0 ? margin : -margin;
  26437. x = vector[0] === 0 ? 0 : x;
  26438. y = vector[1] === 0 ? 0 : y;
  26439. vector = this._mapVector(vector, center, 1);
  26440. }
  26441. style.textAlign = textAlign;
  26442. style.x = vector[0] + x;
  26443. style.y = vector[1] + y;
  26444. if (name.rotate) {
  26445. rotation = [
  26446. name.rotate / 180 * Math.PI,
  26447. vector[0],
  26448. vector[1]
  26449. ];
  26450. } else {
  26451. rotation = [
  26452. 0,
  26453. 0,
  26454. 0
  26455. ];
  26456. }
  26457. this.shapeList.push(new TextShape({
  26458. zlevel: this.getZlevelBase(),
  26459. z: this.getZBase(),
  26460. style: style,
  26461. draggable: false,
  26462. hoverable: false,
  26463. rotation: rotation
  26464. }));
  26465. }
  26466. },
  26467. getIndicatorText: function (polarIndex, indicatorIndex) {
  26468. return this.polar[polarIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex] && this.polar[polarIndex].__ecIndicator[indicatorIndex].text;
  26469. },
  26470. getDropBox: function (index) {
  26471. var index = index || 0;
  26472. var item = this.polar[index];
  26473. var center = this.getCenter(index);
  26474. var __ecIndicator = item.__ecIndicator;
  26475. var len = __ecIndicator.length;
  26476. var pointList = [];
  26477. var vector;
  26478. var shape;
  26479. var type = item.type;
  26480. if (type == 'polygon') {
  26481. for (var i = 0; i < len; i++) {
  26482. vector = __ecIndicator[i].vector;
  26483. pointList.push(this._mapVector(vector, center, 1.2));
  26484. }
  26485. shape = this._getShape(pointList, 'fill', 'rgba(0,0,0,0)', '', 1);
  26486. } else if (type == 'circle') {
  26487. shape = this._getCircle('', 1, 1.2, center, 'fill', 'rgba(0,0,0,0)');
  26488. }
  26489. return shape;
  26490. },
  26491. _addArea: function (__ecIndicator, splitNumber, center, splitArea, strokeColor, lineWidth, show) {
  26492. var shape;
  26493. var scale;
  26494. var scale1;
  26495. var pointList;
  26496. var type = this.deepQuery(this._queryTarget, 'type');
  26497. for (var i = 0; i < splitNumber; i++) {
  26498. scale = (splitNumber - i) / splitNumber;
  26499. if (show) {
  26500. if (type == 'polygon') {
  26501. pointList = this._getPointList(__ecIndicator, scale, center);
  26502. shape = this._getShape(pointList, 'stroke', '', strokeColor, lineWidth);
  26503. } else if (type == 'circle') {
  26504. shape = this._getCircle(strokeColor, lineWidth, scale, center, 'stroke');
  26505. }
  26506. this.shapeList.push(shape);
  26507. }
  26508. if (splitArea.show) {
  26509. scale1 = (splitNumber - i - 1) / splitNumber;
  26510. this._addSplitArea(__ecIndicator, splitArea, scale, scale1, center, i);
  26511. }
  26512. }
  26513. },
  26514. _getCircle: function (strokeColor, lineWidth, scale, center, brushType, color) {
  26515. var radius = this._getRadius();
  26516. return new Circle({
  26517. zlevel: this.getZlevelBase(),
  26518. z: this.getZBase(),
  26519. style: {
  26520. x: center[0],
  26521. y: center[1],
  26522. r: radius * scale,
  26523. brushType: brushType,
  26524. strokeColor: strokeColor,
  26525. lineWidth: lineWidth,
  26526. color: color
  26527. },
  26528. hoverable: false,
  26529. draggable: false
  26530. });
  26531. },
  26532. _getRing: function (color, scale0, scale1, center) {
  26533. var radius = this._getRadius();
  26534. return new Ring({
  26535. zlevel: this.getZlevelBase(),
  26536. z: this.getZBase(),
  26537. style: {
  26538. x: center[0],
  26539. y: center[1],
  26540. r: scale0 * radius,
  26541. r0: scale1 * radius,
  26542. color: color,
  26543. brushType: 'fill'
  26544. },
  26545. hoverable: false,
  26546. draggable: false
  26547. });
  26548. },
  26549. _getPointList: function (__ecIndicator, scale, center) {
  26550. var pointList = [];
  26551. var len = __ecIndicator.length;
  26552. var vector;
  26553. for (var i = 0; i < len; i++) {
  26554. vector = __ecIndicator[i].vector;
  26555. pointList.push(this._mapVector(vector, center, scale));
  26556. }
  26557. return pointList;
  26558. },
  26559. _getShape: function (pointList, brushType, color, strokeColor, lineWidth) {
  26560. return new PolygonShape({
  26561. zlevel: this.getZlevelBase(),
  26562. z: this.getZBase(),
  26563. style: {
  26564. pointList: pointList,
  26565. brushType: brushType,
  26566. color: color,
  26567. strokeColor: strokeColor,
  26568. lineWidth: lineWidth
  26569. },
  26570. hoverable: false,
  26571. draggable: false
  26572. });
  26573. },
  26574. _addSplitArea: function (__ecIndicator, splitArea, scale, scale1, center, colorInd) {
  26575. var indLen = __ecIndicator.length;
  26576. var color;
  26577. var colorArr = splitArea.areaStyle.color;
  26578. var colorLen;
  26579. var vector;
  26580. var vector1;
  26581. var pointList = [];
  26582. var indLen = __ecIndicator.length;
  26583. var shape;
  26584. var type = this.deepQuery(this._queryTarget, 'type');
  26585. if (typeof colorArr == 'string') {
  26586. colorArr = [colorArr];
  26587. }
  26588. colorLen = colorArr.length;
  26589. color = colorArr[colorInd % colorLen];
  26590. if (type == 'polygon') {
  26591. for (var i = 0; i < indLen; i++) {
  26592. pointList = [];
  26593. vector = __ecIndicator[i].vector;
  26594. vector1 = __ecIndicator[(i + 1) % indLen].vector;
  26595. pointList.push(this._mapVector(vector, center, scale));
  26596. pointList.push(this._mapVector(vector, center, scale1));
  26597. pointList.push(this._mapVector(vector1, center, scale1));
  26598. pointList.push(this._mapVector(vector1, center, scale));
  26599. shape = this._getShape(pointList, 'fill', color, '', 1);
  26600. this.shapeList.push(shape);
  26601. }
  26602. } else if (type == 'circle') {
  26603. shape = this._getRing(color, scale, scale1, center);
  26604. this.shapeList.push(shape);
  26605. }
  26606. },
  26607. _mapVector: function (vector, center, scale) {
  26608. return [
  26609. vector[0] * scale + center[0],
  26610. vector[1] * scale + center[1]
  26611. ];
  26612. },
  26613. getCenter: function (index) {
  26614. var index = index || 0;
  26615. return this.parseCenter(this.zr, this.polar[index].center);
  26616. },
  26617. _addLine: function (__ecIndicator, center, axisLine) {
  26618. var indLen = __ecIndicator.length;
  26619. var line;
  26620. var vector;
  26621. var lineStyle = axisLine.lineStyle;
  26622. var strokeColor = lineStyle.color;
  26623. var lineWidth = lineStyle.width;
  26624. var lineType = lineStyle.type;
  26625. for (var i = 0; i < indLen; i++) {
  26626. vector = __ecIndicator[i].vector;
  26627. line = this._getLine(center[0], center[1], vector[0] + center[0], vector[1] + center[1], strokeColor, lineWidth, lineType);
  26628. this.shapeList.push(line);
  26629. }
  26630. },
  26631. _getLine: function (xStart, yStart, xEnd, yEnd, strokeColor, lineWidth, lineType) {
  26632. return new LineShape({
  26633. zlevel: this.getZlevelBase(),
  26634. z: this.getZBase(),
  26635. style: {
  26636. xStart: xStart,
  26637. yStart: yStart,
  26638. xEnd: xEnd,
  26639. yEnd: yEnd,
  26640. strokeColor: strokeColor,
  26641. lineWidth: lineWidth,
  26642. lineType: lineType
  26643. },
  26644. hoverable: false
  26645. });
  26646. },
  26647. _adjustIndicatorValue: function (index) {
  26648. var item = this.polar[index];
  26649. var indicator = this.deepQuery(this._queryTarget, 'indicator');
  26650. var len = indicator.length;
  26651. var __ecIndicator = item.__ecIndicator;
  26652. var max;
  26653. var min;
  26654. var data = this._getSeriesData(index);
  26655. var boundaryGap = item.boundaryGap;
  26656. var splitNumber = item.splitNumber;
  26657. var scale = item.scale;
  26658. var opts;
  26659. var smartSteps = require('../util/smartSteps');
  26660. for (var i = 0; i < len; i++) {
  26661. if (typeof indicator[i].max == 'number') {
  26662. max = indicator[i].max;
  26663. min = indicator[i].min || 0;
  26664. opts = {
  26665. max: max,
  26666. min: min
  26667. };
  26668. } else {
  26669. var value = this._findValue(data, i, splitNumber, boundaryGap);
  26670. min = value.min;
  26671. max = value.max;
  26672. }
  26673. if (!scale && min >= 0 && max >= 0) {
  26674. min = 0;
  26675. }
  26676. if (!scale && min <= 0 && max <= 0) {
  26677. max = 0;
  26678. }
  26679. var stepOpt = smartSteps(min, max, splitNumber, opts);
  26680. __ecIndicator[i].value = {
  26681. min: stepOpt.min,
  26682. max: stepOpt.max,
  26683. step: stepOpt.step
  26684. };
  26685. }
  26686. },
  26687. _getSeriesData: function (index) {
  26688. var data = [];
  26689. var serie;
  26690. var serieData;
  26691. var legend = this.component.legend;
  26692. var polarIndex;
  26693. for (var i = 0; i < this.series.length; i++) {
  26694. serie = this.series[i];
  26695. if (serie.type != ecConfig.CHART_TYPE_RADAR) {
  26696. continue;
  26697. }
  26698. serieData = serie.data || [];
  26699. for (var j = 0; j < serieData.length; j++) {
  26700. polarIndex = this.deepQuery([
  26701. serieData[j],
  26702. serie,
  26703. this.option
  26704. ], 'polarIndex') || 0;
  26705. if (polarIndex == index && (!legend || legend.isSelected(serieData[j].name))) {
  26706. data.push(serieData[j]);
  26707. }
  26708. }
  26709. }
  26710. return data;
  26711. },
  26712. _findValue: function (data, index, splitNumber, boundaryGap) {
  26713. var max;
  26714. var min;
  26715. var one;
  26716. if (!data || data.length === 0) {
  26717. return;
  26718. }
  26719. function _compare(item) {
  26720. (item > max || max === undefined) && (max = item);
  26721. (item < min || min === undefined) && (min = item);
  26722. }
  26723. if (data.length == 1) {
  26724. min = 0;
  26725. }
  26726. if (data.length != 1) {
  26727. for (var i = 0; i < data.length; i++) {
  26728. _compare(this.getDataFromOption(data[i].value[index]));
  26729. }
  26730. } else {
  26731. one = data[0];
  26732. for (var i = 0; i < one.value.length; i++) {
  26733. _compare(this.getDataFromOption(one.value[i]));
  26734. }
  26735. }
  26736. var gap = Math.abs(max - min);
  26737. min = min - Math.abs(gap * boundaryGap[0]);
  26738. max = max + Math.abs(gap * boundaryGap[1]);
  26739. if (min === max) {
  26740. if (max === 0) {
  26741. max = 1;
  26742. } else if (max > 0) {
  26743. min = max / splitNumber;
  26744. } else {
  26745. max = max / splitNumber;
  26746. }
  26747. }
  26748. return {
  26749. max: max,
  26750. min: min
  26751. };
  26752. },
  26753. getVector: function (polarIndex, indicatorIndex, value) {
  26754. polarIndex = polarIndex || 0;
  26755. indicatorIndex = indicatorIndex || 0;
  26756. var __ecIndicator = this.polar[polarIndex].__ecIndicator;
  26757. if (indicatorIndex >= __ecIndicator.length) {
  26758. return;
  26759. }
  26760. var indicator = this.polar[polarIndex].__ecIndicator[indicatorIndex];
  26761. var center = this.getCenter(polarIndex);
  26762. var vector = indicator.vector;
  26763. var max = indicator.value.max;
  26764. var min = indicator.value.min;
  26765. var alpha;
  26766. if (typeof value == 'undefined') {
  26767. return center;
  26768. }
  26769. switch (value) {
  26770. case 'min':
  26771. value = min;
  26772. break;
  26773. case 'max':
  26774. value = max;
  26775. break;
  26776. case 'center':
  26777. value = (max + min) / 2;
  26778. break;
  26779. }
  26780. if (max != min) {
  26781. alpha = (value - min) / (max - min);
  26782. } else {
  26783. alpha = 0.5;
  26784. }
  26785. return this._mapVector(vector, center, alpha);
  26786. },
  26787. isInside: function (vector) {
  26788. var polar = this.getNearestIndex(vector);
  26789. if (polar) {
  26790. return polar.polarIndex;
  26791. }
  26792. return -1;
  26793. },
  26794. getNearestIndex: function (vector) {
  26795. var item;
  26796. var center;
  26797. var radius;
  26798. var polarVector;
  26799. var startAngle;
  26800. var indicator;
  26801. var len;
  26802. var angle;
  26803. var finalAngle;
  26804. for (var i = 0; i < this.polar.length; i++) {
  26805. item = this.polar[i];
  26806. center = this.getCenter(i);
  26807. if (vector[0] == center[0] && vector[1] == center[1]) {
  26808. return {
  26809. polarIndex: i,
  26810. valueIndex: 0
  26811. };
  26812. }
  26813. radius = this._getRadius();
  26814. startAngle = item.startAngle;
  26815. indicator = item.indicator;
  26816. len = indicator.length;
  26817. angle = 2 * Math.PI / len;
  26818. polarVector = ecCoordinates.cartesian2polar(vector[0] - center[0], center[1] - vector[1]);
  26819. if (vector[0] - center[0] < 0) {
  26820. polarVector[1] += Math.PI;
  26821. }
  26822. if (polarVector[1] < 0) {
  26823. polarVector[1] += 2 * Math.PI;
  26824. }
  26825. finalAngle = polarVector[1] - startAngle / 180 * Math.PI + Math.PI * 2;
  26826. if (Math.abs(Math.cos(finalAngle % (angle / 2))) * radius > polarVector[0]) {
  26827. return {
  26828. polarIndex: i,
  26829. valueIndex: Math.floor((finalAngle + angle / 2) / angle) % len
  26830. };
  26831. }
  26832. }
  26833. },
  26834. getIndicator: function (index) {
  26835. var index = index || 0;
  26836. return this.polar[index].indicator;
  26837. },
  26838. refresh: function (newOption) {
  26839. if (newOption) {
  26840. this.option = newOption;
  26841. this.polar = this.option.polar;
  26842. this.series = this.option.series;
  26843. }
  26844. this.clear();
  26845. this._buildShape();
  26846. }
  26847. };
  26848. zrUtil.inherits(Polar, Base);
  26849. require('../component').define('polar', Polar);
  26850. return Polar;
  26851. });define('echarts/util/coordinates', [
  26852. 'require',
  26853. 'zrender/tool/math'
  26854. ], function (require) {
  26855. var zrMath = require('zrender/tool/math');
  26856. function polar2cartesian(r, theta) {
  26857. return [
  26858. r * zrMath.sin(theta),
  26859. r * zrMath.cos(theta)
  26860. ];
  26861. }
  26862. function cartesian2polar(x, y) {
  26863. return [
  26864. Math.sqrt(x * x + y * y),
  26865. Math.atan(y / x)
  26866. ];
  26867. }
  26868. return {
  26869. polar2cartesian: polar2cartesian,
  26870. cartesian2polar: cartesian2polar
  26871. };
  26872. });define('echarts/chart/chord', [
  26873. 'require',
  26874. './base',
  26875. 'zrender/shape/Text',
  26876. 'zrender/shape/Line',
  26877. 'zrender/shape/Sector',
  26878. '../util/shape/Ribbon',
  26879. '../util/shape/Icon',
  26880. 'zrender/shape/BezierCurve',
  26881. '../config',
  26882. '../util/ecData',
  26883. 'zrender/tool/util',
  26884. 'zrender/tool/vector',
  26885. '../data/Graph',
  26886. '../layout/Chord',
  26887. '../chart'
  26888. ], function (require) {
  26889. 'use strict';
  26890. var ChartBase = require('./base');
  26891. var TextShape = require('zrender/shape/Text');
  26892. var LineShape = require('zrender/shape/Line');
  26893. var SectorShape = require('zrender/shape/Sector');
  26894. var RibbonShape = require('../util/shape/Ribbon');
  26895. var IconShape = require('../util/shape/Icon');
  26896. var BezierCurveShape = require('zrender/shape/BezierCurve');
  26897. var ecConfig = require('../config');
  26898. ecConfig.chord = {
  26899. zlevel: 0,
  26900. z: 2,
  26901. clickable: true,
  26902. radius: [
  26903. '65%',
  26904. '75%'
  26905. ],
  26906. center: [
  26907. '50%',
  26908. '50%'
  26909. ],
  26910. padding: 2,
  26911. sort: 'none',
  26912. sortSub: 'none',
  26913. startAngle: 90,
  26914. clockWise: true,
  26915. ribbonType: true,
  26916. minRadius: 10,
  26917. maxRadius: 20,
  26918. symbol: 'circle',
  26919. showScale: false,
  26920. showScaleText: false,
  26921. itemStyle: {
  26922. normal: {
  26923. borderWidth: 0,
  26924. borderColor: '#000',
  26925. label: {
  26926. show: true,
  26927. rotate: false,
  26928. distance: 5
  26929. },
  26930. chordStyle: {
  26931. width: 1,
  26932. color: 'black',
  26933. borderWidth: 1,
  26934. borderColor: '#999',
  26935. opacity: 0.5
  26936. }
  26937. },
  26938. emphasis: {
  26939. borderWidth: 0,
  26940. borderColor: '#000',
  26941. chordStyle: {
  26942. width: 1,
  26943. color: 'black',
  26944. borderWidth: 1,
  26945. borderColor: '#999'
  26946. }
  26947. }
  26948. }
  26949. };
  26950. var ecData = require('../util/ecData');
  26951. var zrUtil = require('zrender/tool/util');
  26952. var vec2 = require('zrender/tool/vector');
  26953. var Graph = require('../data/Graph');
  26954. var ChordLayout = require('../layout/Chord');
  26955. function Chord(ecTheme, messageCenter, zr, option, myChart) {
  26956. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  26957. this.scaleLineLength = 4;
  26958. this.scaleUnitAngle = 4;
  26959. this.refresh(option);
  26960. }
  26961. Chord.prototype = {
  26962. type: ecConfig.CHART_TYPE_CHORD,
  26963. _init: function () {
  26964. var series = this.series;
  26965. this.selectedMap = {};
  26966. var chordSeriesMap = {};
  26967. var chordSeriesGroups = {};
  26968. for (var i = 0, l = series.length; i < l; i++) {
  26969. if (series[i].type === this.type) {
  26970. var _isSelected = this.isSelected(series[i].name);
  26971. this.selectedMap[series[i].name] = _isSelected;
  26972. if (_isSelected) {
  26973. this.buildMark(i);
  26974. }
  26975. this.reformOption(series[i]);
  26976. chordSeriesMap[series[i].name] = series[i];
  26977. }
  26978. }
  26979. for (var i = 0, l = series.length; i < l; i++) {
  26980. if (series[i].type === this.type) {
  26981. if (series[i].insertToSerie) {
  26982. var referenceSerie = chordSeriesMap[series[i].insertToSerie];
  26983. series[i]._referenceSerie = referenceSerie;
  26984. } else {
  26985. chordSeriesGroups[series[i].name] = [series[i]];
  26986. }
  26987. }
  26988. }
  26989. for (var i = 0, l = series.length; i < l; i++) {
  26990. if (series[i].type === this.type) {
  26991. if (series[i].insertToSerie) {
  26992. var mainSerie = series[i]._referenceSerie;
  26993. while (mainSerie && mainSerie._referenceSerie) {
  26994. mainSerie = mainSerie._referenceSerie;
  26995. }
  26996. if (chordSeriesGroups[mainSerie.name] && this.selectedMap[series[i].name]) {
  26997. chordSeriesGroups[mainSerie.name].push(series[i]);
  26998. }
  26999. }
  27000. }
  27001. }
  27002. for (var name in chordSeriesGroups) {
  27003. this._buildChords(chordSeriesGroups[name]);
  27004. }
  27005. this.addShapeList();
  27006. },
  27007. _getNodeCategory: function (serie, group) {
  27008. return serie.categories && serie.categories[group.category || 0];
  27009. },
  27010. _getNodeQueryTarget: function (serie, group) {
  27011. var category = this._getNodeCategory(serie, group);
  27012. return [
  27013. group,
  27014. category,
  27015. serie
  27016. ];
  27017. },
  27018. _getEdgeQueryTarget: function (serie, edge, type) {
  27019. type = type || 'normal';
  27020. return [
  27021. edge.itemStyle && edge.itemStyle[type],
  27022. serie.itemStyle[type].chordStyle
  27023. ];
  27024. },
  27025. _buildChords: function (series) {
  27026. var graphs = [];
  27027. var mainSerie = series[0];
  27028. var nodeFilter = function (n) {
  27029. return n.layout.size > 0;
  27030. };
  27031. var createEdgeFilter = function (graph) {
  27032. return function (e) {
  27033. return graph.getEdge(e.node2, e.node1);
  27034. };
  27035. };
  27036. for (var i = 0; i < series.length; i++) {
  27037. var serie = series[i];
  27038. if (this.selectedMap[serie.name]) {
  27039. var graph;
  27040. if (serie.matrix) {
  27041. graph = this._getSerieGraphFromDataMatrix(serie, mainSerie);
  27042. } else if (serie.links) {
  27043. graph = this._getSerieGraphFromNodeLinks(serie, mainSerie);
  27044. }
  27045. graph.filterNode(nodeFilter, this);
  27046. if (serie.ribbonType) {
  27047. graph.filterEdge(createEdgeFilter(graph));
  27048. }
  27049. graphs.push(graph);
  27050. graph.__serie = serie;
  27051. }
  27052. }
  27053. if (!graphs.length) {
  27054. return;
  27055. }
  27056. var mainGraph = graphs[0];
  27057. if (!mainSerie.ribbonType) {
  27058. var minRadius = mainSerie.minRadius;
  27059. var maxRadius = mainSerie.maxRadius;
  27060. var min = Infinity, max = -Infinity;
  27061. mainGraph.eachNode(function (node) {
  27062. max = Math.max(node.layout.size, max);
  27063. min = Math.min(node.layout.size, min);
  27064. });
  27065. var multiplier = (maxRadius - minRadius) / (max - min);
  27066. mainGraph.eachNode(function (node) {
  27067. var queryTarget = this._getNodeQueryTarget(mainSerie, node);
  27068. var symbolSize = this.query(queryTarget, 'symbolSize');
  27069. if (max === min) {
  27070. node.layout.size = symbolSize || min;
  27071. } else {
  27072. node.layout.size = symbolSize || (node.layout.size - min) * multiplier + minRadius;
  27073. }
  27074. }, this);
  27075. }
  27076. var layout = new ChordLayout();
  27077. layout.clockWise = mainSerie.clockWise;
  27078. layout.startAngle = mainSerie.startAngle * Math.PI / 180;
  27079. if (!layout.clockWise) {
  27080. layout.startAngle = -layout.startAngle;
  27081. }
  27082. layout.padding = mainSerie.padding * Math.PI / 180;
  27083. layout.sort = mainSerie.sort;
  27084. layout.sortSub = mainSerie.sortSub;
  27085. layout.directed = mainSerie.ribbonType;
  27086. layout.run(graphs);
  27087. var showLabel = this.query(mainSerie, 'itemStyle.normal.label.show');
  27088. if (mainSerie.ribbonType) {
  27089. this._buildSectors(mainSerie, 0, mainGraph, mainSerie, graphs);
  27090. if (showLabel) {
  27091. this._buildLabels(mainSerie, 0, mainGraph, mainSerie, graphs);
  27092. }
  27093. for (var i = 0, j = 0; i < series.length; i++) {
  27094. if (this.selectedMap[series[i].name]) {
  27095. this._buildRibbons(series, i, graphs[j++], mainSerie);
  27096. }
  27097. }
  27098. if (mainSerie.showScale) {
  27099. this._buildScales(mainSerie, 0, mainGraph);
  27100. }
  27101. } else {
  27102. this._buildNodeIcons(mainSerie, 0, mainGraph, mainSerie, graphs);
  27103. if (showLabel) {
  27104. this._buildLabels(mainSerie, 0, mainGraph, mainSerie, graphs);
  27105. }
  27106. for (var i = 0, j = 0; i < series.length; i++) {
  27107. if (this.selectedMap[series[i].name]) {
  27108. this._buildEdgeCurves(series, i, graphs[j++], mainSerie, mainGraph);
  27109. }
  27110. }
  27111. }
  27112. this._initHoverHandler(series, graphs);
  27113. },
  27114. _getSerieGraphFromDataMatrix: function (serie, mainSerie) {
  27115. var nodesData = [];
  27116. var count = 0;
  27117. var matrix = [];
  27118. for (var i = 0; i < serie.matrix.length; i++) {
  27119. matrix[i] = serie.matrix[i].slice();
  27120. }
  27121. var data = serie.data || serie.nodes;
  27122. for (var i = 0; i < data.length; i++) {
  27123. var node = {};
  27124. var group = data[i];
  27125. group.rawIndex = i;
  27126. for (var key in group) {
  27127. if (key === 'name') {
  27128. node['id'] = group['name'];
  27129. } else {
  27130. node[key] = group[key];
  27131. }
  27132. }
  27133. var category = this._getNodeCategory(mainSerie, group);
  27134. var name = category ? category.name : group.name;
  27135. this.selectedMap[name] = this.isSelected(name);
  27136. if (this.selectedMap[name]) {
  27137. nodesData.push(node);
  27138. count++;
  27139. } else {
  27140. matrix.splice(count, 1);
  27141. for (var j = 0; j < matrix.length; j++) {
  27142. matrix[j].splice(count, 1);
  27143. }
  27144. }
  27145. }
  27146. var graph = Graph.fromMatrix(nodesData, matrix, true);
  27147. graph.eachNode(function (n, idx) {
  27148. n.layout = { size: n.data.outValue };
  27149. n.rawIndex = n.data.rawIndex;
  27150. });
  27151. graph.eachEdge(function (e) {
  27152. e.layout = { weight: e.data.weight };
  27153. });
  27154. return graph;
  27155. },
  27156. _getSerieGraphFromNodeLinks: function (serie, mainSerie) {
  27157. var graph = new Graph(true);
  27158. var nodes = serie.data || serie.nodes;
  27159. for (var i = 0, len = nodes.length; i < len; i++) {
  27160. var n = nodes[i];
  27161. if (!n || n.ignore) {
  27162. continue;
  27163. }
  27164. var category = this._getNodeCategory(mainSerie, n);
  27165. var name = category ? category.name : n.name;
  27166. this.selectedMap[name] = this.isSelected(name);
  27167. if (this.selectedMap[name]) {
  27168. var node = graph.addNode(n.name, n);
  27169. node.rawIndex = i;
  27170. }
  27171. }
  27172. for (var i = 0, len = serie.links.length; i < len; i++) {
  27173. var e = serie.links[i];
  27174. var n1 = e.source;
  27175. var n2 = e.target;
  27176. if (typeof n1 === 'number') {
  27177. n1 = nodes[n1];
  27178. if (n1) {
  27179. n1 = n1.name;
  27180. }
  27181. }
  27182. if (typeof n2 === 'number') {
  27183. n2 = nodes[n2];
  27184. if (n2) {
  27185. n2 = n2.name;
  27186. }
  27187. }
  27188. var edge = graph.addEdge(n1, n2, e);
  27189. if (edge) {
  27190. edge.rawIndex = i;
  27191. }
  27192. }
  27193. graph.eachNode(function (n) {
  27194. var value = n.data.value;
  27195. if (value == null) {
  27196. value = 0;
  27197. if (mainSerie.ribbonType) {
  27198. for (var i = 0; i < n.outEdges.length; i++) {
  27199. value += n.outEdges[i].data.weight || 0;
  27200. }
  27201. } else {
  27202. for (var i = 0; i < n.edges.length; i++) {
  27203. value += n.edges[i].data.weight || 0;
  27204. }
  27205. }
  27206. }
  27207. n.layout = { size: value };
  27208. });
  27209. graph.eachEdge(function (e) {
  27210. e.layout = { weight: e.data.weight == null ? 1 : e.data.weight };
  27211. });
  27212. return graph;
  27213. },
  27214. _initHoverHandler: function (series, graphs) {
  27215. var mainSerie = series[0];
  27216. var mainGraph = graphs[0];
  27217. var self = this;
  27218. mainGraph.eachNode(function (node) {
  27219. node.shape.onmouseover = function () {
  27220. mainGraph.eachNode(function (n) {
  27221. n.shape.style.opacity = 0.1;
  27222. if (n.labelShape) {
  27223. n.labelShape.style.opacity = 0.1;
  27224. n.labelShape.modSelf();
  27225. }
  27226. n.shape.modSelf();
  27227. });
  27228. for (var i = 0; i < graphs.length; i++) {
  27229. for (var j = 0; j < graphs[i].edges.length; j++) {
  27230. var e = graphs[i].edges[j];
  27231. var queryTarget = self._getEdgeQueryTarget(graphs[i].__serie, e.data);
  27232. e.shape.style.opacity = self.deepQuery(queryTarget, 'opacity') * 0.1;
  27233. e.shape.modSelf();
  27234. }
  27235. }
  27236. node.shape.style.opacity = 1;
  27237. if (node.labelShape) {
  27238. node.labelShape.style.opacity = 1;
  27239. }
  27240. for (var i = 0; i < graphs.length; i++) {
  27241. var n = graphs[i].getNodeById(node.id);
  27242. if (n) {
  27243. for (var j = 0; j < n.outEdges.length; j++) {
  27244. var e = n.outEdges[j];
  27245. var queryTarget = self._getEdgeQueryTarget(graphs[i].__serie, e.data);
  27246. e.shape.style.opacity = self.deepQuery(queryTarget, 'opacity');
  27247. var other = graphs[0].getNodeById(e.node2.id);
  27248. if (other) {
  27249. if (other.shape) {
  27250. other.shape.style.opacity = 1;
  27251. }
  27252. if (other.labelShape) {
  27253. other.labelShape.style.opacity = 1;
  27254. }
  27255. }
  27256. }
  27257. }
  27258. }
  27259. self.zr.refreshNextFrame();
  27260. };
  27261. node.shape.onmouseout = function () {
  27262. mainGraph.eachNode(function (n) {
  27263. n.shape.style.opacity = 1;
  27264. if (n.labelShape) {
  27265. n.labelShape.style.opacity = 1;
  27266. n.labelShape.modSelf();
  27267. }
  27268. n.shape.modSelf();
  27269. });
  27270. for (var i = 0; i < graphs.length; i++) {
  27271. for (var j = 0; j < graphs[i].edges.length; j++) {
  27272. var e = graphs[i].edges[j];
  27273. var queryTarget = [
  27274. e.data,
  27275. mainSerie
  27276. ];
  27277. e.shape.style.opacity = self.deepQuery(queryTarget, 'itemStyle.normal.chordStyle.opacity');
  27278. e.shape.modSelf();
  27279. }
  27280. }
  27281. self.zr.refreshNextFrame();
  27282. };
  27283. });
  27284. },
  27285. _buildSectors: function (serie, serieIdx, graph, mainSerie) {
  27286. var center = this.parseCenter(this.zr, mainSerie.center);
  27287. var radius = this.parseRadius(this.zr, mainSerie.radius);
  27288. var clockWise = mainSerie.clockWise;
  27289. var sign = clockWise ? 1 : -1;
  27290. graph.eachNode(function (node) {
  27291. var category = this._getNodeCategory(mainSerie, node.data);
  27292. var color = category ? this.getColor(category.name) : this.getColor(node.id);
  27293. var startAngle = node.layout.startAngle / Math.PI * 180 * sign;
  27294. var endAngle = node.layout.endAngle / Math.PI * 180 * sign;
  27295. var sector = new SectorShape({
  27296. zlevel: serie.zlevel,
  27297. z: serie.z,
  27298. style: {
  27299. x: center[0],
  27300. y: center[1],
  27301. r0: radius[0],
  27302. r: radius[1],
  27303. startAngle: startAngle,
  27304. endAngle: endAngle,
  27305. brushType: 'fill',
  27306. opacity: 1,
  27307. color: color,
  27308. clockWise: clockWise
  27309. },
  27310. clickable: mainSerie.clickable,
  27311. highlightStyle: { brushType: 'fill' }
  27312. });
  27313. sector.style.lineWidth = this.deepQuery([
  27314. node.data,
  27315. mainSerie
  27316. ], 'itemStyle.normal.borderWidth');
  27317. sector.highlightStyle.lineWidth = this.deepQuery([
  27318. node.data,
  27319. mainSerie
  27320. ], 'itemStyle.emphasis.borderWidth');
  27321. sector.style.strokeColor = this.deepQuery([
  27322. node.data,
  27323. mainSerie
  27324. ], 'itemStyle.normal.borderColor');
  27325. sector.highlightStyle.strokeColor = this.deepQuery([
  27326. node.data,
  27327. mainSerie
  27328. ], 'itemStyle.emphasis.borderColor');
  27329. if (sector.style.lineWidth > 0) {
  27330. sector.style.brushType = 'both';
  27331. }
  27332. if (sector.highlightStyle.lineWidth > 0) {
  27333. sector.highlightStyle.brushType = 'both';
  27334. }
  27335. ecData.pack(sector, serie, serieIdx, node.data, node.rawIndex, node.id, node.category);
  27336. this.shapeList.push(sector);
  27337. node.shape = sector;
  27338. }, this);
  27339. },
  27340. _buildNodeIcons: function (serie, serieIdx, graph, mainSerie) {
  27341. var center = this.parseCenter(this.zr, mainSerie.center);
  27342. var radius = this.parseRadius(this.zr, mainSerie.radius);
  27343. var r = radius[1];
  27344. graph.eachNode(function (node) {
  27345. var startAngle = node.layout.startAngle;
  27346. var endAngle = node.layout.endAngle;
  27347. var angle = (startAngle + endAngle) / 2;
  27348. var x = r * Math.cos(angle);
  27349. var y = r * Math.sin(angle);
  27350. var queryTarget = this._getNodeQueryTarget(mainSerie, node.data);
  27351. var category = this._getNodeCategory(mainSerie, node.data);
  27352. var color = this.deepQuery(queryTarget, 'itemStyle.normal.color');
  27353. if (!color) {
  27354. color = category ? this.getColor(category.name) : this.getColor(node.id);
  27355. }
  27356. var iconShape = new IconShape({
  27357. zlevel: serie.zlevel,
  27358. z: serie.z + 1,
  27359. style: {
  27360. x: -node.layout.size,
  27361. y: -node.layout.size,
  27362. width: node.layout.size * 2,
  27363. height: node.layout.size * 2,
  27364. iconType: this.deepQuery(queryTarget, 'symbol'),
  27365. color: color,
  27366. brushType: 'both',
  27367. lineWidth: this.deepQuery(queryTarget, 'itemStyle.normal.borderWidth'),
  27368. strokeColor: this.deepQuery(queryTarget, 'itemStyle.normal.borderColor')
  27369. },
  27370. highlightStyle: {
  27371. color: this.deepQuery(queryTarget, 'itemStyle.emphasis.color'),
  27372. lineWidth: this.deepQuery(queryTarget, 'itemStyle.emphasis.borderWidth'),
  27373. strokeColor: this.deepQuery(queryTarget, 'itemStyle.emphasis.borderColor')
  27374. },
  27375. clickable: mainSerie.clickable,
  27376. position: [
  27377. x + center[0],
  27378. y + center[1]
  27379. ]
  27380. });
  27381. ecData.pack(iconShape, serie, serieIdx, node.data, node.rawIndex, node.id, node.category);
  27382. this.shapeList.push(iconShape);
  27383. node.shape = iconShape;
  27384. }, this);
  27385. },
  27386. _buildLabels: function (serie, serieIdx, graph, mainSerie) {
  27387. var rotateLabel = this.query(mainSerie, 'itemStyle.normal.label.rotate');
  27388. var labelDistance = this.query(mainSerie, 'itemStyle.normal.label.distance');
  27389. var center = this.parseCenter(this.zr, mainSerie.center);
  27390. var radius = this.parseRadius(this.zr, mainSerie.radius);
  27391. var clockWise = mainSerie.clockWise;
  27392. var sign = clockWise ? 1 : -1;
  27393. graph.eachNode(function (node) {
  27394. var startAngle = node.layout.startAngle / Math.PI * 180 * sign;
  27395. var endAngle = node.layout.endAngle / Math.PI * 180 * sign;
  27396. var angle = (startAngle * -sign + endAngle * -sign) / 2;
  27397. angle %= 360;
  27398. if (angle < 0) {
  27399. angle += 360;
  27400. }
  27401. var isRightSide = angle <= 90 || angle >= 270;
  27402. angle = angle * Math.PI / 180;
  27403. var v = [
  27404. Math.cos(angle),
  27405. -Math.sin(angle)
  27406. ];
  27407. var distance = 0;
  27408. if (mainSerie.ribbonType) {
  27409. distance = mainSerie.showScaleText ? 35 + labelDistance : labelDistance;
  27410. } else {
  27411. distance = labelDistance + node.layout.size;
  27412. }
  27413. var start = vec2.scale([], v, radius[1] + distance);
  27414. vec2.add(start, start, center);
  27415. var labelShape = {
  27416. zlevel: serie.zlevel,
  27417. z: serie.z + 1,
  27418. hoverable: false,
  27419. style: {
  27420. text: node.data.label == null ? node.id : node.data.label,
  27421. textAlign: isRightSide ? 'left' : 'right'
  27422. }
  27423. };
  27424. if (rotateLabel) {
  27425. labelShape.rotation = isRightSide ? angle : Math.PI + angle;
  27426. if (isRightSide) {
  27427. labelShape.style.x = radius[1] + distance;
  27428. } else {
  27429. labelShape.style.x = -radius[1] - distance;
  27430. }
  27431. labelShape.style.y = 0;
  27432. labelShape.position = center.slice();
  27433. } else {
  27434. labelShape.style.x = start[0];
  27435. labelShape.style.y = start[1];
  27436. }
  27437. labelShape.style.color = this.deepQuery([
  27438. node.data,
  27439. mainSerie
  27440. ], 'itemStyle.normal.label.textStyle.color') || '#000000';
  27441. labelShape.style.textFont = this.getFont(this.deepQuery([
  27442. node.data,
  27443. mainSerie
  27444. ], 'itemStyle.normal.label.textStyle'));
  27445. labelShape = new TextShape(labelShape);
  27446. this.shapeList.push(labelShape);
  27447. node.labelShape = labelShape;
  27448. }, this);
  27449. },
  27450. _buildRibbons: function (series, serieIdx, graph, mainSerie) {
  27451. var serie = series[serieIdx];
  27452. var center = this.parseCenter(this.zr, mainSerie.center);
  27453. var radius = this.parseRadius(this.zr, mainSerie.radius);
  27454. graph.eachEdge(function (edge, idx) {
  27455. var color;
  27456. var other = graph.getEdge(edge.node2, edge.node1);
  27457. if (!other || edge.shape) {
  27458. return;
  27459. }
  27460. if (other.shape) {
  27461. edge.shape = other.shape;
  27462. return;
  27463. }
  27464. var s0 = edge.layout.startAngle / Math.PI * 180;
  27465. var s1 = edge.layout.endAngle / Math.PI * 180;
  27466. var t0 = other.layout.startAngle / Math.PI * 180;
  27467. var t1 = other.layout.endAngle / Math.PI * 180;
  27468. if (series.length === 1) {
  27469. if (edge.layout.weight <= other.layout.weight) {
  27470. color = this.getColor(edge.node1.id);
  27471. } else {
  27472. color = this.getColor(edge.node2.id);
  27473. }
  27474. } else {
  27475. color = this.getColor(serie.name);
  27476. }
  27477. var queryTarget = this._getEdgeQueryTarget(serie, edge.data);
  27478. var queryTargetEmphasis = this._getEdgeQueryTarget(serie, edge.data, 'emphasis');
  27479. var ribbon = new RibbonShape({
  27480. zlevel: serie.zlevel,
  27481. z: serie.z,
  27482. style: {
  27483. x: center[0],
  27484. y: center[1],
  27485. r: radius[0],
  27486. source0: s0,
  27487. source1: s1,
  27488. target0: t0,
  27489. target1: t1,
  27490. brushType: 'both',
  27491. opacity: this.deepQuery(queryTarget, 'opacity'),
  27492. color: color,
  27493. lineWidth: this.deepQuery(queryTarget, 'borderWidth'),
  27494. strokeColor: this.deepQuery(queryTarget, 'borderColor'),
  27495. clockWise: mainSerie.clockWise
  27496. },
  27497. clickable: mainSerie.clickable,
  27498. highlightStyle: {
  27499. brushType: 'both',
  27500. opacity: this.deepQuery(queryTargetEmphasis, 'opacity'),
  27501. lineWidth: this.deepQuery(queryTargetEmphasis, 'borderWidth'),
  27502. strokeColor: this.deepQuery(queryTargetEmphasis, 'borderColor')
  27503. }
  27504. });
  27505. var node1, node2;
  27506. if (edge.layout.weight <= other.layout.weight) {
  27507. node1 = other.node1;
  27508. node2 = other.node2;
  27509. } else {
  27510. node1 = edge.node1;
  27511. node2 = edge.node2;
  27512. }
  27513. ecData.pack(ribbon, serie, serieIdx, edge.data, edge.rawIndex == null ? idx : edge.rawIndex, edge.data.name || node1.id + '-' + node2.id, node1.id, node2.id);
  27514. this.shapeList.push(ribbon);
  27515. edge.shape = ribbon;
  27516. }, this);
  27517. },
  27518. _buildEdgeCurves: function (series, serieIdx, graph, mainSerie, mainGraph) {
  27519. var serie = series[serieIdx];
  27520. var center = this.parseCenter(this.zr, mainSerie.center);
  27521. graph.eachEdge(function (e, idx) {
  27522. var node1 = mainGraph.getNodeById(e.node1.id);
  27523. var node2 = mainGraph.getNodeById(e.node2.id);
  27524. var shape1 = node1.shape;
  27525. var shape2 = node2.shape;
  27526. var queryTarget = this._getEdgeQueryTarget(serie, e.data);
  27527. var queryTargetEmphasis = this._getEdgeQueryTarget(serie, e.data, 'emphasis');
  27528. var curveShape = new BezierCurveShape({
  27529. zlevel: serie.zlevel,
  27530. z: serie.z,
  27531. style: {
  27532. xStart: shape1.position[0],
  27533. yStart: shape1.position[1],
  27534. xEnd: shape2.position[0],
  27535. yEnd: shape2.position[1],
  27536. cpX1: center[0],
  27537. cpY1: center[1],
  27538. lineWidth: this.deepQuery(queryTarget, 'width'),
  27539. strokeColor: this.deepQuery(queryTarget, 'color'),
  27540. opacity: this.deepQuery(queryTarget, 'opacity')
  27541. },
  27542. highlightStyle: {
  27543. lineWidth: this.deepQuery(queryTargetEmphasis, 'width'),
  27544. strokeColor: this.deepQuery(queryTargetEmphasis, 'color'),
  27545. opacity: this.deepQuery(queryTargetEmphasis, 'opacity')
  27546. }
  27547. });
  27548. ecData.pack(curveShape, serie, serieIdx, e.data, e.rawIndex == null ? idx : e.rawIndex, e.data.name || e.node1.id + '-' + e.node2.id, e.node1.id, e.node2.id);
  27549. this.shapeList.push(curveShape);
  27550. e.shape = curveShape;
  27551. }, this);
  27552. },
  27553. _buildScales: function (serie, serieIdx, graph) {
  27554. var clockWise = serie.clockWise;
  27555. var center = this.parseCenter(this.zr, serie.center);
  27556. var radius = this.parseRadius(this.zr, serie.radius);
  27557. var sign = clockWise ? 1 : -1;
  27558. var sumValue = 0;
  27559. var maxValue = -Infinity;
  27560. var unitPostfix;
  27561. var unitScale;
  27562. if (serie.showScaleText) {
  27563. graph.eachNode(function (node) {
  27564. var val = node.data.value;
  27565. if (val > maxValue) {
  27566. maxValue = val;
  27567. }
  27568. sumValue += val;
  27569. });
  27570. if (maxValue > 10000000000) {
  27571. unitPostfix = 'b';
  27572. unitScale = 1e-9;
  27573. } else if (maxValue > 10000000) {
  27574. unitPostfix = 'm';
  27575. unitScale = 0.000001;
  27576. } else if (maxValue > 10000) {
  27577. unitPostfix = 'k';
  27578. unitScale = 0.001;
  27579. } else {
  27580. unitPostfix = '';
  27581. unitScale = 1;
  27582. }
  27583. }
  27584. var unitValue = sumValue / (360 - serie.padding);
  27585. graph.eachNode(function (node) {
  27586. var startAngle = node.layout.startAngle / Math.PI * 180;
  27587. var endAngle = node.layout.endAngle / Math.PI * 180;
  27588. var scaleAngle = startAngle;
  27589. while (true) {
  27590. if (clockWise && scaleAngle > endAngle || !clockWise && scaleAngle < endAngle) {
  27591. break;
  27592. }
  27593. var theta = scaleAngle / 180 * Math.PI;
  27594. var v = [
  27595. Math.cos(theta),
  27596. Math.sin(theta)
  27597. ];
  27598. var start = vec2.scale([], v, radius[1] + 1);
  27599. vec2.add(start, start, center);
  27600. var end = vec2.scale([], v, radius[1] + this.scaleLineLength);
  27601. vec2.add(end, end, center);
  27602. var scaleShape = new LineShape({
  27603. zlevel: serie.zlevel,
  27604. z: serie.z - 1,
  27605. hoverable: false,
  27606. style: {
  27607. xStart: start[0],
  27608. yStart: start[1],
  27609. xEnd: end[0],
  27610. yEnd: end[1],
  27611. lineCap: 'round',
  27612. brushType: 'stroke',
  27613. strokeColor: '#666',
  27614. lineWidth: 1
  27615. }
  27616. });
  27617. this.shapeList.push(scaleShape);
  27618. scaleAngle += sign * this.scaleUnitAngle;
  27619. }
  27620. if (!serie.showScaleText) {
  27621. return;
  27622. }
  27623. var scaleTextAngle = startAngle;
  27624. var step = unitValue * 5 * this.scaleUnitAngle;
  27625. var scaleValue = 0;
  27626. while (true) {
  27627. if (clockWise && scaleTextAngle > endAngle || !clockWise && scaleTextAngle < endAngle) {
  27628. break;
  27629. }
  27630. var theta = scaleTextAngle;
  27631. theta = theta % 360;
  27632. if (theta < 0) {
  27633. theta += 360;
  27634. }
  27635. var isRightSide = theta <= 90 || theta >= 270;
  27636. var textShape = new TextShape({
  27637. zlevel: serie.zlevel,
  27638. z: serie.z - 1,
  27639. hoverable: false,
  27640. style: {
  27641. x: isRightSide ? radius[1] + this.scaleLineLength + 4 : -radius[1] - this.scaleLineLength - 4,
  27642. y: 0,
  27643. text: Math.round(scaleValue * 10) / 10 + unitPostfix,
  27644. textAlign: isRightSide ? 'left' : 'right'
  27645. },
  27646. position: center.slice(),
  27647. rotation: isRightSide ? [
  27648. -theta / 180 * Math.PI,
  27649. 0,
  27650. 0
  27651. ] : [
  27652. -(theta + 180) / 180 * Math.PI,
  27653. 0,
  27654. 0
  27655. ]
  27656. });
  27657. this.shapeList.push(textShape);
  27658. scaleValue += step * unitScale;
  27659. scaleTextAngle += sign * this.scaleUnitAngle * 5;
  27660. }
  27661. }, this);
  27662. },
  27663. refresh: function (newOption) {
  27664. if (newOption) {
  27665. this.option = newOption;
  27666. this.series = newOption.series;
  27667. }
  27668. this.legend = this.component.legend;
  27669. if (this.legend) {
  27670. this.getColor = function (param) {
  27671. return this.legend.getColor(param);
  27672. };
  27673. this.isSelected = function (param) {
  27674. return this.legend.isSelected(param);
  27675. };
  27676. } else {
  27677. var colorMap = {};
  27678. var count = 0;
  27679. this.getColor = function (key) {
  27680. if (colorMap[key]) {
  27681. return colorMap[key];
  27682. }
  27683. if (!colorMap[key]) {
  27684. colorMap[key] = this.zr.getColor(count++);
  27685. }
  27686. return colorMap[key];
  27687. };
  27688. this.isSelected = function () {
  27689. return true;
  27690. };
  27691. }
  27692. this.backupShapeList();
  27693. this._init();
  27694. },
  27695. reformOption: function (opt) {
  27696. var _merge = zrUtil.merge;
  27697. opt = _merge(_merge(opt || {}, this.ecTheme.chord), ecConfig.chord);
  27698. opt.itemStyle.normal.label.textStyle = this.getTextStyle(opt.itemStyle.normal.label.textStyle);
  27699. this.z = opt.z;
  27700. this.zlevel = opt.zlevel;
  27701. }
  27702. };
  27703. zrUtil.inherits(Chord, ChartBase);
  27704. require('../chart').define('chord', Chord);
  27705. return Chord;
  27706. });define('echarts/util/shape/Ribbon', [
  27707. 'require',
  27708. 'zrender/shape/Base',
  27709. 'zrender/shape/util/PathProxy',
  27710. 'zrender/tool/util',
  27711. 'zrender/tool/area'
  27712. ], function (require) {
  27713. var Base = require('zrender/shape/Base');
  27714. var PathProxy = require('zrender/shape/util/PathProxy');
  27715. var zrUtil = require('zrender/tool/util');
  27716. var area = require('zrender/tool/area');
  27717. function RibbonShape(options) {
  27718. Base.call(this, options);
  27719. this._pathProxy = new PathProxy();
  27720. }
  27721. RibbonShape.prototype = {
  27722. type: 'ribbon',
  27723. buildPath: function (ctx, style) {
  27724. var clockWise = style.clockWise || false;
  27725. var path = this._pathProxy;
  27726. path.begin(ctx);
  27727. var cx = style.x;
  27728. var cy = style.y;
  27729. var r = style.r;
  27730. var s0 = style.source0 / 180 * Math.PI;
  27731. var s1 = style.source1 / 180 * Math.PI;
  27732. var t0 = style.target0 / 180 * Math.PI;
  27733. var t1 = style.target1 / 180 * Math.PI;
  27734. var sx0 = cx + Math.cos(s0) * r;
  27735. var sy0 = cy + Math.sin(s0) * r;
  27736. var sx1 = cx + Math.cos(s1) * r;
  27737. var sy1 = cy + Math.sin(s1) * r;
  27738. var tx0 = cx + Math.cos(t0) * r;
  27739. var ty0 = cy + Math.sin(t0) * r;
  27740. var tx1 = cx + Math.cos(t1) * r;
  27741. var ty1 = cy + Math.sin(t1) * r;
  27742. path.moveTo(sx0, sy0);
  27743. path.arc(cx, cy, style.r, s0, s1, !clockWise);
  27744. path.bezierCurveTo((cx - sx1) * 0.7 + sx1, (cy - sy1) * 0.7 + sy1, (cx - tx0) * 0.7 + tx0, (cy - ty0) * 0.7 + ty0, tx0, ty0);
  27745. if (style.source0 === style.target0 && style.source1 === style.target1) {
  27746. return;
  27747. }
  27748. path.arc(cx, cy, style.r, t0, t1, !clockWise);
  27749. path.bezierCurveTo((cx - tx1) * 0.7 + tx1, (cy - ty1) * 0.7 + ty1, (cx - sx0) * 0.7 + sx0, (cy - sy0) * 0.7 + sy0, sx0, sy0);
  27750. },
  27751. getRect: function (style) {
  27752. if (style.__rect) {
  27753. return style.__rect;
  27754. }
  27755. if (!this._pathProxy.isEmpty()) {
  27756. this.buildPath(null, style);
  27757. }
  27758. return this._pathProxy.fastBoundingRect();
  27759. },
  27760. isCover: function (x, y) {
  27761. var rect = this.getRect(this.style);
  27762. if (x >= rect.x && x <= rect.x + rect.width && y >= rect.y && y <= rect.y + rect.height) {
  27763. return area.isInsidePath(this._pathProxy.pathCommands, 0, 'fill', x, y);
  27764. }
  27765. }
  27766. };
  27767. zrUtil.inherits(RibbonShape, Base);
  27768. return RibbonShape;
  27769. });define('echarts/data/Graph', [
  27770. 'require',
  27771. 'zrender/tool/util'
  27772. ], function (require) {
  27773. var util = require('zrender/tool/util');
  27774. 'use strict';
  27775. var Graph = function (directed) {
  27776. this._directed = directed || false;
  27777. this.nodes = [];
  27778. this.edges = [];
  27779. this._nodesMap = {};
  27780. this._edgesMap = {};
  27781. };
  27782. Graph.prototype.isDirected = function () {
  27783. return this._directed;
  27784. };
  27785. Graph.prototype.addNode = function (id, data) {
  27786. if (this._nodesMap[id]) {
  27787. return this._nodesMap[id];
  27788. }
  27789. var node = new Graph.Node(id, data);
  27790. this.nodes.push(node);
  27791. this._nodesMap[id] = node;
  27792. return node;
  27793. };
  27794. Graph.prototype.getNodeById = function (id) {
  27795. return this._nodesMap[id];
  27796. };
  27797. Graph.prototype.addEdge = function (n1, n2, data) {
  27798. if (typeof n1 == 'string') {
  27799. n1 = this._nodesMap[n1];
  27800. }
  27801. if (typeof n2 == 'string') {
  27802. n2 = this._nodesMap[n2];
  27803. }
  27804. if (!n1 || !n2) {
  27805. return;
  27806. }
  27807. var key = n1.id + '-' + n2.id;
  27808. if (this._edgesMap[key]) {
  27809. return this._edgesMap[key];
  27810. }
  27811. var edge = new Graph.Edge(n1, n2, data);
  27812. if (this._directed) {
  27813. n1.outEdges.push(edge);
  27814. n2.inEdges.push(edge);
  27815. }
  27816. n1.edges.push(edge);
  27817. if (n1 !== n2) {
  27818. n2.edges.push(edge);
  27819. }
  27820. this.edges.push(edge);
  27821. this._edgesMap[key] = edge;
  27822. return edge;
  27823. };
  27824. Graph.prototype.removeEdge = function (edge) {
  27825. var n1 = edge.node1;
  27826. var n2 = edge.node2;
  27827. var key = n1.id + '-' + n2.id;
  27828. if (this._directed) {
  27829. n1.outEdges.splice(util.indexOf(n1.outEdges, edge), 1);
  27830. n2.inEdges.splice(util.indexOf(n2.inEdges, edge), 1);
  27831. }
  27832. n1.edges.splice(util.indexOf(n1.edges, edge), 1);
  27833. if (n1 !== n2) {
  27834. n2.edges.splice(util.indexOf(n2.edges, edge), 1);
  27835. }
  27836. delete this._edgesMap[key];
  27837. this.edges.splice(util.indexOf(this.edges, edge), 1);
  27838. };
  27839. Graph.prototype.getEdge = function (n1, n2) {
  27840. if (typeof n1 !== 'string') {
  27841. n1 = n1.id;
  27842. }
  27843. if (typeof n2 !== 'string') {
  27844. n2 = n2.id;
  27845. }
  27846. if (this._directed) {
  27847. return this._edgesMap[n1 + '-' + n2];
  27848. } else {
  27849. return this._edgesMap[n1 + '-' + n2] || this._edgesMap[n2 + '-' + n1];
  27850. }
  27851. };
  27852. Graph.prototype.removeNode = function (node) {
  27853. if (typeof node === 'string') {
  27854. node = this._nodesMap[node];
  27855. if (!node) {
  27856. return;
  27857. }
  27858. }
  27859. delete this._nodesMap[node.id];
  27860. this.nodes.splice(util.indexOf(this.nodes, node), 1);
  27861. for (var i = 0; i < this.edges.length;) {
  27862. var edge = this.edges[i];
  27863. if (edge.node1 === node || edge.node2 === node) {
  27864. this.removeEdge(edge);
  27865. } else {
  27866. i++;
  27867. }
  27868. }
  27869. };
  27870. Graph.prototype.filterNode = function (cb, context) {
  27871. var len = this.nodes.length;
  27872. for (var i = 0; i < len;) {
  27873. if (cb.call(context, this.nodes[i], i)) {
  27874. i++;
  27875. } else {
  27876. this.removeNode(this.nodes[i]);
  27877. len--;
  27878. }
  27879. }
  27880. };
  27881. Graph.prototype.filterEdge = function (cb, context) {
  27882. var len = this.edges.length;
  27883. for (var i = 0; i < len;) {
  27884. if (cb.call(context, this.edges[i], i)) {
  27885. i++;
  27886. } else {
  27887. this.removeEdge(this.edges[i]);
  27888. len--;
  27889. }
  27890. }
  27891. };
  27892. Graph.prototype.eachNode = function (cb, context) {
  27893. var len = this.nodes.length;
  27894. for (var i = 0; i < len; i++) {
  27895. if (this.nodes[i]) {
  27896. cb.call(context, this.nodes[i], i);
  27897. }
  27898. }
  27899. };
  27900. Graph.prototype.eachEdge = function (cb, context) {
  27901. var len = this.edges.length;
  27902. for (var i = 0; i < len; i++) {
  27903. if (this.edges[i]) {
  27904. cb.call(context, this.edges[i], i);
  27905. }
  27906. }
  27907. };
  27908. Graph.prototype.clear = function () {
  27909. this.nodes.length = 0;
  27910. this.edges.length = 0;
  27911. this._nodesMap = {};
  27912. this._edgesMap = {};
  27913. };
  27914. Graph.prototype.breadthFirstTraverse = function (cb, startNode, direction, context) {
  27915. if (typeof startNode === 'string') {
  27916. startNode = this._nodesMap[startNode];
  27917. }
  27918. if (!startNode) {
  27919. return;
  27920. }
  27921. var edgeType = 'edges';
  27922. if (direction === 'out') {
  27923. edgeType = 'outEdges';
  27924. } else if (direction === 'in') {
  27925. edgeType = 'inEdges';
  27926. }
  27927. for (var i = 0; i < this.nodes.length; i++) {
  27928. this.nodes[i].__visited = false;
  27929. }
  27930. if (cb.call(context, startNode, null)) {
  27931. return;
  27932. }
  27933. var queue = [startNode];
  27934. while (queue.length) {
  27935. var currentNode = queue.shift();
  27936. var edges = currentNode[edgeType];
  27937. for (var i = 0; i < edges.length; i++) {
  27938. var e = edges[i];
  27939. var otherNode = e.node1 === currentNode ? e.node2 : e.node1;
  27940. if (!otherNode.__visited) {
  27941. if (cb.call(otherNode, otherNode, currentNode)) {
  27942. return;
  27943. }
  27944. queue.push(otherNode);
  27945. otherNode.__visited = true;
  27946. }
  27947. }
  27948. }
  27949. };
  27950. Graph.prototype.clone = function () {
  27951. var graph = new Graph(this._directed);
  27952. for (var i = 0; i < this.nodes.length; i++) {
  27953. graph.addNode(this.nodes[i].id, this.nodes[i].data);
  27954. }
  27955. for (var i = 0; i < this.edges.length; i++) {
  27956. var e = this.edges[i];
  27957. graph.addEdge(e.node1.id, e.node2.id, e.data);
  27958. }
  27959. return graph;
  27960. };
  27961. var Node = function (id, data) {
  27962. this.id = id;
  27963. this.data = data || null;
  27964. this.inEdges = [];
  27965. this.outEdges = [];
  27966. this.edges = [];
  27967. };
  27968. Node.prototype.degree = function () {
  27969. return this.edges.length;
  27970. };
  27971. Node.prototype.inDegree = function () {
  27972. return this.inEdges.length;
  27973. };
  27974. Node.prototype.outDegree = function () {
  27975. return this.outEdges.length;
  27976. };
  27977. var Edge = function (node1, node2, data) {
  27978. this.node1 = node1;
  27979. this.node2 = node2;
  27980. this.data = data || null;
  27981. };
  27982. Graph.Node = Node;
  27983. Graph.Edge = Edge;
  27984. Graph.fromMatrix = function (nodesData, matrix, directed) {
  27985. if (!matrix || !matrix.length || matrix[0].length !== matrix.length || nodesData.length !== matrix.length) {
  27986. return;
  27987. }
  27988. var size = matrix.length;
  27989. var graph = new Graph(directed);
  27990. for (var i = 0; i < size; i++) {
  27991. var node = graph.addNode(nodesData[i].id, nodesData[i]);
  27992. node.data.value = 0;
  27993. if (directed) {
  27994. node.data.outValue = node.data.inValue = 0;
  27995. }
  27996. }
  27997. for (var i = 0; i < size; i++) {
  27998. for (var j = 0; j < size; j++) {
  27999. var item = matrix[i][j];
  28000. if (directed) {
  28001. graph.nodes[i].data.outValue += item;
  28002. graph.nodes[j].data.inValue += item;
  28003. }
  28004. graph.nodes[i].data.value += item;
  28005. graph.nodes[j].data.value += item;
  28006. }
  28007. }
  28008. for (var i = 0; i < size; i++) {
  28009. for (var j = i; j < size; j++) {
  28010. var item = matrix[i][j];
  28011. if (item === 0) {
  28012. continue;
  28013. }
  28014. var n1 = graph.nodes[i];
  28015. var n2 = graph.nodes[j];
  28016. var edge = graph.addEdge(n1, n2, {});
  28017. edge.data.weight = item;
  28018. if (i !== j) {
  28019. if (directed && matrix[j][i]) {
  28020. var inEdge = graph.addEdge(n2, n1, {});
  28021. inEdge.data.weight = matrix[j][i];
  28022. }
  28023. }
  28024. }
  28025. }
  28026. return graph;
  28027. };
  28028. return Graph;
  28029. });define('echarts/layout/Chord', ['require'], function (require) {
  28030. var ChordLayout = function (opts) {
  28031. opts = opts || {};
  28032. this.sort = opts.sort || null;
  28033. this.sortSub = opts.sortSub || null;
  28034. this.padding = 0.05;
  28035. this.startAngle = opts.startAngle || 0;
  28036. this.clockWise = opts.clockWise == null ? false : opts.clockWise;
  28037. this.center = opts.center || [
  28038. 0,
  28039. 0
  28040. ];
  28041. this.directed = true;
  28042. };
  28043. ChordLayout.prototype.run = function (graphs) {
  28044. if (!(graphs instanceof Array)) {
  28045. graphs = [graphs];
  28046. }
  28047. var gl = graphs.length;
  28048. if (!gl) {
  28049. return;
  28050. }
  28051. var graph0 = graphs[0];
  28052. var nl = graph0.nodes.length;
  28053. var groups = [];
  28054. var sumSize = 0;
  28055. for (var i = 0; i < nl; i++) {
  28056. var g0node = graph0.nodes[i];
  28057. var group = {
  28058. size: 0,
  28059. subGroups: [],
  28060. node: g0node
  28061. };
  28062. groups.push(group);
  28063. var sumWeight = 0;
  28064. for (var k = 0; k < graphs.length; k++) {
  28065. var graph = graphs[k];
  28066. var node = graph.getNodeById(g0node.id);
  28067. if (!node) {
  28068. continue;
  28069. }
  28070. group.size += node.layout.size;
  28071. var edges = this.directed ? node.outEdges : node.edges;
  28072. for (var j = 0; j < edges.length; j++) {
  28073. var e = edges[j];
  28074. var w = e.layout.weight;
  28075. group.subGroups.push({
  28076. weight: w,
  28077. edge: e,
  28078. graph: graph
  28079. });
  28080. sumWeight += w;
  28081. }
  28082. }
  28083. sumSize += group.size;
  28084. var multiplier = group.size / sumWeight;
  28085. for (var j = 0; j < group.subGroups.length; j++) {
  28086. group.subGroups[j].weight *= multiplier;
  28087. }
  28088. if (this.sortSub === 'ascending') {
  28089. group.subGroups.sort(compareSubGroups);
  28090. } else if (this.sort === 'descending') {
  28091. group.subGroups.sort(compareSubGroups);
  28092. group.subGroups.reverse();
  28093. }
  28094. }
  28095. if (this.sort === 'ascending') {
  28096. groups.sort(compareGroups);
  28097. } else if (this.sort === 'descending') {
  28098. groups.sort(compareGroups);
  28099. groups.reverse();
  28100. }
  28101. var multiplier = (Math.PI * 2 - this.padding * nl) / sumSize;
  28102. var angle = this.startAngle;
  28103. var sign = this.clockWise ? 1 : -1;
  28104. for (var i = 0; i < nl; i++) {
  28105. var group = groups[i];
  28106. group.node.layout.startAngle = angle;
  28107. group.node.layout.endAngle = angle + sign * group.size * multiplier;
  28108. group.node.layout.subGroups = [];
  28109. for (var j = 0; j < group.subGroups.length; j++) {
  28110. var subGroup = group.subGroups[j];
  28111. subGroup.edge.layout.startAngle = angle;
  28112. angle += sign * subGroup.weight * multiplier;
  28113. subGroup.edge.layout.endAngle = angle;
  28114. }
  28115. angle = group.node.layout.endAngle + sign * this.padding;
  28116. }
  28117. };
  28118. var compareSubGroups = function (a, b) {
  28119. return a.weight - b.weight;
  28120. };
  28121. var compareGroups = function (a, b) {
  28122. return a.size - b.size;
  28123. };
  28124. return ChordLayout;
  28125. });define('echarts/chart/force', [
  28126. 'require',
  28127. './base',
  28128. '../data/Graph',
  28129. '../layout/Force',
  28130. 'zrender/shape/Line',
  28131. 'zrender/shape/BezierCurve',
  28132. 'zrender/shape/Image',
  28133. '../util/shape/Icon',
  28134. '../config',
  28135. '../util/ecData',
  28136. 'zrender/tool/util',
  28137. 'zrender/config',
  28138. 'zrender/tool/vector',
  28139. '../chart'
  28140. ], function (require) {
  28141. 'use strict';
  28142. var ChartBase = require('./base');
  28143. var Graph = require('../data/Graph');
  28144. var ForceLayout = require('../layout/Force');
  28145. var LineShape = require('zrender/shape/Line');
  28146. var BezierCurveShape = require('zrender/shape/BezierCurve');
  28147. var ImageShape = require('zrender/shape/Image');
  28148. var IconShape = require('../util/shape/Icon');
  28149. var ecConfig = require('../config');
  28150. ecConfig.force = {
  28151. zlevel: 1,
  28152. z: 2,
  28153. center: [
  28154. '50%',
  28155. '50%'
  28156. ],
  28157. size: '100%',
  28158. preventOverlap: false,
  28159. coolDown: 0.99,
  28160. minRadius: 10,
  28161. maxRadius: 20,
  28162. ratioScaling: false,
  28163. large: false,
  28164. useWorker: false,
  28165. steps: 1,
  28166. scaling: 1,
  28167. gravity: 1,
  28168. symbol: 'circle',
  28169. symbolSize: 0,
  28170. linkSymbol: null,
  28171. linkSymbolSize: [
  28172. 10,
  28173. 15
  28174. ],
  28175. draggable: true,
  28176. clickable: true,
  28177. roam: false,
  28178. itemStyle: {
  28179. normal: {
  28180. label: {
  28181. show: false,
  28182. position: 'inside'
  28183. },
  28184. nodeStyle: {
  28185. brushType: 'both',
  28186. borderColor: '#5182ab',
  28187. borderWidth: 1
  28188. },
  28189. linkStyle: {
  28190. color: '#5182ab',
  28191. width: 1,
  28192. type: 'line'
  28193. }
  28194. },
  28195. emphasis: {
  28196. label: { show: false },
  28197. nodeStyle: {},
  28198. linkStyle: { opacity: 0 }
  28199. }
  28200. }
  28201. };
  28202. var ecData = require('../util/ecData');
  28203. var zrUtil = require('zrender/tool/util');
  28204. var zrConfig = require('zrender/config');
  28205. var vec2 = require('zrender/tool/vector');
  28206. function Force(ecTheme, messageCenter, zr, option, myChart) {
  28207. var self = this;
  28208. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  28209. this.__nodePositionMap = {};
  28210. this._graph = new Graph(true);
  28211. this._layout = new ForceLayout();
  28212. this._layout.onupdate = function () {
  28213. self._step();
  28214. };
  28215. this._steps = 1;
  28216. this.ondragstart = function () {
  28217. ondragstart.apply(self, arguments);
  28218. };
  28219. this.ondragend = function () {
  28220. ondragend.apply(self, arguments);
  28221. };
  28222. this.ondrop = function () {
  28223. };
  28224. this.shapeHandler.ondragstart = function () {
  28225. self.isDragstart = true;
  28226. };
  28227. this.onmousemove = function () {
  28228. onmousemove.apply(self, arguments);
  28229. };
  28230. this.refresh(option);
  28231. }
  28232. Force.prototype = {
  28233. constructor: Force,
  28234. type: ecConfig.CHART_TYPE_FORCE,
  28235. _init: function () {
  28236. this.selectedMap = {};
  28237. var legend = this.component.legend;
  28238. var series = this.series;
  28239. var serieName;
  28240. this.clear();
  28241. for (var i = 0, l = series.length; i < l; i++) {
  28242. var serie = series[i];
  28243. if (serie.type === ecConfig.CHART_TYPE_FORCE) {
  28244. series[i] = this.reformOption(series[i]);
  28245. serieName = series[i].name || '';
  28246. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  28247. if (!this.selectedMap[serieName]) {
  28248. continue;
  28249. }
  28250. this.buildMark(i);
  28251. this._initSerie(serie, i);
  28252. break;
  28253. }
  28254. }
  28255. this.animationEffect();
  28256. },
  28257. _getNodeCategory: function (serie, node) {
  28258. return serie.categories && serie.categories[node.category || 0];
  28259. },
  28260. _getNodeQueryTarget: function (serie, node, type) {
  28261. type = type || 'normal';
  28262. var category = this._getNodeCategory(serie, node) || {};
  28263. return [
  28264. node.itemStyle && node.itemStyle[type],
  28265. category && category.itemStyle && category.itemStyle[type],
  28266. serie.itemStyle[type].nodeStyle
  28267. ];
  28268. },
  28269. _getEdgeQueryTarget: function (serie, edge, type) {
  28270. type = type || 'normal';
  28271. return [
  28272. edge.itemStyle && edge.itemStyle[type],
  28273. serie.itemStyle[type].linkStyle
  28274. ];
  28275. },
  28276. _initSerie: function (serie, serieIdx) {
  28277. this._temperature = 1;
  28278. if (serie.matrix) {
  28279. this._graph = this._getSerieGraphFromDataMatrix(serie);
  28280. } else if (serie.links) {
  28281. this._graph = this._getSerieGraphFromNodeLinks(serie);
  28282. }
  28283. this._buildLinkShapes(serie, serieIdx);
  28284. this._buildNodeShapes(serie, serieIdx);
  28285. var panable = serie.roam === true || serie.roam === 'move';
  28286. var zoomable = serie.roam === true || serie.roam === 'scale';
  28287. this.zr.modLayer(this.getZlevelBase(), {
  28288. panable: panable,
  28289. zoomable: zoomable
  28290. });
  28291. if (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) {
  28292. this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, {
  28293. panable: panable,
  28294. zoomable: zoomable
  28295. });
  28296. }
  28297. this._initLayout(serie);
  28298. this._step();
  28299. },
  28300. _getSerieGraphFromDataMatrix: function (serie) {
  28301. var nodesData = [];
  28302. var count = 0;
  28303. var matrix = [];
  28304. for (var i = 0; i < serie.matrix.length; i++) {
  28305. matrix[i] = serie.matrix[i].slice();
  28306. }
  28307. var data = serie.data || serie.nodes;
  28308. for (var i = 0; i < data.length; i++) {
  28309. var node = {};
  28310. var group = data[i];
  28311. for (var key in group) {
  28312. if (key === 'name') {
  28313. node['id'] = group['name'];
  28314. } else {
  28315. node[key] = group[key];
  28316. }
  28317. }
  28318. var category = this._getNodeCategory(serie, group);
  28319. var name = category ? category.name : group.name;
  28320. this.selectedMap[name] = this.isSelected(name);
  28321. if (this.selectedMap[name]) {
  28322. nodesData.push(node);
  28323. count++;
  28324. } else {
  28325. matrix.splice(count, 1);
  28326. for (var j = 0; j < matrix.length; j++) {
  28327. matrix[j].splice(count, 1);
  28328. }
  28329. }
  28330. }
  28331. var graph = Graph.fromMatrix(nodesData, matrix, true);
  28332. graph.eachNode(function (n, idx) {
  28333. n.layout = {
  28334. size: n.data.value,
  28335. mass: 0
  28336. };
  28337. n.rawIndex = idx;
  28338. });
  28339. graph.eachEdge(function (e) {
  28340. e.layout = { weight: e.data.weight };
  28341. });
  28342. return graph;
  28343. },
  28344. _getSerieGraphFromNodeLinks: function (serie) {
  28345. var graph = new Graph(true);
  28346. var nodes = serie.data || serie.nodes;
  28347. for (var i = 0, len = nodes.length; i < len; i++) {
  28348. var n = nodes[i];
  28349. if (!n || n.ignore) {
  28350. continue;
  28351. }
  28352. var category = this._getNodeCategory(serie, n);
  28353. var name = category ? category.name : n.name;
  28354. this.selectedMap[name] = this.isSelected(name);
  28355. if (this.selectedMap[name]) {
  28356. var node = graph.addNode(n.name, n);
  28357. node.rawIndex = i;
  28358. }
  28359. }
  28360. for (var i = 0, len = serie.links.length; i < len; i++) {
  28361. var e = serie.links[i];
  28362. var n1 = e.source;
  28363. var n2 = e.target;
  28364. if (typeof n1 === 'number') {
  28365. n1 = nodes[n1];
  28366. if (n1) {
  28367. n1 = n1.name;
  28368. }
  28369. }
  28370. if (typeof n2 === 'number') {
  28371. n2 = nodes[n2];
  28372. if (n2) {
  28373. n2 = n2.name;
  28374. }
  28375. }
  28376. var edge = graph.addEdge(n1, n2, e);
  28377. if (edge) {
  28378. edge.rawIndex = i;
  28379. }
  28380. }
  28381. graph.eachNode(function (n) {
  28382. var value = n.data.value;
  28383. if (value == null) {
  28384. value = 0;
  28385. for (var i = 0; i < n.edges.length; i++) {
  28386. value += n.edges[i].data.weight || 0;
  28387. }
  28388. }
  28389. n.layout = {
  28390. size: value,
  28391. mass: 0
  28392. };
  28393. });
  28394. graph.eachEdge(function (e) {
  28395. e.layout = { weight: e.data.weight == null ? 1 : e.data.weight };
  28396. });
  28397. return graph;
  28398. },
  28399. _initLayout: function (serie) {
  28400. var graph = this._graph;
  28401. var len = graph.nodes.length;
  28402. var minRadius = this.query(serie, 'minRadius');
  28403. var maxRadius = this.query(serie, 'maxRadius');
  28404. this._steps = serie.steps || 1;
  28405. var layout = this._layout;
  28406. layout.center = this.parseCenter(this.zr, serie.center);
  28407. layout.width = this.parsePercent(serie.size, this.zr.getWidth());
  28408. layout.height = this.parsePercent(serie.size, this.zr.getHeight());
  28409. layout.large = serie.large;
  28410. layout.scaling = serie.scaling;
  28411. layout.ratioScaling = serie.ratioScaling;
  28412. layout.gravity = serie.gravity;
  28413. layout.temperature = 1;
  28414. layout.coolDown = serie.coolDown;
  28415. layout.preventNodeEdgeOverlap = serie.preventOverlap;
  28416. layout.preventNodeOverlap = serie.preventOverlap;
  28417. var min = Infinity;
  28418. var max = -Infinity;
  28419. for (var i = 0; i < len; i++) {
  28420. var gNode = graph.nodes[i];
  28421. max = Math.max(gNode.layout.size, max);
  28422. min = Math.min(gNode.layout.size, min);
  28423. }
  28424. var divider = max - min;
  28425. for (var i = 0; i < len; i++) {
  28426. var gNode = graph.nodes[i];
  28427. if (divider > 0) {
  28428. gNode.layout.size = (gNode.layout.size - min) * (maxRadius - minRadius) / divider + minRadius;
  28429. gNode.layout.mass = gNode.layout.size / maxRadius;
  28430. } else {
  28431. gNode.layout.size = (maxRadius - minRadius) / 2;
  28432. gNode.layout.mass = 0.5;
  28433. }
  28434. }
  28435. for (var i = 0; i < len; i++) {
  28436. var gNode = graph.nodes[i];
  28437. if (typeof this.__nodePositionMap[gNode.id] !== 'undefined') {
  28438. gNode.layout.position = vec2.create();
  28439. vec2.copy(gNode.layout.position, this.__nodePositionMap[gNode.id]);
  28440. } else if (typeof gNode.data.initial !== 'undefined') {
  28441. gNode.layout.position = vec2.create();
  28442. vec2.copy(gNode.layout.position, gNode.data.initial);
  28443. } else {
  28444. var center = this._layout.center;
  28445. var size = Math.min(this._layout.width, this._layout.height);
  28446. gNode.layout.position = _randomInSquare(center[0], center[1], size * 0.8);
  28447. }
  28448. var style = gNode.shape.style;
  28449. var radius = gNode.layout.size;
  28450. style.width = style.width || radius * 2;
  28451. style.height = style.height || radius * 2;
  28452. style.x = -style.width / 2;
  28453. style.y = -style.height / 2;
  28454. vec2.copy(gNode.shape.position, gNode.layout.position);
  28455. }
  28456. len = graph.edges.length;
  28457. max = -Infinity;
  28458. for (var i = 0; i < len; i++) {
  28459. var e = graph.edges[i];
  28460. if (e.layout.weight > max) {
  28461. max = e.layout.weight;
  28462. }
  28463. }
  28464. for (var i = 0; i < len; i++) {
  28465. var e = graph.edges[i];
  28466. e.layout.weight /= max;
  28467. }
  28468. this._layout.init(graph, serie.useWorker);
  28469. },
  28470. _buildNodeShapes: function (serie, serieIdx) {
  28471. var graph = this._graph;
  28472. var categories = this.query(serie, 'categories');
  28473. graph.eachNode(function (node) {
  28474. var category = this._getNodeCategory(serie, node.data);
  28475. var queryTarget = [
  28476. node.data,
  28477. category,
  28478. serie
  28479. ];
  28480. var styleQueryTarget = this._getNodeQueryTarget(serie, node.data);
  28481. var emphasisStyleQueryTarget = this._getNodeQueryTarget(serie, node.data, 'emphasis');
  28482. var shape = new IconShape({
  28483. style: {
  28484. x: 0,
  28485. y: 0,
  28486. color: this.deepQuery(styleQueryTarget, 'color'),
  28487. brushType: 'both',
  28488. strokeColor: this.deepQuery(styleQueryTarget, 'strokeColor') || this.deepQuery(styleQueryTarget, 'borderColor'),
  28489. lineWidth: this.deepQuery(styleQueryTarget, 'lineWidth') || this.deepQuery(styleQueryTarget, 'borderWidth')
  28490. },
  28491. highlightStyle: {
  28492. color: this.deepQuery(emphasisStyleQueryTarget, 'color'),
  28493. strokeColor: this.deepQuery(emphasisStyleQueryTarget, 'strokeColor') || this.deepQuery(emphasisStyleQueryTarget, 'borderColor'),
  28494. lineWidth: this.deepQuery(emphasisStyleQueryTarget, 'lineWidth') || this.deepQuery(emphasisStyleQueryTarget, 'borderWidth')
  28495. },
  28496. clickable: serie.clickable,
  28497. zlevel: this.getZlevelBase(),
  28498. z: this.getZBase()
  28499. });
  28500. if (!shape.style.color) {
  28501. shape.style.color = category ? this.getColor(category.name) : this.getColor(node.id);
  28502. }
  28503. shape.style.iconType = this.deepQuery(queryTarget, 'symbol');
  28504. var symbolSize = this.deepQuery(queryTarget, 'symbolSize') || 0;
  28505. if (typeof symbolSize === 'number') {
  28506. symbolSize = [
  28507. symbolSize,
  28508. symbolSize
  28509. ];
  28510. }
  28511. shape.style.width = symbolSize[0] * 2;
  28512. shape.style.height = symbolSize[1] * 2;
  28513. if (shape.style.iconType.match('image')) {
  28514. shape.style.image = shape.style.iconType.replace(new RegExp('^image:\\/\\/'), '');
  28515. shape = new ImageShape({
  28516. style: shape.style,
  28517. highlightStyle: shape.highlightStyle,
  28518. clickable: shape.clickable,
  28519. zlevel: this.getZlevelBase(),
  28520. z: this.getZBase()
  28521. });
  28522. }
  28523. if (this.deepQuery(queryTarget, 'itemStyle.normal.label.show')) {
  28524. shape.style.text = node.data.label == null ? node.id : node.data.label;
  28525. shape.style.textPosition = this.deepQuery(queryTarget, 'itemStyle.normal.label.position');
  28526. shape.style.textColor = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color');
  28527. shape.style.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle') || {});
  28528. }
  28529. if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
  28530. shape.highlightStyle.textPosition = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.position');
  28531. shape.highlightStyle.textColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color');
  28532. shape.highlightStyle.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || {});
  28533. }
  28534. if (this.deepQuery(queryTarget, 'draggable')) {
  28535. this.setCalculable(shape);
  28536. shape.dragEnableTime = 0;
  28537. shape.draggable = true;
  28538. shape.ondragstart = this.shapeHandler.ondragstart;
  28539. shape.ondragover = null;
  28540. }
  28541. var categoryName = '';
  28542. if (typeof node.category !== 'undefined') {
  28543. var category = categories[node.category];
  28544. categoryName = category && category.name || '';
  28545. }
  28546. ecData.pack(shape, serie, serieIdx, node.data, node.rawIndex, node.data.name || '', node.category);
  28547. this.shapeList.push(shape);
  28548. this.zr.addShape(shape);
  28549. node.shape = shape;
  28550. }, this);
  28551. },
  28552. _buildLinkShapes: function (serie, serieIdx) {
  28553. var graph = this._graph;
  28554. var len = graph.edges.length;
  28555. for (var i = 0; i < len; i++) {
  28556. var gEdge = graph.edges[i];
  28557. var link = gEdge.data;
  28558. var source = gEdge.node1;
  28559. var target = gEdge.node2;
  28560. var otherEdge = graph.getEdge(target, source);
  28561. var queryTarget = this._getEdgeQueryTarget(serie, link);
  28562. var linkType = this.deepQuery(queryTarget, 'type');
  28563. if (serie.linkSymbol && serie.linkSymbol !== 'none') {
  28564. linkType = 'line';
  28565. }
  28566. var LinkShapeCtor = linkType === 'line' ? LineShape : BezierCurveShape;
  28567. var linkShape = new LinkShapeCtor({
  28568. style: {
  28569. xStart: 0,
  28570. yStart: 0,
  28571. xEnd: 0,
  28572. yEnd: 0
  28573. },
  28574. clickable: this.query(serie, 'clickable'),
  28575. highlightStyle: {},
  28576. zlevel: this.getZlevelBase(),
  28577. z: this.getZBase()
  28578. });
  28579. if (otherEdge && otherEdge.shape) {
  28580. linkShape.style.offset = 4;
  28581. otherEdge.shape.style.offset = 4;
  28582. }
  28583. zrUtil.merge(linkShape.style, this.query(serie, 'itemStyle.normal.linkStyle'), true);
  28584. zrUtil.merge(linkShape.highlightStyle, this.query(serie, 'itemStyle.emphasis.linkStyle'), true);
  28585. if (typeof link.itemStyle !== 'undefined') {
  28586. if (link.itemStyle.normal) {
  28587. zrUtil.merge(linkShape.style, link.itemStyle.normal, true);
  28588. }
  28589. if (link.itemStyle.emphasis) {
  28590. zrUtil.merge(linkShape.highlightStyle, link.itemStyle.emphasis, true);
  28591. }
  28592. }
  28593. linkShape.style.lineWidth = linkShape.style.lineWidth || linkShape.style.width;
  28594. linkShape.style.strokeColor = linkShape.style.strokeColor || linkShape.style.color;
  28595. linkShape.highlightStyle.lineWidth = linkShape.highlightStyle.lineWidth || linkShape.highlightStyle.width;
  28596. linkShape.highlightStyle.strokeColor = linkShape.highlightStyle.strokeColor || linkShape.highlightStyle.color;
  28597. ecData.pack(linkShape, serie, serieIdx, gEdge.data, gEdge.rawIndex == null ? i : gEdge.rawIndex, gEdge.data.name || source.id + ' - ' + target.id, source.id, target.id);
  28598. this.shapeList.push(linkShape);
  28599. this.zr.addShape(linkShape);
  28600. gEdge.shape = linkShape;
  28601. if (serie.linkSymbol && serie.linkSymbol !== 'none') {
  28602. var symbolShape = new IconShape({
  28603. style: {
  28604. x: -5,
  28605. y: 0,
  28606. width: serie.linkSymbolSize[0],
  28607. height: serie.linkSymbolSize[1],
  28608. iconType: serie.linkSymbol,
  28609. brushType: 'fill',
  28610. color: linkShape.style.strokeColor
  28611. },
  28612. highlightStyle: { brushType: 'fill' },
  28613. position: [
  28614. 0,
  28615. 0
  28616. ],
  28617. rotation: 0,
  28618. zlevel: this.getZlevelBase(),
  28619. z: this.getZBase()
  28620. });
  28621. linkShape._symbolShape = symbolShape;
  28622. this.shapeList.push(symbolShape);
  28623. this.zr.addShape(symbolShape);
  28624. }
  28625. }
  28626. },
  28627. _updateLinkShapes: function () {
  28628. var v = vec2.create();
  28629. var n = vec2.create();
  28630. var p1 = vec2.create();
  28631. var p2 = vec2.create();
  28632. var edges = this._graph.edges;
  28633. for (var i = 0, len = edges.length; i < len; i++) {
  28634. var edge = edges[i];
  28635. var sourceShape = edge.node1.shape;
  28636. var targetShape = edge.node2.shape;
  28637. vec2.copy(p1, sourceShape.position);
  28638. vec2.copy(p2, targetShape.position);
  28639. var edgeShapeStyle = edge.shape.style;
  28640. vec2.sub(v, p1, p2);
  28641. vec2.normalize(v, v);
  28642. if (edgeShapeStyle.offset) {
  28643. n[0] = v[1];
  28644. n[1] = -v[0];
  28645. vec2.scaleAndAdd(p1, p1, n, edgeShapeStyle.offset);
  28646. vec2.scaleAndAdd(p2, p2, n, edgeShapeStyle.offset);
  28647. } else if (edge.shape.type === 'bezier-curve') {
  28648. edgeShapeStyle.cpX1 = (p1[0] + p2[0]) / 2 - (p2[1] - p1[1]) / 4;
  28649. edgeShapeStyle.cpY1 = (p1[1] + p2[1]) / 2 - (p1[0] - p2[0]) / 4;
  28650. }
  28651. edgeShapeStyle.xStart = p1[0];
  28652. edgeShapeStyle.yStart = p1[1];
  28653. edgeShapeStyle.xEnd = p2[0];
  28654. edgeShapeStyle.yEnd = p2[1];
  28655. edge.shape.modSelf();
  28656. if (edge.shape._symbolShape) {
  28657. var symbolShape = edge.shape._symbolShape;
  28658. vec2.copy(symbolShape.position, p2);
  28659. vec2.scaleAndAdd(symbolShape.position, symbolShape.position, v, targetShape.style.width / 2 + 2);
  28660. var angle = Math.atan2(v[1], v[0]);
  28661. symbolShape.rotation = Math.PI / 2 - angle;
  28662. symbolShape.modSelf();
  28663. }
  28664. }
  28665. },
  28666. _syncNodePositions: function () {
  28667. var graph = this._graph;
  28668. for (var i = 0; i < graph.nodes.length; i++) {
  28669. var gNode = graph.nodes[i];
  28670. var position = gNode.layout.position;
  28671. var node = gNode.data;
  28672. var shape = gNode.shape;
  28673. var fixX = shape.fixed || node.fixX;
  28674. var fixY = shape.fixed || node.fixY;
  28675. if (fixX === true) {
  28676. fixX = 1;
  28677. } else if (isNaN(fixX)) {
  28678. fixX = 0;
  28679. }
  28680. if (fixY === true) {
  28681. fixY = 1;
  28682. } else if (isNaN(fixY)) {
  28683. fixY = 0;
  28684. }
  28685. shape.position[0] += (position[0] - shape.position[0]) * (1 - fixX);
  28686. shape.position[1] += (position[1] - shape.position[1]) * (1 - fixY);
  28687. vec2.copy(position, shape.position);
  28688. var nodeName = node.name;
  28689. if (nodeName) {
  28690. var gPos = this.__nodePositionMap[nodeName];
  28691. if (!gPos) {
  28692. gPos = this.__nodePositionMap[nodeName] = vec2.create();
  28693. }
  28694. vec2.copy(gPos, position);
  28695. }
  28696. shape.modSelf();
  28697. }
  28698. },
  28699. _step: function (e) {
  28700. this._syncNodePositions();
  28701. this._updateLinkShapes();
  28702. this.zr.refreshNextFrame();
  28703. if (this._layout.temperature > 0.01) {
  28704. this._layout.step(this._steps);
  28705. } else {
  28706. this.messageCenter.dispatch(ecConfig.EVENT.FORCE_LAYOUT_END, {}, {}, this.myChart);
  28707. }
  28708. },
  28709. refresh: function (newOption) {
  28710. if (newOption) {
  28711. this.option = newOption;
  28712. this.series = this.option.series;
  28713. }
  28714. this.legend = this.component.legend;
  28715. if (this.legend) {
  28716. this.getColor = function (param) {
  28717. return this.legend.getColor(param);
  28718. };
  28719. this.isSelected = function (param) {
  28720. return this.legend.isSelected(param);
  28721. };
  28722. } else {
  28723. var colorMap = {};
  28724. var count = 0;
  28725. this.getColor = function (key) {
  28726. if (colorMap[key]) {
  28727. return colorMap[key];
  28728. }
  28729. if (!colorMap[key]) {
  28730. colorMap[key] = this.zr.getColor(count++);
  28731. }
  28732. return colorMap[key];
  28733. };
  28734. this.isSelected = function () {
  28735. return true;
  28736. };
  28737. }
  28738. this._init();
  28739. },
  28740. dispose: function () {
  28741. this.clear();
  28742. this.shapeList = null;
  28743. this.effectList = null;
  28744. this._layout.dispose();
  28745. this._layout = null;
  28746. this.__nodePositionMap = {};
  28747. },
  28748. getPosition: function () {
  28749. var position = [];
  28750. this._graph.eachNode(function (n) {
  28751. if (n.layout) {
  28752. position.push({
  28753. name: n.data.name,
  28754. position: Array.prototype.slice.call(n.layout.position)
  28755. });
  28756. }
  28757. });
  28758. return position;
  28759. }
  28760. };
  28761. function ondragstart(param) {
  28762. if (!this.isDragstart || !param.target) {
  28763. return;
  28764. }
  28765. var shape = param.target;
  28766. shape.fixed = true;
  28767. this.isDragstart = false;
  28768. this.zr.on(zrConfig.EVENT.MOUSEMOVE, this.onmousemove);
  28769. }
  28770. function onmousemove() {
  28771. this._layout.temperature = 0.8;
  28772. this._step();
  28773. }
  28774. function ondragend(param, status) {
  28775. if (!this.isDragend || !param.target) {
  28776. return;
  28777. }
  28778. var shape = param.target;
  28779. shape.fixed = false;
  28780. status.dragIn = true;
  28781. status.needRefresh = false;
  28782. this.isDragend = false;
  28783. this.zr.un(zrConfig.EVENT.MOUSEMOVE, this.onmousemove);
  28784. }
  28785. function _randomInSquare(x, y, size) {
  28786. var v = vec2.create();
  28787. v[0] = (Math.random() - 0.5) * size + x;
  28788. v[1] = (Math.random() - 0.5) * size + y;
  28789. return v;
  28790. }
  28791. zrUtil.inherits(Force, ChartBase);
  28792. require('../chart').define('force', Force);
  28793. return Force;
  28794. });define('echarts/layout/Force', [
  28795. 'require',
  28796. './forceLayoutWorker',
  28797. 'zrender/tool/vector'
  28798. ], function (require) {
  28799. var ForceLayoutWorker = require('./forceLayoutWorker');
  28800. var vec2 = require('zrender/tool/vector');
  28801. var requestAnimationFrame = window.requestAnimationFrame || window.msRequestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || function (func) {
  28802. setTimeout(func, 16);
  28803. };
  28804. var ArrayCtor = typeof Float32Array == 'undefined' ? Array : Float32Array;
  28805. var workerUrl;
  28806. function createWorkerUrl() {
  28807. if (typeof Worker !== 'undefined' && typeof Blob !== 'undefined') {
  28808. try {
  28809. var blob = new Blob([ForceLayoutWorker.getWorkerCode()]);
  28810. workerUrl = window.URL.createObjectURL(blob);
  28811. } catch (e) {
  28812. workerUrl = '';
  28813. }
  28814. }
  28815. return workerUrl;
  28816. }
  28817. var ForceLayout = function (opts) {
  28818. if (typeof workerUrl === 'undefined') {
  28819. createWorkerUrl();
  28820. }
  28821. opts = opts || {};
  28822. this.width = opts.width || 500;
  28823. this.height = opts.height || 500;
  28824. this.center = opts.center || [
  28825. this.width / 2,
  28826. this.height / 2
  28827. ];
  28828. this.ratioScaling = opts.ratioScaling || false;
  28829. this.scaling = opts.scaling || 1;
  28830. this.gravity = typeof opts.gravity !== 'undefined' ? opts.gravity : 1;
  28831. this.large = opts.large || false;
  28832. this.preventNodeOverlap = opts.preventNodeOverlap || false;
  28833. this.preventNodeEdgeOverlap = opts.preventNodeEdgeOverlap || false;
  28834. this.maxSpeedIncrease = opts.maxSpeedIncrease || 1;
  28835. this.onupdate = opts.onupdate || function () {
  28836. };
  28837. this.temperature = opts.temperature || 1;
  28838. this.coolDown = opts.coolDown || 0.99;
  28839. this._layout = null;
  28840. this._layoutWorker = null;
  28841. var self = this;
  28842. var _$onupdate = this._$onupdate;
  28843. this._$onupdate = function (e) {
  28844. _$onupdate.call(self, e);
  28845. };
  28846. };
  28847. ForceLayout.prototype.updateConfig = function () {
  28848. var width = this.width;
  28849. var height = this.height;
  28850. var size = Math.min(width, height);
  28851. var config = {
  28852. center: this.center,
  28853. width: this.ratioScaling ? width : size,
  28854. height: this.ratioScaling ? height : size,
  28855. scaling: this.scaling || 1,
  28856. gravity: this.gravity || 1,
  28857. barnesHutOptimize: this.large,
  28858. preventNodeOverlap: this.preventNodeOverlap,
  28859. preventNodeEdgeOverlap: this.preventNodeEdgeOverlap,
  28860. maxSpeedIncrease: this.maxSpeedIncrease
  28861. };
  28862. if (this._layoutWorker) {
  28863. this._layoutWorker.postMessage({
  28864. cmd: 'updateConfig',
  28865. config: config
  28866. });
  28867. } else {
  28868. for (var name in config) {
  28869. this._layout[name] = config[name];
  28870. }
  28871. }
  28872. };
  28873. ForceLayout.prototype.init = function (graph, useWorker) {
  28874. if (this._layoutWorker) {
  28875. this._layoutWorker.terminate();
  28876. this._layoutWorker = null;
  28877. }
  28878. if (workerUrl && useWorker) {
  28879. try {
  28880. if (!this._layoutWorker) {
  28881. this._layoutWorker = new Worker(workerUrl);
  28882. this._layoutWorker.onmessage = this._$onupdate;
  28883. }
  28884. this._layout = null;
  28885. } catch (e) {
  28886. this._layoutWorker = null;
  28887. if (!this._layout) {
  28888. this._layout = new ForceLayoutWorker();
  28889. }
  28890. }
  28891. } else {
  28892. if (!this._layout) {
  28893. this._layout = new ForceLayoutWorker();
  28894. }
  28895. }
  28896. this.temperature = 1;
  28897. this.graph = graph;
  28898. var len = graph.nodes.length;
  28899. var positionArr = new ArrayCtor(len * 2);
  28900. var massArr = new ArrayCtor(len);
  28901. var sizeArr = new ArrayCtor(len);
  28902. for (var i = 0; i < len; i++) {
  28903. var n = graph.nodes[i];
  28904. positionArr[i * 2] = n.layout.position[0];
  28905. positionArr[i * 2 + 1] = n.layout.position[1];
  28906. massArr[i] = typeof n.layout.mass === 'undefined' ? 1 : n.layout.mass;
  28907. sizeArr[i] = typeof n.layout.size === 'undefined' ? 1 : n.layout.size;
  28908. n.layout.__index = i;
  28909. }
  28910. len = graph.edges.length;
  28911. var edgeArr = new ArrayCtor(len * 2);
  28912. var edgeWeightArr = new ArrayCtor(len);
  28913. for (var i = 0; i < len; i++) {
  28914. var edge = graph.edges[i];
  28915. edgeArr[i * 2] = edge.node1.layout.__index;
  28916. edgeArr[i * 2 + 1] = edge.node2.layout.__index;
  28917. edgeWeightArr[i] = edge.layout.weight || 1;
  28918. }
  28919. if (this._layoutWorker) {
  28920. this._layoutWorker.postMessage({
  28921. cmd: 'init',
  28922. nodesPosition: positionArr,
  28923. nodesMass: massArr,
  28924. nodesSize: sizeArr,
  28925. edges: edgeArr,
  28926. edgesWeight: edgeWeightArr
  28927. });
  28928. } else {
  28929. this._layout.initNodes(positionArr, massArr, sizeArr);
  28930. this._layout.initEdges(edgeArr, edgeWeightArr);
  28931. }
  28932. this.updateConfig();
  28933. };
  28934. ForceLayout.prototype.step = function (steps) {
  28935. var nodes = this.graph.nodes;
  28936. if (this._layoutWorker) {
  28937. var positionArr = new ArrayCtor(nodes.length * 2);
  28938. for (var i = 0; i < nodes.length; i++) {
  28939. var n = nodes[i];
  28940. positionArr[i * 2] = n.layout.position[0];
  28941. positionArr[i * 2 + 1] = n.layout.position[1];
  28942. }
  28943. this._layoutWorker.postMessage(positionArr.buffer, [positionArr.buffer]);
  28944. this._layoutWorker.postMessage({
  28945. cmd: 'update',
  28946. steps: steps,
  28947. temperature: this.temperature,
  28948. coolDown: this.coolDown
  28949. });
  28950. for (var i = 0; i < steps; i++) {
  28951. this.temperature *= this.coolDown;
  28952. }
  28953. } else {
  28954. requestAnimationFrame(this._$onupdate);
  28955. for (var i = 0; i < nodes.length; i++) {
  28956. var n = nodes[i];
  28957. vec2.copy(this._layout.nodes[i].position, n.layout.position);
  28958. }
  28959. for (var i = 0; i < steps; i++) {
  28960. this._layout.temperature = this.temperature;
  28961. this._layout.update();
  28962. this.temperature *= this.coolDown;
  28963. }
  28964. }
  28965. };
  28966. ForceLayout.prototype._$onupdate = function (e) {
  28967. if (this._layoutWorker) {
  28968. var positionArr = new Float32Array(e.data);
  28969. for (var i = 0; i < this.graph.nodes.length; i++) {
  28970. var n = this.graph.nodes[i];
  28971. n.layout.position[0] = positionArr[i * 2];
  28972. n.layout.position[1] = positionArr[i * 2 + 1];
  28973. }
  28974. this.onupdate && this.onupdate();
  28975. } else if (this._layout) {
  28976. for (var i = 0; i < this.graph.nodes.length; i++) {
  28977. var n = this.graph.nodes[i];
  28978. vec2.copy(n.layout.position, this._layout.nodes[i].position);
  28979. }
  28980. this.onupdate && this.onupdate();
  28981. }
  28982. };
  28983. ForceLayout.prototype.dispose = function () {
  28984. if (this._layoutWorker) {
  28985. this._layoutWorker.terminate();
  28986. }
  28987. this._layoutWorker = null;
  28988. this._layout = null;
  28989. };
  28990. return ForceLayout;
  28991. });define('echarts/layout/forceLayoutWorker', [
  28992. 'require',
  28993. 'zrender/tool/vector'
  28994. ], function __echartsForceLayoutWorker(require) {
  28995. 'use strict';
  28996. var vec2;
  28997. var inWorker = typeof window === 'undefined' && typeof require === 'undefined';
  28998. if (inWorker) {
  28999. vec2 = {
  29000. create: function (x, y) {
  29001. var out = new Float32Array(2);
  29002. out[0] = x || 0;
  29003. out[1] = y || 0;
  29004. return out;
  29005. },
  29006. dist: function (a, b) {
  29007. var x = b[0] - a[0];
  29008. var y = b[1] - a[1];
  29009. return Math.sqrt(x * x + y * y);
  29010. },
  29011. len: function (a) {
  29012. var x = a[0];
  29013. var y = a[1];
  29014. return Math.sqrt(x * x + y * y);
  29015. },
  29016. scaleAndAdd: function (out, a, b, scale) {
  29017. out[0] = a[0] + b[0] * scale;
  29018. out[1] = a[1] + b[1] * scale;
  29019. return out;
  29020. },
  29021. scale: function (out, a, b) {
  29022. out[0] = a[0] * b;
  29023. out[1] = a[1] * b;
  29024. return out;
  29025. },
  29026. add: function (out, a, b) {
  29027. out[0] = a[0] + b[0];
  29028. out[1] = a[1] + b[1];
  29029. return out;
  29030. },
  29031. sub: function (out, a, b) {
  29032. out[0] = a[0] - b[0];
  29033. out[1] = a[1] - b[1];
  29034. return out;
  29035. },
  29036. dot: function (v1, v2) {
  29037. return v1[0] * v2[0] + v1[1] * v2[1];
  29038. },
  29039. normalize: function (out, a) {
  29040. var x = a[0];
  29041. var y = a[1];
  29042. var len = x * x + y * y;
  29043. if (len > 0) {
  29044. len = 1 / Math.sqrt(len);
  29045. out[0] = a[0] * len;
  29046. out[1] = a[1] * len;
  29047. }
  29048. return out;
  29049. },
  29050. negate: function (out, a) {
  29051. out[0] = -a[0];
  29052. out[1] = -a[1];
  29053. return out;
  29054. },
  29055. copy: function (out, a) {
  29056. out[0] = a[0];
  29057. out[1] = a[1];
  29058. return out;
  29059. },
  29060. set: function (out, x, y) {
  29061. out[0] = x;
  29062. out[1] = y;
  29063. return out;
  29064. }
  29065. };
  29066. } else {
  29067. vec2 = require('zrender/tool/vector');
  29068. }
  29069. var ArrayCtor = typeof Float32Array == 'undefined' ? Array : Float32Array;
  29070. function Region() {
  29071. this.subRegions = [];
  29072. this.nSubRegions = 0;
  29073. this.node = null;
  29074. this.mass = 0;
  29075. this.centerOfMass = null;
  29076. this.bbox = new ArrayCtor(4);
  29077. this.size = 0;
  29078. }
  29079. Region.prototype.beforeUpdate = function () {
  29080. for (var i = 0; i < this.nSubRegions; i++) {
  29081. this.subRegions[i].beforeUpdate();
  29082. }
  29083. this.mass = 0;
  29084. if (this.centerOfMass) {
  29085. this.centerOfMass[0] = 0;
  29086. this.centerOfMass[1] = 0;
  29087. }
  29088. this.nSubRegions = 0;
  29089. this.node = null;
  29090. };
  29091. Region.prototype.afterUpdate = function () {
  29092. this.subRegions.length = this.nSubRegions;
  29093. for (var i = 0; i < this.nSubRegions; i++) {
  29094. this.subRegions[i].afterUpdate();
  29095. }
  29096. };
  29097. Region.prototype.addNode = function (node) {
  29098. if (this.nSubRegions === 0) {
  29099. if (this.node == null) {
  29100. this.node = node;
  29101. return;
  29102. } else {
  29103. this._addNodeToSubRegion(this.node);
  29104. this.node = null;
  29105. }
  29106. }
  29107. this._addNodeToSubRegion(node);
  29108. this._updateCenterOfMass(node);
  29109. };
  29110. Region.prototype.findSubRegion = function (x, y) {
  29111. for (var i = 0; i < this.nSubRegions; i++) {
  29112. var region = this.subRegions[i];
  29113. if (region.contain(x, y)) {
  29114. return region;
  29115. }
  29116. }
  29117. };
  29118. Region.prototype.contain = function (x, y) {
  29119. return this.bbox[0] <= x && this.bbox[2] >= x && this.bbox[1] <= y && this.bbox[3] >= y;
  29120. };
  29121. Region.prototype.setBBox = function (minX, minY, maxX, maxY) {
  29122. this.bbox[0] = minX;
  29123. this.bbox[1] = minY;
  29124. this.bbox[2] = maxX;
  29125. this.bbox[3] = maxY;
  29126. this.size = (maxX - minX + maxY - minY) / 2;
  29127. };
  29128. Region.prototype._newSubRegion = function () {
  29129. var subRegion = this.subRegions[this.nSubRegions];
  29130. if (!subRegion) {
  29131. subRegion = new Region();
  29132. this.subRegions[this.nSubRegions] = subRegion;
  29133. }
  29134. this.nSubRegions++;
  29135. return subRegion;
  29136. };
  29137. Region.prototype._addNodeToSubRegion = function (node) {
  29138. var subRegion = this.findSubRegion(node.position[0], node.position[1]);
  29139. var bbox = this.bbox;
  29140. if (!subRegion) {
  29141. var cx = (bbox[0] + bbox[2]) / 2;
  29142. var cy = (bbox[1] + bbox[3]) / 2;
  29143. var w = (bbox[2] - bbox[0]) / 2;
  29144. var h = (bbox[3] - bbox[1]) / 2;
  29145. var xi = node.position[0] >= cx ? 1 : 0;
  29146. var yi = node.position[1] >= cy ? 1 : 0;
  29147. var subRegion = this._newSubRegion();
  29148. subRegion.setBBox(xi * w + bbox[0], yi * h + bbox[1], (xi + 1) * w + bbox[0], (yi + 1) * h + bbox[1]);
  29149. }
  29150. subRegion.addNode(node);
  29151. };
  29152. Region.prototype._updateCenterOfMass = function (node) {
  29153. if (this.centerOfMass == null) {
  29154. this.centerOfMass = vec2.create();
  29155. }
  29156. var x = this.centerOfMass[0] * this.mass;
  29157. var y = this.centerOfMass[1] * this.mass;
  29158. x += node.position[0] * node.mass;
  29159. y += node.position[1] * node.mass;
  29160. this.mass += node.mass;
  29161. this.centerOfMass[0] = x / this.mass;
  29162. this.centerOfMass[1] = y / this.mass;
  29163. };
  29164. function GraphNode() {
  29165. this.position = vec2.create();
  29166. this.force = vec2.create();
  29167. this.forcePrev = vec2.create();
  29168. this.speed = vec2.create();
  29169. this.speedPrev = vec2.create();
  29170. this.mass = 1;
  29171. this.inDegree = 0;
  29172. this.outDegree = 0;
  29173. }
  29174. function GraphEdge(node1, node2) {
  29175. this.node1 = node1;
  29176. this.node2 = node2;
  29177. this.weight = 1;
  29178. }
  29179. function ForceLayout() {
  29180. this.barnesHutOptimize = false;
  29181. this.barnesHutTheta = 1.5;
  29182. this.repulsionByDegree = false;
  29183. this.preventNodeOverlap = false;
  29184. this.preventNodeEdgeOverlap = false;
  29185. this.strongGravity = true;
  29186. this.gravity = 1;
  29187. this.scaling = 1;
  29188. this.edgeWeightInfluence = 1;
  29189. this.center = [
  29190. 0,
  29191. 0
  29192. ];
  29193. this.width = 500;
  29194. this.height = 500;
  29195. this.maxSpeedIncrease = 1;
  29196. this.nodes = [];
  29197. this.edges = [];
  29198. this.bbox = new ArrayCtor(4);
  29199. this._rootRegion = new Region();
  29200. this._rootRegion.centerOfMass = vec2.create();
  29201. this._massArr = null;
  29202. this._k = 0;
  29203. }
  29204. ForceLayout.prototype.nodeToNodeRepulsionFactor = function (mass, d, k) {
  29205. return k * k * mass / d;
  29206. };
  29207. ForceLayout.prototype.edgeToNodeRepulsionFactor = function (mass, d, k) {
  29208. return k * mass / d;
  29209. };
  29210. ForceLayout.prototype.attractionFactor = function (w, d, k) {
  29211. return w * d / k;
  29212. };
  29213. ForceLayout.prototype.initNodes = function (positionArr, massArr, sizeArr) {
  29214. this.temperature = 1;
  29215. var nNodes = positionArr.length / 2;
  29216. this.nodes.length = 0;
  29217. var haveSize = typeof sizeArr !== 'undefined';
  29218. for (var i = 0; i < nNodes; i++) {
  29219. var node = new GraphNode();
  29220. node.position[0] = positionArr[i * 2];
  29221. node.position[1] = positionArr[i * 2 + 1];
  29222. node.mass = massArr[i];
  29223. if (haveSize) {
  29224. node.size = sizeArr[i];
  29225. }
  29226. this.nodes.push(node);
  29227. }
  29228. this._massArr = massArr;
  29229. if (haveSize) {
  29230. this._sizeArr = sizeArr;
  29231. }
  29232. };
  29233. ForceLayout.prototype.initEdges = function (edgeArr, edgeWeightArr) {
  29234. var nEdges = edgeArr.length / 2;
  29235. this.edges.length = 0;
  29236. var edgeHaveWeight = typeof edgeWeightArr !== 'undefined';
  29237. for (var i = 0; i < nEdges; i++) {
  29238. var sIdx = edgeArr[i * 2];
  29239. var tIdx = edgeArr[i * 2 + 1];
  29240. var sNode = this.nodes[sIdx];
  29241. var tNode = this.nodes[tIdx];
  29242. if (!sNode || !tNode) {
  29243. continue;
  29244. }
  29245. sNode.outDegree++;
  29246. tNode.inDegree++;
  29247. var edge = new GraphEdge(sNode, tNode);
  29248. if (edgeHaveWeight) {
  29249. edge.weight = edgeWeightArr[i];
  29250. }
  29251. this.edges.push(edge);
  29252. }
  29253. };
  29254. ForceLayout.prototype.update = function () {
  29255. var nNodes = this.nodes.length;
  29256. this.updateBBox();
  29257. this._k = 0.4 * this.scaling * Math.sqrt(this.width * this.height / nNodes);
  29258. if (this.barnesHutOptimize) {
  29259. this._rootRegion.setBBox(this.bbox[0], this.bbox[1], this.bbox[2], this.bbox[3]);
  29260. this._rootRegion.beforeUpdate();
  29261. for (var i = 0; i < nNodes; i++) {
  29262. this._rootRegion.addNode(this.nodes[i]);
  29263. }
  29264. this._rootRegion.afterUpdate();
  29265. } else {
  29266. var mass = 0;
  29267. var centerOfMass = this._rootRegion.centerOfMass;
  29268. vec2.set(centerOfMass, 0, 0);
  29269. for (var i = 0; i < nNodes; i++) {
  29270. var node = this.nodes[i];
  29271. mass += node.mass;
  29272. vec2.scaleAndAdd(centerOfMass, centerOfMass, node.position, node.mass);
  29273. }
  29274. if (mass > 0) {
  29275. vec2.scale(centerOfMass, centerOfMass, 1 / mass);
  29276. }
  29277. }
  29278. this.updateForce();
  29279. this.updatePosition();
  29280. };
  29281. ForceLayout.prototype.updateForce = function () {
  29282. var nNodes = this.nodes.length;
  29283. for (var i = 0; i < nNodes; i++) {
  29284. var node = this.nodes[i];
  29285. vec2.copy(node.forcePrev, node.force);
  29286. vec2.copy(node.speedPrev, node.speed);
  29287. vec2.set(node.force, 0, 0);
  29288. }
  29289. this.updateNodeNodeForce();
  29290. if (this.gravity > 0) {
  29291. this.updateGravityForce();
  29292. }
  29293. this.updateEdgeForce();
  29294. if (this.preventNodeEdgeOverlap) {
  29295. this.updateNodeEdgeForce();
  29296. }
  29297. };
  29298. ForceLayout.prototype.updatePosition = function () {
  29299. var nNodes = this.nodes.length;
  29300. var v = vec2.create();
  29301. for (var i = 0; i < nNodes; i++) {
  29302. var node = this.nodes[i];
  29303. var speed = node.speed;
  29304. vec2.scale(node.force, node.force, 1 / 30);
  29305. var df = vec2.len(node.force) + 0.1;
  29306. var scale = Math.min(df, 500) / df;
  29307. vec2.scale(node.force, node.force, scale);
  29308. vec2.add(speed, speed, node.force);
  29309. vec2.scale(speed, speed, this.temperature);
  29310. vec2.sub(v, speed, node.speedPrev);
  29311. var swing = vec2.len(v);
  29312. if (swing > 0) {
  29313. vec2.scale(v, v, 1 / swing);
  29314. var base = vec2.len(node.speedPrev);
  29315. if (base > 0) {
  29316. swing = Math.min(swing / base, this.maxSpeedIncrease) * base;
  29317. vec2.scaleAndAdd(speed, node.speedPrev, v, swing);
  29318. }
  29319. }
  29320. var ds = vec2.len(speed);
  29321. var scale = Math.min(ds, 100) / (ds + 0.1);
  29322. vec2.scale(speed, speed, scale);
  29323. vec2.add(node.position, node.position, speed);
  29324. }
  29325. };
  29326. ForceLayout.prototype.updateNodeNodeForce = function () {
  29327. var nNodes = this.nodes.length;
  29328. for (var i = 0; i < nNodes; i++) {
  29329. var na = this.nodes[i];
  29330. if (this.barnesHutOptimize) {
  29331. this.applyRegionToNodeRepulsion(this._rootRegion, na);
  29332. } else {
  29333. for (var j = i + 1; j < nNodes; j++) {
  29334. var nb = this.nodes[j];
  29335. this.applyNodeToNodeRepulsion(na, nb, false);
  29336. }
  29337. }
  29338. }
  29339. };
  29340. ForceLayout.prototype.updateGravityForce = function () {
  29341. for (var i = 0; i < this.nodes.length; i++) {
  29342. this.applyNodeGravity(this.nodes[i]);
  29343. }
  29344. };
  29345. ForceLayout.prototype.updateEdgeForce = function () {
  29346. for (var i = 0; i < this.edges.length; i++) {
  29347. this.applyEdgeAttraction(this.edges[i]);
  29348. }
  29349. };
  29350. ForceLayout.prototype.updateNodeEdgeForce = function () {
  29351. for (var i = 0; i < this.nodes.length; i++) {
  29352. for (var j = 0; j < this.edges.length; j++) {
  29353. this.applyEdgeToNodeRepulsion(this.edges[j], this.nodes[i]);
  29354. }
  29355. }
  29356. };
  29357. ForceLayout.prototype.applyRegionToNodeRepulsion = function () {
  29358. var v = vec2.create();
  29359. return function applyRegionToNodeRepulsion(region, node) {
  29360. if (region.node) {
  29361. this.applyNodeToNodeRepulsion(region.node, node, true);
  29362. } else {
  29363. if (region.mass === 0 && node.mass === 0) {
  29364. return;
  29365. }
  29366. vec2.sub(v, node.position, region.centerOfMass);
  29367. var d2 = v[0] * v[0] + v[1] * v[1];
  29368. if (d2 > this.barnesHutTheta * region.size * region.size) {
  29369. var factor = this._k * this._k * (node.mass + region.mass) / (d2 + 1);
  29370. vec2.scaleAndAdd(node.force, node.force, v, factor * 2);
  29371. } else {
  29372. for (var i = 0; i < region.nSubRegions; i++) {
  29373. this.applyRegionToNodeRepulsion(region.subRegions[i], node);
  29374. }
  29375. }
  29376. }
  29377. };
  29378. }();
  29379. ForceLayout.prototype.applyNodeToNodeRepulsion = function () {
  29380. var v = vec2.create();
  29381. return function applyNodeToNodeRepulsion(na, nb, oneWay) {
  29382. if (na === nb) {
  29383. return;
  29384. }
  29385. if (na.mass === 0 && nb.mass === 0) {
  29386. return;
  29387. }
  29388. vec2.sub(v, na.position, nb.position);
  29389. var d2 = v[0] * v[0] + v[1] * v[1];
  29390. if (d2 === 0) {
  29391. return;
  29392. }
  29393. var factor;
  29394. var mass = na.mass + nb.mass;
  29395. var d = Math.sqrt(d2);
  29396. vec2.scale(v, v, 1 / d);
  29397. if (this.preventNodeOverlap) {
  29398. d = d - na.size - nb.size;
  29399. if (d > 0) {
  29400. factor = this.nodeToNodeRepulsionFactor(mass, d, this._k);
  29401. } else if (d <= 0) {
  29402. factor = this._k * this._k * 10 * mass;
  29403. }
  29404. } else {
  29405. factor = this.nodeToNodeRepulsionFactor(mass, d, this._k);
  29406. }
  29407. if (!oneWay) {
  29408. vec2.scaleAndAdd(na.force, na.force, v, factor * 2);
  29409. }
  29410. vec2.scaleAndAdd(nb.force, nb.force, v, -factor * 2);
  29411. };
  29412. }();
  29413. ForceLayout.prototype.applyEdgeAttraction = function () {
  29414. var v = vec2.create();
  29415. return function applyEdgeAttraction(edge) {
  29416. var na = edge.node1;
  29417. var nb = edge.node2;
  29418. vec2.sub(v, na.position, nb.position);
  29419. var d = vec2.len(v);
  29420. var w;
  29421. if (this.edgeWeightInfluence === 0) {
  29422. w = 1;
  29423. } else if (this.edgeWeightInfluence == 1) {
  29424. w = edge.weight;
  29425. } else {
  29426. w = Math.pow(edge.weight, this.edgeWeightInfluence);
  29427. }
  29428. var factor;
  29429. if (this.preventOverlap) {
  29430. d = d - na.size - nb.size;
  29431. if (d <= 0) {
  29432. return;
  29433. }
  29434. }
  29435. var factor = this.attractionFactor(w, d, this._k);
  29436. vec2.scaleAndAdd(na.force, na.force, v, -factor);
  29437. vec2.scaleAndAdd(nb.force, nb.force, v, factor);
  29438. };
  29439. }();
  29440. ForceLayout.prototype.applyNodeGravity = function () {
  29441. var v = vec2.create();
  29442. return function (node) {
  29443. vec2.sub(v, this.center, node.position);
  29444. if (this.width > this.height) {
  29445. v[1] *= this.width / this.height;
  29446. } else {
  29447. v[0] *= this.height / this.width;
  29448. }
  29449. var d = vec2.len(v) / 100;
  29450. if (this.strongGravity) {
  29451. vec2.scaleAndAdd(node.force, node.force, v, d * this.gravity * node.mass);
  29452. } else {
  29453. vec2.scaleAndAdd(node.force, node.force, v, this.gravity * node.mass / (d + 1));
  29454. }
  29455. };
  29456. }();
  29457. ForceLayout.prototype.applyEdgeToNodeRepulsion = function () {
  29458. var v12 = vec2.create();
  29459. var v13 = vec2.create();
  29460. var p = vec2.create();
  29461. return function (e, n3) {
  29462. var n1 = e.node1;
  29463. var n2 = e.node2;
  29464. if (n1 === n3 || n2 === n3) {
  29465. return;
  29466. }
  29467. vec2.sub(v12, n2.position, n1.position);
  29468. vec2.sub(v13, n3.position, n1.position);
  29469. var len12 = vec2.len(v12);
  29470. vec2.scale(v12, v12, 1 / len12);
  29471. var len = vec2.dot(v12, v13);
  29472. if (len < 0 || len > len12) {
  29473. return;
  29474. }
  29475. vec2.scaleAndAdd(p, n1.position, v12, len);
  29476. var dist = vec2.dist(p, n3.position) - n3.size;
  29477. var factor = this.edgeToNodeRepulsionFactor(n3.mass, Math.max(dist, 0.1), 100);
  29478. vec2.sub(v12, n3.position, p);
  29479. vec2.normalize(v12, v12);
  29480. vec2.scaleAndAdd(n3.force, n3.force, v12, factor);
  29481. vec2.scaleAndAdd(n1.force, n1.force, v12, -factor);
  29482. vec2.scaleAndAdd(n2.force, n2.force, v12, -factor);
  29483. };
  29484. }();
  29485. ForceLayout.prototype.updateBBox = function () {
  29486. var minX = Infinity;
  29487. var minY = Infinity;
  29488. var maxX = -Infinity;
  29489. var maxY = -Infinity;
  29490. for (var i = 0; i < this.nodes.length; i++) {
  29491. var pos = this.nodes[i].position;
  29492. minX = Math.min(minX, pos[0]);
  29493. minY = Math.min(minY, pos[1]);
  29494. maxX = Math.max(maxX, pos[0]);
  29495. maxY = Math.max(maxY, pos[1]);
  29496. }
  29497. this.bbox[0] = minX;
  29498. this.bbox[1] = minY;
  29499. this.bbox[2] = maxX;
  29500. this.bbox[3] = maxY;
  29501. };
  29502. ForceLayout.getWorkerCode = function () {
  29503. var str = __echartsForceLayoutWorker.toString();
  29504. return str.slice(str.indexOf('{') + 1, str.lastIndexOf('return'));
  29505. };
  29506. if (inWorker) {
  29507. var forceLayout = null;
  29508. self.onmessage = function (e) {
  29509. if (e.data instanceof ArrayBuffer) {
  29510. if (!forceLayout)
  29511. return;
  29512. var positionArr = new Float32Array(e.data);
  29513. var nNodes = positionArr.length / 2;
  29514. for (var i = 0; i < nNodes; i++) {
  29515. var node = forceLayout.nodes[i];
  29516. node.position[0] = positionArr[i * 2];
  29517. node.position[1] = positionArr[i * 2 + 1];
  29518. }
  29519. return;
  29520. }
  29521. switch (e.data.cmd) {
  29522. case 'init':
  29523. if (!forceLayout) {
  29524. forceLayout = new ForceLayout();
  29525. }
  29526. forceLayout.initNodes(e.data.nodesPosition, e.data.nodesMass, e.data.nodesSize);
  29527. forceLayout.initEdges(e.data.edges, e.data.edgesWeight);
  29528. break;
  29529. case 'updateConfig':
  29530. if (forceLayout) {
  29531. for (var name in e.data.config) {
  29532. forceLayout[name] = e.data.config[name];
  29533. }
  29534. }
  29535. break;
  29536. case 'update':
  29537. var steps = e.data.steps;
  29538. if (forceLayout) {
  29539. var nNodes = forceLayout.nodes.length;
  29540. var positionArr = new Float32Array(nNodes * 2);
  29541. forceLayout.temperature = e.data.temperature;
  29542. for (var i = 0; i < steps; i++) {
  29543. forceLayout.update();
  29544. forceLayout.temperature *= e.data.coolDown;
  29545. }
  29546. for (var i = 0; i < nNodes; i++) {
  29547. var node = forceLayout.nodes[i];
  29548. positionArr[i * 2] = node.position[0];
  29549. positionArr[i * 2 + 1] = node.position[1];
  29550. }
  29551. self.postMessage(positionArr.buffer, [positionArr.buffer]);
  29552. } else {
  29553. var emptyArr = new Float32Array();
  29554. self.postMessage(emptyArr.buffer, [emptyArr.buffer]);
  29555. }
  29556. break;
  29557. }
  29558. };
  29559. }
  29560. return ForceLayout;
  29561. });define('echarts/chart/map', [
  29562. 'require',
  29563. './base',
  29564. 'zrender/shape/Text',
  29565. 'zrender/shape/Path',
  29566. 'zrender/shape/Circle',
  29567. 'zrender/shape/Rectangle',
  29568. 'zrender/shape/Line',
  29569. 'zrender/shape/Polygon',
  29570. 'zrender/shape/Ellipse',
  29571. 'zrender/shape/Image',
  29572. '../component/dataRange',
  29573. '../component/roamController',
  29574. '../layer/heatmap',
  29575. '../config',
  29576. '../util/ecData',
  29577. 'zrender/tool/util',
  29578. 'zrender/config',
  29579. 'zrender/tool/event',
  29580. '../util/mapData/params',
  29581. '../util/mapData/textFixed',
  29582. '../util/mapData/geoCoord',
  29583. '../util/projection/svg',
  29584. '../util/projection/normal',
  29585. '../chart'
  29586. ], function (require) {
  29587. var ChartBase = require('./base');
  29588. var TextShape = require('zrender/shape/Text');
  29589. var PathShape = require('zrender/shape/Path');
  29590. var CircleShape = require('zrender/shape/Circle');
  29591. var RectangleShape = require('zrender/shape/Rectangle');
  29592. var LineShape = require('zrender/shape/Line');
  29593. var PolygonShape = require('zrender/shape/Polygon');
  29594. var EllipseShape = require('zrender/shape/Ellipse');
  29595. var ZrImage = require('zrender/shape/Image');
  29596. require('../component/dataRange');
  29597. require('../component/roamController');
  29598. var HeatmapLayer = require('../layer/heatmap');
  29599. var ecConfig = require('../config');
  29600. ecConfig.map = {
  29601. zlevel: 0,
  29602. z: 2,
  29603. mapType: 'china',
  29604. showLegendSymbol: true,
  29605. dataRangeHoverLink: true,
  29606. hoverable: true,
  29607. clickable: true,
  29608. itemStyle: {
  29609. normal: {
  29610. borderColor: 'rgba(0,0,0,0)',
  29611. borderWidth: 1,
  29612. areaStyle: { color: '#ccc' },
  29613. label: {
  29614. show: false,
  29615. textStyle: { color: 'rgb(139,69,19)' }
  29616. }
  29617. },
  29618. emphasis: {
  29619. borderColor: 'rgba(0,0,0,0)',
  29620. borderWidth: 1,
  29621. areaStyle: { color: 'rgba(255,215,0,0.8)' },
  29622. label: {
  29623. show: false,
  29624. textStyle: { color: 'rgb(100,0,0)' }
  29625. }
  29626. }
  29627. }
  29628. };
  29629. var ecData = require('../util/ecData');
  29630. var zrUtil = require('zrender/tool/util');
  29631. var zrConfig = require('zrender/config');
  29632. var zrEvent = require('zrender/tool/event');
  29633. var _mapParams = require('../util/mapData/params').params;
  29634. var _textFixed = require('../util/mapData/textFixed');
  29635. var _geoCoord = require('../util/mapData/geoCoord');
  29636. function Map(ecTheme, messageCenter, zr, option, myChart) {
  29637. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  29638. var self = this;
  29639. self._onmousewheel = function (params) {
  29640. return self.__onmousewheel(params);
  29641. };
  29642. self._onmousedown = function (params) {
  29643. return self.__onmousedown(params);
  29644. };
  29645. self._onmousemove = function (params) {
  29646. return self.__onmousemove(params);
  29647. };
  29648. self._onmouseup = function (params) {
  29649. return self.__onmouseup(params);
  29650. };
  29651. self._onroamcontroller = function (params) {
  29652. return self.__onroamcontroller(params);
  29653. };
  29654. self._ondrhoverlink = function (params) {
  29655. return self.__ondrhoverlink(params);
  29656. };
  29657. this._isAlive = true;
  29658. this._selectedMode = {};
  29659. this._activeMapType = {};
  29660. this._clickable = {};
  29661. this._hoverable = {};
  29662. this._showLegendSymbol = {};
  29663. this._selected = {};
  29664. this._mapTypeMap = {};
  29665. this._mapDataMap = {};
  29666. this._nameMap = {};
  29667. this._specialArea = {};
  29668. this._refreshDelayTicket;
  29669. this._mapDataRequireCounter;
  29670. this._markAnimation = false;
  29671. this._hoverLinkMap = {};
  29672. this._roamMap = {};
  29673. this._scaleLimitMap = {};
  29674. this._mx;
  29675. this._my;
  29676. this._mousedown;
  29677. this._justMove;
  29678. this._curMapType;
  29679. this.refresh(option);
  29680. this.zr.on(zrConfig.EVENT.MOUSEWHEEL, this._onmousewheel);
  29681. this.zr.on(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
  29682. messageCenter.bind(ecConfig.EVENT.ROAMCONTROLLER, this._onroamcontroller);
  29683. messageCenter.bind(ecConfig.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink);
  29684. }
  29685. Map.prototype = {
  29686. type: ecConfig.CHART_TYPE_MAP,
  29687. _buildShape: function () {
  29688. var series = this.series;
  29689. this.selectedMap = {};
  29690. this._activeMapType = {};
  29691. var legend = this.component.legend;
  29692. var seriesName;
  29693. var valueData = {};
  29694. var mapType;
  29695. var data;
  29696. var name;
  29697. var mapSeries = {};
  29698. var mapValuePrecision = {};
  29699. var valueCalculation = {};
  29700. for (var i = 0, l = series.length; i < l; i++) {
  29701. if (series[i].type == ecConfig.CHART_TYPE_MAP) {
  29702. series[i] = this.reformOption(series[i]);
  29703. mapType = series[i].mapType;
  29704. mapSeries[mapType] = mapSeries[mapType] || {};
  29705. mapSeries[mapType][i] = true;
  29706. mapValuePrecision[mapType] = mapValuePrecision[mapType] || series[i].mapValuePrecision;
  29707. this._scaleLimitMap[mapType] = this._scaleLimitMap[mapType] || {};
  29708. series[i].scaleLimit && zrUtil.merge(this._scaleLimitMap[mapType], series[i].scaleLimit, true);
  29709. this._roamMap[mapType] = series[i].roam || this._roamMap[mapType];
  29710. if (this._hoverLinkMap[mapType] == null || this._hoverLinkMap[mapType]) {
  29711. this._hoverLinkMap[mapType] = series[i].dataRangeHoverLink;
  29712. }
  29713. this._nameMap[mapType] = this._nameMap[mapType] || {};
  29714. series[i].nameMap && zrUtil.merge(this._nameMap[mapType], series[i].nameMap, true);
  29715. this._activeMapType[mapType] = true;
  29716. if (series[i].textFixed) {
  29717. zrUtil.merge(_textFixed, series[i].textFixed, true);
  29718. }
  29719. if (series[i].geoCoord) {
  29720. zrUtil.merge(_geoCoord, series[i].geoCoord, true);
  29721. }
  29722. this._selectedMode[mapType] = this._selectedMode[mapType] || series[i].selectedMode;
  29723. if (this._hoverable[mapType] == null || this._hoverable[mapType]) {
  29724. this._hoverable[mapType] = series[i].hoverable;
  29725. }
  29726. if (this._clickable[mapType] == null || this._clickable[mapType]) {
  29727. this._clickable[mapType] = series[i].clickable;
  29728. }
  29729. if (this._showLegendSymbol[mapType] == null || this._showLegendSymbol[mapType]) {
  29730. this._showLegendSymbol[mapType] = series[i].showLegendSymbol;
  29731. }
  29732. valueCalculation[mapType] = valueCalculation[mapType] || series[i].mapValueCalculation;
  29733. seriesName = series[i].name;
  29734. this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
  29735. if (this.selectedMap[seriesName]) {
  29736. valueData[mapType] = valueData[mapType] || {};
  29737. data = series[i].data;
  29738. for (var j = 0, k = data.length; j < k; j++) {
  29739. name = this._nameChange(mapType, data[j].name);
  29740. valueData[mapType][name] = valueData[mapType][name] || {
  29741. seriesIndex: [],
  29742. valueMap: {},
  29743. precision: 0
  29744. };
  29745. for (var key in data[j]) {
  29746. if (key != 'value') {
  29747. valueData[mapType][name][key] = data[j][key];
  29748. } else if (!isNaN(data[j].value)) {
  29749. valueData[mapType][name].value == null && (valueData[mapType][name].value = 0);
  29750. valueData[mapType][name].precision = Math.max(this.getPrecision(+data[j].value), valueData[mapType][name].precision);
  29751. valueData[mapType][name].value += +data[j].value;
  29752. valueData[mapType][name].valueMap[i] = +data[j].value;
  29753. }
  29754. }
  29755. valueData[mapType][name].seriesIndex.push(i);
  29756. }
  29757. }
  29758. }
  29759. }
  29760. this._mapDataRequireCounter = 0;
  29761. for (var mt in valueData) {
  29762. this._mapDataRequireCounter++;
  29763. }
  29764. this._clearSelected();
  29765. if (this._mapDataRequireCounter === 0) {
  29766. this.clear();
  29767. this.zr && this.zr.delShape(this.lastShapeList);
  29768. this.lastShapeList = [];
  29769. }
  29770. for (var mt in valueData) {
  29771. for (var k in valueData[mt]) {
  29772. if (valueCalculation[mt] == 'average') {
  29773. valueData[mt][k].value /= valueData[mt][k].seriesIndex.length;
  29774. }
  29775. var value = valueData[mt][k].value;
  29776. if (value != null) {
  29777. valueData[mt][k].value = value.toFixed(mapValuePrecision[mt] == null ? valueData[mt][k].precision : mapValuePrecision[mt]) - 0;
  29778. }
  29779. }
  29780. this._mapDataMap[mt] = this._mapDataMap[mt] || {};
  29781. if (this._mapDataMap[mt].mapData) {
  29782. this._mapDataCallback(mt, valueData[mt], mapSeries[mt])(this._mapDataMap[mt].mapData);
  29783. } else if (_mapParams[mt.replace(/\|.*/, '')].getGeoJson) {
  29784. this._specialArea[mt] = _mapParams[mt.replace(/\|.*/, '')].specialArea || this._specialArea[mt];
  29785. _mapParams[mt.replace(/\|.*/, '')].getGeoJson(this._mapDataCallback(mt, valueData[mt], mapSeries[mt]));
  29786. }
  29787. }
  29788. },
  29789. _mapDataCallback: function (mt, vd, ms) {
  29790. var self = this;
  29791. return function (md) {
  29792. if (!self._isAlive || self._activeMapType[mt] == null) {
  29793. return;
  29794. }
  29795. if (mt.indexOf('|') != -1) {
  29796. md = self._getSubMapData(mt, md);
  29797. }
  29798. self._mapDataMap[mt].mapData = md;
  29799. if (md.firstChild) {
  29800. self._mapDataMap[mt].rate = 1;
  29801. self._mapDataMap[mt].projection = require('../util/projection/svg');
  29802. } else {
  29803. self._mapDataMap[mt].rate = 0.75;
  29804. self._mapDataMap[mt].projection = require('../util/projection/normal');
  29805. }
  29806. self._buildMap(mt, self._getProjectionData(mt, md, ms), vd, ms);
  29807. self._buildMark(mt, ms);
  29808. if (--self._mapDataRequireCounter <= 0) {
  29809. self.addShapeList();
  29810. self.zr.refreshNextFrame();
  29811. }
  29812. self._buildHeatmap(mt);
  29813. };
  29814. },
  29815. _clearSelected: function () {
  29816. for (var k in this._selected) {
  29817. if (!this._activeMapType[this._mapTypeMap[k]]) {
  29818. delete this._selected[k];
  29819. delete this._mapTypeMap[k];
  29820. }
  29821. }
  29822. },
  29823. _getSubMapData: function (mapType, mapData) {
  29824. var subType = mapType.replace(/^.*\|/, '');
  29825. var features = mapData.features;
  29826. for (var i = 0, l = features.length; i < l; i++) {
  29827. if (features[i].properties && features[i].properties.name == subType) {
  29828. features = features[i];
  29829. if (subType == 'United States of America' && features.geometry.coordinates.length > 1) {
  29830. features = {
  29831. geometry: {
  29832. coordinates: features.geometry.coordinates.slice(5, 6),
  29833. type: features.geometry.type
  29834. },
  29835. id: features.id,
  29836. properties: features.properties,
  29837. type: features.type
  29838. };
  29839. }
  29840. break;
  29841. }
  29842. }
  29843. return {
  29844. 'type': 'FeatureCollection',
  29845. 'features': [features]
  29846. };
  29847. },
  29848. _getProjectionData: function (mapType, mapData, mapSeries) {
  29849. var normalProjection = this._mapDataMap[mapType].projection;
  29850. var province = [];
  29851. var bbox = this._mapDataMap[mapType].bbox || normalProjection.getBbox(mapData, this._specialArea[mapType]);
  29852. var transform;
  29853. if (!this._mapDataMap[mapType].hasRoam) {
  29854. transform = this._getTransform(bbox, mapSeries, this._mapDataMap[mapType].rate);
  29855. } else {
  29856. transform = this._mapDataMap[mapType].transform;
  29857. }
  29858. var lastTransform = this._mapDataMap[mapType].lastTransform || { scale: {} };
  29859. var pathArray;
  29860. if (transform.left != lastTransform.left || transform.top != lastTransform.top || transform.scale.x != lastTransform.scale.x || transform.scale.y != lastTransform.scale.y) {
  29861. pathArray = normalProjection.geoJson2Path(mapData, transform, this._specialArea[mapType]);
  29862. lastTransform = zrUtil.clone(transform);
  29863. } else {
  29864. transform = this._mapDataMap[mapType].transform;
  29865. pathArray = this._mapDataMap[mapType].pathArray;
  29866. }
  29867. this._mapDataMap[mapType].bbox = bbox;
  29868. this._mapDataMap[mapType].transform = transform;
  29869. this._mapDataMap[mapType].lastTransform = lastTransform;
  29870. this._mapDataMap[mapType].pathArray = pathArray;
  29871. var position = [
  29872. transform.left,
  29873. transform.top
  29874. ];
  29875. for (var i = 0, l = pathArray.length; i < l; i++) {
  29876. province.push(this._getSingleProvince(mapType, pathArray[i], position));
  29877. }
  29878. if (this._specialArea[mapType]) {
  29879. for (var area in this._specialArea[mapType]) {
  29880. province.push(this._getSpecialProjectionData(mapType, mapData, area, this._specialArea[mapType][area], position));
  29881. }
  29882. }
  29883. if (mapType == 'china') {
  29884. var leftTop = this.geo2pos(mapType, _geoCoord['南海诸岛'] || _mapParams['南海诸岛'].textCoord);
  29885. var scale = transform.scale.x / 10.5;
  29886. var textPosition = [
  29887. 32 * scale + leftTop[0],
  29888. 83 * scale + leftTop[1]
  29889. ];
  29890. if (_textFixed['南海诸岛']) {
  29891. textPosition[0] += _textFixed['南海诸岛'][0];
  29892. textPosition[1] += _textFixed['南海诸岛'][1];
  29893. }
  29894. province.push({
  29895. name: this._nameChange(mapType, '南海诸岛'),
  29896. path: _mapParams['南海诸岛'].getPath(leftTop, scale),
  29897. position: position,
  29898. textX: textPosition[0],
  29899. textY: textPosition[1]
  29900. });
  29901. }
  29902. return province;
  29903. },
  29904. _getSpecialProjectionData: function (mapType, mapData, areaName, mapSize, position) {
  29905. mapData = this._getSubMapData('x|' + areaName, mapData);
  29906. var normalProjection = require('../util/projection/normal');
  29907. var bbox = normalProjection.getBbox(mapData);
  29908. var leftTop = this.geo2pos(mapType, [
  29909. mapSize.left,
  29910. mapSize.top
  29911. ]);
  29912. var rightBottom = this.geo2pos(mapType, [
  29913. mapSize.left + mapSize.width,
  29914. mapSize.top + mapSize.height
  29915. ]);
  29916. var width = Math.abs(rightBottom[0] - leftTop[0]);
  29917. var height = Math.abs(rightBottom[1] - leftTop[1]);
  29918. var mapWidth = bbox.width;
  29919. var mapHeight = bbox.height;
  29920. var xScale = width / 0.75 / mapWidth;
  29921. var yScale = height / mapHeight;
  29922. if (xScale > yScale) {
  29923. xScale = yScale * 0.75;
  29924. width = mapWidth * xScale;
  29925. } else {
  29926. yScale = xScale;
  29927. xScale = yScale * 0.75;
  29928. height = mapHeight * yScale;
  29929. }
  29930. var transform = {
  29931. OffsetLeft: leftTop[0],
  29932. OffsetTop: leftTop[1],
  29933. scale: {
  29934. x: xScale,
  29935. y: yScale
  29936. }
  29937. };
  29938. var pathArray = normalProjection.geoJson2Path(mapData, transform);
  29939. return this._getSingleProvince(mapType, pathArray[0], position);
  29940. },
  29941. _getSingleProvince: function (mapType, path, position) {
  29942. var textPosition;
  29943. var name = path.properties.name;
  29944. var textFixed = _textFixed[name] || [
  29945. 0,
  29946. 0
  29947. ];
  29948. if (_geoCoord[name]) {
  29949. textPosition = this.geo2pos(mapType, _geoCoord[name]);
  29950. } else if (path.cp) {
  29951. textPosition = [
  29952. path.cp[0] + textFixed[0],
  29953. path.cp[1] + textFixed[1]
  29954. ];
  29955. } else {
  29956. var bbox = this._mapDataMap[mapType].bbox;
  29957. textPosition = this.geo2pos(mapType, [
  29958. bbox.left + bbox.width / 2,
  29959. bbox.top + bbox.height / 2
  29960. ]);
  29961. textPosition[0] += textFixed[0];
  29962. textPosition[1] += textFixed[1];
  29963. }
  29964. path.name = this._nameChange(mapType, name);
  29965. path.position = position;
  29966. path.textX = textPosition[0];
  29967. path.textY = textPosition[1];
  29968. return path;
  29969. },
  29970. _getTransform: function (bbox, mapSeries, rate) {
  29971. var series = this.series;
  29972. var mapLocation;
  29973. var x;
  29974. var cusX;
  29975. var y;
  29976. var cusY;
  29977. var width;
  29978. var height;
  29979. var zrWidth = this.zr.getWidth();
  29980. var zrHeight = this.zr.getHeight();
  29981. var padding = Math.round(Math.min(zrWidth, zrHeight) * 0.02);
  29982. for (var key in mapSeries) {
  29983. mapLocation = series[key].mapLocation || {};
  29984. cusX = mapLocation.x || cusX;
  29985. cusY = mapLocation.y || cusY;
  29986. width = mapLocation.width || width;
  29987. height = mapLocation.height || height;
  29988. }
  29989. x = this.parsePercent(cusX, zrWidth);
  29990. x = isNaN(x) ? padding : x;
  29991. y = this.parsePercent(cusY, zrHeight);
  29992. y = isNaN(y) ? padding : y;
  29993. width = width == null ? zrWidth - x - 2 * padding : this.parsePercent(width, zrWidth);
  29994. height = height == null ? zrHeight - y - 2 * padding : this.parsePercent(height, zrHeight);
  29995. var mapWidth = bbox.width;
  29996. var mapHeight = bbox.height;
  29997. var xScale = width / rate / mapWidth;
  29998. var yScale = height / mapHeight;
  29999. if (xScale > yScale) {
  30000. xScale = yScale * rate;
  30001. width = mapWidth * xScale;
  30002. } else {
  30003. yScale = xScale;
  30004. xScale = yScale * rate;
  30005. height = mapHeight * yScale;
  30006. }
  30007. if (isNaN(cusX)) {
  30008. cusX = cusX || 'center';
  30009. switch (cusX + '') {
  30010. case 'center':
  30011. x = Math.floor((zrWidth - width) / 2);
  30012. break;
  30013. case 'right':
  30014. x = zrWidth - width;
  30015. break;
  30016. }
  30017. }
  30018. if (isNaN(cusY)) {
  30019. cusY = cusY || 'center';
  30020. switch (cusY + '') {
  30021. case 'center':
  30022. y = Math.floor((zrHeight - height) / 2);
  30023. break;
  30024. case 'bottom':
  30025. y = zrHeight - height;
  30026. break;
  30027. }
  30028. }
  30029. return {
  30030. left: x,
  30031. top: y,
  30032. width: width,
  30033. height: height,
  30034. baseScale: 1,
  30035. scale: {
  30036. x: xScale,
  30037. y: yScale
  30038. }
  30039. };
  30040. },
  30041. _buildMap: function (mapType, mapData, valueData, mapSeries) {
  30042. var series = this.series;
  30043. var legend = this.component.legend;
  30044. var dataRange = this.component.dataRange;
  30045. var seriesName;
  30046. var name;
  30047. var data;
  30048. var value;
  30049. var queryTarget;
  30050. var color;
  30051. var font;
  30052. var style;
  30053. var highlightStyle;
  30054. var shape;
  30055. var textShape;
  30056. for (var i = 0, l = mapData.length; i < l; i++) {
  30057. style = zrUtil.clone(mapData[i]);
  30058. highlightStyle = {
  30059. name: style.name,
  30060. path: style.path,
  30061. position: zrUtil.clone(style.position)
  30062. };
  30063. name = style.name;
  30064. data = valueData[name];
  30065. if (data) {
  30066. queryTarget = [data];
  30067. seriesName = '';
  30068. for (var j = 0, k = data.seriesIndex.length; j < k; j++) {
  30069. var serie = series[data.seriesIndex[j]];
  30070. queryTarget.push(serie);
  30071. seriesName += serie.name + ' ';
  30072. if (legend && this._showLegendSymbol[mapType] && legend.hasColor(serie.name)) {
  30073. this.shapeList.push(new CircleShape({
  30074. zlevel: serie.zlevel,
  30075. z: serie.z + 1,
  30076. position: zrUtil.clone(style.position),
  30077. _mapType: mapType,
  30078. style: {
  30079. x: style.textX + 3 + j * 7,
  30080. y: style.textY - 10,
  30081. r: 3,
  30082. color: legend.getColor(serie.name)
  30083. },
  30084. hoverable: false
  30085. }));
  30086. }
  30087. }
  30088. value = data.value;
  30089. } else {
  30090. data = {
  30091. name: name,
  30092. value: '-'
  30093. };
  30094. seriesName = '';
  30095. queryTarget = [];
  30096. for (var key in mapSeries) {
  30097. queryTarget.push(series[key]);
  30098. }
  30099. value = '-';
  30100. }
  30101. this.ecTheme.map && queryTarget.push(this.ecTheme.map);
  30102. queryTarget.push(ecConfig.map);
  30103. color = dataRange && !isNaN(value) ? dataRange.getColor(value) : null;
  30104. style.color = style.color || color || this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.normal.color'), data.seriesIndex, -1, data) || this.deepQuery(queryTarget, 'itemStyle.normal.areaStyle.color');
  30105. style.strokeColor = style.strokeColor || this.deepQuery(queryTarget, 'itemStyle.normal.borderColor');
  30106. style.lineWidth = style.lineWidth || this.deepQuery(queryTarget, 'itemStyle.normal.borderWidth');
  30107. highlightStyle.color = this.getItemStyleColor(this.deepQuery(queryTarget, 'itemStyle.emphasis.color'), data.seriesIndex, -1, data) || this.deepQuery(queryTarget, 'itemStyle.emphasis.areaStyle.color') || style.color;
  30108. highlightStyle.strokeColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.borderColor') || style.strokeColor;
  30109. highlightStyle.lineWidth = this.deepQuery(queryTarget, 'itemStyle.emphasis.borderWidth') || style.lineWidth;
  30110. style.brushType = highlightStyle.brushType = style.brushType || 'both';
  30111. style.lineJoin = highlightStyle.lineJoin = 'round';
  30112. style._name = highlightStyle._name = name;
  30113. font = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle');
  30114. textShape = {
  30115. zlevel: this.getZlevelBase(),
  30116. z: this.getZBase() + 1,
  30117. position: zrUtil.clone(style.position),
  30118. _mapType: mapType,
  30119. _geo: this.pos2geo(mapType, [
  30120. style.textX,
  30121. style.textY
  30122. ]),
  30123. style: {
  30124. brushType: 'fill',
  30125. x: style.textX,
  30126. y: style.textY,
  30127. text: this.getLabelText(name, value, queryTarget, 'normal'),
  30128. _name: name,
  30129. textAlign: 'center',
  30130. color: this.deepQuery(queryTarget, 'itemStyle.normal.label.show') ? this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color') : 'rgba(0,0,0,0)',
  30131. textFont: this.getFont(font)
  30132. }
  30133. };
  30134. textShape._style = zrUtil.clone(textShape.style);
  30135. textShape.highlightStyle = zrUtil.clone(textShape.style);
  30136. if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
  30137. textShape.highlightStyle.text = this.getLabelText(name, value, queryTarget, 'emphasis');
  30138. textShape.highlightStyle.color = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color') || textShape.style.color;
  30139. font = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || font;
  30140. textShape.highlightStyle.textFont = this.getFont(font);
  30141. } else {
  30142. textShape.highlightStyle.color = 'rgba(0,0,0,0)';
  30143. }
  30144. shape = {
  30145. zlevel: this.getZlevelBase(),
  30146. z: this.getZBase(),
  30147. position: zrUtil.clone(style.position),
  30148. style: style,
  30149. highlightStyle: highlightStyle,
  30150. _style: zrUtil.clone(style),
  30151. _mapType: mapType
  30152. };
  30153. if (style.scale != null) {
  30154. shape.scale = zrUtil.clone(style.scale);
  30155. }
  30156. textShape = new TextShape(textShape);
  30157. switch (shape.style.shapeType) {
  30158. case 'rectangle':
  30159. shape = new RectangleShape(shape);
  30160. break;
  30161. case 'line':
  30162. shape = new LineShape(shape);
  30163. break;
  30164. case 'circle':
  30165. shape = new CircleShape(shape);
  30166. break;
  30167. case 'polygon':
  30168. shape = new PolygonShape(shape);
  30169. break;
  30170. case 'ellipse':
  30171. shape = new EllipseShape(shape);
  30172. break;
  30173. default:
  30174. shape = new PathShape(shape);
  30175. if (shape.buildPathArray) {
  30176. shape.style.pathArray = shape.buildPathArray(shape.style.path);
  30177. }
  30178. break;
  30179. }
  30180. if (this._selectedMode[mapType] && (this._selected[name] && data.selected !== false) || data.selected === true) {
  30181. textShape.style = textShape.highlightStyle;
  30182. shape.style = shape.highlightStyle;
  30183. }
  30184. textShape.clickable = shape.clickable = this._clickable[mapType] && (data.clickable == null || data.clickable);
  30185. if (this._selectedMode[mapType]) {
  30186. this._selected[name] = this._selected[name] != null ? this._selected[name] : data.selected;
  30187. this._mapTypeMap[name] = mapType;
  30188. if (data.selectable == null || data.selectable) {
  30189. shape.clickable = textShape.clickable = true;
  30190. shape.onclick = textShape.onclick = this.shapeHandler.onclick;
  30191. }
  30192. }
  30193. if (this._hoverable[mapType] && (data.hoverable == null || data.hoverable)) {
  30194. textShape.hoverable = shape.hoverable = true;
  30195. shape.hoverConnect = textShape.id;
  30196. textShape.hoverConnect = shape.id;
  30197. } else {
  30198. textShape.hoverable = shape.hoverable = false;
  30199. }
  30200. ecData.pack(textShape, {
  30201. name: seriesName,
  30202. tooltip: this.deepQuery(queryTarget, 'tooltip')
  30203. }, 0, data, 0, name);
  30204. this.shapeList.push(textShape);
  30205. ecData.pack(shape, {
  30206. name: seriesName,
  30207. tooltip: this.deepQuery(queryTarget, 'tooltip')
  30208. }, 0, data, 0, name);
  30209. this.shapeList.push(shape);
  30210. }
  30211. },
  30212. _buildMark: function (mapType, mapSeries) {
  30213. this._seriesIndexToMapType = this._seriesIndexToMapType || {};
  30214. this.markAttachStyle = this.markAttachStyle || {};
  30215. var position = [
  30216. this._mapDataMap[mapType].transform.left,
  30217. this._mapDataMap[mapType].transform.top
  30218. ];
  30219. if (mapType == 'none') {
  30220. position = [
  30221. 0,
  30222. 0
  30223. ];
  30224. }
  30225. for (var sIdx in mapSeries) {
  30226. this._seriesIndexToMapType[sIdx] = mapType;
  30227. this.markAttachStyle[sIdx] = {
  30228. position: position,
  30229. _mapType: mapType
  30230. };
  30231. this.buildMark(sIdx);
  30232. }
  30233. },
  30234. _buildHeatmap: function (mapType) {
  30235. var series = this.series;
  30236. for (var i = 0, l = series.length; i < l; i++) {
  30237. if (series[i].heatmap) {
  30238. var data = series[i].heatmap.data;
  30239. if (series[i].heatmap.needsTransform === false) {
  30240. var geo = [];
  30241. for (var j = 0, len = data.length; j < len; ++j) {
  30242. geo.push([
  30243. data[j][3],
  30244. data[j][4],
  30245. data[j][2]
  30246. ]);
  30247. }
  30248. var pos = [
  30249. 0,
  30250. 0
  30251. ];
  30252. } else {
  30253. var geoData = series[i].heatmap._geoData;
  30254. if (geoData === undefined) {
  30255. series[i].heatmap._geoData = [];
  30256. for (var j = 0, len = data.length; j < len; ++j) {
  30257. series[i].heatmap._geoData[j] = data[j];
  30258. }
  30259. geoData = series[i].heatmap._geoData;
  30260. }
  30261. var len = data.length;
  30262. for (var id = 0; id < len; ++id) {
  30263. data[id] = this.geo2pos(mapType, [
  30264. geoData[id][0],
  30265. geoData[id][1]
  30266. ]);
  30267. }
  30268. var pos = [
  30269. this._mapDataMap[mapType].transform.left,
  30270. this._mapDataMap[mapType].transform.top
  30271. ];
  30272. }
  30273. var layer = new HeatmapLayer(series[i].heatmap);
  30274. var canvas = layer.getCanvas(data[0][3] ? geo : data, this.zr.getWidth(), this.zr.getHeight());
  30275. var image = new ZrImage({
  30276. zlevel: this.getZlevelBase(),
  30277. z: this.getZBase() + 1,
  30278. position: pos,
  30279. scale: [
  30280. 1,
  30281. 1
  30282. ],
  30283. hoverable: false,
  30284. style: {
  30285. x: 0,
  30286. y: 0,
  30287. image: canvas,
  30288. width: canvas.width,
  30289. height: canvas.height
  30290. }
  30291. });
  30292. image.type = 'heatmap';
  30293. image._mapType = mapType;
  30294. this.shapeList.push(image);
  30295. this.zr.addShape(image);
  30296. }
  30297. }
  30298. },
  30299. getMarkCoord: function (seriesIndex, mpData) {
  30300. return mpData.geoCoord || _geoCoord[mpData.name] ? this.geo2pos(this._seriesIndexToMapType[seriesIndex], mpData.geoCoord || _geoCoord[mpData.name]) : [
  30301. 0,
  30302. 0
  30303. ];
  30304. },
  30305. getMarkGeo: function (mpData) {
  30306. return mpData.geoCoord || _geoCoord[mpData.name];
  30307. },
  30308. _nameChange: function (mapType, name) {
  30309. return this._nameMap[mapType][name] || name;
  30310. },
  30311. getLabelText: function (name, value, queryTarget, status) {
  30312. var formatter = this.deepQuery(queryTarget, 'itemStyle.' + status + '.label.formatter');
  30313. if (formatter) {
  30314. if (typeof formatter == 'function') {
  30315. return formatter.call(this.myChart, name, value);
  30316. } else if (typeof formatter == 'string') {
  30317. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}');
  30318. formatter = formatter.replace('{a0}', name).replace('{b0}', value);
  30319. return formatter;
  30320. }
  30321. } else {
  30322. return name;
  30323. }
  30324. },
  30325. _findMapTypeByPos: function (mx, my) {
  30326. var transform;
  30327. var left;
  30328. var top;
  30329. var width;
  30330. var height;
  30331. for (var mapType in this._mapDataMap) {
  30332. transform = this._mapDataMap[mapType].transform;
  30333. if (!transform || !this._roamMap[mapType] || !this._activeMapType[mapType]) {
  30334. continue;
  30335. }
  30336. left = transform.left;
  30337. top = transform.top;
  30338. width = transform.width;
  30339. height = transform.height;
  30340. if (mx >= left && mx <= left + width && my >= top && my <= top + height) {
  30341. return mapType;
  30342. }
  30343. }
  30344. return;
  30345. },
  30346. __onmousewheel: function (params) {
  30347. if (this.shapeList.length <= 0) {
  30348. return;
  30349. }
  30350. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30351. var shape = this.shapeList[i];
  30352. if (shape.__animating) {
  30353. return;
  30354. }
  30355. }
  30356. var event = params.event;
  30357. var mx = zrEvent.getX(event);
  30358. var my = zrEvent.getY(event);
  30359. var delta;
  30360. var eventDelta = zrEvent.getDelta(event);
  30361. var mapType;
  30362. var mapTypeControl = params.mapTypeControl;
  30363. if (!mapTypeControl) {
  30364. mapTypeControl = {};
  30365. mapType = this._findMapTypeByPos(mx, my);
  30366. if (mapType && this._roamMap[mapType] && this._roamMap[mapType] != 'move') {
  30367. mapTypeControl[mapType] = true;
  30368. }
  30369. }
  30370. function scalePolyline(shapeStyle, delta) {
  30371. for (var i = 0; i < shapeStyle.pointList.length; i++) {
  30372. var point = shapeStyle.pointList[i];
  30373. point[0] *= delta;
  30374. point[1] *= delta;
  30375. }
  30376. var controlPointList = shapeStyle.controlPointList;
  30377. if (controlPointList) {
  30378. for (var i = 0; i < controlPointList.length; i++) {
  30379. var point = controlPointList[i];
  30380. point[0] *= delta;
  30381. point[1] *= delta;
  30382. }
  30383. }
  30384. }
  30385. function scaleMarkline(shapeStyle, delta) {
  30386. shapeStyle.xStart *= delta;
  30387. shapeStyle.yStart *= delta;
  30388. shapeStyle.xEnd *= delta;
  30389. shapeStyle.yEnd *= delta;
  30390. if (shapeStyle.cpX1 != null) {
  30391. shapeStyle.cpX1 *= delta;
  30392. shapeStyle.cpY1 *= delta;
  30393. }
  30394. }
  30395. var haveScale = false;
  30396. for (mapType in mapTypeControl) {
  30397. if (mapTypeControl[mapType]) {
  30398. haveScale = true;
  30399. var transform = this._mapDataMap[mapType].transform;
  30400. var left = transform.left;
  30401. var top = transform.top;
  30402. var width = transform.width;
  30403. var height = transform.height;
  30404. var geoAndPos = this.pos2geo(mapType, [
  30405. mx - left,
  30406. my - top
  30407. ]);
  30408. if (eventDelta > 0) {
  30409. delta = 1.2;
  30410. if (this._scaleLimitMap[mapType].max != null && transform.baseScale >= this._scaleLimitMap[mapType].max) {
  30411. continue;
  30412. }
  30413. } else {
  30414. delta = 1 / 1.2;
  30415. if (this._scaleLimitMap[mapType].min != null && transform.baseScale <= this._scaleLimitMap[mapType].min) {
  30416. continue;
  30417. }
  30418. }
  30419. transform.baseScale *= delta;
  30420. transform.scale.x *= delta;
  30421. transform.scale.y *= delta;
  30422. transform.width = width * delta;
  30423. transform.height = height * delta;
  30424. this._mapDataMap[mapType].hasRoam = true;
  30425. this._mapDataMap[mapType].transform = transform;
  30426. geoAndPos = this.geo2pos(mapType, geoAndPos);
  30427. transform.left -= geoAndPos[0] - (mx - left);
  30428. transform.top -= geoAndPos[1] - (my - top);
  30429. this._mapDataMap[mapType].transform = transform;
  30430. this.clearEffectShape(true);
  30431. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30432. var shape = this.shapeList[i];
  30433. if (shape._mapType == mapType) {
  30434. var shapeType = shape.type;
  30435. var shapeStyle = shape.style;
  30436. shape.position[0] = transform.left;
  30437. shape.position[1] = transform.top;
  30438. switch (shapeType) {
  30439. case 'path':
  30440. case 'symbol':
  30441. case 'circle':
  30442. case 'rectangle':
  30443. case 'polygon':
  30444. case 'line':
  30445. case 'ellipse':
  30446. case 'heatmap':
  30447. shape.scale[0] *= delta;
  30448. shape.scale[1] *= delta;
  30449. break;
  30450. case 'mark-line':
  30451. scaleMarkline(shapeStyle, delta);
  30452. break;
  30453. case 'polyline':
  30454. scalePolyline(shapeStyle, delta);
  30455. break;
  30456. case 'shape-bundle':
  30457. for (var j = 0; j < shapeStyle.shapeList.length; j++) {
  30458. var subShape = shapeStyle.shapeList[j];
  30459. if (subShape.type == 'mark-line') {
  30460. scaleMarkline(subShape.style, delta);
  30461. } else if (subShape.type == 'polyline') {
  30462. scalePolyline(subShape.style, delta);
  30463. }
  30464. }
  30465. break;
  30466. case 'icon':
  30467. case 'image':
  30468. geoAndPos = this.geo2pos(mapType, shape._geo);
  30469. shapeStyle.x = shapeStyle._x = geoAndPos[0] - shapeStyle.width / 2;
  30470. shapeStyle.y = shapeStyle._y = geoAndPos[1] - shapeStyle.height / 2;
  30471. break;
  30472. default:
  30473. geoAndPos = this.geo2pos(mapType, shape._geo);
  30474. shapeStyle.x = geoAndPos[0];
  30475. shapeStyle.y = geoAndPos[1];
  30476. if (shapeType == 'text') {
  30477. shape._style.x = shape.highlightStyle.x = geoAndPos[0];
  30478. shape._style.y = shape.highlightStyle.y = geoAndPos[1];
  30479. }
  30480. }
  30481. this.zr.modShape(shape.id);
  30482. }
  30483. }
  30484. }
  30485. }
  30486. if (haveScale) {
  30487. zrEvent.stop(event);
  30488. this.zr.refreshNextFrame();
  30489. var self = this;
  30490. clearTimeout(this._refreshDelayTicket);
  30491. this._refreshDelayTicket = setTimeout(function () {
  30492. self && self.shapeList && self.animationEffect();
  30493. }, 100);
  30494. this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'scale' }, this.myChart);
  30495. }
  30496. },
  30497. __onmousedown: function (params) {
  30498. if (this.shapeList.length <= 0) {
  30499. return;
  30500. }
  30501. var target = params.target;
  30502. if (target && target.draggable) {
  30503. return;
  30504. }
  30505. var event = params.event;
  30506. var mx = zrEvent.getX(event);
  30507. var my = zrEvent.getY(event);
  30508. var mapType = this._findMapTypeByPos(mx, my);
  30509. if (mapType && this._roamMap[mapType] && this._roamMap[mapType] != 'scale') {
  30510. this._mousedown = true;
  30511. this._mx = mx;
  30512. this._my = my;
  30513. this._curMapType = mapType;
  30514. this.zr.on(zrConfig.EVENT.MOUSEUP, this._onmouseup);
  30515. var self = this;
  30516. setTimeout(function () {
  30517. self.zr.on(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  30518. }, 100);
  30519. }
  30520. },
  30521. __onmousemove: function (params) {
  30522. if (!this._mousedown || !this._isAlive) {
  30523. return;
  30524. }
  30525. var event = params.event;
  30526. var mx = zrEvent.getX(event);
  30527. var my = zrEvent.getY(event);
  30528. var transform = this._mapDataMap[this._curMapType].transform;
  30529. transform.hasRoam = true;
  30530. transform.left -= this._mx - mx;
  30531. transform.top -= this._my - my;
  30532. this._mx = mx;
  30533. this._my = my;
  30534. this._mapDataMap[this._curMapType].transform = transform;
  30535. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30536. if (this.shapeList[i]._mapType == this._curMapType) {
  30537. this.shapeList[i].position[0] = transform.left;
  30538. this.shapeList[i].position[1] = transform.top;
  30539. this.zr.modShape(this.shapeList[i].id);
  30540. }
  30541. }
  30542. this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'move' }, this.myChart);
  30543. this.clearEffectShape(true);
  30544. this.zr.refreshNextFrame();
  30545. this._justMove = true;
  30546. zrEvent.stop(event);
  30547. },
  30548. __onmouseup: function (params) {
  30549. var event = params.event;
  30550. this._mx = zrEvent.getX(event);
  30551. this._my = zrEvent.getY(event);
  30552. this._mousedown = false;
  30553. var self = this;
  30554. setTimeout(function () {
  30555. self._justMove && self.animationEffect();
  30556. self._justMove = false;
  30557. self.zr.un(zrConfig.EVENT.MOUSEMOVE, self._onmousemove);
  30558. self.zr.un(zrConfig.EVENT.MOUSEUP, self._onmouseup);
  30559. }, 120);
  30560. },
  30561. __onroamcontroller: function (params) {
  30562. var event = params.event;
  30563. event.zrenderX = this.zr.getWidth() / 2;
  30564. event.zrenderY = this.zr.getHeight() / 2;
  30565. var mapTypeControl = params.mapTypeControl;
  30566. var top = 0;
  30567. var left = 0;
  30568. var step = params.step;
  30569. switch (params.roamType) {
  30570. case 'scaleUp':
  30571. event.zrenderDelta = 1;
  30572. this.__onmousewheel({
  30573. event: event,
  30574. mapTypeControl: mapTypeControl
  30575. });
  30576. return;
  30577. case 'scaleDown':
  30578. event.zrenderDelta = -1;
  30579. this.__onmousewheel({
  30580. event: event,
  30581. mapTypeControl: mapTypeControl
  30582. });
  30583. return;
  30584. case 'up':
  30585. top = -step;
  30586. break;
  30587. case 'down':
  30588. top = step;
  30589. break;
  30590. case 'left':
  30591. left = -step;
  30592. break;
  30593. case 'right':
  30594. left = step;
  30595. break;
  30596. }
  30597. var transform;
  30598. var curMapType;
  30599. for (curMapType in mapTypeControl) {
  30600. if (!this._mapDataMap[curMapType] || !this._activeMapType[curMapType]) {
  30601. continue;
  30602. }
  30603. transform = this._mapDataMap[curMapType].transform;
  30604. transform.hasRoam = true;
  30605. transform.left -= left;
  30606. transform.top -= top;
  30607. this._mapDataMap[curMapType].transform = transform;
  30608. }
  30609. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30610. curMapType = this.shapeList[i]._mapType;
  30611. if (!mapTypeControl[curMapType] || !this._activeMapType[curMapType]) {
  30612. continue;
  30613. }
  30614. transform = this._mapDataMap[curMapType].transform;
  30615. this.shapeList[i].position[0] = transform.left;
  30616. this.shapeList[i].position[1] = transform.top;
  30617. this.zr.modShape(this.shapeList[i].id);
  30618. }
  30619. this.messageCenter.dispatch(ecConfig.EVENT.MAP_ROAM, params.event, { type: 'move' }, this.myChart);
  30620. this.clearEffectShape(true);
  30621. this.zr.refreshNextFrame();
  30622. clearTimeout(this.dircetionTimer);
  30623. var self = this;
  30624. this.dircetionTimer = setTimeout(function () {
  30625. self.animationEffect();
  30626. }, 150);
  30627. },
  30628. __ondrhoverlink: function (param) {
  30629. var curMapType;
  30630. var value;
  30631. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  30632. curMapType = this.shapeList[i]._mapType;
  30633. if (!this._hoverLinkMap[curMapType] || !this._activeMapType[curMapType]) {
  30634. continue;
  30635. }
  30636. value = ecData.get(this.shapeList[i], 'value');
  30637. if (value != null && value >= param.valueMin && value <= param.valueMax) {
  30638. this.zr.addHoverShape(this.shapeList[i]);
  30639. }
  30640. }
  30641. },
  30642. onclick: function (params) {
  30643. if (!this.isClick || !params.target || this._justMove || params.target.type == 'icon') {
  30644. return;
  30645. }
  30646. this.isClick = false;
  30647. var target = params.target;
  30648. var name = target.style._name;
  30649. var len = this.shapeList.length;
  30650. var mapType = target._mapType || '';
  30651. if (this._selectedMode[mapType] == 'single') {
  30652. for (var p in this._selected) {
  30653. if (this._selected[p] && this._mapTypeMap[p] == mapType) {
  30654. for (var i = 0; i < len; i++) {
  30655. if (this.shapeList[i].style._name == p && this.shapeList[i]._mapType == mapType) {
  30656. this.shapeList[i].style = this.shapeList[i]._style;
  30657. this.zr.modShape(this.shapeList[i].id);
  30658. }
  30659. }
  30660. p != name && (this._selected[p] = false);
  30661. }
  30662. }
  30663. }
  30664. this._selected[name] = !this._selected[name];
  30665. for (var i = 0; i < len; i++) {
  30666. if (this.shapeList[i].style._name == name && this.shapeList[i]._mapType == mapType) {
  30667. if (this._selected[name]) {
  30668. this.shapeList[i].style = this.shapeList[i].highlightStyle;
  30669. } else {
  30670. this.shapeList[i].style = this.shapeList[i]._style;
  30671. }
  30672. this.zr.modShape(this.shapeList[i].id);
  30673. }
  30674. }
  30675. this.messageCenter.dispatch(ecConfig.EVENT.MAP_SELECTED, params.event, {
  30676. selected: this._selected,
  30677. target: name
  30678. }, this.myChart);
  30679. this.zr.refreshNextFrame();
  30680. var self = this;
  30681. setTimeout(function () {
  30682. self.zr.trigger(zrConfig.EVENT.MOUSEMOVE, params.event);
  30683. }, 100);
  30684. },
  30685. refresh: function (newOption) {
  30686. if (newOption) {
  30687. this.option = newOption;
  30688. this.series = newOption.series;
  30689. }
  30690. if (this._mapDataRequireCounter > 0) {
  30691. this.clear();
  30692. } else {
  30693. this.backupShapeList();
  30694. }
  30695. this._buildShape();
  30696. this.zr.refreshHover();
  30697. },
  30698. ondataRange: function (param, status) {
  30699. if (this.component.dataRange) {
  30700. this.refresh();
  30701. status.needRefresh = true;
  30702. }
  30703. return;
  30704. },
  30705. pos2geo: function (mapType, p) {
  30706. if (!this._mapDataMap[mapType].transform) {
  30707. return null;
  30708. }
  30709. return this._mapDataMap[mapType].projection.pos2geo(this._mapDataMap[mapType].transform, p);
  30710. },
  30711. getGeoByPos: function (mapType, p) {
  30712. if (!this._mapDataMap[mapType].transform) {
  30713. return null;
  30714. }
  30715. var position = [
  30716. this._mapDataMap[mapType].transform.left,
  30717. this._mapDataMap[mapType].transform.top
  30718. ];
  30719. if (p instanceof Array) {
  30720. p[0] -= position[0];
  30721. p[1] -= position[1];
  30722. } else {
  30723. p.x -= position[0];
  30724. p.y -= position[1];
  30725. }
  30726. return this.pos2geo(mapType, p);
  30727. },
  30728. geo2pos: function (mapType, p) {
  30729. if (!this._mapDataMap[mapType].transform) {
  30730. return null;
  30731. }
  30732. return this._mapDataMap[mapType].projection.geo2pos(this._mapDataMap[mapType].transform, p);
  30733. },
  30734. getPosByGeo: function (mapType, p) {
  30735. if (!this._mapDataMap[mapType].transform) {
  30736. return null;
  30737. }
  30738. var pos = this.geo2pos(mapType, p);
  30739. pos[0] += this._mapDataMap[mapType].transform.left;
  30740. pos[1] += this._mapDataMap[mapType].transform.top;
  30741. return pos;
  30742. },
  30743. getMapPosition: function (mapType) {
  30744. if (!this._mapDataMap[mapType].transform) {
  30745. return null;
  30746. }
  30747. return [
  30748. this._mapDataMap[mapType].transform.left,
  30749. this._mapDataMap[mapType].transform.top
  30750. ];
  30751. },
  30752. onbeforDispose: function () {
  30753. this._isAlive = false;
  30754. this.zr.un(zrConfig.EVENT.MOUSEWHEEL, this._onmousewheel);
  30755. this.zr.un(zrConfig.EVENT.MOUSEDOWN, this._onmousedown);
  30756. this.messageCenter.unbind(ecConfig.EVENT.ROAMCONTROLLER, this._onroamcontroller);
  30757. this.messageCenter.unbind(ecConfig.EVENT.DATA_RANGE_HOVERLINK, this._ondrhoverlink);
  30758. }
  30759. };
  30760. zrUtil.inherits(Map, ChartBase);
  30761. require('../chart').define('map', Map);
  30762. return Map;
  30763. });define('zrender/shape/Path', [
  30764. 'require',
  30765. './Base',
  30766. './util/PathProxy',
  30767. '../tool/util'
  30768. ], function (require) {
  30769. var Base = require('./Base');
  30770. var PathProxy = require('./util/PathProxy');
  30771. var PathSegment = PathProxy.PathSegment;
  30772. var vMag = function (v) {
  30773. return Math.sqrt(v[0] * v[0] + v[1] * v[1]);
  30774. };
  30775. var vRatio = function (u, v) {
  30776. return (u[0] * v[0] + u[1] * v[1]) / (vMag(u) * vMag(v));
  30777. };
  30778. var vAngle = function (u, v) {
  30779. return (u[0] * v[1] < u[1] * v[0] ? -1 : 1) * Math.acos(vRatio(u, v));
  30780. };
  30781. var Path = function (options) {
  30782. Base.call(this, options);
  30783. };
  30784. Path.prototype = {
  30785. type: 'path',
  30786. buildPathArray: function (data, x, y) {
  30787. if (!data) {
  30788. return [];
  30789. }
  30790. x = x || 0;
  30791. y = y || 0;
  30792. var cs = data;
  30793. var cc = [
  30794. 'm',
  30795. 'M',
  30796. 'l',
  30797. 'L',
  30798. 'v',
  30799. 'V',
  30800. 'h',
  30801. 'H',
  30802. 'z',
  30803. 'Z',
  30804. 'c',
  30805. 'C',
  30806. 'q',
  30807. 'Q',
  30808. 't',
  30809. 'T',
  30810. 's',
  30811. 'S',
  30812. 'a',
  30813. 'A'
  30814. ];
  30815. cs = cs.replace(/-/g, ' -');
  30816. cs = cs.replace(/ /g, ' ');
  30817. cs = cs.replace(/ /g, ',');
  30818. cs = cs.replace(/,,/g, ',');
  30819. var n;
  30820. for (n = 0; n < cc.length; n++) {
  30821. cs = cs.replace(new RegExp(cc[n], 'g'), '|' + cc[n]);
  30822. }
  30823. var arr = cs.split('|');
  30824. var ca = [];
  30825. var cpx = 0;
  30826. var cpy = 0;
  30827. for (n = 1; n < arr.length; n++) {
  30828. var str = arr[n];
  30829. var c = str.charAt(0);
  30830. str = str.slice(1);
  30831. str = str.replace(new RegExp('e,-', 'g'), 'e-');
  30832. var p = str.split(',');
  30833. if (p.length > 0 && p[0] === '') {
  30834. p.shift();
  30835. }
  30836. for (var i = 0; i < p.length; i++) {
  30837. p[i] = parseFloat(p[i]);
  30838. }
  30839. while (p.length > 0) {
  30840. if (isNaN(p[0])) {
  30841. break;
  30842. }
  30843. var cmd = null;
  30844. var points = [];
  30845. var ctlPtx;
  30846. var ctlPty;
  30847. var prevCmd;
  30848. var rx;
  30849. var ry;
  30850. var psi;
  30851. var fa;
  30852. var fs;
  30853. var x1 = cpx;
  30854. var y1 = cpy;
  30855. switch (c) {
  30856. case 'l':
  30857. cpx += p.shift();
  30858. cpy += p.shift();
  30859. cmd = 'L';
  30860. points.push(cpx, cpy);
  30861. break;
  30862. case 'L':
  30863. cpx = p.shift();
  30864. cpy = p.shift();
  30865. points.push(cpx, cpy);
  30866. break;
  30867. case 'm':
  30868. cpx += p.shift();
  30869. cpy += p.shift();
  30870. cmd = 'M';
  30871. points.push(cpx, cpy);
  30872. c = 'l';
  30873. break;
  30874. case 'M':
  30875. cpx = p.shift();
  30876. cpy = p.shift();
  30877. cmd = 'M';
  30878. points.push(cpx, cpy);
  30879. c = 'L';
  30880. break;
  30881. case 'h':
  30882. cpx += p.shift();
  30883. cmd = 'L';
  30884. points.push(cpx, cpy);
  30885. break;
  30886. case 'H':
  30887. cpx = p.shift();
  30888. cmd = 'L';
  30889. points.push(cpx, cpy);
  30890. break;
  30891. case 'v':
  30892. cpy += p.shift();
  30893. cmd = 'L';
  30894. points.push(cpx, cpy);
  30895. break;
  30896. case 'V':
  30897. cpy = p.shift();
  30898. cmd = 'L';
  30899. points.push(cpx, cpy);
  30900. break;
  30901. case 'C':
  30902. points.push(p.shift(), p.shift(), p.shift(), p.shift());
  30903. cpx = p.shift();
  30904. cpy = p.shift();
  30905. points.push(cpx, cpy);
  30906. break;
  30907. case 'c':
  30908. points.push(cpx + p.shift(), cpy + p.shift(), cpx + p.shift(), cpy + p.shift());
  30909. cpx += p.shift();
  30910. cpy += p.shift();
  30911. cmd = 'C';
  30912. points.push(cpx, cpy);
  30913. break;
  30914. case 'S':
  30915. ctlPtx = cpx;
  30916. ctlPty = cpy;
  30917. prevCmd = ca[ca.length - 1];
  30918. if (prevCmd.command === 'C') {
  30919. ctlPtx = cpx + (cpx - prevCmd.points[2]);
  30920. ctlPty = cpy + (cpy - prevCmd.points[3]);
  30921. }
  30922. points.push(ctlPtx, ctlPty, p.shift(), p.shift());
  30923. cpx = p.shift();
  30924. cpy = p.shift();
  30925. cmd = 'C';
  30926. points.push(cpx, cpy);
  30927. break;
  30928. case 's':
  30929. ctlPtx = cpx, ctlPty = cpy;
  30930. prevCmd = ca[ca.length - 1];
  30931. if (prevCmd.command === 'C') {
  30932. ctlPtx = cpx + (cpx - prevCmd.points[2]);
  30933. ctlPty = cpy + (cpy - prevCmd.points[3]);
  30934. }
  30935. points.push(ctlPtx, ctlPty, cpx + p.shift(), cpy + p.shift());
  30936. cpx += p.shift();
  30937. cpy += p.shift();
  30938. cmd = 'C';
  30939. points.push(cpx, cpy);
  30940. break;
  30941. case 'Q':
  30942. points.push(p.shift(), p.shift());
  30943. cpx = p.shift();
  30944. cpy = p.shift();
  30945. points.push(cpx, cpy);
  30946. break;
  30947. case 'q':
  30948. points.push(cpx + p.shift(), cpy + p.shift());
  30949. cpx += p.shift();
  30950. cpy += p.shift();
  30951. cmd = 'Q';
  30952. points.push(cpx, cpy);
  30953. break;
  30954. case 'T':
  30955. ctlPtx = cpx, ctlPty = cpy;
  30956. prevCmd = ca[ca.length - 1];
  30957. if (prevCmd.command === 'Q') {
  30958. ctlPtx = cpx + (cpx - prevCmd.points[0]);
  30959. ctlPty = cpy + (cpy - prevCmd.points[1]);
  30960. }
  30961. cpx = p.shift();
  30962. cpy = p.shift();
  30963. cmd = 'Q';
  30964. points.push(ctlPtx, ctlPty, cpx, cpy);
  30965. break;
  30966. case 't':
  30967. ctlPtx = cpx, ctlPty = cpy;
  30968. prevCmd = ca[ca.length - 1];
  30969. if (prevCmd.command === 'Q') {
  30970. ctlPtx = cpx + (cpx - prevCmd.points[0]);
  30971. ctlPty = cpy + (cpy - prevCmd.points[1]);
  30972. }
  30973. cpx += p.shift();
  30974. cpy += p.shift();
  30975. cmd = 'Q';
  30976. points.push(ctlPtx, ctlPty, cpx, cpy);
  30977. break;
  30978. case 'A':
  30979. rx = p.shift();
  30980. ry = p.shift();
  30981. psi = p.shift();
  30982. fa = p.shift();
  30983. fs = p.shift();
  30984. x1 = cpx, y1 = cpy;
  30985. cpx = p.shift(), cpy = p.shift();
  30986. cmd = 'A';
  30987. points = this._convertPoint(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);
  30988. break;
  30989. case 'a':
  30990. rx = p.shift();
  30991. ry = p.shift();
  30992. psi = p.shift();
  30993. fa = p.shift();
  30994. fs = p.shift();
  30995. x1 = cpx, y1 = cpy;
  30996. cpx += p.shift();
  30997. cpy += p.shift();
  30998. cmd = 'A';
  30999. points = this._convertPoint(x1, y1, cpx, cpy, fa, fs, rx, ry, psi);
  31000. break;
  31001. }
  31002. for (var j = 0, l = points.length; j < l; j += 2) {
  31003. points[j] += x;
  31004. points[j + 1] += y;
  31005. }
  31006. ca.push(new PathSegment(cmd || c, points));
  31007. }
  31008. if (c === 'z' || c === 'Z') {
  31009. ca.push(new PathSegment('z', []));
  31010. }
  31011. }
  31012. return ca;
  31013. },
  31014. _convertPoint: function (x1, y1, x2, y2, fa, fs, rx, ry, psiDeg) {
  31015. var psi = psiDeg * (Math.PI / 180);
  31016. var xp = Math.cos(psi) * (x1 - x2) / 2 + Math.sin(psi) * (y1 - y2) / 2;
  31017. var yp = -1 * Math.sin(psi) * (x1 - x2) / 2 + Math.cos(psi) * (y1 - y2) / 2;
  31018. var lambda = xp * xp / (rx * rx) + yp * yp / (ry * ry);
  31019. if (lambda > 1) {
  31020. rx *= Math.sqrt(lambda);
  31021. ry *= Math.sqrt(lambda);
  31022. }
  31023. var f = Math.sqrt((rx * rx * (ry * ry) - rx * rx * (yp * yp) - ry * ry * (xp * xp)) / (rx * rx * (yp * yp) + ry * ry * (xp * xp)));
  31024. if (fa === fs) {
  31025. f *= -1;
  31026. }
  31027. if (isNaN(f)) {
  31028. f = 0;
  31029. }
  31030. var cxp = f * rx * yp / ry;
  31031. var cyp = f * -ry * xp / rx;
  31032. var cx = (x1 + x2) / 2 + Math.cos(psi) * cxp - Math.sin(psi) * cyp;
  31033. var cy = (y1 + y2) / 2 + Math.sin(psi) * cxp + Math.cos(psi) * cyp;
  31034. var theta = vAngle([
  31035. 1,
  31036. 0
  31037. ], [
  31038. (xp - cxp) / rx,
  31039. (yp - cyp) / ry
  31040. ]);
  31041. var u = [
  31042. (xp - cxp) / rx,
  31043. (yp - cyp) / ry
  31044. ];
  31045. var v = [
  31046. (-1 * xp - cxp) / rx,
  31047. (-1 * yp - cyp) / ry
  31048. ];
  31049. var dTheta = vAngle(u, v);
  31050. if (vRatio(u, v) <= -1) {
  31051. dTheta = Math.PI;
  31052. }
  31053. if (vRatio(u, v) >= 1) {
  31054. dTheta = 0;
  31055. }
  31056. if (fs === 0 && dTheta > 0) {
  31057. dTheta = dTheta - 2 * Math.PI;
  31058. }
  31059. if (fs === 1 && dTheta < 0) {
  31060. dTheta = dTheta + 2 * Math.PI;
  31061. }
  31062. return [
  31063. cx,
  31064. cy,
  31065. rx,
  31066. ry,
  31067. theta,
  31068. dTheta,
  31069. psi,
  31070. fs
  31071. ];
  31072. },
  31073. buildPath: function (ctx, style) {
  31074. var path = style.path;
  31075. var x = style.x || 0;
  31076. var y = style.y || 0;
  31077. style.pathArray = style.pathArray || this.buildPathArray(path, x, y);
  31078. var pathArray = style.pathArray;
  31079. var pointList = style.pointList = [];
  31080. var singlePointList = [];
  31081. for (var i = 0, l = pathArray.length; i < l; i++) {
  31082. if (pathArray[i].command.toUpperCase() == 'M') {
  31083. singlePointList.length > 0 && pointList.push(singlePointList);
  31084. singlePointList = [];
  31085. }
  31086. var p = pathArray[i].points;
  31087. for (var j = 0, k = p.length; j < k; j += 2) {
  31088. singlePointList.push([
  31089. p[j],
  31090. p[j + 1]
  31091. ]);
  31092. }
  31093. }
  31094. singlePointList.length > 0 && pointList.push(singlePointList);
  31095. for (var i = 0, l = pathArray.length; i < l; i++) {
  31096. var c = pathArray[i].command;
  31097. var p = pathArray[i].points;
  31098. switch (c) {
  31099. case 'L':
  31100. ctx.lineTo(p[0], p[1]);
  31101. break;
  31102. case 'M':
  31103. ctx.moveTo(p[0], p[1]);
  31104. break;
  31105. case 'C':
  31106. ctx.bezierCurveTo(p[0], p[1], p[2], p[3], p[4], p[5]);
  31107. break;
  31108. case 'Q':
  31109. ctx.quadraticCurveTo(p[0], p[1], p[2], p[3]);
  31110. break;
  31111. case 'A':
  31112. var cx = p[0];
  31113. var cy = p[1];
  31114. var rx = p[2];
  31115. var ry = p[3];
  31116. var theta = p[4];
  31117. var dTheta = p[5];
  31118. var psi = p[6];
  31119. var fs = p[7];
  31120. var r = rx > ry ? rx : ry;
  31121. var scaleX = rx > ry ? 1 : rx / ry;
  31122. var scaleY = rx > ry ? ry / rx : 1;
  31123. ctx.translate(cx, cy);
  31124. ctx.rotate(psi);
  31125. ctx.scale(scaleX, scaleY);
  31126. ctx.arc(0, 0, r, theta, theta + dTheta, 1 - fs);
  31127. ctx.scale(1 / scaleX, 1 / scaleY);
  31128. ctx.rotate(-psi);
  31129. ctx.translate(-cx, -cy);
  31130. break;
  31131. case 'z':
  31132. ctx.closePath();
  31133. break;
  31134. }
  31135. }
  31136. return;
  31137. },
  31138. getRect: function (style) {
  31139. if (style.__rect) {
  31140. return style.__rect;
  31141. }
  31142. var lineWidth;
  31143. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  31144. lineWidth = style.lineWidth || 1;
  31145. } else {
  31146. lineWidth = 0;
  31147. }
  31148. var minX = Number.MAX_VALUE;
  31149. var maxX = Number.MIN_VALUE;
  31150. var minY = Number.MAX_VALUE;
  31151. var maxY = Number.MIN_VALUE;
  31152. var x = style.x || 0;
  31153. var y = style.y || 0;
  31154. var pathArray = style.pathArray || this.buildPathArray(style.path);
  31155. for (var i = 0; i < pathArray.length; i++) {
  31156. var p = pathArray[i].points;
  31157. for (var j = 0; j < p.length; j++) {
  31158. if (j % 2 === 0) {
  31159. if (p[j] + x < minX) {
  31160. minX = p[j];
  31161. }
  31162. if (p[j] + x > maxX) {
  31163. maxX = p[j];
  31164. }
  31165. } else {
  31166. if (p[j] + y < minY) {
  31167. minY = p[j];
  31168. }
  31169. if (p[j] + y > maxY) {
  31170. maxY = p[j];
  31171. }
  31172. }
  31173. }
  31174. }
  31175. var rect;
  31176. if (minX === Number.MAX_VALUE || maxX === Number.MIN_VALUE || minY === Number.MAX_VALUE || maxY === Number.MIN_VALUE) {
  31177. rect = {
  31178. x: 0,
  31179. y: 0,
  31180. width: 0,
  31181. height: 0
  31182. };
  31183. } else {
  31184. rect = {
  31185. x: Math.round(minX - lineWidth / 2),
  31186. y: Math.round(minY - lineWidth / 2),
  31187. width: maxX - minX + lineWidth,
  31188. height: maxY - minY + lineWidth
  31189. };
  31190. }
  31191. style.__rect = rect;
  31192. return rect;
  31193. }
  31194. };
  31195. require('../tool/util').inherits(Path, Base);
  31196. return Path;
  31197. });define('zrender/shape/Ellipse', [
  31198. 'require',
  31199. './Base',
  31200. '../tool/util'
  31201. ], function (require) {
  31202. var Base = require('./Base');
  31203. var Ellipse = function (options) {
  31204. Base.call(this, options);
  31205. };
  31206. Ellipse.prototype = {
  31207. type: 'ellipse',
  31208. buildPath: function (ctx, style) {
  31209. var k = 0.5522848;
  31210. var x = style.x;
  31211. var y = style.y;
  31212. var a = style.a;
  31213. var b = style.b;
  31214. var ox = a * k;
  31215. var oy = b * k;
  31216. ctx.moveTo(x - a, y);
  31217. ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
  31218. ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
  31219. ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
  31220. ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
  31221. ctx.closePath();
  31222. },
  31223. getRect: function (style) {
  31224. if (style.__rect) {
  31225. return style.__rect;
  31226. }
  31227. var lineWidth;
  31228. if (style.brushType == 'stroke' || style.brushType == 'fill') {
  31229. lineWidth = style.lineWidth || 1;
  31230. } else {
  31231. lineWidth = 0;
  31232. }
  31233. style.__rect = {
  31234. x: Math.round(style.x - style.a - lineWidth / 2),
  31235. y: Math.round(style.y - style.b - lineWidth / 2),
  31236. width: style.a * 2 + lineWidth,
  31237. height: style.b * 2 + lineWidth
  31238. };
  31239. return style.__rect;
  31240. }
  31241. };
  31242. require('../tool/util').inherits(Ellipse, Base);
  31243. return Ellipse;
  31244. });define('echarts/component/roamController', [
  31245. 'require',
  31246. './base',
  31247. 'zrender/shape/Rectangle',
  31248. 'zrender/shape/Sector',
  31249. 'zrender/shape/Circle',
  31250. '../config',
  31251. 'zrender/tool/util',
  31252. 'zrender/tool/color',
  31253. 'zrender/tool/event',
  31254. '../component'
  31255. ], function (require) {
  31256. var Base = require('./base');
  31257. var RectangleShape = require('zrender/shape/Rectangle');
  31258. var SectorShape = require('zrender/shape/Sector');
  31259. var CircleShape = require('zrender/shape/Circle');
  31260. var ecConfig = require('../config');
  31261. ecConfig.roamController = {
  31262. zlevel: 0,
  31263. z: 4,
  31264. show: true,
  31265. x: 'left',
  31266. y: 'top',
  31267. width: 80,
  31268. height: 120,
  31269. backgroundColor: 'rgba(0,0,0,0)',
  31270. borderColor: '#ccc',
  31271. borderWidth: 0,
  31272. padding: 5,
  31273. handleColor: '#6495ed',
  31274. fillerColor: '#fff',
  31275. step: 15,
  31276. mapTypeControl: null
  31277. };
  31278. var zrUtil = require('zrender/tool/util');
  31279. var zrColor = require('zrender/tool/color');
  31280. var zrEvent = require('zrender/tool/event');
  31281. function RoamController(ecTheme, messageCenter, zr, option, myChart) {
  31282. this.rcOption = {};
  31283. if (!option.roamController || !option.roamController.show) {
  31284. return;
  31285. }
  31286. if (!option.roamController.mapTypeControl) {
  31287. console.error('option.roamController.mapTypeControl has not been defined.');
  31288. return;
  31289. }
  31290. Base.call(this, ecTheme, messageCenter, zr, option, myChart);
  31291. this.rcOption = option.roamController;
  31292. var self = this;
  31293. this._drictionMouseDown = function (params) {
  31294. return self.__drictionMouseDown(params);
  31295. };
  31296. this._drictionMouseUp = function (params) {
  31297. return self.__drictionMouseUp(params);
  31298. };
  31299. this._drictionMouseMove = function (params) {
  31300. return self.__drictionMouseMove(params);
  31301. };
  31302. this._drictionMouseOut = function (params) {
  31303. return self.__drictionMouseOut(params);
  31304. };
  31305. this._scaleHandler = function (params) {
  31306. return self.__scaleHandler(params);
  31307. };
  31308. this.refresh(option);
  31309. }
  31310. RoamController.prototype = {
  31311. type: ecConfig.COMPONENT_TYPE_ROAMCONTROLLER,
  31312. _buildShape: function () {
  31313. if (!this.rcOption.show) {
  31314. return;
  31315. }
  31316. this._itemGroupLocation = this._getItemGroupLocation();
  31317. this._buildBackground();
  31318. this._buildItem();
  31319. for (var i = 0, l = this.shapeList.length; i < l; i++) {
  31320. this.zr.addShape(this.shapeList[i]);
  31321. }
  31322. },
  31323. _buildItem: function () {
  31324. this.shapeList.push(this._getDirectionShape('up'));
  31325. this.shapeList.push(this._getDirectionShape('down'));
  31326. this.shapeList.push(this._getDirectionShape('left'));
  31327. this.shapeList.push(this._getDirectionShape('right'));
  31328. this.shapeList.push(this._getScaleShape('scaleUp'));
  31329. this.shapeList.push(this._getScaleShape('scaleDown'));
  31330. },
  31331. _getDirectionShape: function (direction) {
  31332. var r = this._itemGroupLocation.r;
  31333. var x = this._itemGroupLocation.x + r;
  31334. var y = this._itemGroupLocation.y + r;
  31335. var sectorShape = {
  31336. zlevel: this.getZlevelBase(),
  31337. z: this.getZBase(),
  31338. style: {
  31339. x: x,
  31340. y: y,
  31341. r: r,
  31342. startAngle: -45,
  31343. endAngle: 45,
  31344. color: this.rcOption.handleColor,
  31345. text: '>',
  31346. textX: x + r / 2 + 4,
  31347. textY: y - 0.5,
  31348. textAlign: 'center',
  31349. textBaseline: 'middle',
  31350. textPosition: 'specific',
  31351. textColor: this.rcOption.fillerColor,
  31352. textFont: Math.floor(r / 2) + 'px arial'
  31353. },
  31354. highlightStyle: {
  31355. color: zrColor.lift(this.rcOption.handleColor, -0.2),
  31356. brushType: 'fill'
  31357. },
  31358. clickable: true
  31359. };
  31360. switch (direction) {
  31361. case 'up':
  31362. sectorShape.rotation = [
  31363. Math.PI / 2,
  31364. x,
  31365. y
  31366. ];
  31367. break;
  31368. case 'left':
  31369. sectorShape.rotation = [
  31370. Math.PI,
  31371. x,
  31372. y
  31373. ];
  31374. break;
  31375. case 'down':
  31376. sectorShape.rotation = [
  31377. -Math.PI / 2,
  31378. x,
  31379. y
  31380. ];
  31381. break;
  31382. }
  31383. sectorShape = new SectorShape(sectorShape);
  31384. sectorShape._roamType = direction;
  31385. sectorShape.onmousedown = this._drictionMouseDown;
  31386. sectorShape.onmouseup = this._drictionMouseUp;
  31387. sectorShape.onmousemove = this._drictionMouseMove;
  31388. sectorShape.onmouseout = this._drictionMouseOut;
  31389. return sectorShape;
  31390. },
  31391. _getScaleShape: function (text) {
  31392. var width = this._itemGroupLocation.width;
  31393. var height = this._itemGroupLocation.height - width;
  31394. height = height < 0 ? 20 : height;
  31395. var r = Math.min(width / 2 - 5, height) / 2;
  31396. var x = this._itemGroupLocation.x + (text === 'scaleDown' ? width - r : r);
  31397. var y = this._itemGroupLocation.y + this._itemGroupLocation.height - r;
  31398. var scaleShape = {
  31399. zlevel: this.getZlevelBase(),
  31400. z: this.getZBase(),
  31401. style: {
  31402. x: x,
  31403. y: y,
  31404. r: r,
  31405. color: this.rcOption.handleColor,
  31406. text: text === 'scaleDown' ? '-' : '+',
  31407. textX: x,
  31408. textY: y - 2,
  31409. textAlign: 'center',
  31410. textBaseline: 'middle',
  31411. textPosition: 'specific',
  31412. textColor: this.rcOption.fillerColor,
  31413. textFont: Math.floor(r) + 'px verdana'
  31414. },
  31415. highlightStyle: {
  31416. color: zrColor.lift(this.rcOption.handleColor, -0.2),
  31417. brushType: 'fill'
  31418. },
  31419. clickable: true
  31420. };
  31421. scaleShape = new CircleShape(scaleShape);
  31422. scaleShape._roamType = text;
  31423. scaleShape.onmousedown = this._scaleHandler;
  31424. return scaleShape;
  31425. },
  31426. _buildBackground: function () {
  31427. var padding = this.reformCssArray(this.rcOption.padding);
  31428. this.shapeList.push(new RectangleShape({
  31429. zlevel: this.getZlevelBase(),
  31430. z: this.getZBase(),
  31431. hoverable: false,
  31432. style: {
  31433. x: this._itemGroupLocation.x - padding[3],
  31434. y: this._itemGroupLocation.y - padding[0],
  31435. width: this._itemGroupLocation.width + padding[3] + padding[1],
  31436. height: this._itemGroupLocation.height + padding[0] + padding[2],
  31437. brushType: this.rcOption.borderWidth === 0 ? 'fill' : 'both',
  31438. color: this.rcOption.backgroundColor,
  31439. strokeColor: this.rcOption.borderColor,
  31440. lineWidth: this.rcOption.borderWidth
  31441. }
  31442. }));
  31443. },
  31444. _getItemGroupLocation: function () {
  31445. var padding = this.reformCssArray(this.rcOption.padding);
  31446. var width = this.rcOption.width;
  31447. var height = this.rcOption.height;
  31448. var zrWidth = this.zr.getWidth();
  31449. var zrHeight = this.zr.getHeight();
  31450. var x;
  31451. switch (this.rcOption.x) {
  31452. case 'center':
  31453. x = Math.floor((zrWidth - width) / 2);
  31454. break;
  31455. case 'left':
  31456. x = padding[3] + this.rcOption.borderWidth;
  31457. break;
  31458. case 'right':
  31459. x = zrWidth - width - padding[1] - padding[3] - this.rcOption.borderWidth * 2;
  31460. break;
  31461. default:
  31462. x = this.parsePercent(this.rcOption.x, zrWidth);
  31463. break;
  31464. }
  31465. var y;
  31466. switch (this.rcOption.y) {
  31467. case 'top':
  31468. y = padding[0] + this.rcOption.borderWidth;
  31469. break;
  31470. case 'bottom':
  31471. y = zrHeight - height - padding[0] - padding[2] - this.rcOption.borderWidth * 2;
  31472. break;
  31473. case 'center':
  31474. y = Math.floor((zrHeight - height) / 2);
  31475. break;
  31476. default:
  31477. y = this.parsePercent(this.rcOption.y, zrHeight);
  31478. break;
  31479. }
  31480. return {
  31481. x: x,
  31482. y: y,
  31483. r: width / 2,
  31484. width: width,
  31485. height: height
  31486. };
  31487. },
  31488. __drictionMouseDown: function (params) {
  31489. this.mousedown = true;
  31490. this._drictionHandlerOn(params);
  31491. },
  31492. __drictionMouseUp: function (params) {
  31493. this.mousedown = false;
  31494. this._drictionHandlerOff(params);
  31495. },
  31496. __drictionMouseMove: function (params) {
  31497. if (this.mousedown) {
  31498. this._drictionHandlerOn(params);
  31499. }
  31500. },
  31501. __drictionMouseOut: function (params) {
  31502. this._drictionHandlerOff(params);
  31503. },
  31504. _drictionHandlerOn: function (params) {
  31505. this._dispatchEvent(params.event, params.target._roamType);
  31506. clearInterval(this.dircetionTimer);
  31507. var self = this;
  31508. this.dircetionTimer = setInterval(function () {
  31509. self._dispatchEvent(params.event, params.target._roamType);
  31510. }, 100);
  31511. zrEvent.stop(params.event);
  31512. },
  31513. _drictionHandlerOff: function (params) {
  31514. clearInterval(this.dircetionTimer);
  31515. },
  31516. __scaleHandler: function (params) {
  31517. this._dispatchEvent(params.event, params.target._roamType);
  31518. zrEvent.stop(params.event);
  31519. },
  31520. _dispatchEvent: function (event, roamType) {
  31521. this.messageCenter.dispatch(ecConfig.EVENT.ROAMCONTROLLER, event, {
  31522. roamType: roamType,
  31523. mapTypeControl: this.rcOption.mapTypeControl,
  31524. step: this.rcOption.step
  31525. }, this.myChart);
  31526. },
  31527. refresh: function (newOption) {
  31528. if (newOption) {
  31529. this.option = newOption || this.option;
  31530. this.option.roamController = this.reformOption(this.option.roamController);
  31531. this.rcOption = this.option.roamController;
  31532. }
  31533. this.clear();
  31534. this._buildShape();
  31535. }
  31536. };
  31537. zrUtil.inherits(RoamController, Base);
  31538. require('../component').define('roamController', RoamController);
  31539. return RoamController;
  31540. });define('echarts/layer/heatmap', ['require'], function (require) {
  31541. var defaultOptions = {
  31542. blurSize: 30,
  31543. gradientColors: [
  31544. 'blue',
  31545. 'cyan',
  31546. 'lime',
  31547. 'yellow',
  31548. 'red'
  31549. ],
  31550. minAlpha: 0.05,
  31551. valueScale: 1,
  31552. opacity: 1
  31553. };
  31554. var BRUSH_SIZE = 20;
  31555. var GRADIENT_LEVELS = 256;
  31556. function Heatmap(opt) {
  31557. this.option = opt;
  31558. if (opt) {
  31559. for (var i in defaultOptions) {
  31560. if (opt[i] !== undefined) {
  31561. this.option[i] = opt[i];
  31562. } else {
  31563. this.option[i] = defaultOptions[i];
  31564. }
  31565. }
  31566. } else {
  31567. this.option = defaultOptions;
  31568. }
  31569. }
  31570. Heatmap.prototype = {
  31571. getCanvas: function (data, width, height) {
  31572. var brush = this._getBrush();
  31573. var gradient = this._getGradient();
  31574. var r = BRUSH_SIZE + this.option.blurSize;
  31575. var canvas = document.createElement('canvas');
  31576. canvas.width = width;
  31577. canvas.height = height;
  31578. var ctx = canvas.getContext('2d');
  31579. var len = data.length;
  31580. for (var i = 0; i < len; ++i) {
  31581. var p = data[i];
  31582. var x = p[0];
  31583. var y = p[1];
  31584. var value = p[2];
  31585. var alpha = Math.min(1, Math.max(value * this.option.valueScale || this.option.minAlpha, this.option.minAlpha));
  31586. ctx.globalAlpha = alpha;
  31587. ctx.drawImage(brush, x - r, y - r);
  31588. }
  31589. var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  31590. var pixels = imageData.data;
  31591. var len = pixels.length / 4;
  31592. while (len--) {
  31593. var id = len * 4 + 3;
  31594. var alpha = pixels[id] / 256;
  31595. var colorOffset = Math.floor(alpha * (GRADIENT_LEVELS - 1));
  31596. pixels[id - 3] = gradient[colorOffset * 4];
  31597. pixels[id - 2] = gradient[colorOffset * 4 + 1];
  31598. pixels[id - 1] = gradient[colorOffset * 4 + 2];
  31599. pixels[id] *= this.option.opacity;
  31600. }
  31601. ctx.putImageData(imageData, 0, 0);
  31602. return canvas;
  31603. },
  31604. _getBrush: function () {
  31605. if (!this._brushCanvas) {
  31606. this._brushCanvas = document.createElement('canvas');
  31607. var r = BRUSH_SIZE + this.option.blurSize;
  31608. var d = r * 2;
  31609. this._brushCanvas.width = d;
  31610. this._brushCanvas.height = d;
  31611. var ctx = this._brushCanvas.getContext('2d');
  31612. ctx.shadowOffsetX = d;
  31613. ctx.shadowBlur = this.option.blurSize;
  31614. ctx.shadowColor = 'black';
  31615. ctx.beginPath();
  31616. ctx.arc(-r, r, BRUSH_SIZE, 0, Math.PI * 2, true);
  31617. ctx.closePath();
  31618. ctx.fill();
  31619. }
  31620. return this._brushCanvas;
  31621. },
  31622. _getGradient: function () {
  31623. if (!this._gradientPixels) {
  31624. var levels = GRADIENT_LEVELS;
  31625. var canvas = document.createElement('canvas');
  31626. canvas.width = 1;
  31627. canvas.height = levels;
  31628. var ctx = canvas.getContext('2d');
  31629. var gradient = ctx.createLinearGradient(0, 0, 0, levels);
  31630. var len = this.option.gradientColors.length;
  31631. for (var i = 0; i < len; ++i) {
  31632. if (typeof this.option.gradientColors[i] === 'string') {
  31633. gradient.addColorStop((i + 1) / len, this.option.gradientColors[i]);
  31634. } else {
  31635. gradient.addColorStop(this.option.gradientColors[i].offset, this.option.gradientColors[i].color);
  31636. }
  31637. }
  31638. ctx.fillStyle = gradient;
  31639. ctx.fillRect(0, 0, 1, levels);
  31640. this._gradientPixels = ctx.getImageData(0, 0, 1, levels).data;
  31641. }
  31642. return this._gradientPixels;
  31643. }
  31644. };
  31645. return Heatmap;
  31646. });define('echarts/util/mapData/params', ['require'], function (require) {
  31647. function decode(json) {
  31648. if (!json.UTF8Encoding) {
  31649. return json;
  31650. }
  31651. var features = json.features;
  31652. for (var f = 0; f < features.length; f++) {
  31653. var feature = features[f];
  31654. var coordinates = feature.geometry.coordinates;
  31655. var encodeOffsets = feature.geometry.encodeOffsets;
  31656. for (var c = 0; c < coordinates.length; c++) {
  31657. var coordinate = coordinates[c];
  31658. if (feature.geometry.type === 'Polygon') {
  31659. coordinates[c] = decodePolygon(coordinate, encodeOffsets[c]);
  31660. } else if (feature.geometry.type === 'MultiPolygon') {
  31661. for (var c2 = 0; c2 < coordinate.length; c2++) {
  31662. var polygon = coordinate[c2];
  31663. coordinate[c2] = decodePolygon(polygon, encodeOffsets[c][c2]);
  31664. }
  31665. }
  31666. }
  31667. }
  31668. json.UTF8Encoding = false;
  31669. return json;
  31670. }
  31671. function decodePolygon(coordinate, encodeOffsets) {
  31672. var result = [];
  31673. var prevX = encodeOffsets[0];
  31674. var prevY = encodeOffsets[1];
  31675. for (var i = 0; i < coordinate.length; i += 2) {
  31676. var x = coordinate.charCodeAt(i) - 64;
  31677. var y = coordinate.charCodeAt(i + 1) - 64;
  31678. x = x >> 1 ^ -(x & 1);
  31679. y = y >> 1 ^ -(y & 1);
  31680. x += prevX;
  31681. y += prevY;
  31682. prevX = x;
  31683. prevY = y;
  31684. result.push([
  31685. x / 1024,
  31686. y / 1024
  31687. ]);
  31688. }
  31689. return result;
  31690. }
  31691. var mapParams = {
  31692. 'none': {
  31693. getGeoJson: function (callback) {
  31694. callback({
  31695. type: 'FeatureCollection',
  31696. features: [{
  31697. type: 'Feature',
  31698. geometry: {
  31699. coordinates: [],
  31700. encodeOffsets: [],
  31701. type: 'Polygon'
  31702. },
  31703. properties: {}
  31704. }]
  31705. });
  31706. }
  31707. },
  31708. 'world': {
  31709. getGeoJson: function (callback) {
  31710. require(['./geoJson/world_geo'], function (md) {
  31711. callback(decode(md));
  31712. });
  31713. }
  31714. },
  31715. 'china': {
  31716. getGeoJson: function (callback) {
  31717. require(['./geoJson/china_geo'], function (md) {
  31718. callback(decode(md));
  31719. });
  31720. }
  31721. },
  31722. '南海诸岛': {
  31723. textCoord: [
  31724. 126,
  31725. 25
  31726. ],
  31727. getPath: function (leftTop, scale) {
  31728. var pList = [
  31729. [
  31730. [
  31731. 0,
  31732. 3.5
  31733. ],
  31734. [
  31735. 7,
  31736. 11.2
  31737. ],
  31738. [
  31739. 15,
  31740. 11.9
  31741. ],
  31742. [
  31743. 30,
  31744. 7
  31745. ],
  31746. [
  31747. 42,
  31748. 0.7
  31749. ],
  31750. [
  31751. 52,
  31752. 0.7
  31753. ],
  31754. [
  31755. 56,
  31756. 7.7
  31757. ],
  31758. [
  31759. 59,
  31760. 0.7
  31761. ],
  31762. [
  31763. 64,
  31764. 0.7
  31765. ],
  31766. [
  31767. 64,
  31768. 0
  31769. ],
  31770. [
  31771. 5,
  31772. 0
  31773. ],
  31774. [
  31775. 0,
  31776. 3.5
  31777. ]
  31778. ],
  31779. [
  31780. [
  31781. 13,
  31782. 16.1
  31783. ],
  31784. [
  31785. 19,
  31786. 14.7
  31787. ],
  31788. [
  31789. 16,
  31790. 21.7
  31791. ],
  31792. [
  31793. 11,
  31794. 23.1
  31795. ],
  31796. [
  31797. 13,
  31798. 16.1
  31799. ]
  31800. ],
  31801. [
  31802. [
  31803. 12,
  31804. 32.2
  31805. ],
  31806. [
  31807. 14,
  31808. 38.5
  31809. ],
  31810. [
  31811. 15,
  31812. 38.5
  31813. ],
  31814. [
  31815. 13,
  31816. 32.2
  31817. ],
  31818. [
  31819. 12,
  31820. 32.2
  31821. ]
  31822. ],
  31823. [
  31824. [
  31825. 16,
  31826. 47.6
  31827. ],
  31828. [
  31829. 12,
  31830. 53.2
  31831. ],
  31832. [
  31833. 13,
  31834. 53.2
  31835. ],
  31836. [
  31837. 18,
  31838. 47.6
  31839. ],
  31840. [
  31841. 16,
  31842. 47.6
  31843. ]
  31844. ],
  31845. [
  31846. [
  31847. 6,
  31848. 64.4
  31849. ],
  31850. [
  31851. 8,
  31852. 70
  31853. ],
  31854. [
  31855. 9,
  31856. 70
  31857. ],
  31858. [
  31859. 8,
  31860. 64.4
  31861. ],
  31862. [
  31863. 6,
  31864. 64.4
  31865. ]
  31866. ],
  31867. [
  31868. [
  31869. 23,
  31870. 82.6
  31871. ],
  31872. [
  31873. 29,
  31874. 79.8
  31875. ],
  31876. [
  31877. 30,
  31878. 79.8
  31879. ],
  31880. [
  31881. 25,
  31882. 82.6
  31883. ],
  31884. [
  31885. 23,
  31886. 82.6
  31887. ]
  31888. ],
  31889. [
  31890. [
  31891. 37,
  31892. 70.7
  31893. ],
  31894. [
  31895. 43,
  31896. 62.3
  31897. ],
  31898. [
  31899. 44,
  31900. 62.3
  31901. ],
  31902. [
  31903. 39,
  31904. 70.7
  31905. ],
  31906. [
  31907. 37,
  31908. 70.7
  31909. ]
  31910. ],
  31911. [
  31912. [
  31913. 48,
  31914. 51.1
  31915. ],
  31916. [
  31917. 51,
  31918. 45.5
  31919. ],
  31920. [
  31921. 53,
  31922. 45.5
  31923. ],
  31924. [
  31925. 50,
  31926. 51.1
  31927. ],
  31928. [
  31929. 48,
  31930. 51.1
  31931. ]
  31932. ],
  31933. [
  31934. [
  31935. 51,
  31936. 35
  31937. ],
  31938. [
  31939. 51,
  31940. 28.7
  31941. ],
  31942. [
  31943. 53,
  31944. 28.7
  31945. ],
  31946. [
  31947. 53,
  31948. 35
  31949. ],
  31950. [
  31951. 51,
  31952. 35
  31953. ]
  31954. ],
  31955. [
  31956. [
  31957. 52,
  31958. 22.4
  31959. ],
  31960. [
  31961. 55,
  31962. 17.5
  31963. ],
  31964. [
  31965. 56,
  31966. 17.5
  31967. ],
  31968. [
  31969. 53,
  31970. 22.4
  31971. ],
  31972. [
  31973. 52,
  31974. 22.4
  31975. ]
  31976. ],
  31977. [
  31978. [
  31979. 58,
  31980. 12.6
  31981. ],
  31982. [
  31983. 62,
  31984. 7
  31985. ],
  31986. [
  31987. 63,
  31988. 7
  31989. ],
  31990. [
  31991. 60,
  31992. 12.6
  31993. ],
  31994. [
  31995. 58,
  31996. 12.6
  31997. ]
  31998. ],
  31999. [
  32000. [
  32001. 0,
  32002. 3.5
  32003. ],
  32004. [
  32005. 0,
  32006. 93.1
  32007. ],
  32008. [
  32009. 64,
  32010. 93.1
  32011. ],
  32012. [
  32013. 64,
  32014. 0
  32015. ],
  32016. [
  32017. 63,
  32018. 0
  32019. ],
  32020. [
  32021. 63,
  32022. 92.4
  32023. ],
  32024. [
  32025. 1,
  32026. 92.4
  32027. ],
  32028. [
  32029. 1,
  32030. 3.5
  32031. ],
  32032. [
  32033. 0,
  32034. 3.5
  32035. ]
  32036. ]
  32037. ];
  32038. var str = '';
  32039. var left = leftTop[0];
  32040. var top = leftTop[1];
  32041. for (var i = 0, l = pList.length; i < l; i++) {
  32042. str += 'M ' + ((pList[i][0][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][0][1] * scale + top).toFixed(2) - 0) + ' ';
  32043. for (var j = 1, k = pList[i].length; j < k; j++) {
  32044. str += 'L ' + ((pList[i][j][0] * scale + left).toFixed(2) - 0) + ' ' + ((pList[i][j][1] * scale + top).toFixed(2) - 0) + ' ';
  32045. }
  32046. }
  32047. return str + ' Z';
  32048. }
  32049. },
  32050. '新疆': {
  32051. getGeoJson: function (callback) {
  32052. require(['./geoJson/xin_jiang_geo'], function (md) {
  32053. callback(decode(md));
  32054. });
  32055. }
  32056. },
  32057. '西藏': {
  32058. getGeoJson: function (callback) {
  32059. require(['./geoJson/xi_zang_geo'], function (md) {
  32060. callback(decode(md));
  32061. });
  32062. }
  32063. },
  32064. '内蒙古': {
  32065. getGeoJson: function (callback) {
  32066. require(['./geoJson/nei_meng_gu_geo'], function (md) {
  32067. callback(decode(md));
  32068. });
  32069. }
  32070. },
  32071. '青海': {
  32072. getGeoJson: function (callback) {
  32073. require(['./geoJson/qing_hai_geo'], function (md) {
  32074. callback(decode(md));
  32075. });
  32076. }
  32077. },
  32078. '四川': {
  32079. getGeoJson: function (callback) {
  32080. require(['./geoJson/si_chuan_geo'], function (md) {
  32081. callback(decode(md));
  32082. });
  32083. }
  32084. },
  32085. '黑龙江': {
  32086. getGeoJson: function (callback) {
  32087. require(['./geoJson/hei_long_jiang_geo'], function (md) {
  32088. callback(decode(md));
  32089. });
  32090. }
  32091. },
  32092. '甘肃': {
  32093. getGeoJson: function (callback) {
  32094. require(['./geoJson/gan_su_geo'], function (md) {
  32095. callback(decode(md));
  32096. });
  32097. }
  32098. },
  32099. '云南': {
  32100. getGeoJson: function (callback) {
  32101. require(['./geoJson/yun_nan_geo'], function (md) {
  32102. callback(decode(md));
  32103. });
  32104. }
  32105. },
  32106. '广西': {
  32107. getGeoJson: function (callback) {
  32108. require(['./geoJson/guang_xi_geo'], function (md) {
  32109. callback(decode(md));
  32110. });
  32111. }
  32112. },
  32113. '湖南': {
  32114. getGeoJson: function (callback) {
  32115. require(['./geoJson/hu_nan_geo'], function (md) {
  32116. callback(decode(md));
  32117. });
  32118. }
  32119. },
  32120. '陕西': {
  32121. getGeoJson: function (callback) {
  32122. require(['./geoJson/shan_xi_1_geo'], function (md) {
  32123. callback(decode(md));
  32124. });
  32125. }
  32126. },
  32127. '广东': {
  32128. getGeoJson: function (callback) {
  32129. require(['./geoJson/guang_dong_geo'], function (md) {
  32130. callback(decode(md));
  32131. });
  32132. }
  32133. },
  32134. '吉林': {
  32135. getGeoJson: function (callback) {
  32136. require(['./geoJson/ji_lin_geo'], function (md) {
  32137. callback(decode(md));
  32138. });
  32139. }
  32140. },
  32141. '河北': {
  32142. getGeoJson: function (callback) {
  32143. require(['./geoJson/he_bei_geo'], function (md) {
  32144. callback(decode(md));
  32145. });
  32146. }
  32147. },
  32148. '湖北': {
  32149. getGeoJson: function (callback) {
  32150. require(['./geoJson/hu_bei_geo'], function (md) {
  32151. callback(decode(md));
  32152. });
  32153. }
  32154. },
  32155. '贵州': {
  32156. getGeoJson: function (callback) {
  32157. require(['./geoJson/gui_zhou_geo'], function (md) {
  32158. callback(decode(md));
  32159. });
  32160. }
  32161. },
  32162. '山东': {
  32163. getGeoJson: function (callback) {
  32164. require(['./geoJson/shan_dong_geo'], function (md) {
  32165. callback(decode(md));
  32166. });
  32167. }
  32168. },
  32169. '江西': {
  32170. getGeoJson: function (callback) {
  32171. require(['./geoJson/jiang_xi_geo'], function (md) {
  32172. callback(decode(md));
  32173. });
  32174. }
  32175. },
  32176. '河南': {
  32177. getGeoJson: function (callback) {
  32178. require(['./geoJson/he_nan_geo'], function (md) {
  32179. callback(decode(md));
  32180. });
  32181. }
  32182. },
  32183. '辽宁': {
  32184. getGeoJson: function (callback) {
  32185. require(['./geoJson/liao_ning_geo'], function (md) {
  32186. callback(decode(md));
  32187. });
  32188. }
  32189. },
  32190. '山西': {
  32191. getGeoJson: function (callback) {
  32192. require(['./geoJson/shan_xi_2_geo'], function (md) {
  32193. callback(decode(md));
  32194. });
  32195. }
  32196. },
  32197. '安徽': {
  32198. getGeoJson: function (callback) {
  32199. require(['./geoJson/an_hui_geo'], function (md) {
  32200. callback(decode(md));
  32201. });
  32202. }
  32203. },
  32204. '福建': {
  32205. getGeoJson: function (callback) {
  32206. require(['./geoJson/fu_jian_geo'], function (md) {
  32207. callback(decode(md));
  32208. });
  32209. }
  32210. },
  32211. '浙江': {
  32212. getGeoJson: function (callback) {
  32213. require(['./geoJson/zhe_jiang_geo'], function (md) {
  32214. callback(decode(md));
  32215. });
  32216. }
  32217. },
  32218. '江苏': {
  32219. getGeoJson: function (callback) {
  32220. require(['./geoJson/jiang_su_geo'], function (md) {
  32221. callback(decode(md));
  32222. });
  32223. }
  32224. },
  32225. '重庆': {
  32226. getGeoJson: function (callback) {
  32227. require(['./geoJson/chong_qing_geo'], function (md) {
  32228. callback(decode(md));
  32229. });
  32230. }
  32231. },
  32232. '宁夏': {
  32233. getGeoJson: function (callback) {
  32234. require(['./geoJson/ning_xia_geo'], function (md) {
  32235. callback(decode(md));
  32236. });
  32237. }
  32238. },
  32239. '海南': {
  32240. getGeoJson: function (callback) {
  32241. require(['./geoJson/hai_nan_geo'], function (md) {
  32242. callback(decode(md));
  32243. });
  32244. }
  32245. },
  32246. '台湾': {
  32247. getGeoJson: function (callback) {
  32248. require(['./geoJson/tai_wan_geo'], function (md) {
  32249. callback(decode(md));
  32250. });
  32251. }
  32252. },
  32253. '北京': {
  32254. getGeoJson: function (callback) {
  32255. require(['./geoJson/bei_jing_geo'], function (md) {
  32256. callback(decode(md));
  32257. });
  32258. }
  32259. },
  32260. '天津': {
  32261. getGeoJson: function (callback) {
  32262. require(['./geoJson/tian_jin_geo'], function (md) {
  32263. callback(decode(md));
  32264. });
  32265. }
  32266. },
  32267. '上海': {
  32268. getGeoJson: function (callback) {
  32269. require(['./geoJson/shang_hai_geo'], function (md) {
  32270. callback(decode(md));
  32271. });
  32272. }
  32273. },
  32274. '香港': {
  32275. getGeoJson: function (callback) {
  32276. require(['./geoJson/xiang_gang_geo'], function (md) {
  32277. callback(decode(md));
  32278. });
  32279. }
  32280. },
  32281. '澳门': {
  32282. getGeoJson: function (callback) {
  32283. require(['./geoJson/ao_men_geo'], function (md) {
  32284. callback(decode(md));
  32285. });
  32286. }
  32287. }
  32288. };
  32289. return {
  32290. decode: decode,
  32291. params: mapParams
  32292. };
  32293. });define('echarts/util/mapData/textFixed', [], function () {
  32294. return {
  32295. '广东': [
  32296. 0,
  32297. -10
  32298. ],
  32299. '香港': [
  32300. 10,
  32301. 10
  32302. ],
  32303. '澳门': [
  32304. -10,
  32305. 18
  32306. ],
  32307. '黑龙江': [
  32308. 0,
  32309. 20
  32310. ],
  32311. '天津': [
  32312. 5,
  32313. 5
  32314. ],
  32315. '深圳市': [
  32316. -35,
  32317. 0
  32318. ],
  32319. '红河哈尼族彝族自治州': [
  32320. 0,
  32321. 20
  32322. ],
  32323. '楚雄彝族自治州': [
  32324. -5,
  32325. 15
  32326. ],
  32327. '石河子市': [
  32328. -5,
  32329. 5
  32330. ],
  32331. '五家渠市': [
  32332. 0,
  32333. -10
  32334. ],
  32335. '昌吉回族自治州': [
  32336. 10,
  32337. 10
  32338. ],
  32339. '昌江黎族自治县': [
  32340. 0,
  32341. 20
  32342. ],
  32343. '陵水黎族自治县': [
  32344. 0,
  32345. 20
  32346. ],
  32347. '东方市': [
  32348. 0,
  32349. 20
  32350. ],
  32351. '渭南市': [
  32352. 0,
  32353. 20
  32354. ]
  32355. };
  32356. });define('echarts/util/mapData/geoCoord', [], function () {
  32357. return {
  32358. 'Russia': [
  32359. 100,
  32360. 60
  32361. ],
  32362. 'United States of America': [
  32363. -99,
  32364. 38
  32365. ]
  32366. };
  32367. });define('echarts/util/projection/svg', [
  32368. 'require',
  32369. 'zrender/shape/Path'
  32370. ], function (require) {
  32371. var PathShape = require('zrender/shape/Path');
  32372. function toFloat(str) {
  32373. return parseFloat(str || 0);
  32374. }
  32375. function getBbox(root) {
  32376. var svgNode = root.firstChild;
  32377. while (!(svgNode.nodeName.toLowerCase() == 'svg' && svgNode.nodeType == 1)) {
  32378. svgNode = svgNode.nextSibling;
  32379. }
  32380. var x = toFloat(svgNode.getAttribute('x'));
  32381. var y = toFloat(svgNode.getAttribute('y'));
  32382. var width = toFloat(svgNode.getAttribute('width'));
  32383. var height = toFloat(svgNode.getAttribute('height'));
  32384. return {
  32385. left: x,
  32386. top: y,
  32387. width: width,
  32388. height: height
  32389. };
  32390. }
  32391. function geoJson2Path(root, transform) {
  32392. var scale = [
  32393. transform.scale.x,
  32394. transform.scale.y
  32395. ];
  32396. var elList = [];
  32397. function _getShape(root) {
  32398. var tagName = root.tagName;
  32399. if (shapeBuilders[tagName]) {
  32400. var obj = shapeBuilders[tagName](root, scale);
  32401. if (obj) {
  32402. obj.scale = scale;
  32403. obj.properties = { name: root.getAttribute('name') || '' };
  32404. obj.id = root.id;
  32405. extendCommonAttributes(obj, root);
  32406. elList.push(obj);
  32407. }
  32408. }
  32409. var shapes = root.childNodes;
  32410. for (var i = 0, len = shapes.length; i < len; i++) {
  32411. _getShape(shapes[i]);
  32412. }
  32413. }
  32414. _getShape(root);
  32415. return elList;
  32416. }
  32417. function pos2geo(obj, p) {
  32418. var point = p instanceof Array ? [
  32419. p[0] * 1,
  32420. p[1] * 1
  32421. ] : [
  32422. p.x * 1,
  32423. p.y * 1
  32424. ];
  32425. return [
  32426. point[0] / obj.scale.x,
  32427. point[1] / obj.scale.y
  32428. ];
  32429. }
  32430. function geo2pos(obj, p) {
  32431. var point = p instanceof Array ? [
  32432. p[0] * 1,
  32433. p[1] * 1
  32434. ] : [
  32435. p.x * 1,
  32436. p.y * 1
  32437. ];
  32438. return [
  32439. point[0] * obj.scale.x,
  32440. point[1] * obj.scale.y
  32441. ];
  32442. }
  32443. function trim(str) {
  32444. return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
  32445. }
  32446. function extendCommonAttributes(obj, xmlNode) {
  32447. var color = xmlNode.getAttribute('fill');
  32448. var strokeColor = xmlNode.getAttribute('stroke');
  32449. var lineWidth = xmlNode.getAttribute('stroke-width');
  32450. var opacity = xmlNode.getAttribute('opacity');
  32451. if (color && color != 'none') {
  32452. obj.color = color;
  32453. if (strokeColor) {
  32454. obj.brushType = 'both';
  32455. obj.strokeColor = strokeColor;
  32456. } else {
  32457. obj.brushType = 'fill';
  32458. }
  32459. } else if (strokeColor && strokeColor != 'none') {
  32460. obj.strokeColor = strokeColor;
  32461. obj.brushType = 'stroke';
  32462. }
  32463. if (lineWidth && lineWidth != 'none') {
  32464. obj.lineWidth = parseFloat(lineWidth);
  32465. }
  32466. if (opacity && opacity != 'none') {
  32467. obj.opacity = parseFloat(opacity);
  32468. }
  32469. }
  32470. function parsePoints(str) {
  32471. var list = trim(str).replace(/,/g, ' ').split(/\s+/);
  32472. var points = [];
  32473. for (var i = 0; i < list.length;) {
  32474. var x = parseFloat(list[i++]);
  32475. var y = parseFloat(list[i++]);
  32476. points.push([
  32477. x,
  32478. y
  32479. ]);
  32480. }
  32481. return points;
  32482. }
  32483. var shapeBuilders = {
  32484. path: function (xmlNode, scale) {
  32485. var path = xmlNode.getAttribute('d');
  32486. var rect = PathShape.prototype.getRect({ path: path });
  32487. return {
  32488. shapeType: 'path',
  32489. path: path,
  32490. cp: [
  32491. (rect.x + rect.width / 2) * scale[0],
  32492. (rect.y + rect.height / 2) * scale[1]
  32493. ]
  32494. };
  32495. },
  32496. rect: function (xmlNode, scale) {
  32497. var x = toFloat(xmlNode.getAttribute('x'));
  32498. var y = toFloat(xmlNode.getAttribute('y'));
  32499. var width = toFloat(xmlNode.getAttribute('width'));
  32500. var height = toFloat(xmlNode.getAttribute('height'));
  32501. return {
  32502. shapeType: 'rectangle',
  32503. x: x,
  32504. y: y,
  32505. width: width,
  32506. height: height,
  32507. cp: [
  32508. (x + width / 2) * scale[0],
  32509. (y + height / 2) * scale[1]
  32510. ]
  32511. };
  32512. },
  32513. line: function (xmlNode, scale) {
  32514. var x1 = toFloat(xmlNode.getAttribute('x1'));
  32515. var y1 = toFloat(xmlNode.getAttribute('y1'));
  32516. var x2 = toFloat(xmlNode.getAttribute('x2'));
  32517. var y2 = toFloat(xmlNode.getAttribute('y2'));
  32518. return {
  32519. shapeType: 'line',
  32520. xStart: x1,
  32521. yStart: y1,
  32522. xEnd: x2,
  32523. yEnd: y2,
  32524. cp: [
  32525. (x1 + x2) * 0.5 * scale[0],
  32526. (y1 + y2) * 0.5 * scale[1]
  32527. ]
  32528. };
  32529. },
  32530. circle: function (xmlNode, scale) {
  32531. var cx = toFloat(xmlNode.getAttribute('cx'));
  32532. var cy = toFloat(xmlNode.getAttribute('cy'));
  32533. var r = toFloat(xmlNode.getAttribute('r'));
  32534. return {
  32535. shapeType: 'circle',
  32536. x: cx,
  32537. y: cy,
  32538. r: r,
  32539. cp: [
  32540. cx * scale[0],
  32541. cy * scale[1]
  32542. ]
  32543. };
  32544. },
  32545. ellipse: function (xmlNode, scale) {
  32546. var cx = parseFloat(xmlNode.getAttribute('cx') || 0);
  32547. var cy = parseFloat(xmlNode.getAttribute('cy') || 0);
  32548. var rx = parseFloat(xmlNode.getAttribute('rx') || 0);
  32549. var ry = parseFloat(xmlNode.getAttribute('ry') || 0);
  32550. return {
  32551. shapeType: 'ellipse',
  32552. x: cx,
  32553. y: cy,
  32554. a: rx,
  32555. b: ry,
  32556. cp: [
  32557. cx * scale[0],
  32558. cy * scale[1]
  32559. ]
  32560. };
  32561. },
  32562. polygon: function (xmlNode, scale) {
  32563. var points = xmlNode.getAttribute('points');
  32564. var min = [
  32565. Infinity,
  32566. Infinity
  32567. ];
  32568. var max = [
  32569. -Infinity,
  32570. -Infinity
  32571. ];
  32572. if (points) {
  32573. points = parsePoints(points);
  32574. for (var i = 0; i < points.length; i++) {
  32575. var p = points[i];
  32576. min[0] = Math.min(p[0], min[0]);
  32577. min[1] = Math.min(p[1], min[1]);
  32578. max[0] = Math.max(p[0], max[0]);
  32579. max[1] = Math.max(p[1], max[1]);
  32580. }
  32581. return {
  32582. shapeType: 'polygon',
  32583. pointList: points,
  32584. cp: [
  32585. (min[0] + max[0]) / 2 * scale[0],
  32586. (min[1] + max[1]) / 2 * scale[0]
  32587. ]
  32588. };
  32589. }
  32590. },
  32591. polyline: function (xmlNode, scale) {
  32592. var obj = shapeBuilders.polygon(xmlNode, scale);
  32593. return obj;
  32594. }
  32595. };
  32596. return {
  32597. getBbox: getBbox,
  32598. geoJson2Path: geoJson2Path,
  32599. pos2geo: pos2geo,
  32600. geo2pos: geo2pos
  32601. };
  32602. });define('echarts/util/projection/normal', [], function () {
  32603. function getBbox(json, specialArea) {
  32604. specialArea = specialArea || {};
  32605. if (!json.srcSize) {
  32606. parseSrcSize(json, specialArea);
  32607. }
  32608. return json.srcSize;
  32609. }
  32610. function parseSrcSize(json, specialArea) {
  32611. specialArea = specialArea || {};
  32612. convertorParse.xmin = 360;
  32613. convertorParse.xmax = -360;
  32614. convertorParse.ymin = 180;
  32615. convertorParse.ymax = -180;
  32616. var shapes = json.features;
  32617. var geometries;
  32618. var shape;
  32619. for (var i = 0, len = shapes.length; i < len; i++) {
  32620. shape = shapes[i];
  32621. if (shape.properties.name && specialArea[shape.properties.name]) {
  32622. continue;
  32623. }
  32624. switch (shape.type) {
  32625. case 'Feature':
  32626. convertorParse[shape.geometry.type](shape.geometry.coordinates);
  32627. break;
  32628. case 'GeometryCollection':
  32629. geometries = shape.geometries;
  32630. for (var j = 0, len2 = geometries.length; j < len2; j++) {
  32631. convertorParse[geometries[j].type](geometries[j].coordinates);
  32632. }
  32633. break;
  32634. }
  32635. }
  32636. json.srcSize = {
  32637. left: convertorParse.xmin.toFixed(4) * 1,
  32638. top: convertorParse.ymin.toFixed(4) * 1,
  32639. width: (convertorParse.xmax - convertorParse.xmin).toFixed(4) * 1,
  32640. height: (convertorParse.ymax - convertorParse.ymin).toFixed(4) * 1
  32641. };
  32642. return json;
  32643. }
  32644. var convertor = {
  32645. formatPoint: function (p) {
  32646. return [
  32647. (p[0] < -168.5 && p[1] > 63.8 ? p[0] + 360 : p[0]) + 168.5,
  32648. 90 - p[1]
  32649. ];
  32650. },
  32651. makePoint: function (p) {
  32652. var self = this;
  32653. var point = self.formatPoint(p);
  32654. if (self._bbox.xmin > p[0]) {
  32655. self._bbox.xmin = p[0];
  32656. }
  32657. if (self._bbox.xmax < p[0]) {
  32658. self._bbox.xmax = p[0];
  32659. }
  32660. if (self._bbox.ymin > p[1]) {
  32661. self._bbox.ymin = p[1];
  32662. }
  32663. if (self._bbox.ymax < p[1]) {
  32664. self._bbox.ymax = p[1];
  32665. }
  32666. var x = (point[0] - convertor.offset.x) * convertor.scale.x + convertor.offset.left;
  32667. var y = (point[1] - convertor.offset.y) * convertor.scale.y + convertor.offset.top;
  32668. return [
  32669. x,
  32670. y
  32671. ];
  32672. },
  32673. Point: function (coordinates) {
  32674. coordinates = this.makePoint(coordinates);
  32675. return coordinates.join(',');
  32676. },
  32677. LineString: function (coordinates) {
  32678. var str = '';
  32679. var point;
  32680. for (var i = 0, len = coordinates.length; i < len; i++) {
  32681. point = convertor.makePoint(coordinates[i]);
  32682. if (i === 0) {
  32683. str = 'M' + point.join(',');
  32684. } else {
  32685. str = str + 'L' + point.join(',');
  32686. }
  32687. }
  32688. return str;
  32689. },
  32690. Polygon: function (coordinates) {
  32691. var str = '';
  32692. for (var i = 0, len = coordinates.length; i < len; i++) {
  32693. str = str + convertor.LineString(coordinates[i]) + 'z';
  32694. }
  32695. return str;
  32696. },
  32697. MultiPoint: function (coordinates) {
  32698. var arr = [];
  32699. for (var i = 0, len = coordinates.length; i < len; i++) {
  32700. arr.push(convertor.Point(coordinates[i]));
  32701. }
  32702. return arr;
  32703. },
  32704. MultiLineString: function (coordinates) {
  32705. var str = '';
  32706. for (var i = 0, len = coordinates.length; i < len; i++) {
  32707. str += convertor.LineString(coordinates[i]);
  32708. }
  32709. return str;
  32710. },
  32711. MultiPolygon: function (coordinates) {
  32712. var str = '';
  32713. for (var i = 0, len = coordinates.length; i < len; i++) {
  32714. str += convertor.Polygon(coordinates[i]);
  32715. }
  32716. return str;
  32717. }
  32718. };
  32719. var convertorParse = {
  32720. formatPoint: convertor.formatPoint,
  32721. makePoint: function (p) {
  32722. var self = this;
  32723. var point = self.formatPoint(p);
  32724. var x = point[0];
  32725. var y = point[1];
  32726. if (self.xmin > x) {
  32727. self.xmin = x;
  32728. }
  32729. if (self.xmax < x) {
  32730. self.xmax = x;
  32731. }
  32732. if (self.ymin > y) {
  32733. self.ymin = y;
  32734. }
  32735. if (self.ymax < y) {
  32736. self.ymax = y;
  32737. }
  32738. },
  32739. Point: function (coordinates) {
  32740. this.makePoint(coordinates);
  32741. },
  32742. LineString: function (coordinates) {
  32743. for (var i = 0, len = coordinates.length; i < len; i++) {
  32744. this.makePoint(coordinates[i]);
  32745. }
  32746. },
  32747. Polygon: function (coordinates) {
  32748. for (var i = 0, len = coordinates.length; i < len; i++) {
  32749. this.LineString(coordinates[i]);
  32750. }
  32751. },
  32752. MultiPoint: function (coordinates) {
  32753. for (var i = 0, len = coordinates.length; i < len; i++) {
  32754. this.Point(coordinates[i]);
  32755. }
  32756. },
  32757. MultiLineString: function (coordinates) {
  32758. for (var i = 0, len = coordinates.length; i < len; i++) {
  32759. this.LineString(coordinates[i]);
  32760. }
  32761. },
  32762. MultiPolygon: function (coordinates) {
  32763. for (var i = 0, len = coordinates.length; i < len; i++) {
  32764. this.Polygon(coordinates[i]);
  32765. }
  32766. }
  32767. };
  32768. function geoJson2Path(json, transform, specialArea) {
  32769. specialArea = specialArea || {};
  32770. convertor.scale = null;
  32771. convertor.offset = null;
  32772. if (!json.srcSize) {
  32773. parseSrcSize(json, specialArea);
  32774. }
  32775. transform.offset = {
  32776. x: json.srcSize.left,
  32777. y: json.srcSize.top,
  32778. left: transform.OffsetLeft || 0,
  32779. top: transform.OffsetTop || 0
  32780. };
  32781. convertor.scale = transform.scale;
  32782. convertor.offset = transform.offset;
  32783. var shapes = json.features;
  32784. var geometries;
  32785. var pathArray = [];
  32786. var val;
  32787. var shape;
  32788. for (var i = 0, len = shapes.length; i < len; i++) {
  32789. shape = shapes[i];
  32790. if (shape.properties.name && specialArea[shape.properties.name]) {
  32791. continue;
  32792. }
  32793. if (shape.type == 'Feature') {
  32794. pushApath(shape.geometry, shape);
  32795. } else if (shape.type == 'GeometryCollection') {
  32796. geometries = shape.geometries;
  32797. for (var j = 0, len2 = geometries.length; j < len2; j++) {
  32798. val = geometries[j];
  32799. pushApath(val, val);
  32800. }
  32801. }
  32802. }
  32803. var shapeType;
  32804. var shapeCoordinates;
  32805. var str;
  32806. function pushApath(gm, shape) {
  32807. shapeType = gm.type;
  32808. shapeCoordinates = gm.coordinates;
  32809. convertor._bbox = {
  32810. xmin: 360,
  32811. xmax: -360,
  32812. ymin: 180,
  32813. ymax: -180
  32814. };
  32815. str = convertor[shapeType](shapeCoordinates);
  32816. pathArray.push({
  32817. path: str,
  32818. cp: shape.properties.cp ? convertor.makePoint(shape.properties.cp) : convertor.makePoint([
  32819. (convertor._bbox.xmin + convertor._bbox.xmax) / 2,
  32820. (convertor._bbox.ymin + convertor._bbox.ymax) / 2
  32821. ]),
  32822. properties: shape.properties,
  32823. id: shape.id
  32824. });
  32825. }
  32826. return pathArray;
  32827. }
  32828. function pos2geo(obj, p) {
  32829. var x;
  32830. var y;
  32831. if (p instanceof Array) {
  32832. x = p[0] * 1;
  32833. y = p[1] * 1;
  32834. } else {
  32835. x = p.x * 1;
  32836. y = p.y * 1;
  32837. }
  32838. x = x / obj.scale.x + obj.offset.x - 168.5;
  32839. x = x > 180 ? x - 360 : x;
  32840. y = 90 - (y / obj.scale.y + obj.offset.y);
  32841. return [
  32842. x,
  32843. y
  32844. ];
  32845. }
  32846. function geo2pos(obj, p) {
  32847. convertor.offset = obj.offset;
  32848. convertor.scale = obj.scale;
  32849. return p instanceof Array ? convertor.makePoint([
  32850. p[0] * 1,
  32851. p[1] * 1
  32852. ]) : convertor.makePoint([
  32853. p.x * 1,
  32854. p.y * 1
  32855. ]);
  32856. }
  32857. return {
  32858. getBbox: getBbox,
  32859. geoJson2Path: geoJson2Path,
  32860. pos2geo: pos2geo,
  32861. geo2pos: geo2pos
  32862. };
  32863. });define('echarts/util/mapData/geoJson/an_hui_geo', [], function () {
  32864. return {
  32865. 'type': 'FeatureCollection',
  32866. 'features': [
  32867. {
  32868. 'type': 'Feature',
  32869. 'id': '3415',
  32870. 'properties': {
  32871. 'name': '六安市',
  32872. 'cp': [
  32873. 116.3123,
  32874. 31.8329
  32875. ],
  32876. 'childNum': 6
  32877. },
  32878. 'geometry': {
  32879. 'type': 'Polygon',
  32880. 'coordinates': ['@@„„nJ‚UXUVƒ°U„ÑnU@mlLVaVln@@bn@VU@xlb@lšLnKlšƒVI„JšUVxnI@lVL@b„ްVX@˜b„x„nVVUnVVnU‚›@kX@VwV@„al¥UUnUWa@ƒ@wĸU„LU¥lKUa@aUI@alLVaUƒ¯anƒWkUKm@XV@VaXlW@aU_UWVUƒI¯@ma¯W¯™™I@UU@WWU@U@@UU@VkV@@WUUm@UaU@„lK@IUK„L@KWmXUWaXI@ƒ@a@a@U@U@KV¥lw„k°b²JVIVKlV@UX„la„Ul`œUVLVVVUšJ„U@Lnm@_VK@KUIW@™J@Xk@WW@U—ƒmm™XmWk@kK@aUUƒVmmkUwUmWL™@WmU@™UJmUULkKWakLWVkIƒlƒwULƒW@X°lUJ@°ULƒWV—wmJ@bmb¯Vkm@@WkWm¯wƒL@lkXƒWmXym¯UImJUbkV™@Vn¯„@V@lUbƒ@mk@maUxmlUbULWn@J—LmKUkWKkwUKƒbm„X„WxkVUKmLkVV@JUUWL@xkJUUƒV@X@VVlUbVX@xk¤šx‚¼œxWxn„‚nn@Þ¼„JVb°aVn„@šmlnXU„JlbVlkz@‚lUŽlXJmxVxXnWxXÈWlUŽ@šUxU@VX@xUL@šUÆmLnV@lWXk@@JlbXblnlJ'],
  32881. 'encodeOffsets': [[
  32882. 118710,
  32883. 33351
  32884. ]]
  32885. }
  32886. },
  32887. {
  32888. 'type': 'Feature',
  32889. 'id': '3408',
  32890. 'properties': {
  32891. 'name': '安庆市',
  32892. 'cp': [
  32893. 116.7517,
  32894. 30.5255
  32895. ],
  32896. 'childNum': 9
  32897. },
  32898. 'geometry': {
  32899. 'type': 'Polygon',
  32900. 'coordinates': ['@@n°‚znW„XlW@k„K°xXn‚l@Xn@l‚°Una@anI˜xXU„ŽVK@¯VIkW¯X@‚„VK„x„klJXUlKXblLVKnVVIšŽV@Xn‚@šŽXKVnVxlŽnn„UlmV@²óUkV™lW„b„lƒšƒn@VVVIn@lw@WVIXblV„@Èx‚aUaVIVVnKVLšK„ƒln@b²K@»U£ƒÑķƒġÝÅb™K™a@Im@ۍ„@kWÓkkmKÅnóJƒUÅ£›W@w„ĕ@wĉţ¯¯ƒUkK±l¯Uƒ¥UÑkÝUķ»Ý¥¯™JƒIUŽVbUl¯ÈV¼VJU¼Vb@bkLUl@„VJ@bUXǚ@lkVmXmKkLVxš‚Ž„VƒL@VkVVVlzW˜kbmLUUUbVbUV™šlÒnJlUnLllUL@bU„Vx„l‚LXVƦÈVU¦WJ'],
  32901. 'encodeOffsets': [[
  32902. 118834,
  32903. 31759
  32904. ]]
  32905. }
  32906. },
  32907. {
  32908. 'type': 'Feature',
  32909. 'id': '3411',
  32910. 'properties': {
  32911. 'name': '滁州市',
  32912. 'cp': [
  32913. 118.1909,
  32914. 32.536
  32915. ],
  32916. 'childNum': 7
  32917. },
  32918. 'geometry': {
  32919. 'type': 'Polygon',
  32920. 'coordinates': ['@@š„@`nnl@„xšK@X°KXV˜IXVlbXVWnX‚lL@šÈ»‚LVan@VJ„êVVn@‚X@laÞbVaƒyn@„_‚xnWVXnWl@VnUVkI@l‚nXKVLVV@V@kW@LlVô„@J@bVnnKnkVa@»lç@ƒnwšKma™UUUVњ@n™mWXalI@alVn@VwUaVU„@„nlaôJnU„VVXlJšaXXVK@UšV@VWx@nXVWšXVšUlLUbV‚ULVVnUVbUbVbš@@a„KÆnnKVK@U@UU@@a„@Vƒ°¯ÈJVIlķ@aa˜UaVKU_@mkxUI@aƒUlyU@@™wkKWmUbUnUVWbkJW_J@bƒn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXU›Jka@XƒVa@kšy@aVIUUW@@m„UlLœKWÑUKVan@UkVmmIXKƒaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaƒaU@kUUaǃUó»mKƒk¯@y@kWK@bkI¯`mn™l¯XWlkVUzUJlbUbVJl@nnm„@VULV`XnWƗbmUUn™JmUknƒJ¯km@ƒyk@kU›xL@VUbmnn¤lX@`™z@JmaULUVl@Xn@xllkXWa—aW@UVmUbƒ@mVXšWxXbWbUŽƒÒnVVnVVUL'],
  32921. 'encodeOffsets': [[
  32922. 120004,
  32923. 33520
  32924. ]]
  32925. }
  32926. },
  32927. {
  32928. 'type': 'Feature',
  32929. 'id': '3418',
  32930. 'properties': {
  32931. 'name': '宣城市',
  32932. 'cp': [
  32933. 118.8062,
  32934. 30.6244
  32935. ],
  32936. 'childNum': 7
  32937. },
  32938. 'geometry': {
  32939. 'type': 'Polygon',
  32940. 'coordinates': ['@@Vb@„XL˜JXxlIXxlVlV@I²¤šnlUnVšU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJ‚UVkUUVWn@@anUVnVJVIV‚@@nUJVbUb‚„@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bš„UlkXW‚ƒxXz@‚„Ila„UlƒnUlJVInVÆJ„U„LVUnV„K°@VnlVnxV@XLlK@wVL@KnUlJXU˜bnKVLX„lUw@VWlLXKm@@a„@VLnmlIVVnKn@škVašVlwk@@a@k@ƒVIUa™@maUa@wna@kmWƒ™UUmVUIVǗ@aƒKm™aƒ™kU™J@InmUUaVa„k‚lX@Vk@m@VU@wnK@alKVUkUkKƒbmUkmƒ@U£WVk@@UÝbbƒaÇx@b@WVUa¯ƒ@wVwUUV@VwnK@KWaŁ@KšIUyUI@WmXó™UbWaKm™@km@IUyƒIUaWKƒx@zUKUL@llVUnkLVVkJWX@VUKUVƒIkVWakb@VWb@n@JkXUlmL@xkL@`VxšLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUw™KVÈ@J@LV±kkJUIƒl'],
  32941. 'encodeOffsets': [[
  32942. 120803,
  32943. 31247
  32944. ]]
  32945. }
  32946. },
  32947. {
  32948. 'type': 'Feature',
  32949. 'id': '3412',
  32950. 'properties': {
  32951. 'name': '阜阳市',
  32952. 'cp': [
  32953. 115.7629,
  32954. 32.9919
  32955. ],
  32956. 'childNum': 6
  32957. },
  32958. 'geometry': {
  32959. 'type': 'Polygon',
  32960. 'coordinates': ['@@V™nƒš@ša„k°aš±@‚¥@UUI@aUmlwUUx›b@¥XU@mmI@a@Kn@@_W@@W„I@mšUVVXUl@XaV@‚K@I@a„LX@aVI°K@KVL„UUw‚yXkšK@kšKÆbXnlK@k@a„JlU@w@U@»@aXKWƒn_‚JXkVKnƒ@°LlKXƒW@¯Uƒ@aUK@kmJUw™VƒIUJ™„kŽmL™K@kka@wUVm@@am@UkUbkK@nmVƒÒ¯VU„WVVmIƒƒULk@ƒƒma@kkKƒƒ@nUbUamU™`UUVUkKVkkƒW@@bkmƒnƒmUXVKXVƒL@VƒbU„m‚™bVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`‚Lkn@`@XVJ@X™Vm„k@UKmV¯LVVn±Wm@Ub@JlLUl„@VLk„@lmVVn@bnV@V°IV™šaVJXI°K°V@XXVlVVU„nšKVlUš„bWXnV@bV`U„„@@m@@‚ƒ@nxmn@bXVlL@¤nb„Ul¦šVVUnJVU„Vl@@bÞL'],
  32961. 'encodeOffsets': [[
  32962. 118418,
  32963. 34392
  32964. ]]
  32965. }
  32966. },
  32967. {
  32968. 'type': 'Feature',
  32969. 'id': '3413',
  32970. 'properties': {
  32971. 'name': '宿州市',
  32972. 'cp': [
  32973. 117.5208,
  32974. 33.6841
  32975. ],
  32976. 'childNum': 5
  32977. },
  32978. 'geometry': {
  32979. 'type': 'Polygon',
  32980. 'coordinates': ['@@@UWU@bkW@aWU@aUIkWV™lLXb„lVIUVV@‚mn@V_n@VaUK@I‚@UašanJVU„@lV„UVnnKVVlaUa„I@wnK‚Lnll@nVlk@wVKXkl@@b„bUJ@V‚U@U„UUyVk@aVUXwlWXX‚WU¹@aU™@WUI@mlUšn„J@Il@šaXbV@VKl@XxVL@W„IšJlb„@„al@„IUUm@@aVK@¥¯—@mUķ¯bWƒk£Vm@akm@VaÅ@UVWaƒ@UJWkƒJ—UƒbWbU@UlƒXk@ƒamV@K¯nk@ƒlU@Uxmz@bU`ÇbUbÅVm£U@Ww™x@akLUK@UlakwUJWVkLmaUal@n_ƒmVUnKVUUmÅXWa™@kJmx@XUJ@bVLXxl@VVUVV„UbkLWbU@@lUVV„VVX„›K@XkJ@nU@@bV@VxUVlb„U@xXLWŽn@UxVbVĊ„V@b@XV`mnkJ@kUKmbƒaU@VbnbÆx@XU@@`k@@bl„™@@bkL@WƒakXWaU@Vmkx@XWW@@wUUUbƒJ™U¯V™@¯ÞU@WxXŽlL@bkb@ŽlVlnb™JW@kkU@mbkaWJ—IVlmz¯`UnU@mb™@@„ƒ`@bkVlœnV@b@šV@„aVxn@Vx‚KXnl@nbVK„bVK@a„_V@Vƒ„w@W„LlwnK@UmIU@VWš@šUÈ@lKnal„wš@@V°@šaUmlUUw@„ƒV@@UXK'],
  32981. 'encodeOffsets': [[
  32982. 119836,
  32983. 35061
  32984. ]]
  32985. }
  32986. },
  32987. {
  32988. 'type': 'Feature',
  32989. 'id': '3410',
  32990. 'properties': {
  32991. 'name': '黄山市',
  32992. 'cp': [
  32993. 118.0481,
  32994. 29.9542
  32995. ],
  32996. 'childNum': 5
  32997. },
  32998. 'geometry': {
  32999. 'type': 'Polygon',
  33000. 'coordinates': ['@@lXnlWX@VUJVnUJVzXJVx„kVJlI²l‚U@K@IUǚLVxnLn@lmUaVU@UVKVknJ@an@@UVIVǙKUw@_lK@wnKVklW@I@mXa@UlaXblU„JVUVL@UXWlIUUlKVmkU@kVKVL@y„wXLVb„JVz@Jlnš@nŽ‚LXbVaôšnW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£ƒkK›ÅV™a™™ƒ_@±ƒakXWW—LƒƒƒnU@@a@¯mK@L™JUWwUV™VmbXX@lWLn`mzUJUb™Lƒ„k@makVWmkX™ambkKknƒaƒ@ƒaƒb@‚U@Unm@—ƒWVƒ@VbUbUJWIk@@lmL@°UVUVm„nš™@@kmWkb@xƒ_m@@aU@b@JlŽUz™lWxXn„@‚b²@l`„IVl„UlL@VšK„nVbUl@VlIn@@b„bVWUk‚@@bX@Valb@bnb°Vn@„xVKlbVnV@V‚x„L@ln@UXVV‚L˜'],
  33001. 'encodeOffsets': [[
  33002. 120747,
  33003. 31095
  33004. ]]
  33005. }
  33006. },
  33007. {
  33008. 'type': 'Feature',
  33009. 'id': '3414',
  33010. 'properties': {
  33011. 'name': '巢湖市',
  33012. 'cp': [
  33013. 117.7734,
  33014. 31.4978
  33015. ],
  33016. 'childNum': 5
  33017. },
  33018. 'geometry': {
  33019. 'type': 'Polygon',
  33020. 'coordinates': ['@@VV@blL@ŽXlWnnšnŽ˜„@VXXl@@WšIX@VJ@LšxŎxlnšŽ@bXJVblX@VVbUVn@VbUVlb@LnJVbVLV‚XLšÒVL„ÒšV„bVIVylUXk°Wšknm°_lJ@aXL@l‚z°@„lnLô¼V‚È„VUUaVKU@WW@@UUa@knmVLlaV@„a@kšak±@UmwkKmk™lj™ÝUUkL@mlIVmnÝWkkUÝ@KƑĉ™a@»ƒmma@mX™¤¯Uƒw@ƒ@UU@bU±±L@akmƒ„™LUKmLUUUJVbbÇwƒ@kUWaUJ@Xkxm@UJUUm@™„k„ƒ‚ƒakXUšVl±ôU@kn'],
  33021. 'encodeOffsets': [[
  33022. 119847,
  33023. 32007
  33024. ]]
  33025. }
  33026. },
  33027. {
  33028. 'type': 'Feature',
  33029. 'id': '3416',
  33030. 'properties': {
  33031. 'name': '亳州市',
  33032. 'cp': [
  33033. 116.1914,
  33034. 33.4698
  33035. ],
  33036. 'childNum': 4
  33037. },
  33038. 'geometry': {
  33039. 'type': 'Polygon',
  33040. 'coordinates': ['@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankW™XK˜@@V²VVIÈU@al@VaÈamK@wU™@klaUƒV@XƒVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯lƒ@kkLWmÅa™L@l™LWlzVxƒVUK@L¯LUJ@bWƒK@b@JLU@Wbk@WVUU™V@nƒJ@XX@@`m@@L@bnJ@nWV@¦œa‚wVVkxVn@bVJ@V¦@Ž™²¯bƒl™b™@m„UšUŽƒŽ@¼ƒ¦Xb‚UV`@nnxUxWLkUkVWKkV@XV@@VVL@VX„@lVV@L@blL@`šL@xXKVL‚@„VnUš@lwnU@ml@XnV@@UVW°LnalƒUI@aUK@a‚a@U„kXW@I@mWL@UXK@UVW@U‚@@k„Wn‚@@V„@XblaVxšL@bVKXb„IlJ'],
  33041. 'encodeOffsets': [[
  33042. 119183,
  33043. 34594
  33044. ]]
  33045. }
  33046. },
  33047. {
  33048. 'type': 'Feature',
  33049. 'id': '3417',
  33050. 'properties': {
  33051. 'name': '池州市',
  33052. 'cp': [
  33053. 117.3889,
  33054. 30.2014
  33055. ],
  33056. 'childNum': 4
  33057. },
  33058. 'geometry': {
  33059. 'type': 'Polygon',
  33060. 'coordinates': [
  33061. '@@„V°°ĊŤ@xƒĖ@xœXƤ„VôIÆmnLllXÔ@lƒÜŽn@@JšbšLÆaĢÞĸ„°VVUUKVanK@UV@VL„VVn„ln@‚xnklxXamk@WV@Xa˜@naVk„Klk™@mkUWwkJWw—IWK@ƒUaUwWIUyVIUmVI@UXWmkkW‚—KUUVWm@@kƒKw@U‚UUmkaULƒwm@¯Uma@akaUbW@@a@VlUXƒa@am@kJ@UVkUaƒm™L@UkKƒVUkƒJk_±@aƒ@WmXwÇkkaVaUa±ƒœwV@VkƒwnyUaW@UU¯amLk@m™@kmmU™™¯K@L@lUX¯ƒWlkXƒŽVb„bƒVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb˜¼@lXbWlkL™K@zUJmIUxUVUVmX',
  33062. '@@llUL@VlxšL@a@UƒwXa¯@'
  33063. ],
  33064. 'encodeOffsets': [
  33065. [
  33066. 119543,
  33067. 30781
  33068. ],
  33069. [
  33070. 120061,
  33071. 31152
  33072. ]
  33073. ]
  33074. }
  33075. },
  33076. {
  33077. 'type': 'Feature',
  33078. 'id': '3401',
  33079. 'properties': {
  33080. 'name': '合肥市',
  33081. 'cp': [
  33082. 117.29,
  33083. 32.0581
  33084. ],
  33085. 'childNum': 4
  33086. },
  33087. 'geometry': {
  33088. 'type': 'Polygon',
  33089. 'coordinates': ['@@„L„xV‚ĊLÞkšVlVVXaWaXwW™nU„@‚anVVUX@˜bXblWkk@wWmk@VUVKnb@Išy@_kWm£nmVa@U‚KœwlVl@„zn@°l„IlmnVšIVmnV˜aXÅWmU_VK@Unƒmmk@UIVakaƒa™UƒÑUK™ÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@a™kmōw™wUL@`mn@KƒV™IUVUUUK›Vk_ƒVkbWƒ@VkUULUJ±I¯aƒlkxU¦@L@V@V@b@b@„WJXbWVXn@LƒKVL@JkLƒŽV@Vbn@VV@XU@UlV@@VV@V@XXV@@VšJ°š°Xnb°@„JUVVXV`@bkXWŽUbU@WŽn@VLXlm„°bV„UbkK@bVJ@bVbkLV¦ƒKķV@x@„XbmVVVk¦'],
  33090. 'encodeOffsets': [[
  33091. 119678,
  33092. 33323
  33093. ]]
  33094. }
  33095. },
  33096. {
  33097. 'type': 'Feature',
  33098. 'id': '3403',
  33099. 'properties': {
  33100. 'name': '蚌埠市',
  33101. 'cp': [
  33102. 117.4109,
  33103. 33.1073
  33104. ],
  33105. 'childNum': 4
  33106. },
  33107. 'geometry': {
  33108. 'type': 'Polygon',
  33109. 'coordinates': ['@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVW„U@V„²wVV@Vl@„VnwlIš@XbÆWVnUVmLUV„nm`k@VbnblKXUVIlxkb@VVLlK@bšwXxV@n¤ÆUVaÈaV_@anyVwV@„kl@°m@LnU„bl@„WVkV@Xa„a˜V„IXl‚IV‚„@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@‚w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXwƒ`m@„zUbÝakbW@m@UUƒéUIm@UbKǼ@™kKWXmWUkaWU—JWU¯L@W™Lƒwk@mm@_™ƒÅl™UVkmWUnV@VWLUb™bƑĬ¯l'],
  33110. 'encodeOffsets': [[
  33111. 119543,
  33112. 33722
  33113. ]]
  33114. }
  33115. },
  33116. {
  33117. 'type': 'Feature',
  33118. 'id': '3402',
  33119. 'properties': {
  33120. 'name': '芜湖市',
  33121. 'cp': [
  33122. 118.3557,
  33123. 31.0858
  33124. ],
  33125. 'childNum': 4
  33126. },
  33127. 'geometry': {
  33128. 'type': 'Polygon',
  33129. 'coordinates': ['@@„bVaV@XllLXU°ŽlL@V@VUnVl¯Ikš›VUVU@@b@lUXUWmb„n@¼šbƒĊ‚LÞ@lVXlmÞUnkJ@nlKVVšÞXklWVaVI@aUKn»lL@Kn@‚XXwlm@mn°@„V@Wy„wXlWVk™ƒ@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UƒVaUaVI@m‚@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@U™VmUkV™m±£@JkU@nlšk‚ƒLUlmb—@WbU@@XnlWb'],
  33130. 'encodeOffsets': [[
  33131. 120814,
  33132. 31585
  33133. ]]
  33134. }
  33135. },
  33136. {
  33137. 'type': 'Feature',
  33138. 'id': '3406',
  33139. 'properties': {
  33140. 'name': '淮北市',
  33141. 'cp': [
  33142. 116.6968,
  33143. 33.6896
  33144. ],
  33145. 'childNum': 3
  33146. },
  33147. 'geometry': {
  33148. 'type': 'MultiPolygon',
  33149. 'coordinates': [
  33150. ['@@lnnK@¦n@@V‚V„@@VV@nIV„V@VW²a@b@bVnUVVV@V™z@lš@°UšV„IVaVV@x@ŽXX@WlwUnV@XblW„b@XlK@aš@kƒ@al@@_V@@WÅwmaUaV@„bnaVL@llInmU_@W@aƒUUĉUaVwm@XWK@wƒVkaVUUwU@@aV@@mlI@WœLWƒUUUƒVU@kV@XalKVaUƒVUUUk@WwUK@aVI@WƒUk@@UUU±xkb@lVš@xnLÇbUbk@@bÇVUJ±U@U—@WLXšml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV'],
  33151. ['@@VVVkV@¥@UV@U@VUUJƒkWakKUšlXVJ@bXV@blX@aXV@V']
  33152. ],
  33153. 'encodeOffsets': [
  33154. [[
  33155. 119183,
  33156. 34594
  33157. ]],
  33158. [[
  33159. 119836,
  33160. 35061
  33161. ]]
  33162. ]
  33163. }
  33164. },
  33165. {
  33166. 'type': 'Feature',
  33167. 'id': '3404',
  33168. 'properties': {
  33169. 'name': '淮南市',
  33170. 'cp': [
  33171. 116.7847,
  33172. 32.7722
  33173. ],
  33174. 'childNum': 2
  33175. },
  33176. 'geometry': {
  33177. 'type': 'Polygon',
  33178. 'coordinates': ['@@°kƒīšaVaXK@U‚UVmnXUlšVÆkVKUUUmmU„ÑkU™UÝlĉKUƒwƒKƒbU@UxW@@lœmVUUVmUUƒmƒw—aW„kL¯K@Žm„ULWlIm`X„WL@b@¼@V@xkVƒI@b@l@lk„V°Ȯ¹ĸW'],
  33179. 'encodeOffsets': [[
  33180. 119543,
  33181. 33722
  33182. ]]
  33183. }
  33184. },
  33185. {
  33186. 'type': 'Feature',
  33187. 'id': '3405',
  33188. 'properties': {
  33189. 'name': '马鞍山市',
  33190. 'cp': [
  33191. 118.6304,
  33192. 31.5363
  33193. ],
  33194. 'childNum': 2
  33195. },
  33196. 'geometry': {
  33197. 'type': 'Polygon',
  33198. 'coordinates': ['@@šNJnllLnxV@laXLVKma„aXbVI„bVKVVVIVyn@n_ƒƒW@@ƒ„UnJlUVVXlLnaUWlV@VV„IXW@_W@XK@K@UVUUwVamÑXmmwƒw™KUnUK™çU@ƒJƒU¯@mŽ@nknWxWm@@LkKm¼VL@bUJUbkXWl'],
  33199. 'encodeOffsets': [[
  33200. 121219,
  33201. 32288
  33202. ]]
  33203. }
  33204. },
  33205. {
  33206. 'type': 'Feature',
  33207. 'id': '3407',
  33208. 'properties': {
  33209. 'name': '铜陵市',
  33210. 'cp': [
  33211. 117.9382,
  33212. 30.9375
  33213. ],
  33214. 'childNum': 3
  33215. },
  33216. 'geometry': {
  33217. 'type': 'MultiPolygon',
  33218. 'coordinates': [
  33219. ['@@„ÒV¤@¼V²@aVV@Ž@„„x°Vš£nW‚@nbnaVXVW@k@aV@VUœUl™°JUkVm@U@UkK¯WVkKWkU@Ubƒakwmlwm@ƒkUmƒUUKU@@VmLUbVLUV¯U'],
  33220. ['@@LllUL@VlxšL@a@UƒwXamK']
  33221. ],
  33222. 'encodeOffsets': [
  33223. [[
  33224. 120522,
  33225. 31529
  33226. ]],
  33227. [[
  33228. 120094,
  33229. 31146
  33230. ]]
  33231. ]
  33232. }
  33233. }
  33234. ],
  33235. 'UTF8Encoding': true
  33236. };
  33237. });define('echarts/util/mapData/geoJson/ao_men_geo', [], function () {
  33238. return {
  33239. 'type': 'FeatureCollection',
  33240. 'features': [{
  33241. 'type': 'Feature',
  33242. 'id': '8200',
  33243. 'properties': {
  33244. 'name': '澳门',
  33245. 'cp': [
  33246. 113.5715,
  33247. 22.1583
  33248. ],
  33249. 'childNum': 1
  33250. },
  33251. 'geometry': {
  33252. 'type': 'Polygon',
  33253. 'coordinates': ['@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW'],
  33254. 'encodeOffsets': [[
  33255. 116325,
  33256. 22699
  33257. ]]
  33258. }
  33259. }],
  33260. 'UTF8Encoding': true
  33261. };
  33262. });define('echarts/util/mapData/geoJson/bei_jing_geo', [], function () {
  33263. return {
  33264. 'type': 'FeatureCollection',
  33265. 'features': [
  33266. {
  33267. 'type': 'Feature',
  33268. 'id': '110228',
  33269. 'properties': {
  33270. 'name': '密云县',
  33271. 'cp': [
  33272. 117.0923,
  33273. 40.5121
  33274. ],
  33275. 'childNum': 1
  33276. },
  33277. 'geometry': {
  33278. 'type': 'Polygon',
  33279. 'coordinates': ['@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCI’Y^AXGfRˆDXF`DJOLB~G\\DZIHHpErUVMhHb]\\M†BVF@FTP`@zTbD\\@~M\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYL“mI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\VTDJHDON@XRND\\XRCPVETCLBVKDFJINHRGPRV@\\CLJN@VbXbLVT'],
  33280. 'encodeOffsets': [[
  33281. 119561,
  33282. 41684
  33283. ]]
  33284. }
  33285. },
  33286. {
  33287. 'type': 'Feature',
  33288. 'id': '110116',
  33289. 'properties': {
  33290. 'name': '怀柔区',
  33291. 'cp': [
  33292. 116.6377,
  33293. 40.6219
  33294. ],
  33295. 'childNum': 1
  33296. },
  33297. 'geometry': {
  33298. 'type': 'Polygon',
  33299. 'coordinates': ['@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡–@^NV\\JH@NNL@NM\\kTQ\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\ChMHIDG\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMC‚Q@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZˆB\\ICIHK@KŽHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn'],
  33300. 'encodeOffsets': [[
  33301. 119314,
  33302. 41552
  33303. ]]
  33304. }
  33305. },
  33306. {
  33307. 'type': 'Feature',
  33308. 'id': '110111',
  33309. 'properties': {
  33310. 'name': '房山区',
  33311. 'cp': [
  33312. 115.8453,
  33313. 39.7163
  33314. ],
  33315. 'childNum': 1
  33316. },
  33317. 'geometry': {
  33318. 'type': 'Polygon',
  33319. 'coordinates': ['@@h@bl@HRJDZ``TA\\VVD^H`\\pF\\JŒ`JGv@ZO\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbV˜IXGDIN@dMB[IIBcN]ZHNLP@XOWCFWŠCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMW—FCF‹E{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\PTNRC\\YNJ€PRARPJDDR'],
  33320. 'encodeOffsets': [[
  33321. 118343,
  33322. 40770
  33323. ]]
  33324. }
  33325. },
  33326. {
  33327. 'type': 'Feature',
  33328. 'id': '110229',
  33329. 'properties': {
  33330. 'name': '延庆县',
  33331. 'cp': [
  33332. 116.1543,
  33333. 40.5286
  33334. ],
  33335. 'childNum': 1
  33336. },
  33337. 'geometry': {
  33338. 'type': 'Polygon',
  33339. 'coordinates': ['@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[J‡AwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\SjOT_RQVEZPpƒNQXfŠNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\ORQHW\\BjWFDERLPPBbB\\E`B\\D\\L`@F]FCnJ^AZL'],
  33340. 'encodeOffsets': [[
  33341. 119262,
  33342. 41751
  33343. ]]
  33344. }
  33345. },
  33346. {
  33347. 'type': 'Feature',
  33348. 'id': '110109',
  33349. 'properties': {
  33350. 'name': '门头沟区',
  33351. 'cp': [
  33352. 115.8,
  33353. 39.9957
  33354. ],
  33355. 'childNum': 1
  33356. },
  33357. 'geometry': {
  33358. 'type': 'Polygon',
  33359. 'coordinates': ['@@V@XMnGPY²‰JQNEhH\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGƒCH]A[M@CJWH—JaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH‹_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLFŽ@JT‚VnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA'],
  33360. 'encodeOffsets': [[
  33361. 118635,
  33362. 41113
  33363. ]]
  33364. }
  33365. },
  33366. {
  33367. 'type': 'Feature',
  33368. 'id': '110114',
  33369. 'properties': {
  33370. 'name': '昌平区',
  33371. 'cp': [
  33372. 116.1777,
  33373. 40.2134
  33374. ],
  33375. 'childNum': 1
  33376. },
  33377. 'geometry': {
  33378. 'type': 'Polygon',
  33379. 'coordinates': ['@@VNLJI\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\Mh@XcVARJE`RTCNFV€XRCjPPLNA@GZKbJJHXB\\MNPjLdGbWnK\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOA‹HUKCIokSCUSOCYN[BgGMFIR±ŠOZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\Nb@\\FHJAD'],
  33380. 'encodeOffsets': [[
  33381. 118750,
  33382. 41232
  33383. ]]
  33384. }
  33385. },
  33386. {
  33387. 'type': 'Feature',
  33388. 'id': '110115',
  33389. 'properties': {
  33390. 'name': '大兴区',
  33391. 'cp': [
  33392. 116.4716,
  33393. 39.6352
  33394. ],
  33395. 'childNum': 1
  33396. },
  33397. 'geometry': {
  33398. 'type': 'Polygon',
  33399. 'coordinates': ['@@F\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\J@BJVAFJ\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFE„G@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP'],
  33400. 'encodeOffsets': [[
  33401. 119042,
  33402. 40704
  33403. ]]
  33404. }
  33405. },
  33406. {
  33407. 'type': 'Feature',
  33408. 'id': '110113',
  33409. 'properties': {
  33410. 'name': '顺义区',
  33411. 'cp': [
  33412. 116.7242,
  33413. 40.1619
  33414. ],
  33415. 'childNum': 1
  33416. },
  33417. 'geometry': {
  33418. 'type': 'Polygon',
  33419. 'coordinates': [
  33420. '@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF',
  33421. '@@KrJEH[\\B@FF@CHFBHUN‹AJKADGECBCMAG^E@EbI@BEGP'
  33422. ],
  33423. 'encodeOffsets': [
  33424. [
  33425. 119283,
  33426. 41084
  33427. ],
  33428. [
  33429. 119377,
  33430. 41046
  33431. ]
  33432. ]
  33433. }
  33434. },
  33435. {
  33436. 'type': 'Feature',
  33437. 'id': '110117',
  33438. 'properties': {
  33439. 'name': '平谷区',
  33440. 'cp': [
  33441. 117.1706,
  33442. 40.2052
  33443. ],
  33444. 'childNum': 1
  33445. },
  33446. 'geometry': {
  33447. 'type': 'Polygon',
  33448. 'coordinates': ['@@ZJZRafFLjn€VGNJ@LLBdXX\\T^EDMJ@”nZKLBjPPJ@HbA\\H`DbERHLCFK^BZaFWXQLAGMHa\\OLO@SBIpBdCLƒVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\EJHV@Xk^IhMFMNAXPX'],
  33449. 'encodeOffsets': [[
  33450. 119748,
  33451. 41190
  33452. ]]
  33453. }
  33454. },
  33455. {
  33456. 'type': 'Feature',
  33457. 'id': '110112',
  33458. 'properties': {
  33459. 'name': '通州区',
  33460. 'cp': [
  33461. 116.7297,
  33462. 39.8131
  33463. ],
  33464. 'childNum': 1
  33465. },
  33466. 'geometry': {
  33467. 'type': 'Polygon',
  33468. 'coordinates': ['@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\C@DBCHLAEPF@@DH@APHAERDF\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\NNBNA„kNU|]HMTMN@MZBLFFF@RIRUT‘BMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hƒHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L'],
  33469. 'encodeOffsets': [[
  33470. 119329,
  33471. 40782
  33472. ]]
  33473. }
  33474. },
  33475. {
  33476. 'type': 'Feature',
  33477. 'id': '110105',
  33478. 'properties': {
  33479. 'name': '朝阳区',
  33480. 'cp': [
  33481. 116.4977,
  33482. 39.949
  33483. ],
  33484. 'childNum': 2
  33485. },
  33486. 'geometry': {
  33487. 'type': 'MultiPolygon',
  33488. 'coordinates': [
  33489. ['@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH'],
  33490. ['@@HUN‹AJKADGECBCMAG^E@EbI@BEGPKrJEH[\\B@FF@CHFB']
  33491. ],
  33492. 'encodeOffsets': [
  33493. [[
  33494. 119169,
  33495. 40992
  33496. ]],
  33497. [[
  33498. 119398,
  33499. 41063
  33500. ]]
  33501. ]
  33502. }
  33503. },
  33504. {
  33505. 'type': 'Feature',
  33506. 'id': '110108',
  33507. 'properties': {
  33508. 'name': '海淀区',
  33509. 'cp': [
  33510. 116.2202,
  33511. 40.0239
  33512. ],
  33513. 'childNum': 1
  33514. },
  33515. 'geometry': {
  33516. 'type': 'Polygon',
  33517. 'coordinates': ['@@plDJVLŒGPBFHjDbHGL@X\\DBNHJREBLRBHaFGŽMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFƒAKQAW@WIMK@V‹@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD'],
  33518. 'encodeOffsets': [[
  33519. 118834,
  33520. 41050
  33521. ]]
  33522. }
  33523. },
  33524. {
  33525. 'type': 'Feature',
  33526. 'id': '110106',
  33527. 'properties': {
  33528. 'name': '丰台区',
  33529. 'cp': [
  33530. 116.2683,
  33531. 39.8309
  33532. ],
  33533. 'childNum': 1
  33534. },
  33535. 'geometry': {
  33536. 'type': 'Polygon',
  33537. 'coordinates': ['@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\FTACDŒ@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@i€g@@QFCMKMU@]SCoBGSMQ‰DEXXDWPO@MKYGM^AdJJA\\cNB\\G^„DNHFCBFABDBJ@PL^D@DF@T@FDAF^A'],
  33538. 'encodeOffsets': [[
  33539. 118958,
  33540. 40846
  33541. ]]
  33542. }
  33543. },
  33544. {
  33545. 'type': 'Feature',
  33546. 'id': '110107',
  33547. 'properties': {
  33548. 'name': '石景山区',
  33549. 'cp': [
  33550. 116.1887,
  33551. 39.9346
  33552. ],
  33553. 'childNum': 1
  33554. },
  33555. 'geometry': {
  33556. 'type': 'Polygon',
  33557. 'coordinates': ['@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD'],
  33558. 'encodeOffsets': [[
  33559. 118940,
  33560. 40953
  33561. ]]
  33562. }
  33563. },
  33564. {
  33565. 'type': 'Feature',
  33566. 'id': '110102',
  33567. 'properties': {
  33568. 'name': '西城区',
  33569. 'cp': [
  33570. 116.3631,
  33571. 39.9353
  33572. ],
  33573. 'childNum': 1
  33574. },
  33575. 'geometry': {
  33576. 'type': 'Polygon',
  33577. 'coordinates': ['@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLE„MD@FLDh@@LDBF@@M`J@fTB@H'],
  33578. 'encodeOffsets': [[
  33579. 119175,
  33580. 40932
  33581. ]]
  33582. }
  33583. },
  33584. {
  33585. 'type': 'Feature',
  33586. 'id': '110101',
  33587. 'properties': {
  33588. 'name': '东城区',
  33589. 'cp': [
  33590. 116.418,
  33591. 39.9367
  33592. ],
  33593. 'childNum': 1
  33594. },
  33595. 'geometry': {
  33596. 'type': 'Polygon',
  33597. 'coordinates': ['@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@A‘C@PG@C^TBAJEB@TADC^IB@J'],
  33598. 'encodeOffsets': [[
  33599. 119182,
  33600. 40921
  33601. ]]
  33602. }
  33603. },
  33604. {
  33605. 'type': 'Feature',
  33606. 'id': '110104',
  33607. 'properties': {
  33608. 'name': '宣武区',
  33609. 'cp': [
  33610. 116.3603,
  33611. 39.8852
  33612. ],
  33613. 'childNum': 1
  33614. },
  33615. 'geometry': {
  33616. 'type': 'Polygon',
  33617. 'coordinates': ['@@RBX@RFFCŽBFU@aK@WA}CCJGAEFkCBRFD@JB@@N'],
  33618. 'encodeOffsets': [[
  33619. 119118,
  33620. 40855
  33621. ]]
  33622. }
  33623. },
  33624. {
  33625. 'type': 'Feature',
  33626. 'id': '110103',
  33627. 'properties': {
  33628. 'name': '崇文区',
  33629. 'cp': [
  33630. 116.4166,
  33631. 39.8811
  33632. ],
  33633. 'childNum': 1
  33634. },
  33635. 'geometry': {
  33636. 'type': 'Polygon',
  33637. 'coordinates': ['@@XBL@@bEV’D@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H'],
  33638. 'encodeOffsets': [[
  33639. 119175,
  33640. 40829
  33641. ]]
  33642. }
  33643. }
  33644. ],
  33645. 'UTF8Encoding': true
  33646. };
  33647. });define('echarts/util/mapData/geoJson/china_geo', [], function () {
  33648. return {
  33649. 'type': 'FeatureCollection',
  33650. 'features': [
  33651. {
  33652. 'type': 'Feature',
  33653. 'id': 'xin_jiang',
  33654. 'properties': {
  33655. 'name': '新疆',
  33656. 'cp': [
  33657. 84.9023,
  33658. 41.748
  33659. ],
  33660. 'childNum': 18
  33661. },
  33662. 'geometry': {
  33663. 'type': 'Polygon',
  33664. 'coordinates': ['@@@›ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړ›υࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ—݇ȂóƩƧ@ѵȂυœƥŌਗ—॥ɛóʵѵƧѹ˜݇̍ࢯ˜əɞυ˜ρͩ̏óਙƨƧŋôōóš̍ͩóʵן›óŋړͪƧѶ@ɜԭ—ԫƦɛȄ̍›ɝȄöςƩȂ̏œñȀ̏œƩóóŎə˜@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝœóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜ˜óƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼˜ôƧƧó̐ƥóŏѺǿƦȁφƧς˜ƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ—@ɝƨŋ̒օςʵôƧ'],
  33665. 'encodeOffsets': [[
  33666. 98730,
  33667. 43786
  33668. ]]
  33669. }
  33670. },
  33671. {
  33672. 'type': 'Feature',
  33673. 'id': 'xi_zang',
  33674. 'properties': {
  33675. 'name': '西藏',
  33676. 'cp': [
  33677. 88.7695,
  33678. 31.6846
  33679. ],
  33680. 'childNum': 7
  33681. },
  33682. 'geometry': {
  33683. 'type': 'Polygon',
  33684. 'coordinates': ['@@ôŌנœôʶ̎ͪô™óŎƨŌਚƧ̐ôςͪφ—ɚɝࢰ—݈̎Ѻ—Ѷƨôʶ०ɜਘ˜Ʀŋφ›Ѷȁ̍—ôŏɚŋ@̑ə—@ŏò̍ɜ›óƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦœôŏô—@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒—óʶѶôôО̒›ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥœ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧ›ѵӏ@ɛõŏɛȄôӒƧŌѵǿɝ˜Ƨŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óœѵó̑ͪࢯОóɜן˜Ƨ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞ˜ôƪ'],
  33685. 'encodeOffsets': [[
  33686. 80911,
  33687. 35146
  33688. ]]
  33689. }
  33690. },
  33691. {
  33692. 'type': 'Feature',
  33693. 'id': 'nei_meng_gu',
  33694. 'properties': {
  33695. 'name': '内蒙古',
  33696. 'cp': [
  33697. 117.5977,
  33698. 44.3408
  33699. ],
  33700. 'childNum': 12
  33701. },
  33702. 'geometry': {
  33703. 'type': 'Polygon',
  33704. 'coordinates': ['@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।œѶɚöɞɜʴڔôôȂ̎—ѺȀς—ƨ˜ƪóԪ—ɜôɛОਕڔԭ˜ѵ̍ѹȂԫ›ɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ˜̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏›@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ—̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@š@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ›̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛ›ƥƧ̑óρŐ@Ƨ̏˜ɝəɛ˜߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪœ@ʴƩ—ƧƦôƨɛȄə›Ƨŋυ›óͩѵ@ɝǿóŌן̍ɛ˜óО̍œ̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑˜ρȁυô̍օѹœóȃə™@ȂσʵѷƪòƩ̍—ôó߻ۯôʳƧ™óšõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ'],
  33705. 'encodeOffsets': [[
  33706. 99540,
  33707. 43830
  33708. ]]
  33709. }
  33710. },
  33711. {
  33712. 'type': 'Feature',
  33713. 'id': 'qing_hai',
  33714. 'properties': {
  33715. 'name': '青海',
  33716. 'cp': [
  33717. 96.2402,
  33718. 35.4199
  33719. ],
  33720. 'childNum': 8
  33721. },
  33722. 'geometry': {
  33723. 'type': 'Polygon',
  33724. 'coordinates': ['@@ƨ@ôƪ݈ȁƪ˜@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶ›ƪȁςœɜͩφ˜ςŋɞôѶɛƨŌɞ—@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦôœ̒ȁɜ›ςͩ̒œɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞœôƧƦ@ñȃòñƥóυôôѹѵ—@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑›ôʵɞƧ̑ѵôƩɞƧ̑œóНѵóôʵ̑˜ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨó˜óŐƥ›ƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛœñ̎@Őɚ˜@̒əŌóŐ̎˜'],
  33725. 'encodeOffsets': [[
  33726. 91890,
  33727. 36945
  33728. ]]
  33729. }
  33730. },
  33731. {
  33732. 'type': 'Feature',
  33733. 'id': 'si_chuan',
  33734. 'properties': {
  33735. 'name': '四川',
  33736. 'cp': [
  33737. 102.9199,
  33738. 30.1904
  33739. ],
  33740. 'childNum': 21
  33741. },
  33742. 'geometry': {
  33743. 'type': 'Polygon',
  33744. 'coordinates': ['@@ô˜ôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@Ŏô˜òƥѺŎ@ōɜóנ˜ôǿô›ƦôԮ̍ɜôɚ›Ƨ—ñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚ—ôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎə—óɜƧôƩƧρ˜óôôô@ŎƧƨƨƪѹ˜ó̍̍Ʃ@̏ѹНôޟ̍Ʃóƪυɝɛ—əƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏—õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒œóƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶ˜óѺφóƦôñòòȄ'],
  33745. 'encodeOffsets': [[
  33746. 104220,
  33747. 34336
  33748. ]]
  33749. }
  33750. },
  33751. {
  33752. 'type': 'Feature',
  33753. 'id': 'hei_long_jiang',
  33754. 'properties': {
  33755. 'name': '黑龙江',
  33756. 'cp': [
  33757. 128.1445,
  33758. 48.5156
  33759. ],
  33760. 'childNum': 13
  33761. },
  33762. 'geometry': {
  33763. 'type': 'Polygon',
  33764. 'coordinates': ['@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨ—óȁφӑóóƨ˜óǿ̎̑ôНɞ—ó̑ɜə߼›̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశ˜ôȂςƨφ@נɞ݈˜̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧ›ƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ—̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍›̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@™óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘς˜ñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ'],
  33765. 'encodeOffsets': [[
  33766. 124380,
  33767. 54630
  33768. ]]
  33769. }
  33770. },
  33771. {
  33772. 'type': 'Feature',
  33773. 'id': 'gan_su',
  33774. 'properties': {
  33775. 'name': '甘肃',
  33776. 'cp': [
  33777. 95.7129,
  33778. 40.166
  33779. ],
  33780. 'childNum': 14
  33781. },
  33782. 'geometry': {
  33783. 'type': 'Polygon',
  33784. 'coordinates': ['@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎›ôƥƪóõ›ö@ô—ƨ˜ôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρ—ɛƨ̑@óʷƥƥ̎ɛƧ›ôōƧǿôͩѵôɝȃɞȁõƧρóó—@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌó—ƥ@óƨɝ›σԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑›ρͪɛœ̑Ȃó›ƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝ˜ƧŋѵɜɝóρŌυ—ɛͪρ›ƩȂѵœ@Ȁڕó@ȄɜʶφࡔڔœƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ'],
  33785. 'encodeOffsets': [[
  33786. 98730,
  33787. 43740
  33788. ]]
  33789. }
  33790. },
  33791. {
  33792. 'type': 'Feature',
  33793. 'id': 'yun_nan',
  33794. 'properties': {
  33795. 'name': '云南',
  33796. 'cp': [
  33797. 101.8652,
  33798. 25.1807
  33799. ],
  33800. 'childNum': 16
  33801. },
  33802. 'geometry': {
  33803. 'type': 'Polygon',
  33804. 'coordinates': ['@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ›@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐˜ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜ˜φɞôƩ̎ƪóޠѺО@̐̎ƪô̎Ѻ—ƧƩƨƧ@ōóóôóς—ƪƨƨóôɛó̑ԭ—ƥŌɛǿɝƨɛͩô›@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞ—ƨ̑ɜ—òôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υ—óŌƥʳɚӑóНƥô̑›óӒѵʵѹœƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨס›ρȁƧœƨȂóʶó@@ʴƨôôφ̎Ŏ@Ȁƨ—ƪɚƨœóƨôôôςóޤƧŌƩŋƧԪ'],
  33805. 'encodeOffsets': [[
  33806. 100530,
  33807. 28800
  33808. ]]
  33809. }
  33810. },
  33811. {
  33812. 'type': 'Feature',
  33813. 'id': 'guang_xi',
  33814. 'properties': {
  33815. 'name': '广西',
  33816. 'cp': [
  33817. 108.2813,
  33818. 23.6426
  33819. ],
  33820. 'childNum': 14
  33821. },
  33822. 'geometry': {
  33823. 'type': 'Polygon',
  33824. 'coordinates': ['@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφ›óȄ̎›ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨ›ρ۫ô›ɚƨƨНƪŐ̎›ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍›óƧó—@ȁƩ˜ρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړœ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛ˜Ƨ̒ɝ˜óōƥͪ'],
  33825. 'encodeOffsets': [[
  33826. 107011,
  33827. 25335
  33828. ]]
  33829. }
  33830. },
  33831. {
  33832. 'type': 'Feature',
  33833. 'id': 'hu_nan',
  33834. 'properties': {
  33835. 'name': '湖南',
  33836. 'cp': [
  33837. 111.5332,
  33838. 27.3779
  33839. ],
  33840. 'childNum': 14
  33841. },
  33842. 'geometry': {
  33843. 'type': 'Polygon',
  33844. 'coordinates': ['@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪ—ɜȀò—ñɝò—Ѻͪ@ŏƨŋóɝôǿƨ™ɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦ›óͩɜ—ɛóñԭɛōυȂ̍ƧƦō@ɛƥ—ɛȀ̑œóʷóō̍œƩŏƧОəƧóœς۬Ƨœ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧ˜ƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ'],
  33845. 'encodeOffsets': [[
  33846. 111870,
  33847. 29161
  33848. ]]
  33849. }
  33850. },
  33851. {
  33852. 'type': 'Feature',
  33853. 'id': 'shan_xi_1',
  33854. 'properties': {
  33855. 'name': '陕西',
  33856. 'cp': [
  33857. 109.5996,
  33858. 35.6396
  33859. ],
  33860. 'childNum': 10
  33861. },
  33862. 'geometry': {
  33863. 'type': 'Polygon',
  33864. 'coordinates': ['@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨœ̍ɜƦƦôʸ̒@ɜƧς˜ƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶô™ƨšóʴ߼۰óô̎˜ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəœɛóԭ̎ƥóóœóȀן—ɛô@ŎѹōñƦ'],
  33865. 'encodeOffsets': [[
  33866. 108001,
  33867. 33705
  33868. ]]
  33869. }
  33870. },
  33871. {
  33872. 'type': 'Feature',
  33873. 'id': 'guang_dong',
  33874. 'properties': {
  33875. 'name': '广东',
  33876. 'cp': [
  33877. 113.4668,
  33878. 22.8076
  33879. ],
  33880. 'childNum': 21
  33881. },
  33882. 'geometry': {
  33883. 'type': 'Polygon',
  33884. 'coordinates': [
  33885. '@@@Ȃô˜ôƨ̎œ@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒›ɜǿƦ˜@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨ˜ɚН@əƨ̏ƪʵυŌəɛóəԭŏəœóŏѹœρʵɝƦ̏™ƥʳѶ›öō̑óóŋρȀυƧƥɛѹōƧôן—ɛŏѵ@óŋôʵɝ›ƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@',
  33886. '@@X¯aWĀ„@l'
  33887. ],
  33888. 'encodeOffsets': [
  33889. [
  33890. 112411,
  33891. 21916
  33892. ],
  33893. [
  33894. 116325,
  33895. 22697
  33896. ]
  33897. ]
  33898. }
  33899. },
  33900. {
  33901. 'type': 'Feature',
  33902. 'id': 'ji_lin',
  33903. 'properties': {
  33904. 'name': '吉林',
  33905. 'cp': [
  33906. 126.4746,
  33907. 43.5938
  33908. ],
  33909. 'childNum': 9
  33910. },
  33911. 'geometry': {
  33912. 'type': 'Polygon',
  33913. 'coordinates': ['@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎œôȂѺôòŌôƧ̒Őƨ̏̎ȁφ˜@ŋƩͩםȃƨ—@ȁ̑ʶ@Ōóôɛœƥѹ̑—συ݇@ɜρƧȃࢯƨôœəȂɛōƩɛ̏υρóõœƪʴυφ@ʶôŌóœρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩœôɚφȁƦôɜƧôʶφȄ'],
  33914. 'encodeOffsets': [[
  33915. 126181,
  33916. 47341
  33917. ]]
  33918. }
  33919. },
  33920. {
  33921. 'type': 'Feature',
  33922. 'id': 'he_bei',
  33923. 'properties': {
  33924. 'name': '河北',
  33925. 'cp': [
  33926. 115.4004,
  33927. 37.9688
  33928. ],
  33929. 'childNum': 11
  33930. },
  33931. 'geometry': {
  33932. 'type': 'MultiPolygon',
  33933. 'coordinates': [
  33934. ['@@Ʃ̒̏ŌѺ̒Ʃ˜óȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎›ôНɜ—נ̎ôŋɞȀѶ@ôͪφœƨŌɚœɜȃóƧƨƥƪ˜@ʳƩ›ɞρ݈@υНφʵɜ˜ƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@œƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυœ̍̎ɛŋôōɝ@óƧ̍›ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóšॡȄɛʶɜȀ@ɞςѶƧœƥςɛŐ@ɚɜɜ@Ŏôôςœƪς'],
  33935. ['@@õə@Ƨɛ˜@ŐóƦφô']
  33936. ],
  33937. 'encodeOffsets': [
  33938. [[
  33939. 117271,
  33940. 40455
  33941. ]],
  33942. [[
  33943. 120061,
  33944. 41040
  33945. ]]
  33946. ]
  33947. }
  33948. },
  33949. {
  33950. 'type': 'Feature',
  33951. 'id': 'hu_bei',
  33952. 'properties': {
  33953. 'name': '湖北',
  33954. 'cp': [
  33955. 112.2363,
  33956. 31.1572
  33957. ],
  33958. 'childNum': 17
  33959. },
  33960. 'geometry': {
  33961. 'type': 'Polygon',
  33962. 'coordinates': ['@@ñȄυƦöŐƩ˜óנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ—̍ʵƧšóȀôɞƧŌ@Őѹͩñ˜òɞñ˜ɛǿƩ˜ɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó›̑ѺƧ›ôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎'],
  33963. 'encodeOffsets': [[
  33964. 112860,
  33965. 31905
  33966. ]]
  33967. }
  33968. },
  33969. {
  33970. 'type': 'Feature',
  33971. 'id': 'gui_zhou',
  33972. 'properties': {
  33973. 'name': '贵州',
  33974. 'cp': [
  33975. 106.6113,
  33976. 26.9385
  33977. ],
  33978. 'childNum': 9
  33979. },
  33980. 'geometry': {
  33981. 'type': 'Polygon',
  33982. 'coordinates': ['@@ɜȀƦŋԮ˜ô̒ɚ˜ôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦœóȂô@ôŏ@ōô—ƨʶѸô@ʶƨ˜ɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨ—ôɝƧʵ̍œôȃυœ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóœɜͪɞƧ'],
  33983. 'encodeOffsets': [[
  33984. 106651,
  33985. 27901
  33986. ]]
  33987. }
  33988. },
  33989. {
  33990. 'type': 'Feature',
  33991. 'id': 'shan_dong',
  33992. 'properties': {
  33993. 'name': '山东',
  33994. 'cp': [
  33995. 118.7402,
  33996. 36.4307
  33997. ],
  33998. 'childNum': 17
  33999. },
  34000. 'geometry': {
  34001. 'type': 'Polygon',
  34002. 'coordinates': ['@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩ˜óô̑óƧʳə™óɛƧ@õȀƧœ̍ȃɛŐóŏυО̍—óɝƩ—ԩ@ƧɚԫȄɚʶƨ˜ɞʶԪ̐ړɛƪ̒'],
  34003. 'encodeOffsets': [[
  34004. 118261,
  34005. 37036
  34006. ]]
  34007. }
  34008. },
  34009. {
  34010. 'type': 'Feature',
  34011. 'id': 'jiang_xi',
  34012. 'properties': {
  34013. 'name': '江西',
  34014. 'cp': [
  34015. 116.0156,
  34016. 27.29
  34017. ],
  34018. 'childNum': 11
  34019. },
  34020. 'geometry': {
  34021. 'type': 'Polygon',
  34022. 'coordinates': ['@@ƧȄôɚəȄ̎ʶԬ˜ԮͪςóƨŐƪ›τɞƦōƥƧ@ŏςôóŐôô̒ʷѶ—ƪƩƩǿ@ō̒ɛôυ@—Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧ›ôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛ˜ôͪƥœ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ'],
  34023. 'encodeOffsets': [[
  34024. 117000,
  34025. 29025
  34026. ]]
  34027. }
  34028. },
  34029. {
  34030. 'type': 'Feature',
  34031. 'id': 'he_nan',
  34032. 'properties': {
  34033. 'name': '河南',
  34034. 'cp': [
  34035. 113.4668,
  34036. 33.8818
  34037. ],
  34038. 'childNum': 17
  34039. },
  34040. 'geometry': {
  34041. 'type': 'Polygon',
  34042. 'coordinates': ['@@φ˜̎ƪ̐˜ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃô™ƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧ—əʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ—@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐'],
  34043. 'encodeOffsets': [[
  34044. 113040,
  34045. 35416
  34046. ]]
  34047. }
  34048. },
  34049. {
  34050. 'type': 'Feature',
  34051. 'id': 'liao_ning',
  34052. 'properties': {
  34053. 'name': '辽宁',
  34054. 'cp': [
  34055. 122.3438,
  34056. 41.0889
  34057. ],
  34058. 'childNum': 14
  34059. },
  34060. 'geometry': {
  34061. 'type': 'Polygon',
  34062. 'coordinates': ['@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜ—ɞɚ̐—@ƨςŏ̒ôƦƨɜœô̎ƪôςǿƨͩɞȀƨ@@ɛςփô›óŋ@ʵφυƩʳö›॥փρѹס@əɛ@ͩࢯ@ѹʵρ—ƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛ—υʶφО'],
  34063. 'encodeOffsets': [[
  34064. 122131,
  34065. 42301
  34066. ]]
  34067. }
  34068. },
  34069. {
  34070. 'type': 'Feature',
  34071. 'id': 'shan_xi_2',
  34072. 'properties': {
  34073. 'name': '山西',
  34074. 'cp': [
  34075. 112.4121,
  34076. 37.6611
  34077. ],
  34078. 'childNum': 11
  34079. },
  34080. 'geometry': {
  34081. 'type': 'Polygon',
  34082. 'coordinates': ['@@ɚѺñŌɚšôȄѺ›̎ֆφóςȂ̒—ɜƨɚ@@Ȁƨŋôȃƪ—ѹ̑̐ŋƪ̑Ʃρρ›óó@ōɛɛ@əɜŏƦρƨ›ρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏—̍Ʃυ—Ƨô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ'],
  34083. 'encodeOffsets': [[
  34084. 113581,
  34085. 39645
  34086. ]]
  34087. }
  34088. },
  34089. {
  34090. 'type': 'Feature',
  34091. 'id': 'an_hui',
  34092. 'properties': {
  34093. 'name': '安徽',
  34094. 'cp': [
  34095. 117.2461,
  34096. 32.0361
  34097. ],
  34098. 'childNum': 17
  34099. },
  34100. 'geometry': {
  34101. 'type': 'Polygon',
  34102. 'coordinates': ['@@ó̎̑Ő@ƨƪ˜Ѷǿɜ̑φ—Ʀʵ̐˜Ƨѵôóƪôôυς—ƨȂɞŏ@̍ԫôò̑ƥ—óȃѶͩƧƥôŏѺœôŏƦ—@›ƥͩƧ—ôȁυó@̑ƧɛѵʵƩƪѵ˜̑ʸóóôŏρó@ŐƦƨƥŎσɝƩœ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτ˜ö̒ƨŌ@ɞôŌ̎óƨəφȂ'],
  34103. 'encodeOffsets': [[
  34104. 119431,
  34105. 34741
  34106. ]]
  34107. }
  34108. },
  34109. {
  34110. 'type': 'Feature',
  34111. 'id': 'fu_jian',
  34112. 'properties': {
  34113. 'name': '福建',
  34114. 'cp': [
  34115. 118.3008,
  34116. 25.9277
  34117. ],
  34118. 'childNum': 9
  34119. },
  34120. 'geometry': {
  34121. 'type': 'Polygon',
  34122. 'coordinates': ['@@̎›óȁƨӑ̒—̎ɚƨͩφŐƨɝ̎ŋóŏρ—@ōƨ›òʳəóƨō̏˜õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑—Ƨ̐@ɚəОƧ—Ƨɚóñ̑ŎóʴƨœƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ'],
  34123. 'encodeOffsets': [[
  34124. 121321,
  34125. 28981
  34126. ]]
  34127. }
  34128. },
  34129. {
  34130. 'type': 'Feature',
  34131. 'id': 'zhe_jiang',
  34132. 'properties': {
  34133. 'name': '浙江',
  34134. 'cp': [
  34135. 120.498,
  34136. 29.0918
  34137. ],
  34138. 'childNum': 11
  34139. },
  34140. 'geometry': {
  34141. 'type': 'Polygon',
  34142. 'coordinates': ['@@Ѷʶƨɜ@̒φôóȂƨ˜Ʀͪ@œ̐˜Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑›@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑˜ƧӒôȂ̍œ@˜óφ̑ɜ@ŎƪȀ'],
  34143. 'encodeOffsets': [[
  34144. 121051,
  34145. 30105
  34146. ]]
  34147. }
  34148. },
  34149. {
  34150. 'type': 'Feature',
  34151. 'id': 'jiang_su',
  34152. 'properties': {
  34153. 'name': '江苏',
  34154. 'cp': [
  34155. 120.0586,
  34156. 32.915
  34157. ],
  34158. 'childNum': 13
  34159. },
  34160. 'geometry': {
  34161. 'type': 'Polygon',
  34162. 'coordinates': ['@@ôɞ̎˜φНôŐɜŏ̎Ȅƨ›öǿƨ@ôɜɚšƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧ›ɝρσȁѷ̎̏—ƥ˜óŐѹ›óŐƨƦѵͪôȄƦ˜ñ̒Ԭó@̎ɝŐƧȁρ˜óφƩóóôƨѶ̏—ƥʶυ˜ɛ̒ѵȀ'],
  34163. 'encodeOffsets': [[
  34164. 119161,
  34165. 35460
  34166. ]]
  34167. }
  34168. },
  34169. {
  34170. 'type': 'Feature',
  34171. 'id': 'chong_qing',
  34172. 'properties': {
  34173. 'name': '重庆',
  34174. 'cp': [
  34175. 107.7539,
  34176. 30.1904
  34177. ],
  34178. 'childNum': 40
  34179. },
  34180. 'geometry': {
  34181. 'type': 'Polygon',
  34182. 'coordinates': ['@@əȂòɜƨ˜ѺɛƦȁ̐@ƪ—õŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨœ̒ѹôœƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ—@ʵѷóƧʵó˜@ŎóŐó@ôȁƥ›ó̒υôóʶə˜ƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ'],
  34183. 'encodeOffsets': [[
  34184. 111150,
  34185. 32446
  34186. ]]
  34187. }
  34188. },
  34189. {
  34190. 'type': 'Feature',
  34191. 'id': 'ning_xia',
  34192. 'properties': {
  34193. 'name': '宁夏',
  34194. 'cp': [
  34195. 105.9961,
  34196. 37.3096
  34197. ],
  34198. 'childNum': 5
  34199. },
  34200. 'geometry': {
  34201. 'type': 'Polygon',
  34202. 'coordinates': ['@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧ—ó˜ôœó@ƩôóƦ̍œóȀƨŎɛӒôŐυͪɛ@@Ȁə@'],
  34203. 'encodeOffsets': [[
  34204. 106831,
  34205. 38340
  34206. ]]
  34207. }
  34208. },
  34209. {
  34210. 'type': 'Feature',
  34211. 'id': 'hai_nan',
  34212. 'properties': {
  34213. 'name': '海南',
  34214. 'cp': [
  34215. 109.9512,
  34216. 19.2041
  34217. ],
  34218. 'childNum': 18
  34219. },
  34220. 'geometry': {
  34221. 'type': 'Polygon',
  34222. 'coordinates': ['@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦ˜ԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ'],
  34223. 'encodeOffsets': [[
  34224. 111240,
  34225. 19846
  34226. ]]
  34227. }
  34228. },
  34229. {
  34230. 'type': 'Feature',
  34231. 'id': 'tai_wan',
  34232. 'properties': {
  34233. 'name': '台湾',
  34234. 'cp': [
  34235. 121.0254,
  34236. 23.5986
  34237. ],
  34238. 'childNum': 1
  34239. },
  34240. 'geometry': {
  34241. 'type': 'Polygon',
  34242. 'coordinates': ['@@ô—ƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ'],
  34243. 'encodeOffsets': [[
  34244. 124831,
  34245. 25650
  34246. ]]
  34247. }
  34248. },
  34249. {
  34250. 'type': 'Feature',
  34251. 'id': 'bei_jing',
  34252. 'properties': {
  34253. 'name': '北京',
  34254. 'cp': [
  34255. 116.4551,
  34256. 40.2539
  34257. ],
  34258. 'childNum': 19
  34259. },
  34260. 'geometry': {
  34261. 'type': 'Polygon',
  34262. 'coordinates': ['@@óóó›υóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎œôƨɞ@óŎɜŌ̎̍φ›Ƨŋƨʵ'],
  34263. 'encodeOffsets': [[
  34264. 120241,
  34265. 41176
  34266. ]]
  34267. }
  34268. },
  34269. {
  34270. 'type': 'Feature',
  34271. 'id': 'tian_jin',
  34272. 'properties': {
  34273. 'name': '天津',
  34274. 'cp': [
  34275. 117.4219,
  34276. 39.4189
  34277. ],
  34278. 'childNum': 18
  34279. },
  34280. 'geometry': {
  34281. 'type': 'Polygon',
  34282. 'coordinates': ['@@ôôɜ—@ƨöɚôœôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@›ƧóəН̏óѷɜ@ŎƦƨóО'],
  34283. 'encodeOffsets': [[
  34284. 119610,
  34285. 40545
  34286. ]]
  34287. }
  34288. },
  34289. {
  34290. 'type': 'Feature',
  34291. 'id': 'shang_hai',
  34292. 'properties': {
  34293. 'name': '上海',
  34294. 'cp': [
  34295. 121.4648,
  34296. 31.2891
  34297. ],
  34298. 'childNum': 19
  34299. },
  34300. 'geometry': {
  34301. 'type': 'Polygon',
  34302. 'coordinates': ['@@ɞςƨœɛȀôŐڔɛóυô̍ןŏ̑̒'],
  34303. 'encodeOffsets': [[
  34304. 123840,
  34305. 31771
  34306. ]]
  34307. }
  34308. },
  34309. {
  34310. 'type': 'Feature',
  34311. 'id': 'xiang_gang',
  34312. 'properties': {
  34313. 'name': '香港',
  34314. 'cp': [
  34315. 114.2578,
  34316. 22.3242
  34317. ],
  34318. 'childNum': 1
  34319. },
  34320. 'geometry': {
  34321. 'type': 'Polygon',
  34322. 'coordinates': ['@@óɛƩ@ρ@óœôȀɚŎƨ@ö@@ōƨ@'],
  34323. 'encodeOffsets': [[
  34324. 117361,
  34325. 22950
  34326. ]]
  34327. }
  34328. },
  34329. {
  34330. 'type': 'Feature',
  34331. 'id': 'ao_men',
  34332. 'properties': {
  34333. 'name': '澳门',
  34334. 'cp': [
  34335. 113.5547,
  34336. 22.1484
  34337. ],
  34338. 'childNum': 1
  34339. },
  34340. 'geometry': {
  34341. 'type': 'Polygon',
  34342. 'coordinates': ['@@X¯aWĀ„@l'],
  34343. 'encodeOffsets': [[
  34344. 116325,
  34345. 22697
  34346. ]]
  34347. }
  34348. }
  34349. ],
  34350. 'UTF8Encoding': true
  34351. };
  34352. });define('echarts/util/mapData/geoJson/chong_qing_geo', [], function () {
  34353. return {
  34354. 'type': 'FeatureCollection',
  34355. 'features': [
  34356. {
  34357. 'type': 'Feature',
  34358. 'id': '500242',
  34359. 'properties': {
  34360. 'name': '酉阳土家族苗族自治县',
  34361. 'cp': [
  34362. 108.8196,
  34363. 28.8666
  34364. ],
  34365. 'childNum': 1
  34366. },
  34367. 'geometry': {
  34368. 'type': 'Polygon',
  34369. 'coordinates': ['@@XJ°œlJX@lbl@XbV@VLnJlxnbšƒUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLšmV@@xœÔ‚`nœ™xV‚ÈLlx„LVxVVšƒV_U»VWn_m¥XwVmnX°ƒlmUUVwÞaVƒk@a@mmIUa@™mwk@™ƒm@@U¯a@UV@@K™@ykkmwkV@kU@ƒÑƒVkKWLÅamaUm@kyU@WkU@Ua™IUašVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@V„LU¦‚x@b@JkIkJ@LmbUamJwm@óxƒnk@V„@x„ŽVnUVmVUVŽUbVlUbkXWŽ'],
  34370. 'encodeOffsets': [[
  34371. 110914,
  34372. 29695
  34373. ]]
  34374. }
  34375. },
  34376. {
  34377. 'type': 'Feature',
  34378. 'id': '500236',
  34379. 'properties': {
  34380. 'name': '奉节县',
  34381. 'cp': [
  34382. 109.3909,
  34383. 30.9265
  34384. ],
  34385. 'childNum': 1
  34386. },
  34387. 'geometry': {
  34388. 'type': 'Polygon',
  34389. 'coordinates': ['@@WVXb‚UnK@x@b‚²kxmKkl¯_ƒVV°™VU@bnKVVV@@nkŽ@n›bn‚@š°@VLČUš@°WV@V™nU@InKVl@nU„b˜KnX„WlknLlKUwnalLša„VlUXmWk@UU@UWWIUyķ¹XaWW@X™ƒKUIVm„U@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@ƒwUaƒKkkm¯ÑUL@bWVnx@VmxUI@„klmkkK@aƒK@IlJ@I¯ƒk@mak@mnkJVL@bV@Ub„„W`UUUV™I@VƒU@VVbUJVLUVVbUX„VVxk¦VJUnVxnVVUšJV@Ubl@@bXV@L'],
  34390. 'encodeOffsets': [[
  34391. 111781,
  34392. 31658
  34393. ]]
  34394. }
  34395. },
  34396. {
  34397. 'type': 'Feature',
  34398. 'id': '500238',
  34399. 'properties': {
  34400. 'name': '巫溪县',
  34401. 'cp': [
  34402. 109.3359,
  34403. 31.4813
  34404. ],
  34405. 'childNum': 1
  34406. },
  34407. 'geometry': {
  34408. 'type': 'Polygon',
  34409. 'coordinates': ['@@nLWbX‚VLVU„V@KšIVl@b„@lbšU„VnU@JÆU@V@n°KĢUl@VbÞKšVš@„_„V‚KXU‚U@KXƒ@wlkkU@mWKUU@UôJ@XV@œaVmÞIVaVLƒƒ@»kmƒ@ƒUkL™U@aU@WWƒLUUU™™KkbƒwWa@KU@kaƒXmW—LƒamVk@UmL@JmVUšU@¯X™@ċVUK¯@ÅnWK™LkKULWK@UXK@wW@™LkV@bVLƒlXn›`¯xU„°LnŽlV@n°Lnl'],
  34410. 'encodeOffsets': [[
  34411. 111488,
  34412. 32361
  34413. ]]
  34414. }
  34415. },
  34416. {
  34417. 'type': 'Feature',
  34418. 'id': '500234',
  34419. 'properties': {
  34420. 'name': '开县',
  34421. 'cp': [
  34422. 108.4131,
  34423. 31.2561
  34424. ],
  34425. 'childNum': 1
  34426. },
  34427. 'geometry': {
  34428. 'type': 'Polygon',
  34429. 'coordinates': ['@@n@na‚I„wš@@VVK„LVbVxnVÆUnanKWXamKmk¯K@mkUm¯KVƒ°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KƒkUwWKXaWLUWkImaUUUƒƒKka±k@lƒ¯w™wmbUƒ™ƒkXm@UJkIW‚XXƒbƒmƒ„UJ™XUV@°šKlšlVXV@xmbnV@blV@VšœU`UL@V™a@bULlb°VXbܚ@V@bƒL@J„xnLVb@lVb@V@@z˜bXWšX„KVLV‚š@@bUVVL@b„„lVna@ll@„zl@@J'],
  34430. 'encodeOffsets': [[
  34431. 111150,
  34432. 32434
  34433. ]]
  34434. }
  34435. },
  34436. {
  34437. 'type': 'Feature',
  34438. 'id': '500243',
  34439. 'properties': {
  34440. 'name': '彭水苗族土家族自治县',
  34441. 'cp': [
  34442. 108.2043,
  34443. 29.3994
  34444. ],
  34445. 'childNum': 1
  34446. },
  34447. 'geometry': {
  34448. 'type': 'Polygon',
  34449. 'coordinates': ['@@„Jlb@nVV@bXb@ÆlL„Ul`nVKU¼VxkbW„nlUxlXX‚@°°WnnJ@VUn@J„k°L@VlV@nUJ„x@bVVVz@VnLla„KnalVlIUŽ„¼@nV@@anKUwVal@UlJœƒlI@akU@UWXKVI‚¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯›WIk¦VŽƒUUƒmaUV@XkVUV±aUb¯b¯¥m@@ImJ—@mƒmL@kUKUkkJƒbV¦'],
  34450. 'encodeOffsets': [[
  34451. 110408,
  34452. 29729
  34453. ]]
  34454. }
  34455. },
  34456. {
  34457. 'type': 'Feature',
  34458. 'id': '500235',
  34459. 'properties': {
  34460. 'name': '云阳县',
  34461. 'cp': [
  34462. 108.8306,
  34463. 31.0089
  34464. ],
  34465. 'childNum': 1
  34466. },
  34467. 'geometry': {
  34468. 'type': 'Polygon',
  34469. 'coordinates': ['@@lb„LV„VVnblJVXXKWbXLVx„l@LmVXVVl‚nLWbnVmxXb°L@bVVkLVVVJn@@X‚‚œ_Wm„kUK@alUšKX@@xWL@VXLVKlLšKXLÆm@™mœa@ml@mU@UUmL@aVšUU¯„U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@™IUVmUUwVmUIl¥UwƒUVWUaVUUKVIUa@UUUUJƒUUm™kƒ„nl@„@VWV@L¯aUb™Ulxƒ@@b@VULUx@VUxVV™U@bU@mxU„U@mUVŽklkkƒ@WxknlxK@amLƒKU„K'],
  34470. 'encodeOffsets': [[
  34471. 111016,
  34472. 31742
  34473. ]]
  34474. }
  34475. },
  34476. {
  34477. 'type': 'Feature',
  34478. 'id': '500101',
  34479. 'properties': {
  34480. 'name': '万州区',
  34481. 'cp': [
  34482. 108.3911,
  34483. 30.6958
  34484. ],
  34485. 'childNum': 1
  34486. },
  34487. 'geometry': {
  34488. 'type': 'Polygon',
  34489. 'coordinates': ['@@ĸĊVI„ƒ„n„aWWXlJVIn@lWš„V„našx°xk„l@²Ž‚LVƒ„LnK@b‚LkwlmXw„@lllkUnVV@VƒnwV@@ašVUUVw@UVwVK@U@a„@kwšVVa°b@KXU@U@ƒmk„ƒÇсaml™kUVmn@VULU˜m@kUVkUaƒwUWm@Uw¯„mKUUmVUUULUKU„W@XbWVkaWwkUU™ƒ™k@maUbmbVlk¦ƒxUVUIWVU„kJVVkL@UmJ™UUVU@lLUVU„lx„@@VbƒJ™U™L¯¤@Vƒ„'],
  34490. 'encodeOffsets': [[
  34491. 110464,
  34492. 31551
  34493. ]]
  34494. }
  34495. },
  34496. {
  34497. 'type': 'Feature',
  34498. 'id': '500229',
  34499. 'properties': {
  34500. 'name': '城口县',
  34501. 'cp': [
  34502. 108.7756,
  34503. 31.9098
  34504. ],
  34505. 'childNum': 1
  34506. },
  34507. 'geometry': {
  34508. 'type': 'Polygon',
  34509. 'coordinates': ['@@VK@w¯L@m@UÅV@ImVƒU™Vkaƒ@@aUk™J@LƒUUVUKmLmbÅVmUUwUaƒKUL@U™@ƒxJmbm@nVJ@X@VkV‚n™lƒLXx™@ƒb@bUVƒLU`UnƒbU@@ŽmVVX@JX@VLVVšklV—„‚`@bUL@V„LVKn@‚U@„UJkn@lmLmK@X@Jn@mb„nÞWVXnJ‚k„KČÑÆ@VK@knaÜmXlUČW°kôÇÆ@a@yÞ_VmƒUnU@K'],
  34510. 'encodeOffsets': [[
  34511. 111893,
  34512. 32513
  34513. ]]
  34514. }
  34515. },
  34516. {
  34517. 'type': 'Feature',
  34518. 'id': '500116',
  34519. 'properties': {
  34520. 'name': '江津区',
  34521. 'cp': [
  34522. 106.2158,
  34523. 28.9874
  34524. ],
  34525. 'childNum': 1
  34526. },
  34527. 'geometry': {
  34528. 'type': 'Polygon',
  34529. 'coordinates': ['@@„InWUUlU@LVašlX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UƒUUVUwVIUKUa‚UUVwn@Üx@XUlnn‚bœJ@¥VklKUUlk@ynU@kVƒUUVWnI@¥V£VWVIUKU@UVƒa@n@Vm@@nlUaVkUwƒJ@blLkLW@XWmXkmmLn™@m@U@UVm@™„UVUUlakUVa„ƒVkV@@wnaWUk@VwkƒlmVIkUUxmJ@U„™@KƒIkx±V@IUm@K@IUKkbWKUbn„m„@bmVnbmb@xkxUJ@ULW`@bX@WVXL@Vƒš¯„mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@U‚ƒIkbWb„xXŽlLVbnV@bWlX@VxVLnl@nÆÞVÜ'],
  34530. 'encodeOffsets': [[
  34531. 108585,
  34532. 30032
  34533. ]]
  34534. }
  34535. },
  34536. {
  34537. 'type': 'Feature',
  34538. 'id': '500240',
  34539. 'properties': {
  34540. 'name': '石柱土家族自治县',
  34541. 'cp': [
  34542. 108.2813,
  34543. 30.1025
  34544. ],
  34545. 'childNum': 1
  34546. },
  34547. 'geometry': {
  34548. 'type': 'Polygon',
  34549. 'coordinates': ['@@„š@kl@š¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV—@mbnV‚@V„„bn@VJVLnaVanbl@„šVšlVXxlbXUWaX@VƒUUVwUUVm@I@WmI@a„mlLœ™lK@alwnUV@kóVaƒÝk@UlbVK@™VU»VUUVWUƒ@U`ULkwm@@KmU@knKƒ»VkJkUmbƒLkbmK@UUyUU@aƒwm@@XXJ@VVLVVUbVnUJVX@K„„k`WXXJWXUbmW@bkL™Um`Xnƒb@JVL@LU@™°VVXKVnUxVLUbmJ'],
  34550. 'encodeOffsets': [[
  34551. 110588,
  34552. 30769
  34553. ]]
  34554. }
  34555. },
  34556. {
  34557. 'type': 'Feature',
  34558. 'id': '500237',
  34559. 'properties': {
  34560. 'name': '巫山县',
  34561. 'cp': [
  34562. 109.8853,
  34563. 31.1188
  34564. ],
  34565. 'childNum': 1
  34566. },
  34567. 'geometry': {
  34568. 'type': 'Polygon',
  34569. 'coordinates': ['@@kVƒU™bkKmbVxkLmKkllbV@@LXb„xlašLVšVV„KXXV@@bšVlK„V„@ln@¼°KXa„U@Ulw°JXalIUa„ÝWXW@kVU@ƒVUVWUUUamUw@aVamwn@VUUƒlLXWm£@wÇĉkKklmLUÒ¯ƒWn™@ğ±kwmaWm¼U@@LUV@V@XƒVUnVJ„LWš@‚XXWbĸºVzXJVXV@@VXlWn'],
  34570. 'encodeOffsets': [[
  34571. 112399,
  34572. 31917
  34573. ]]
  34574. }
  34575. },
  34576. {
  34577. 'type': 'Feature',
  34578. 'id': '500102',
  34579. 'properties': {
  34580. 'name': '涪陵区',
  34581. 'cp': [
  34582. 107.3364,
  34583. 29.6796
  34584. ],
  34585. 'childNum': 1
  34586. },
  34587. 'geometry': {
  34588. 'type': 'Polygon',
  34589. 'coordinates': ['@@nèVblĖVVnLšŽ„@šx‚V„n@nšJ@L„UVVX@lbUJV@@nn@VVVK@z„˜V@nzVJVUlmX@@_VVVbnaVal@@knW@wnaƒVK@aVI„J@£kUVW@‚wXUVJ„amƒ@Ikƒƒƒƒ_X¥ƒ@WwkKkwmŽ™šƒkUxƒnÅmm¥™WV@Um@UlVL@JU@@Xƒ@UVkKVk™KVk™Kkb@bmJVXU„VVUbU@@`W_UV¯b'],
  34590. 'encodeOffsets': [[
  34591. 109508,
  34592. 30207
  34593. ]]
  34594. }
  34595. },
  34596. {
  34597. 'type': 'Feature',
  34598. 'id': '500230',
  34599. 'properties': {
  34600. 'name': '丰都县',
  34601. 'cp': [
  34602. 107.8418,
  34603. 29.9048
  34604. ],
  34605. 'childNum': 1
  34606. },
  34607. 'geometry': {
  34608. 'type': 'Polygon',
  34609. 'coordinates': ['@@Þè@XUK@LlV@blbUJ@„„V@bnV‚@VVVXU@ƒlbXal@VXnKV@maXUރ@amk@aVKXV‚anbš£°mnIVaUKVwUmWLUUš¯V@@KUK@I„aWmn_šVlK@anXVaXWWIXWl_ƒƒ@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kƒl@ImVÅLƒwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnƒaƒx@Jn„ƒbUIWVx@ŽUXlV@¤ƒIUJ@bUL„Žmb@xmX@lk@UbmbUaUU@`W@kn'],
  34610. 'encodeOffsets': [[
  34611. 110048,
  34612. 30713
  34613. ]]
  34614. }
  34615. },
  34616. {
  34617. 'type': 'Feature',
  34618. 'id': '500232',
  34619. 'properties': {
  34620. 'name': '武隆县',
  34621. 'cp': [
  34622. 107.655,
  34623. 29.35
  34624. ],
  34625. 'childNum': 1
  34626. },
  34627. 'geometry': {
  34628. 'type': 'Polygon',
  34629. 'coordinates': ['@@l„„w„bVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£„xÆKnUVm@UmIXm¯¯@WkWVwmkXƒlaUwV»ULmk_ƒVkK@ÅWa@aUU@mkaƒIƒb@‚n¼ƒnm‚_@mmK@UƒLUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVšnlUVmI@VkVlx™bkIƒVmLUxkKUŽ‚Xš‚n¦Æn„mVw„lš™nlxlLXx„@W¦„`„„'],
  34630. 'encodeOffsets': [[
  34631. 110262,
  34632. 30291
  34633. ]]
  34634. }
  34635. },
  34636. {
  34637. 'type': 'Feature',
  34638. 'id': '500119',
  34639. 'properties': {
  34640. 'name': '南川区',
  34641. 'cp': [
  34642. 107.1716,
  34643. 29.1302
  34644. ],
  34645. 'childNum': 1
  34646. },
  34647. 'geometry': {
  34648. 'type': 'Polygon',
  34649. 'coordinates': ['@@VšUbVJVUn@VLX@WVXVVI@VUVWxU@mš@ĊX@@¼V°aVUX`@_V@VaUUVƒUWnI@alašLUlšLUllLVU„@@WV@@IUKVkn@@VlLVwnK„UlJšakwlU@UnJVUmkU™VmXa@wVK@UUw™@VƒVI@akƒ@alInwlKXUmaUW@wWLk™™KVak_ÇaUƒƒV@šXbƒLVxUlWIk@UK@V™@ƒkU@VbUVUlVnƒLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx'],
  34650. 'encodeOffsets': [[
  34651. 109463,
  34652. 29830
  34653. ]]
  34654. }
  34655. },
  34656. {
  34657. 'type': 'Feature',
  34658. 'id': '500241',
  34659. 'properties': {
  34660. 'name': '秀山土家族苗族自治县',
  34661. 'cp': [
  34662. 109.0173,
  34663. 28.5205
  34664. ],
  34665. 'childNum': 1
  34666. },
  34667. 'geometry': {
  34668. 'type': 'Polygon',
  34669. 'coordinates': ['@@XlV@lzn@VŽnbÆbXKlL„U„ÒV@@llUnxll@zšŽ@LU@@V°b@Vn@š„l@VÑUƒnK@UšU@aUaƒkVm@K¯wƒklmnn„Ul`nI@almkIUwmWVkUaƒkkJmUUa@K@aU@@_m@@wUyVUUa@Umƒ@awl@Wka±„UkUykIWV™b@bUVk@›aU@UXU‚UIWakUWmUxUV@nUVWbšŽ@XXVVŽmXXŽ@VƒbVLkVWx'],
  34670. 'encodeOffsets': [[
  34671. 111330,
  34672. 29183
  34673. ]]
  34674. }
  34675. },
  34676. {
  34677. 'type': 'Feature',
  34678. 'id': '500114',
  34679. 'properties': {
  34680. 'name': '黔江区',
  34681. 'cp': [
  34682. 108.7207,
  34683. 29.4708
  34684. ],
  34685. 'childNum': 1
  34686. },
  34687. 'geometry': {
  34688. 'type': 'Polygon',
  34689. 'coordinates': ['@@VX@V@LV@VJUL@lVnnxlb@VXV‚XV@@W„@UIVK@kUKna@£VWUaVUUalIVJVIUW„_lm@bXKV@mn@J„UUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lw„KlwUWV_Ua@aUa@KUšwm›_›Ó@wU@™nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVV™„lnklWnn`VzUVnlWbkb@WxXxlJXzWŽÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ'],
  34690. 'encodeOffsets': [[
  34691. 111106,
  34692. 30420
  34693. ]]
  34694. }
  34695. },
  34696. {
  34697. 'type': 'Feature',
  34698. 'id': '500117',
  34699. 'properties': {
  34700. 'name': '合川区',
  34701. 'cp': [
  34702. 106.3257,
  34703. 30.108
  34704. ],
  34705. 'childNum': 1
  34706. },
  34707. 'geometry': {
  34708. 'type': 'Polygon',
  34709. 'coordinates': ['@@XKVXlK„ƒVL@UnV@aValXXK„U@WVwUaVU@IV@@aVW„L@U@anVV@@bVK@UVL@bnJWL@VnUnb˜@@JnIlVl‚@@bXIWbn@UKVLVKXLlaV@VVnK@bVL„m„IVƒ@KmknUUWVI@aVJ@_„WU_VmUwƒU@K™ƒVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mƒbUzś™@„VK@nUKƒ„ƒb™akb@UWK@bkVVbV„Û@@`ƒXk@WŽ@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b'],
  34710. 'encodeOffsets': [[
  34711. 108529,
  34712. 31101
  34713. ]]
  34714. }
  34715. },
  34716. {
  34717. 'type': 'Feature',
  34718. 'id': '500222',
  34719. 'properties': {
  34720. 'name': '綦江县',
  34721. 'cp': [
  34722. 106.6553,
  34723. 28.8171
  34724. ],
  34725. 'childNum': 1
  34726. },
  34727. 'geometry': {
  34728. 'type': 'Polygon',
  34729. 'coordinates': ['@@@¦‚@X„lVX@@UVKl„VUX@lanVlUVbXWVXVƒ„VVUnKVUlwUwU@UJ@nmVkUV™lwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXa‚mUI„am@wI@K@amIm‚UUkI@m‚akUkKWUUanƒ@wƒamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@š@bn@@`Un„@WbUKULWVXbƒ@UVmbX„WVƒb@bVmxUKUƒV@šUn@V@V@nmšnKlnnWWXX@lKkK@a„IVxUlVb‚k@mn@@U@m„bVUV@VLUJUXU¤'],
  34730. 'encodeOffsets': [[
  34731. 109137,
  34732. 29779
  34733. ]]
  34734. }
  34735. },
  34736. {
  34737. 'type': 'Feature',
  34738. 'id': '500233',
  34739. 'properties': {
  34740. 'name': '忠县',
  34741. 'cp': [
  34742. 107.8967,
  34743. 30.3223
  34744. ],
  34745. 'childNum': 1
  34746. },
  34747. 'geometry': {
  34748. 'type': 'Polygon',
  34749. 'coordinates': ['@@VLÞĊ„U@Wš@¼V‚„@lk@w²mlšVUœ„llšVnI@VlKUUlIVƒXUVJVU„wl¥UkUKUIm@ƒaUƒ@mUna˜@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa™»k@@lƒ™¯n™¤mabWUUL@bnl@b݄WVnbU@mLUWk@Wbka@„WVUU@UmUmVkUULV„lVUx„l@L@VƒbÈÒlb'],
  34750. 'encodeOffsets': [[
  34751. 110239,
  34752. 31146
  34753. ]]
  34754. }
  34755. },
  34756. {
  34757. 'type': 'Feature',
  34758. 'id': '500228',
  34759. 'properties': {
  34760. 'name': '梁平县',
  34761. 'cp': [
  34762. 107.7429,
  34763. 30.6519
  34764. ],
  34765. 'childNum': 1
  34766. },
  34767. 'geometry': {
  34768. 'type': 'Polygon',
  34769. 'coordinates': ['@@XLV@VV@b°°nšƒnkb@bƒšnJWVXblIUVšxWnUJnVVLVU„JlUnLVK@UnUVJš²nKVbVKla@aXlJ„k„Klb„ƒ@U°£šKšV„IUa@ƒ@kwVƒVUkKV@VUkk›ƒUVk™±n@xklƒ@U@»™‚@XƒVÝĉUJnxWb@UX›KkVUbUKWUkVmkkLU`›b'],
  34770. 'encodeOffsets': [[
  34771. 109980,
  34772. 31247
  34773. ]]
  34774. }
  34775. },
  34776. {
  34777. 'type': 'Feature',
  34778. 'id': '500113',
  34779. 'properties': {
  34780. 'name': '巴南区',
  34781. 'cp': [
  34782. 106.7322,
  34783. 29.4214
  34784. ],
  34785. 'childNum': 1
  34786. },
  34787. 'geometry': {
  34788. 'type': 'Polygon',
  34789. 'coordinates': ['@@nxnVlJlUXLƒ¦@x@Vl@nKVVX@V_V@@KlVXU„@lKlxXIl@ÈĊ@Vl@n_VJlŽnVlnb„²VVVJVVmUUkĕUamçU@»W@@ĉn™V@XwVU@UUJWUXUW@UKm@UVUIVaU™UVmLUVƒUU„UWWXUakVmUkbW@UVkƒUL@VW@kUWƒ@mJUXVVU„@lmV@zklVVkLUl@¦›I'],
  34790. 'encodeOffsets': [[
  34791. 108990,
  34792. 30061
  34793. ]]
  34794. }
  34795. },
  34796. {
  34797. 'type': 'Feature',
  34798. 'id': '500223',
  34799. 'properties': {
  34800. 'name': '潼南县',
  34801. 'cp': [
  34802. 105.7764,
  34803. 30.1135
  34804. ],
  34805. 'childNum': 1
  34806. },
  34807. 'geometry': {
  34808. 'type': 'Polygon',
  34809. 'coordinates': ['@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Uaš@Wa@aXLlwUKlkkƒ@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUb‚xUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI‚@@lnLULm@Ub@Žl@na„@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK'],
  34810. 'encodeOffsets': [[
  34811. 108529,
  34812. 31101
  34813. ]]
  34814. }
  34815. },
  34816. {
  34817. 'type': 'Feature',
  34818. 'id': '500118',
  34819. 'properties': {
  34820. 'name': '永川区',
  34821. 'cp': [
  34822. 105.8643,
  34823. 29.2566
  34824. ],
  34825. 'childNum': 1
  34826. },
  34827. 'geometry': {
  34828. 'type': 'Polygon',
  34829. 'coordinates': ['@@@b܄nWVLX„lxV„VxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVXš@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWƒwXaƒK@VVLklƒXVlkxV„UL@bm@Vxn`ƒIVxUVkLVšUšl@@lkXmmƒVUn@VV@Xb'],
  34830. 'encodeOffsets': [[
  34831. 108192,
  34832. 30038
  34833. ]]
  34834. }
  34835. },
  34836. {
  34837. 'type': 'Feature',
  34838. 'id': '500231',
  34839. 'properties': {
  34840. 'name': '垫江县',
  34841. 'cp': [
  34842. 107.4573,
  34843. 30.2454
  34844. ],
  34845. 'childNum': 1
  34846. },
  34847. 'geometry': {
  34848. 'type': 'Polygon',
  34849. 'coordinates': ['@@šĊ°¤nҘ¼œaV_lKnllUXVVLValUœLVW‚@XamwVIUKkaÇфa@U@KƒkVwkUUƒVKlVnU@aƒU@ƒVIka@akU@KVL@WÝçUV@Vmbů@L™KƒnnJW„ƒVkxlL@VX@VxmnXVWxUb@bkn'],
  34850. 'encodeOffsets': [[
  34851. 109812,
  34852. 30961
  34853. ]]
  34854. }
  34855. },
  34856. {
  34857. 'type': 'Feature',
  34858. 'id': '500112',
  34859. 'properties': {
  34860. 'name': '渝北区',
  34861. 'cp': [
  34862. 106.7212,
  34863. 29.8499
  34864. ],
  34865. 'childNum': 1
  34866. },
  34867. 'geometry': {
  34868. 'type': 'Polygon',
  34869. 'coordinates': ['@@@bVVXL‚a@lnbWn@L„@XVlK@VVLUVlbkLUKVVVL@VšnX‚VL@VV@UbVb@x@¦UxVb@bUJƒL@L„VVxlK@™nk@U@W„UVLlKXV„@VblU@UUKVU@wn@VJVanLlkX@VaVK™¯@a@U@U@ƒVaUK„kUUƒ±maUkm@UUkbm@@Vk@@JƒwU@Ub@I@JmwUL@aƒ@@KkVÇLkƒWkƒ@kUU@@xUVmKUnllUb'],
  34870. 'encodeOffsets': [[
  34871. 109013,
  34872. 30381
  34873. ]]
  34874. }
  34875. },
  34876. {
  34877. 'type': 'Feature',
  34878. 'id': '500115',
  34879. 'properties': {
  34880. 'name': '长寿区',
  34881. 'cp': [
  34882. 107.1606,
  34883. 29.9762
  34884. ],
  34885. 'childNum': 1
  34886. },
  34887. 'geometry': {
  34888. 'type': 'Polygon',
  34889. 'coordinates': ['@@VVšU„bX‚lX„¥l@XnVmlxUx„@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlw„UXƒmI„mšL@Kưna@UUImyU@ƒ—@yULUUm@@mU@VIkaW@UUƒV@K™I@mƒmU™wƒ@™mKUnU‚UIƒlVLUb@„@V@V@bš°ULUbW@klmKUbUIm@@xUVVL'],
  34890. 'encodeOffsets': [[
  34891. 109429,
  34892. 30747
  34893. ]]
  34894. }
  34895. },
  34896. {
  34897. 'type': 'Feature',
  34898. 'id': '500225',
  34899. 'properties': {
  34900. 'name': '大足县',
  34901. 'cp': [
  34902. 105.7544,
  34903. 29.6136
  34904. ],
  34905. 'childNum': 1
  34906. },
  34907. 'geometry': {
  34908. 'type': 'Polygon',
  34909. 'coordinates': ['@@XUmaVaUU@anVlKXbValU@aV@@IXKš@@bV@VxVK@UXLlUšJXa@_‚@@aVK—ÅWVkwWaƒƒwUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UƒkwWƒUKmXX`mIVl@bXLWVkbkkƒx@`VXm@@J@U@UUKUxk@WbUIVl@VXLW„ƒJUkUlUImxXlmb@X@VUJUnVbšW@UV@@VVX@bnW@LVxUnlJUV@n„@VxVIn@l`„UVVVL'],
  34910. 'encodeOffsets': [[
  34911. 108270,
  34912. 30578
  34913. ]]
  34914. }
  34915. },
  34916. {
  34917. 'type': 'Feature',
  34918. 'id': '500224',
  34919. 'properties': {
  34920. 'name': '铜梁县',
  34921. 'cp': [
  34922. 106.0291,
  34923. 29.8059
  34924. ],
  34925. 'childNum': 1
  34926. },
  34927. 'geometry': {
  34928. 'type': 'Polygon',
  34929. 'coordinates': ['@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@Ll„klVLkxWK@bXb™@Vbk@Vb@ll@@nVlnIlmXblaXl@„W@_Ü@UƒUalU@aXL@Vlašb„a„ƒVL@mUL@ƒUUƒƒÇXUW›X_WaƒƒUƒ»m_™@UWULWb@UUVmK@VU@UImK@V@bkL„x‚„XblxXU˜ÆUL@b@@`Wb™IkVWK@VULUwU@@a™@WL@JU@@bkVUb'],
  34930. 'encodeOffsets': [[
  34931. 108316,
  34932. 30527
  34933. ]]
  34934. }
  34935. },
  34936. {
  34937. 'type': 'Feature',
  34938. 'id': '500226',
  34939. 'properties': {
  34940. 'name': '荣昌县',
  34941. 'cp': [
  34942. 105.5127,
  34943. 29.4708
  34944. ],
  34945. 'childNum': 1
  34946. },
  34947. 'geometry': {
  34948. 'type': 'Polygon',
  34949. 'coordinates': ['@@VI@U@WnaWknwVJVkVl„IXƒWK@UUkVJXal@VwVL@V@V@In@UW@_„wlllaXUWK@aUknJW_ۃ@aWaU@@UVm„UUaUImJVnÅUmVUm`kUUVWLnVU@VVmXƒK@„nxmŽULkx™ImJ@nU`@X@Vkn@`@nlV@nVJVaX„VLnK@bVV@nV@lbXWš@'],
  34950. 'encodeOffsets': [[
  34951. 108012,
  34952. 30392
  34953. ]]
  34954. }
  34955. },
  34956. {
  34957. 'type': 'Feature',
  34958. 'id': '500227',
  34959. 'properties': {
  34960. 'name': '璧山县',
  34961. 'cp': [
  34962. 106.2048,
  34963. 29.5807
  34964. ],
  34965. 'childNum': 1
  34966. },
  34967. 'geometry': {
  34968. 'type': 'Polygon',
  34969. 'coordinates': ['@@XzVlVVkbVL@JVĀXŽ‚¼V„„„XbW`XœWVȎ„„VVšŽVkV@@UXa@alK@IƒƒU@UKWUyUI@wVUUWVak@VUkƒW¹@WXI@yVIUK@kWwkѯ±W@™kUb@KkVVVmXƒJ'],
  34970. 'encodeOffsets': [[
  34971. 108585,
  34972. 30032
  34973. ]]
  34974. }
  34975. },
  34976. {
  34977. 'type': 'Feature',
  34978. 'id': '500109',
  34979. 'properties': {
  34980. 'name': '北碚区',
  34981. 'cp': [
  34982. 106.5674,
  34983. 29.8883
  34984. ],
  34985. 'childNum': 1
  34986. },
  34987. 'geometry': {
  34988. 'type': 'Polygon',
  34989. 'coordinates': ['@@X‚VLV@„„@JkL@bWb@VU@UlƜVy„a@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@b‚lUbš„„KVI@aUaVw@¥@wUaVaU@@UUKW™m@UUKUUVLlKkaVUUK@UkLWUƒ@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@U™KUVWI'],
  34990. 'encodeOffsets': [[
  34991. 108855,
  34992. 30449
  34993. ]]
  34994. }
  34995. },
  34996. {
  34997. 'type': 'Feature',
  34998. 'id': '500110',
  34999. 'properties': {
  35000. 'name': '万盛区',
  35001. 'cp': [
  35002. 106.908,
  35003. 28.9325
  35004. ],
  35005. 'childNum': 1
  35006. },
  35007. 'geometry': {
  35008. 'type': 'Polygon',
  35009. 'coordinates': ['@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVU„KUmVkUa@I@KW@@bk@@mƒU@m@k@a@aƒIUxmJk@ƒwULƒwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUšlVnU@m'],
  35010. 'encodeOffsets': [[
  35011. 109452,
  35012. 29779
  35013. ]]
  35014. }
  35015. },
  35016. {
  35017. 'type': 'Feature',
  35018. 'id': '500107',
  35019. 'properties': {
  35020. 'name': '九龙坡区',
  35021. 'cp': [
  35022. 106.3586,
  35023. 29.4049
  35024. ],
  35025. 'childNum': 1
  35026. },
  35027. 'geometry': {
  35028. 'type': 'Polygon',
  35029. 'coordinates': ['@@XK‚L@Vš@XbV@lW@UV@@VXIV@U™VKlL@KnnJ@VV@VU@I„@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@ƒ@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVU„V@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X'],
  35030. 'encodeOffsets': [[
  35031. 108799,
  35032. 30241
  35033. ]]
  35034. }
  35035. },
  35036. {
  35037. 'type': 'Feature',
  35038. 'id': '500106',
  35039. 'properties': {
  35040. 'name': '沙坪坝区',
  35041. 'cp': [
  35042. 106.3696,
  35043. 29.6191
  35044. ],
  35045. 'childNum': 1
  35046. },
  35047. 'geometry': {
  35048. 'type': 'Polygon',
  35049. 'coordinates': ['@@Xºl„UVl@UbVXUV@xVJVzXJVUšL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@k„ƒUK@UmIm@LkKULVšU@WJ@UU@@VkXU@Wa™@@UKWL'],
  35050. 'encodeOffsets': [[
  35051. 108799,
  35052. 30241
  35053. ]]
  35054. }
  35055. },
  35056. {
  35057. 'type': 'Feature',
  35058. 'id': '500108',
  35059. 'properties': {
  35060. 'name': '南岸区',
  35061. 'cp': [
  35062. 106.6663,
  35063. 29.5367
  35064. ],
  35065. 'childNum': 1
  35066. },
  35067. 'geometry': {
  35068. 'type': 'Polygon',
  35069. 'coordinates': ['@@VV„JVL@bUVVnl`XIlwXJlw°nnl‚IXW@UÇĉk@WJkwkLƒ@WVkU@LU@U`W@UXUV@n'],
  35070. 'encodeOffsets': [[
  35071. 109092,
  35072. 30241
  35073. ]]
  35074. }
  35075. },
  35076. {
  35077. 'type': 'Feature',
  35078. 'id': '500105',
  35079. 'properties': {
  35080. 'name': '江北区',
  35081. 'cp': [
  35082. 106.8311,
  35083. 29.6191
  35084. ],
  35085. 'childNum': 1
  35086. },
  35087. 'geometry': {
  35088. 'type': 'Polygon',
  35089. 'coordinates': ['@@nLVU@wV@lV„@Xll„ÈKlU@L„@@bVKnx@I@JVaV@„x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUKƒ@UU™@ƒ„@l'],
  35090. 'encodeOffsets': [[
  35091. 109013,
  35092. 30319
  35093. ]]
  35094. }
  35095. },
  35096. {
  35097. 'type': 'Feature',
  35098. 'id': '500104',
  35099. 'properties': {
  35100. 'name': '大渡口区',
  35101. 'cp': [
  35102. 106.4905,
  35103. 29.4214
  35104. ],
  35105. 'childNum': 1
  35106. },
  35107. 'geometry': {
  35108. 'type': 'Polygon',
  35109. 'coordinates': ['@@k@@U@w„¥WKkVkImUmwa@b@xWJ@b@„nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U'],
  35110. 'encodeOffsets': [[
  35111. 109080,
  35112. 30190
  35113. ]]
  35114. }
  35115. },
  35116. {
  35117. 'type': 'Feature',
  35118. 'id': '500111',
  35119. 'properties': {
  35120. 'name': '双桥区',
  35121. 'cp': [
  35122. 105.7874,
  35123. 29.4928
  35124. ],
  35125. 'childNum': 1
  35126. },
  35127. 'geometry': {
  35128. 'type': 'Polygon',
  35129. 'coordinates': ['@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK'],
  35130. 'encodeOffsets': [[
  35131. 108372,
  35132. 30235
  35133. ]]
  35134. }
  35135. },
  35136. {
  35137. 'type': 'Feature',
  35138. 'id': '500103',
  35139. 'properties': {
  35140. 'name': '渝中区',
  35141. 'cp': [
  35142. 106.5344,
  35143. 29.5477
  35144. ],
  35145. 'childNum': 1
  35146. },
  35147. 'geometry': {
  35148. 'type': 'Polygon',
  35149. 'coordinates': ['@@VLš@VV„@VL@aUKƒIUUƒ@@JUVU@'],
  35150. 'encodeOffsets': [[
  35151. 109036,
  35152. 30257
  35153. ]]
  35154. }
  35155. }
  35156. ],
  35157. 'UTF8Encoding': true
  35158. };
  35159. });define('echarts/util/mapData/geoJson/fu_jian_geo', [], function () {
  35160. return {
  35161. 'type': 'FeatureCollection',
  35162. 'features': [
  35163. {
  35164. 'type': 'Feature',
  35165. 'id': '3507',
  35166. 'properties': {
  35167. 'name': '南平市',
  35168. 'cp': [
  35169. 118.136,
  35170. 27.2845
  35171. ],
  35172. 'childNum': 10
  35173. },
  35174. 'geometry': {
  35175. 'type': 'Polygon',
  35176. 'coordinates': ['@@@knyƒk@ƒKU¥šwV@nkƒWƒzUmk@@lKUa@aVI@UƒKUamKUUVaUI‚@Xƒ@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkŃKUƒ™a@amUƒbkUkKWUnwUƒÇwV™UUƒÝUKV£U™@ƒnKWwXLVKm¥@wUXkmWk@ƒ@wX@lU„@šyVImaXwVƒƒ@kŽƒnU@mbk@mlUXƒmU@mV@n@bnW@bUIWJ—ImVUKWbUK@nkKƒaU@W_VUUmWmL@UU@™bUWUL@V@bmVUz@`mUUVVbXL@V™L@lmLUxmVamXkW@xWbU„VbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVV™ŽU„U@UbWŽkIWVUUUJkI@llbUxVL@V™VƒUU°ULUmWXUV@VULWb@™xm@UaVLVKUa@ƒw@V›bkmVambUUm@@VkK@„@b„xlxX@‚„n¤@Xƒ@@lkLWV@Žn„V„kb@bWJXLWx@nkxmm™bXn@VWVUn@VnJ@bVXl@„™VJXnWbX`lL„UlJVI@Žœ@VXV@Vl@bn@@Æmn@VšxXU@mVIlxšVššnI„l@nVJ‚aXI@mlU@aXkVm°klmnVV_naš°@V@xܦXK„V‚nnUlVXbVK‚LXKV@naV@@VVl@@lXblXšWnLlbVK²nš@@‚VLUnlV@lƒXxô°‚V@UnaUUlKXLVUVVUbVVlUnJVX„@VW@an@lb„@nl@VU@anƒšUVW@kƒaUm@InVVKVU@kUW@Uam@km@kVa@a@™nwšU@WlI@mVI@WXaW_nƒ@™nƒlkkW@U‚¥@kV@Uw@wUƒ@@IXK‚¥VIn@nU@`@Xl@VV„LnašW‚bVaUwnU„@VIšKlV'],
  35177. 'encodeOffsets': [[
  35178. 122119,
  35179. 28086
  35180. ]]
  35181. }
  35182. },
  35183. {
  35184. 'type': 'Feature',
  35185. 'id': '3504',
  35186. 'properties': {
  35187. 'name': '三明市',
  35188. 'cp': [
  35189. 117.5317,
  35190. 26.3013
  35191. ],
  35192. 'childNum': 11
  35193. },
  35194. 'geometry': {
  35195. 'type': 'Polygon',
  35196. 'coordinates': ['@@lL@Un@VVna‚bnUlœa@U‚x@„VbULUKVbn@šw‚@XaVK@UVUXWVnVKV¯„VšU@UUKVwka@klJVIVVXUlJXVaV@VƒšUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVƒXa@wlXnW‚bnUVwnK@kšK@UWKUaVUnV@_VynU@a@UVKVXšaV@@VnKnXVV‚UX`V@„blL@mVLXaVLnU˜JXIVJ@amX@a@mnUV@„nVWnkl@naV@„ml„@@KmKUam@UU@ƒ@UlKU™Vk™U™K@aVaUwV™U¥UIkJ@wmI@‚mbkwkVW@UXƒKULU`™IVKUa@LƒkkVmUU@WlULUWÅU@I@ƒWW™nU@@w@a@ƒUam_XyVIVWkkƒ@mwVKXUV@nw˜VXkWƒÅ™U@ƒaƒU¯KUnƒK@ƒ¯šmUƒLXŽVLnWVbVbUVm@Ub¯¼W@amƒ`kb™amLUUUƒ™aUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIƒy@kkaVUUm™IWVXbWxU@k„mVkK@nWVX¦WxU@@bkx@VU@WŽk@™kUbmJUUmkUW@_kKWKƒ@knV¤kIUKWLUbV‚@Wbk@@VWL@VkI@lUXVxUVU@@mWIƒV@a¯nUaƒaUV@„ƒJ™b@bÞ°VbUš@X™aUVmL@‚VXblŽnV„°˜n@Vnx„@VUUUlK@InJVb@„Vlnn@V™L@VWJU„x@XlJUVVVl@LUUUJ@Lƒ„@lUL°¦k˜V„VnV@„xV„„l@blLnlšLVaXll@šnVUn@‚xn@nml°‚X@lb'],
  35197. 'encodeOffsets': [[
  35198. 119858,
  35199. 27754
  35200. ]]
  35201. }
  35202. },
  35203. {
  35204. 'type': 'Feature',
  35205. 'id': '3508',
  35206. 'properties': {
  35207. 'name': '龙岩市',
  35208. 'cp': [
  35209. 116.8066,
  35210. 25.2026
  35211. ],
  35212. 'childNum': 7
  35213. },
  35214. 'geometry': {
  35215. 'type': 'Polygon',
  35216. 'coordinates': ['@@ša„I@ƒVU„bVb°m@b„UXJ@nV@VUUwVW@klJ@UXK@Ul@Xa‚@UVaXKVLlJU£lm„@XLlL@`VXnlVVnIVašll@XV@@Ulw@aV@XwW¥XU@mlLnUlƒV@XwWaXUšJVnUVlb@l„zlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWšbV„VVnKšbla„_n‚bX@°»Van@VUUaUamXUKW„K@a@Ukƒ@wWkXƒWW@wUU™Kw@_lyƒwUkU@@Uƒ@kamVmƒXašUVUka@Wk@»UUUVƒKkbWU™VUbk@mkƒxkƒƒKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@ŽU@UI@wUUUa@KW»nU@mVkUmm@XwWU@ƒUUmL@ƒw@mnƒVUU@aWak@@amxU@UxULWVXbVLU`mbUImVU„ƒbn‚V@@bVn@bnVWxLmyUbƒIUKƒ@aƒVm™akbV‚UXW„UlKWbkV@„WLUlk@@nšbƒb@lkKmU@ƒUIWJkw¯UUVVxm@@XkbWx—›XKƒlUzWJkUUL@bmKkVƒ@@VUIUlWV@X„K@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVV„VVn@VVlLn„@l„@‚xk¦Vx@bVJXbƒn@JlnXxV@@„nJ@X@V@lmx„bUn@xVL@VVKlL@l„„nLVaVL@xkl@LƒxVl°š„X„WVX„Vl„œJWnxlJ'],
  35217. 'encodeOffsets': [[
  35218. 119194,
  35219. 26657
  35220. ]]
  35221. }
  35222. },
  35223. {
  35224. 'type': 'Feature',
  35225. 'id': '3509',
  35226. 'properties': {
  35227. 'name': '宁德市',
  35228. 'cp': [
  35229. 119.6521,
  35230. 26.9824
  35231. ],
  35232. 'childNum': 9
  35233. },
  35234. 'geometry': {
  35235. 'type': 'Polygon',
  35236. 'coordinates': ['@@@LVKVaVaUkVU²J@LVU„@@W‚VJUbVVnLVb„L@VUJ@bVbkL@Žl@Vn„y„XmlU@™xV¦„L@Ž„lmz@lnL@bVVšbVb@l„nšKVk„Vl¤@zXV@šl@XJVLVKnXVK‚VnU@wUm@šKUƒ@UlVlw@U@U@ƒUaUKlU@kXKlmXIWKXaVIVUVK@KU@@k„JVUnLVJUL@V‚IVa@VnLšKUnl`Vb„V„V@š‚Vbn@Vzn@lKnVlI„VVKUalkXJl@XXVWVLVUUmVU@Unm„£lK@Uk@WUXK@U@WVwVkšƒĠkĢǰaUÅUwmaţƒɱUÇa™w„±V¹XalKôx„@„UVaÜʓͿVóbÅLƒJm„¯Vk¦ƒŽk@mamXkKUƒUL›akbk@mV@LkJWb@Vk„mXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUƒUIWJUkm@šƒw™Kk„VJm@kxǁVƒUK@mUVUkmlkkVm@amwƒLVWU@UbVLkšUbƒ@VƒmK@XaVWU_VJnwV@@kUmWakxƒ@kwWakIWxnbUJ™zƒ@kVW@@x@„XllnVW@xn¦ULWKXxmL@„VšU¤VL„ÞVVUšÈxV„mxXVlLlV„anV@bšbV„„LlÆnnlW@LXlWnXV'],
  35237. 'encodeOffsets': [[
  35238. 121816,
  35239. 27816
  35240. ]]
  35241. }
  35242. },
  35243. {
  35244. 'type': 'Feature',
  35245. 'id': '3501',
  35246. 'properties': {
  35247. 'name': '福州市',
  35248. 'cp': [
  35249. 119.4543,
  35250. 25.9222
  35251. ],
  35252. 'childNum': 9
  35253. },
  35254. 'geometry': {
  35255. 'type': 'Polygon',
  35256. 'coordinates': ['@@lxna@nJ@xlIVJV¦UšVxUb@bšLšVUlVškL@V@„VVn@Vb‚Ln‚@LU„lJXblx„@lwXbVn@lU@mxUIV`UXWb@‚nLU„„@Val™UKVaV@UX„Knx‚bn@lUkllnUVnV‚@VLU„È‚lwn@UIlƒšL„x‚™n@VlXIVJV„VVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWlƒ@UXalI@KnUl@laœbVKV„lLnWnbl@„l¥°Unƒ„IÆKôa΀U„a@UUwÇWǓIUWUÅVkƨm@ƒ@£@KmLU¤ULˣJ™kUƒVǟUUķ@ĉVƒKUk@Ѱwôǚç@īšé@Åţ¥mīÛkm¼Å@ƒVķVó°ō¦U°ƒn@bVJXVVL@bUŽƒakLmx@xmxXzW`XbWnXV@bWLÛ@™aƒ@ƒaXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUU݁UamV—¤›n@xUVUzkJV¦lJU„'],
  35257. 'encodeOffsets': [[
  35258. 121253,
  35259. 26511
  35260. ]]
  35261. }
  35262. },
  35263. {
  35264. 'type': 'Feature',
  35265. 'id': '3506',
  35266. 'properties': {
  35267. 'name': '漳州市',
  35268. 'cp': [
  35269. 117.5757,
  35270. 24.3732
  35271. ],
  35272. 'childNum': 10
  35273. },
  35274. 'geometry': {
  35275. 'type': 'Polygon',
  35276. 'coordinates': ['@@@bl@Xb@bVVUŽm„@n„x‚@nKVV@„XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXU‚V@Ln‚@lVV@UbVnnWVL@lnXUVmJ„Ll„„wnll@VašUXVla„LVUVV@¼Xl@lbUV™VWbn„nUlb„@@VV@„aVUšmlUašUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@šmXLllnL‚U@anVnU@L@VVV@KlXnWVnVanUšw@w@wm›nÅ@wƒaUam@Uk„mUl@@a„a@U@¥škôK‚wȯ°w@ŻkwǕaK›ÑÛk@ĕōřċ£ĵƒUKW»kÅŻLU@Ulġw@¤Vz™VUbkKUbmLmlULU¼UxmbXl@bWVƒb@bUnV‚UšVbULU@@VkbVL@`U@WX@ŽXV@b°„@b¯š@¤@Xm@@b@`U„VVUL'],
  35277. 'encodeOffsets': [[
  35278. 119712,
  35279. 24953
  35280. ]]
  35281. }
  35282. },
  35283. {
  35284. 'type': 'Feature',
  35285. 'id': '3505',
  35286. 'properties': {
  35287. 'name': '泉州市',
  35288. 'cp': [
  35289. 118.3228,
  35290. 25.1147
  35291. ],
  35292. 'childNum': 9
  35293. },
  35294. 'geometry': {
  35295. 'type': 'Polygon',
  35296. 'coordinates': ['@@Vl„xkz@`‚xšLVV@xXXW„Xl@xl„@V@bnV°™@„„LVm°L„V„bV@ƚX„Wl—UmxU@WVULnx„@llUXUJWzn`Vb@„@b@xV@šmXX@„@JÆVVXVKXkV@nVlU„l@KVbULšJV_VK„LVWX@lUVƒkIU¥lIVyVU@wœm˜£nUVWU@aƒm@UmWw@UX@@am™VUn@@aUUlUVanaWUXWmUnkšK@VšUlVVUUwš@XLWWX™ma@knm‚bVb„VXbVL‚@XJlInlšL„w˜mXóšw@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@—¯xǰöÆlV„n@llšaš@„Lšbƒ`™@™„VšXVƒVx@V@bULVJUk‚Ç@ƒ¼ƒXUKk@mmULkaWbk@ƒx@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWK™nk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmz™VVbkŽ™nUVƒb'],
  35297. 'encodeOffsets': [[
  35298. 120398,
  35299. 25797
  35300. ]]
  35301. }
  35302. },
  35303. {
  35304. 'type': 'Feature',
  35305. 'id': '3503',
  35306. 'properties': {
  35307. 'name': '莆田市',
  35308. 'cp': [
  35309. 119.0918,
  35310. 25.3455
  35311. ],
  35312. 'childNum': 2
  35313. },
  35314. 'geometry': {
  35315. 'type': 'Polygon',
  35316. 'coordinates': ['@@VbނVVnUlUX@VKVLlKXXlKXL‚‚nkV@ÞxlbXUWa„b„@šbÜ@XK@aWUXmWaX_Wynw@wnwlK„bV@aUKWUUI@a„mV¯Ŏ¥ô¯ĸU„UÆ@n»¯aƿé@ţ¯nĉĬÝK™óó@™ÑU¼@è™xWô—nƒx™KmkkJWI@UKWaƒUUaamn@lnbWšXXWK™@VxUVkU™V@U™LmlnVWXXVmbUbkVVV@bm@UVnš@bW@@VXx‚n@V„n@bV‚UX'],
  35317. 'encodeOffsets': [[
  35318. 121388,
  35319. 26264
  35320. ]]
  35321. }
  35322. },
  35323. {
  35324. 'type': 'Feature',
  35325. 'id': '3502',
  35326. 'properties': {
  35327. 'name': '厦门市',
  35328. 'cp': [
  35329. 118.1689,
  35330. 24.6478
  35331. ],
  35332. 'childNum': 1
  35333. },
  35334. 'geometry': {
  35335. 'type': 'Polygon',
  35336. 'coordinates': ['@@@VlUV@nanL@V@V@L@blK@V„wl@XalbVKnnl@VL„W„»È@lVUIVK@a@UUw„WUU™šƒš@„_™aƒK™@™bkkm@UƒkõŁxóL™l@¦@Vƒb@bk@VŽƒnVln@Vb„b@xmÆnœ@x@x™x'],
  35337. 'encodeOffsets': [[
  35338. 120747,
  35339. 25465
  35340. ]]
  35341. }
  35342. }
  35343. ],
  35344. 'UTF8Encoding': true
  35345. };
  35346. });define('echarts/util/mapData/geoJson/gan_su_geo', [], function () {
  35347. return {
  35348. 'type': 'FeatureCollection',
  35349. 'features': [
  35350. {
  35351. 'type': 'Feature',
  35352. 'id': '6209',
  35353. 'properties': {
  35354. 'name': '酒泉市',
  35355. 'cp': [
  35356. 96.2622,
  35357. 40.4517
  35358. ],
  35359. 'childNum': 8
  35360. },
  35361. 'geometry': {
  35362. 'type': 'Polygon',
  35363. 'coordinates': ['@@ÇnÅaĉ@ƒU¯¥›UŹ‚ƒ£™WUýUU±JkkUw‚yÞIČxĊĕĊ¯š¥ÆUkţ™UÅÓ±¼™IUx¯UƒÒƑ‚ݐŰƒKÝnğ°ÅU@Žƒ@Vn@þš¼¯šWnŎ°XLWlnVnbWnƒVXxmbƒa—bóUƒlǕUUa™IUmlU™ƒš¥™kƒ¥ĉwkkƒÝɛa@¯™™U¯°mVƒkVnKlƒōÑÇÑU@kl™UġŽkUŻnUW™@š¯ƒk»šmWV£UKnUƒmUw‚w@ƒUIVaX™šwm»Èmmwn¯ċ™¯LĉŽUƒJUalka±Va@U‚k@ƒÛф¯WmnUaɝ¤Ûmƒn¯m±x@wóxÛLġÒUx¯VƒÈ™JUbóz݃ÇKĉ¯ōlÝUŎWl¯nťbÝ@¯ǩLġmV@ƯĢkÆm™ĊkVťLɃmÝXó°@„ĢbVŽóVݦɱ@Ƨaġ„UV„ĠÇÈV¼UVţwmbJÇwˋa™XmǯKkkmŽƒbXšm¼V¼Ǭڲ¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊšxŎƞȘǔˎǬǪnƨŮǬö°»šġ„„ÞÜÆĸÒĊ„ǀbƾèôÈ@¼¯þŤĸƧ°Vb@lÈĊ‚šʠń̐„ȘKǀŽֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊV„óĊÅ@ÞƒĬV@Þīš@°Ž„V@ĸ̃°XτƜĠ@ÈaÜ¥Őƅ‚™nğóĕVġUůƿŋ—ĕƒa±V—UťÇğÑ'],
  35364. 'encodeOffsets': [[
  35365. 101892,
  35366. 40821
  35367. ]]
  35368. }
  35369. },
  35370. {
  35371. 'type': 'Feature',
  35372. 'id': '6207',
  35373. 'properties': {
  35374. 'name': '张掖市',
  35375. 'cp': [
  35376. 99.7998,
  35377. 38.7433
  35378. ],
  35379. 'childNum': 9
  35380. },
  35381. 'geometry': {
  35382. 'type': 'Polygon',
  35383. 'coordinates': ['@@ÈÒŎÒk„mLUŽlŽU„¯nV°šš@°ɜb„ÞĠaÈ»ĸl‚š„LVUÈ@Ċ@ýUm„@@ÆVĠ¯Þm„LƯޏƒ„ѰVVwšJ²»ÆÔšVlŤÅV™¦ĉ°ĉĖċwÝJzVxll²IVVVþšX„¤źœV°¦„VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUƒlÇĸk°XyĊUǔV„ǩnmV»ƒa@ýnK°n@l¥@»ż„Ċ¤m皃@£ČU@mƒmVkÞUƐ±²¹°‚ĠwÅƑŃU¯™›V¯aÈŁšƒÇ»™ġn_°xŎKlxœklx„@Þw‚„„@Æm²b‚DzLlkšWXať¯ĊaœÑšK±w@wƒUÅçV±Uk™@@„¯š¯xƒU™±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþƒ@ĉÈóUV‚Ux„„@VŽUVÝwÅÈǎóVkk¯JǐkmmL@„™KÇx@bkš™@U°ķ²ó`ƒš™šmn¯°ƒUwlÅkUƒ`™¦ɛô™Žķz@ŽÅnǰU¼¯KmVk²ƒJƒ¼ƏÞķôš¤ULƒ@mnğ`™šÇnUxÇ@Ûÿ™U@ƒƒkŻŽ@x@móJkŃ¥VŹĉóÒĉlċ°ķ„Uƽ܃@›x'],
  35384. 'encodeOffsets': [[
  35385. 99720,
  35386. 40090
  35387. ]]
  35388. }
  35389. },
  35390. {
  35391. 'type': 'Feature',
  35392. 'id': '6230',
  35393. 'properties': {
  35394. 'name': '甘南藏族自治州',
  35395. 'cp': [
  35396. 102.9199,
  35397. 34.6893
  35398. ],
  35399. 'childNum': 9
  35400. },
  35401. 'geometry': {
  35402. 'type': 'Polygon',
  35403. 'coordinates': ['@@ލš™nKlnšwX¥WÝXk˜xÞUnƒ°aĊVnUUKlÞĶWXnĠ¥ô»„™@nmVL@¤°™Vz„JšanU@aÆwna@k›ƒU¯šyX_›aĉb™ƒ„wƒéXkWwÅaš¯V¥mƒ¯UƒƒI@ƒš@„mšb°aÈçšUš¥@»‚knwɜƇ°I°ÑÈmVU™¯Xa@w‚W@wšV¯Č¥l¯Uwnm@k˜aUaóKkk@™Ça™b@ށÒWa¯IÇxÛam¼™VUƒxÒl‚@zÝÒ¯bÝaĉVĉwDށW›zJ™mJn²mܯUƒ¯ĉ@ġ¤Åb@²nšmlƒ@@Ž„„U„ƒLVxšV™„U¼Ålma™b@ƒ°™l@WIUƒ¯@mƒ™@™™ó„™„@U›zţyƒXÇU™ÇVUUVLkbWakVWmUbkkƒKUÆ»nƒ°Knk@aƒUVmšnk»l¯Ģ›lw@_kKVU@ƒnaƒ@lUk@¯¥mV@kmbW™b¯Åõa@mkU@kƒÇŽkU@›`@™óó—bl¼Uxƒn„¼šlVȄx@blVkVVnƒ`XÈġÈ@ǃK£ÝJmUUnUĖmlU„mKUn™VÅaUw›Uĉ`¯n¯wW¼nxVŽ™š@bĉnƒ‚kIċŘkXUŽ±Ò™xšÈ@ŽX°`l„œV˜IȯĊV„ƒšVVan@VašUVażVmšblkÈW„ƒWIXa„alL@wVb„„V„¦lL@lĠ™n҄U‚nk‚šL@ÆÞkšÞšK‚bñþW¦Û„ċVƒ„ULUºkÈlŎUxÆxÞUUxšÒ‚x„@XbšL@lÆ@„ÒlXVln@„bm¼ƒJ@„Ån„šƒx@bnšĠm„xVXmbÈè@ŽĊ£ČW˜w'],
  35404. 'encodeOffsets': [[
  35405. 105210,
  35406. 36349
  35407. ]]
  35408. }
  35409. },
  35410. {
  35411. 'type': 'Feature',
  35412. 'id': '6206',
  35413. 'properties': {
  35414. 'name': '武威市',
  35415. 'cp': [
  35416. 103.0188,
  35417. 38.1061
  35418. ],
  35419. 'childNum': 4
  35420. },
  35421. 'geometry': {
  35422. 'type': 'Polygon',
  35423. 'coordinates': ['@@±¯¥@klwU»ƒƒÞÝmwKm¯™™ç@™kVÇUL¯lVUKġ„ġm@a@U„@X£°l°LŎÇ@aōVÝw™ÔƒKUŽÅš„WJ¯lm@ÛVWa™@klĉUmaƒLUanaƒ™ƒk¯J„™™±KkXóÜÅxƒ²Ç‚@„„nUÒĊb°@™ÆkL™Ž™XÇÆ@xÝn—xWxţ„¯¤ƒI@Æn„ƒVV„VlU²Æè„V@x²x™L›ÒĉbŦ°Wb™Xklބš@l¤šXĊ`„wl@ĢÈŎm@bšnV‚Ubƒ„@șÆÛLƒèǚUÒŦlĸ™`°ĮʟÆǓbĉôϚĊƚĢnŤé΀ÑĸĀĊ¦„@@l°lœ¦Ȯ¦ɆÞĊKŤ™ĵĸů„»mفyġ™ķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaU™˜ƛɞÝƨů'],
  35424. 'encodeOffsets': [[
  35425. 106336,
  35426. 38543
  35427. ]]
  35428. }
  35429. },
  35430. {
  35431. 'type': 'Feature',
  35432. 'id': '6212',
  35433. 'properties': {
  35434. 'name': '陇南市',
  35435. 'cp': [
  35436. 105.304,
  35437. 33.5632
  35438. ],
  35439. 'childNum': 9
  35440. },
  35441. 'geometry': {
  35442. 'type': 'Polygon',
  35443. 'coordinates': ['@@šÈÞ@l`UmVƒ¼œŽ‚@nnÆwVlnVVa„LVƒÈ_‚ÿރ@n„a„xÆ@„lš_š@VxnK@llLnxmÈŎJnbUxšI°Žl@n¦‚lÈIlmX¥„k°@šk‚J„k²é˜@klaUaVaU@@ÝnIWnmnx‚k„ºÞ„„aV™°„V@nw‚KšxôbÞ£šVšU„bšþšLn»mƒVw„IšJ°Ž@„nb@°°I„ġUkÇKVƒ™™@ů»lƒ„Lnmƒ£@anK@Ñ܍n@»mL@£™yk„UUmbUÞÝ@kyÇbó»™XUxƒWVzb±mÝbXaƒwUamL¯»@wUKVwm¯ĵJ°ÅUWVk„KVk°wÈVšVуlUšƒ¥škmVamknƒUw¯¯ƒbċ¥ÅKƒk™Kk„™VċVk£kKVw‚Ñ„a@kóyÛ¯ÇVk™ów›š—Xō¥Ç¼ów™Ž¯U±‚k„ƒ@x›IĉÒÅVmÈnšÜ@n°„bUbÝV‚ŽUnnJ¯Į@‚m¦nV܃@„„L°JXb‚Ñ@šaÈb@šllôLVb—b@lmnVxk°ċ¦U°™Ž@xX@xWbš°UVÇn¯Ò¯Jɛƈmxl@¼'],
  35444. 'encodeOffsets': [[
  35445. 106527,
  35446. 34943
  35447. ]]
  35448. }
  35449. },
  35450. {
  35451. 'type': 'Feature',
  35452. 'id': '6210',
  35453. 'properties': {
  35454. 'name': '庆阳市',
  35455. 'cp': [
  35456. 107.5342,
  35457. 36.2
  35458. ],
  35459. 'childNum': 8
  35460. },
  35461. 'geometry': {
  35462. 'type': 'Polygon',
  35463. 'coordinates': ['@@kw‚ĉ—»VamƒƒV¯wƒIóVkl¯™Km™Vō¯ÝWkL@bÝKō¦@Ž™„@š™Lx›@b@l™a@km@@l¯nm@UaÅ@ƒ„óWUXm¥™nƒw`@UUxķôǰğ¦@„VJš_n‚‚IVŽnalxkX„JWn¯šnVƒLšxl¤nnVbklVX@xnxmV@bUK@nm@@xƒV—°±aÅnƒŽkUWnUaƒx@m™n@ƒ¯LƒššmUĀlU@lV@blLUblxklkIÇx¯°‚UXbšaVŽUnšV@°‚LUlnbšX@`°nVmbnÆmV‚kLmK™¦UŽ@X„y@kl@U„°K@¼XbW„ƒš@b„WnLVa„VšƒVz@xlVČ¥lbUxލlV„U@nÆWôn²™VJlU„Ƨ„LnmÜLXa˜n@mœw@wlUlV²mšblwšVȃlLލ„±@lVnUlxnkma@mškšJ@kXV‚U@mn@š¼VXUƒVƒlLnmVbôaVnWV»ÈUl°È¯ÆIn›ÆU@kk»mKkÆġk¯@»mƒk—¯@óÇlÇ@—Vykkl™Uml¯Þ™@w'],
  35464. 'encodeOffsets': [[
  35465. 111229,
  35466. 36383
  35467. ]]
  35468. }
  35469. },
  35470. {
  35471. 'type': 'Feature',
  35472. 'id': '6204',
  35473. 'properties': {
  35474. 'name': '白银市',
  35475. 'cp': [
  35476. 104.8645,
  35477. 36.5076
  35478. ],
  35479. 'childNum': 6
  35480. },
  35481. 'geometry': {
  35482. 'type': 'Polygon',
  35483. 'coordinates': ['@@VKUȚl@šè°šnŽ‚LnxÝބ„V¼kx@l‚¦²°ĊóĠ„™Ċ»š@ÈxšaĊxlwÈVŤa@¯²aÇ£ƒJk£lƒnUÞ@°šô™@y„wl»lIX¥Ǫnw@ÑÞWla„ÅlL@ƒUwĉakƒl@ƒš¯mwna°J„V¯nUVÓÞÑm£²óWaUƒÇ@óÝUçV»ÈkkW@¯‚xV@XlK@wX@Vmm_@wÈݙKU¯ÇwVwÅK¯VƒkƒJ™™™XkWVaƒImޝUk„ÇlVšœĀV°mxóšk„@¼ó„WxĉÜU@Ub‚zÛJÇk@‚ÆnVlԙ@kŽ„x™ô@ĬWL¯ƒƒK@aÛImm™@ƒIUaƒ@™™UŽÇêU¤VÒÇx¯ÒV„šš™lk@Wbĉ¦UbkWV_‚y¯Lƒaó„kŽ@b@nmbkx„°'],
  35484. 'encodeOffsets': [[
  35485. 106077,
  35486. 37885
  35487. ]]
  35488. }
  35489. },
  35490. {
  35491. 'type': 'Feature',
  35492. 'id': '6211',
  35493. 'properties': {
  35494. 'name': '定西市',
  35495. 'cp': [
  35496. 104.5569,
  35497. 35.0848
  35498. ],
  35499. 'childNum': 7
  35500. },
  35501. 'geometry': {
  35502. 'type': 'Polygon',
  35503. 'coordinates': ['@@„a‚V²wVJV_@„LlanÅllŦçÜӚ_šlnƒWaôk„xUš„bmV@È°lèšnk°l¦„`@nnL‚@ÈlÜIyVaV@ĊÛXwôƒ@»lƒô™nwU¯›ÿU™Èklƒ°Vn„JUblXšWšš„I„l°U„ƒVƒš—@aVVVmnL@„lƒ„UUw‚mkƒš£„bV¥VUVwۂƒlaÇÝރmk£ƒLUy¯L@WlkKW_XaWƒ—mƒ„ġU@a™k™‚ƒakXkmVwmŹVƒU™b™WƒónmwnWW£„KÈnV¥ƒ¥„ƒÆ_k™lW„bU¯„V°aôbnaVwmaōInÇmwkK@kmLUw™@™`ƒkÅ@ƒwƒb@m݄ĀÇ`U„ƒKUbmUUkÅxmm@›„»nUVk_Ý@™Ç™¦™VÇè¯b™aƒn™@@„„JV„°Žn„U¦™°ÆbXxWl„êƒxš„ĊaœbW`™zV°œ„@lmbÅx@bmV™bƒI™`™¦@ÒUVUI@ƃL@bš¼@ššŽ@„šlmxnL„°ULƒŽƒÞğޛ°kLUŽƒL™°™xVŽ„n„KVƒl@šzX@'],
  35504. 'encodeOffsets': [[
  35505. 106122,
  35506. 36794
  35507. ]]
  35508. }
  35509. },
  35510. {
  35511. 'type': 'Feature',
  35512. 'id': '6205',
  35513. 'properties': {
  35514. 'name': '天水市',
  35515. 'cp': [
  35516. 105.6445,
  35517. 34.6289
  35518. ],
  35519. 'childNum': 6
  35520. },
  35521. 'geometry': {
  35522. 'type': 'Polygon',
  35523. 'coordinates': ['@@UyȍVƒVUnn@ƒVU„`UblzšJnk‚@Vb„KU„°l„wš„„W°„nkVŽ‚UÈlš£°V@n¥šV„kl™kU˜±U„ƒn™ƒlw¯UkwmKUlmkUmnkym@ō@U„mWÈU°l°anlJškUKlU„¯Èm@kmWV»kkÝLUWUx±b™@¯ma@ƒ¯™IƒJUxn„m¼™K™ýƒa™V™Uݤóa™wLmxU@¯ƒUšƒb݃ƒ¹lmwmnXŽmJ@ÞV@UbVbkblŽ—@±êƒlI™l¯@ƒlW¦knÇJkm¥k@¯™Jmbóa¯bƒUV°ƒakXlšÅ`ƒ„„¦U¦ÇmƒLX¤mXnxm‚„ôšXša„VźUnŽUxlnlW„bššl@bĢV„ƒ˜nX„WbX`lLXk@ްKVz„Kl¤„nÞ݂Èkb„‚܁'],
  35524. 'encodeOffsets': [[
  35525. 108180,
  35526. 35984
  35527. ]]
  35528. }
  35529. },
  35530. {
  35531. 'type': 'Feature',
  35532. 'id': '6201',
  35533. 'properties': {
  35534. 'name': '兰州市',
  35535. 'cp': [
  35536. 103.5901,
  35537. 36.3043
  35538. ],
  35539. 'childNum': 5
  35540. },
  35541. 'geometry': {
  35542. 'type': 'MultiPolygon',
  35543. 'coordinates': [
  35544. ['@@lW²LššƒŽ°I„l„šmbVb„KnbĊVlkš@XbÜU@Žkn°‚XIƒÆ™V„LšÓÞxŎUlôƒ„b°KzU`lXVaĊ¥Xal@šk™™Uƒ°ÑÈwUтV£ÈéVšš„@Vb„Jš@nnÜJ@b„L°„XK@īšóƒwlš@kÓmUÅmK@mƒ_k¥l¯™mkçǯ@nUƒaV™ƒwólXbm„™k™`ÛÔťèkkmÆkbƒK@U`UI±xUƒbWlX„mbVbÅÒólkƒƒIWJkšƒ@ƒz—Kݼ™@™xUx󎃄¯LWb@ŽÅ҄„±¦U`nbťĀUšVb„LšŽ„U'],
  35545. ['@@ƒ¯lwna@mōȯK¯kW¤ƒ@@V@bĢñVLU‚°k']
  35546. ],
  35547. 'encodeOffsets': [
  35548. [[
  35549. 105188,
  35550. 37649
  35551. ]],
  35552. [[
  35553. 106077,
  35554. 37885
  35555. ]]
  35556. ]
  35557. }
  35558. },
  35559. {
  35560. 'type': 'Feature',
  35561. 'id': '6208',
  35562. 'properties': {
  35563. 'name': '平凉市',
  35564. 'cp': [
  35565. 107.0728,
  35566. 35.321
  35567. ],
  35568. 'childNum': 7
  35569. },
  35570. 'geometry': {
  35571. 'type': 'Polygon',
  35572. 'coordinates': [
  35573. '@@ÆLUxÈxV°šLÇÞ@xn`Ü@X@nĊŽÆwnJmwUx‚aUkšw@V@w„aVmlLXÝl@X‚VĢmV°@nl@UUUWK@w„ÿVI²Òlmš@nÝĊýVV@nšJ°„„šUłm@kV¼nK›ĢȤôK„blnKllVk²aĠ¥È¯ĸóVw@V‚_„xšmn¦VWôX„ƒÆ@Vbn@°m@kn@@lšb@k‚aœ@‚wšK@™šƒ@UlKVaƒWX™W²¹lӄw@_°›n@@_lKōķW™@ŽmLUWƒn™»Û@›l_Ç`ƒÛmm°ÅbWb@š—VWbƒUUKDŽÅaġlmkUġlƒ»—Lƒl™Um¦@ޝU™¤ÇkVUml¯ƒƒX™ƒƒx¯kVƒƒLUa@ml™IkyVaƒ_UV@„mmUVU„ÇŽVzUxUVU¦ƒa™¤l„nVxƒVk„@ƒmKUnUU@b™˜U„ƒ„',
  35574. '@@@Žż@™mlkƒġk'
  35575. ],
  35576. 'encodeOffsets': [
  35577. [
  35578. 107877,
  35579. 36338
  35580. ],
  35581. [
  35582. 108439,
  35583. 36265
  35584. ]
  35585. ]
  35586. }
  35587. },
  35588. {
  35589. 'type': 'Feature',
  35590. 'id': '6229',
  35591. 'properties': {
  35592. 'name': '临夏回族自治州',
  35593. 'cp': [
  35594. 103.2715,
  35595. 35.5737
  35596. ],
  35597. 'childNum': 8
  35598. },
  35599. 'geometry': {
  35600. 'type': 'Polygon',
  35601. 'coordinates': ['@@š@ż»˜L„y„@l™XI„Jl„ôkÆÑUanaWƒXkW@™yk@U„ƒLƒmUšwš¯„KVlKœ¯Ġ݄݄VKƒ¯mKnw™k@ƒ™@™™»@a„K@ÅVJVU@њ¥š_Uy¯š@£UKmn@‚ƒšó¼ğ¦WmĵXݎkŽVLmVĉU¯bm„ÝV—wWlXÞW¦™xkmmL™šÝŽœ„±U@Vގ™š@„ÅÈW°X„ܼƨyUĮnŽWŽnXÝxUx°lVXJlôV'],
  35602. 'encodeOffsets': [[
  35603. 105548,
  35604. 37075
  35605. ]]
  35606. }
  35607. },
  35608. {
  35609. 'type': 'Feature',
  35610. 'id': '6203',
  35611. 'properties': {
  35612. 'name': '金昌市',
  35613. 'cp': [
  35614. 102.074,
  35615. 38.5126
  35616. ],
  35617. 'childNum': 2
  35618. },
  35619. 'geometry': {
  35620. 'type': 'Polygon',
  35621. 'coordinates': ['@@šĢȼ™„Çł°bœU°šV‚ƒń‚ÆǖŰnšÆ„ōĬǔaʠůĭš_kķÆ¥VÑș„çÜKšÅ@DŽƒVaU™m@aōnġÇk@ƒxĉ_™Wk£™@݃±KÈ±aÅnƒ@ƒÝxƒ@kw›lkwōL¯wm`'],
  35622. 'encodeOffsets': [[
  35623. 103849,
  35624. 38970
  35625. ]]
  35626. }
  35627. },
  35628. {
  35629. 'type': 'Feature',
  35630. 'id': '6202',
  35631. 'properties': {
  35632. 'name': '嘉峪关市',
  35633. 'cp': [
  35634. 98.1738,
  35635. 39.8035
  35636. ],
  35637. 'childNum': 1
  35638. },
  35639. 'geometry': {
  35640. 'type': 'Polygon',
  35641. 'coordinates': ['@@llĊx„¦šl™¦š„kVVnšJVbǖV„kôV˜a„bnaWw„UXmmamUXkWKō¯Xm°™™»ĉÇ@UVƒK™ķkǼğb'],
  35642. 'encodeOffsets': [[
  35643. 100182,
  35644. 40664
  35645. ]]
  35646. }
  35647. }
  35648. ],
  35649. 'UTF8Encoding': true
  35650. };
  35651. });define('echarts/util/mapData/geoJson/guang_dong_geo', [], function () {
  35652. return {
  35653. 'type': 'FeatureCollection',
  35654. 'features': [
  35655. {
  35656. 'type': 'Feature',
  35657. 'id': '4418',
  35658. 'properties': {
  35659. 'name': '清远市',
  35660. 'cp': [
  35661. 112.9175,
  35662. 24.3292
  35663. ],
  35664. 'childNum': 8
  35665. },
  35666. 'geometry': {
  35667. 'type': 'Polygon',
  35668. 'coordinates': ['@@lǯkÿƒaV¯™VaÈU„¥ÆÇ„Ilxšmnb‚Uœxl™„Uôl°kš„„Wl„š@ô™VwUanUl@„xVkšaX¥‚kU»„aš¯±@kka@ƒUwmUkwƒJk™˜„±k@ƒ™™L@ÝWUwV݃—xÇU¯ŽÇX@m™Åƒ@@yĉ£VmUwȗ»ÇšUn„lUnWU¯`Ukƒ@@„™x„Ž@bÇxX¼ƒVVš¯LšĀk‚ÝLƒ„¯@VŽƒĀ¯lnĊW¦kVÇôkUDŽUK@ţ™U@a™™ó܃UU»ƒ@™¦k@Vx„KVb„n‚š@„Æ™„l„@xšƒbWšnlU„lxÈlV„ȰƄ@¼™„@x„šWxœŎ‚V„šK°„š¥ššnƒÆkŎ@ÈÑm™„K@¥šk@™ô@„nôV'],
  35669. 'encodeOffsets': [[
  35670. 115707,
  35671. 25527
  35672. ]]
  35673. }
  35674. },
  35675. {
  35676. 'type': 'Feature',
  35677. 'id': '4402',
  35678. 'properties': {
  35679. 'name': '韶关市',
  35680. 'cp': [
  35681. 113.7964,
  35682. 24.7028
  35683. ],
  35684. 'childNum': 8
  35685. },
  35686. 'geometry': {
  35687. 'type': 'Polygon',
  35688. 'coordinates': ['@@W™Xk±Ñ@ƒUw™mUwĉwlmn@Æwn£mkIš¥ÇÅ@¥šaƒón£nWWwš£V`Þ@šnVml@xô¼„IV¥ƒkUmkamUkVWwÛ»móƒ£UVÅKmn@x™@kbmm¯a™Xka›VĉaUb݃ƒ²—‚lš„IlxnVVx@„lb@l²™°ƒbV¼lW¦™bUlƒwk@mVVbUxóš™@kƒƒX™ƒ¯lókƒVkš›wVma™nkwƒJÅȃ¦ÇVUbšŽU°„bl°ŽkÈ@x™¦ÆÜ™°@„°„¦óa™VUôlUlbXl@nÜV„„nKlŽnIVÞ°Wš„°U@bnm@¥šIVƒ²Ulƒ°VnalzXyl_Vyƒ¦lƒœLlxš„@ŽÞbšKm„knVWanwƒÑVwČº˜@n_ÞV„aVŽÜIœl@„˜KȚ„VJ@aš£È@˜™@km™„aV¯W@_ƒa¯KmbkÇkLmwƒ@Å¥'],
  35689. 'encodeOffsets': [[
  35690. 117147,
  35691. 25549
  35692. ]]
  35693. }
  35694. },
  35695. {
  35696. 'type': 'Feature',
  35697. 'id': '4408',
  35698. 'properties': {
  35699. 'name': '湛江市',
  35700. 'cp': [
  35701. 110.3577,
  35702. 20.9894
  35703. ],
  35704. 'childNum': 6
  35705. },
  35706. 'geometry': {
  35707. 'type': 'Polygon',
  35708. 'coordinates': ['@@@ƒkXƒ™@a„UUċlk„Jƒk„™@wVJXUWk°W@nKnwlUlš²ƒ„blU@‚lI„l@„XbW„šxnm@lW@w„wU‚JX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmw™aĵV›xUہ»°™ĠǷnýmóX¥ɅĵҏÇ@°²ĊU˱ĮU¤Ç°™Ā¯ɐnżUĊĊĬV@脎@ԃÒU¼l¤nƒĠb„êVĠ°Èy„zVaV‚nUÆL„ašbVl„wÆ@'],
  35709. 'encodeOffsets': [[
  35710. 113040,
  35711. 22416
  35712. ]]
  35713. }
  35714. },
  35715. {
  35716. 'type': 'Feature',
  35717. 'id': '4414',
  35718. 'properties': {
  35719. 'name': '梅州市',
  35720. 'cp': [
  35721. 116.1255,
  35722. 24.1534
  35723. ],
  35724. 'childNum': 8
  35725. },
  35726. 'geometry': {
  35727. 'type': 'Polygon',
  35728. 'coordinates': ['@@„‚nԚlW¼x‚¦@lœVl™lLkè„a@zš¤ƒĖ„¼UxlnUKUbÝlU¼lb@„Vx„V„klJÈwV¯š@ĠlÛ˚nƒbkšÆźÞƒUÈôklmšL„¥‚LœW˜„„™nKUkVa°V„x@IVV@x°bUk„a™a@mV@„@y„w‚L„ÑUwVUšV„‚„U‚bÞVVann‚@XwÇÿš¯²aVamkXaÆ»@»nw@¥›UXaƒkbWa¯KUw@¥m@kwmLU»UU™J@kmU@UUWUƒ@ƒyƒanwmçÛl¯ƒŽ¯UƒmKUmƒwVkmÝXbW@XWÝbƒk¯@±‚w@»U@W¯Å@ƒÇ¥UƒU@ƒƒ™IU™ƒakJƒĀ„ꃰšþƒXkamŽ@Žƒ_J°m‚@X'],
  35729. 'encodeOffsets': [[
  35730. 118125,
  35731. 24419
  35732. ]]
  35733. }
  35734. },
  35735. {
  35736. 'type': 'Feature',
  35737. 'id': '4416',
  35738. 'properties': {
  35739. 'name': '河源市',
  35740. 'cp': [
  35741. 114.917,
  35742. 23.9722
  35743. ],
  35744. 'childNum': 6
  35745. },
  35746. 'geometry': {
  35747. 'type': 'Polygon',
  35748. 'coordinates': ['@@°VlmX¹laĢÒlm„@„„šV𣂂@¦Ģklynn¼lW°z„W„„°VbÈV@lÆbnn‚JškX„šVÆašÅ„W@™ƒUUw@ƒkaV»ÞkVaVLkmVwƒ»„ĕ™£@yƒblçkKkš›U@k¥‚wX»™kmӃ@Wn¯‚I„`@nlb„W™ý„¯ƒé„ÿlI@™XUmWUwƒ@@UJU„Ç„mKUV@x™„ţk¯¯LWƒƒnUxK@ű»Vwa¯š@¤WX@ŽÛ¦@¤ÇIȼWxXŽƒ@Wx—w›ŽUnVbÅèmVa±²UWl@Žk„lȄ¤nôܼXxlUnVlbVn„lU¦ƒJó»@wnkmU™‚Ý@U_™¤XxmXm¤„ô™b@¦Èƙ¦lJn'],
  35749. 'encodeOffsets': [[
  35750. 117057,
  35751. 25167
  35752. ]]
  35753. }
  35754. },
  35755. {
  35756. 'type': 'Feature',
  35757. 'id': '4412',
  35758. 'properties': {
  35759. 'name': '肇庆市',
  35760. 'cp': [
  35761. 112.1265,
  35762. 23.5822
  35763. ],
  35764. 'childNum': 7
  35765. },
  35766. 'geometry': {
  35767. 'type': 'Polygon',
  35768. 'coordinates': ['@@l@š¥„@V¼„Vôۚš@bšV@ŤVLȃlVÈólUX¥mĉ°k„ÿU°@„ƒÞKl™ÿ°KU™„UW»Èw@aƒšw@ƒ„@nm@w›£kÓVUVn„Kš™k¥™£Vamƒ@nkKkbÆǫma—kmLU¥™UmƒÛwmVU™mUƒJ—ÇaUxÇIn`mb@Þ¯b@„nJ@nl„U‚V„lVU„L›W¯—Û`Ç_¯`mš¯I™bĉWċzx±J™x𐝯Uƒƒ_k@™šƒJ@Umb„šXôlLš˜n¦@¼ĊxlUXŽ˜xUbL‚Ġ„UnVĊwlšUš„b@lW„X„‚m²˜@ÞWxXš‚Unb'],
  35769. 'encodeOffsets': [[
  35770. 114627,
  35771. 24818
  35772. ]]
  35773. }
  35774. },
  35775. {
  35776. 'type': 'Feature',
  35777. 'id': '4413',
  35778. 'properties': {
  35779. 'name': '惠州市',
  35780. 'cp': [
  35781. 114.6204,
  35782. 23.1647
  35783. ],
  35784. 'childNum': 4
  35785. },
  35786. 'geometry': {
  35787. 'type': 'Polygon',
  35788. 'coordinates': ['@@lbšW°bnnlaš@@wnmÆLVUkÇlƒ@Xk‚V²±‚bnUÆçUaVmœ˜xXw„@WXwÇ»ÈJ@£Ü¥@XW@£°™‚bUx²¼@ƂLVw„mX„°K°Ťlšƒ@wVUnLȃVƒVIky±wkƒKU¯ƒÅkƒ™XġÑۃlwUwlm@m„nKWašÅm›¯óÇmğb¯alĉUwķbmb@lÞÒVn—šmĀŹ@VŽƒbVŽUnmakLm`@xĉkklVÔVJVn—lV„UnmJmaLUbl‚™zmŽkL™a™‚ō@@zš‚V¦UŽV²kJ„nÜU@˜VXUށL@„lJƒL@bݤUnVŽ—b@xVnlK²„Vx°V„xlI„lkVl²k¤@n'],
  35789. 'encodeOffsets': [[
  35790. 116776,
  35791. 24492
  35792. ]]
  35793. }
  35794. },
  35795. {
  35796. 'type': 'Feature',
  35797. 'id': '4409',
  35798. 'properties': {
  35799. 'name': '茂名市',
  35800. 'cp': [
  35801. 111.0059,
  35802. 22.0221
  35803. ],
  35804. 'childNum': 5
  35805. },
  35806. 'geometry': {
  35807. 'type': 'Polygon',
  35808. 'coordinates': ['@@‚LnÇlk„KnkÆL„ƒUm™ÈxlUœJló°n@ššanŽš„„a@ƒ˜@X_@mÝóóU@a™aU¯mL¯ƒƒkV¯™ÇVwkw@V±Ŏ£@™™@šalw±Vk@m„Åm¯™ÿŃƧIÇ`ōô¯_UVW°IV‚ƒx@xkX@Žmn™wXƒWa@ƒƒkkJ@kVƒa±„k™kVmxmL@‚¯XXlWVUI@xƒš„lƒIklVȃV@b„šlW@„@nUxVblVxkôlx™n„‚y„šnIƻư„aXwlK„bVnƒŽXb‚L„¤„k‚L—èƒVV¼ƒŽ²IlĠVX„ynz°KVx°@VlœLlblKœš'],
  35809. 'encodeOffsets': [[
  35810. 113761,
  35811. 23237
  35812. ]]
  35813. }
  35814. },
  35815. {
  35816. 'type': 'Feature',
  35817. 'id': '4407',
  35818. 'properties': {
  35819. 'name': '江门市',
  35820. 'cp': [
  35821. 112.6318,
  35822. 22.1484
  35823. ],
  35824. 'childNum': 5
  35825. },
  35826. 'geometry': {
  35827. 'type': 'Polygon',
  35828. 'coordinates': ['@@lUXx°JWnnƚXVš„W„X@„šºVLV¯nU‚Vnb™ô„x‚aXmW™XIšŽUb°xlK„l¯œK˜xXÞ°ŽšXÈ¥Ü@„ĉޏU™‚çš»nóƒVma—x‚¯UÅU¥Ý¯@ƒƒç@ș@çĉÅUmU籃ĉKÝxÝ_ÅJƒk¯»ó¯nmèkǀšŽWxœ¼mnUÜġ°@¦@ƒxƒLkŽÇaVnUxV„™šVlnIlbnÆÆKX¦'],
  35829. 'encodeOffsets': [[
  35830. 114852,
  35831. 22928
  35832. ]]
  35833. }
  35834. },
  35835. {
  35836. 'type': 'Feature',
  35837. 'id': '4417',
  35838. 'properties': {
  35839. 'name': '阳江市',
  35840. 'cp': [
  35841. 111.8298,
  35842. 22.0715
  35843. ],
  35844. 'childNum': 4
  35845. },
  35846. 'geometry': {
  35847. 'type': 'Polygon',
  35848. 'coordinates': ['@@°„nKV°šb@bôVÞô@n„VlÒôÆUnlnn@lmkmVkƒaÈkÆÆ„™k¥‚ÅÞ»ÆKXkW¥ÅLmÅkamJUkš™UƒVwUmÈbl„K„w‚@@¥Ģ¯VÛnm›»Xw™lƿ™@kbW™—aʵ@óL›l¯ƽ@™ƒƒLn°ƒÆ@nUl‚²kx™b@‚š@šō¤U²@ŽlxUxšÈU°lŽ„'],
  35849. 'encodeOffsets': [[
  35850. 114053,
  35851. 22782
  35852. ]]
  35853. }
  35854. },
  35855. {
  35856. 'type': 'Feature',
  35857. 'id': '4453',
  35858. 'properties': {
  35859. 'name': '云浮市',
  35860. 'cp': [
  35861. 111.7859,
  35862. 22.8516
  35863. ],
  35864. 'childNum': 5
  35865. },
  35866. 'geometry': {
  35867. 'type': 'Polygon',
  35868. 'coordinates': ['@@@V„Iš™l@„`V„°Å™šw²I‚wČyĊXša°Jn™°_È`Ü_°˜œX‚KVƒkUUƒVkƒ@mmI@ƒ°a@Ýnam_ÈJVwlĉX@„šlUšómaUmVU°UK™¹@ƒƒWƒXU™™WmÅXm¯IWwkVWlÅLݼÆl¦ƒšÅÅÇl„bUllnknm@kmVmóÅkуUW`—@@„ƒb™ƒm™b@™¯mkô›IkVÇwnš„VƒÅKmlƒLklmȁKƒšVĊK°²„`n˜¤n„U„bWl„xVx™LUx@°nXm`VklVxmnnx'],
  35869. 'encodeOffsets': [[
  35870. 114053,
  35871. 23873
  35872. ]]
  35873. }
  35874. },
  35875. {
  35876. 'type': 'Feature',
  35877. 'id': '4401',
  35878. 'properties': {
  35879. 'name': '广州市',
  35880. 'cp': [
  35881. 113.5107,
  35882. 23.2196
  35883. ],
  35884. 'childNum': 13
  35885. },
  35886. 'geometry': {
  35887. 'type': 'Polygon',
  35888. 'coordinates': ['@@Ș¼VxUnĊ¤@z„@šÆ@nÈW°ÈV˜w„ŽUÞVxÞX@ŽšK„šl@ބVaĊbœU@ml£k±lUƒkkJƒw¯UUw±ƒkLUm@w˜aUVmÞ£@a„KkI@ƒ‚KVUW@—ÛVƒmlIU±VU¥™@yğzƧǃƒšƽĠřšÅnī±m@ƒ²¯lƒ°@nÝÆóUll@XnÝVU¦mVV°—„V¼™Jƒn„b@°mbn„ƒ‚@²¯‚¯wVwƒ@@nmxX¤¯L@ŽVLU„m@@l'],
  35889. 'encodeOffsets': [[
  35890. 115673,
  35891. 24019
  35892. ]]
  35893. }
  35894. },
  35895. {
  35896. 'type': 'Feature',
  35897. 'id': '4415',
  35898. 'properties': {
  35899. 'name': '汕尾市',
  35900. 'cp': [
  35901. 115.5762,
  35902. 23.0438
  35903. ],
  35904. 'childNum': 4
  35905. },
  35906. 'geometry': {
  35907. 'type': 'Polygon',
  35908. 'coordinates': ['@@@‚„@VxnXWV@š„bVššJ„„V@ÞÅU¥Ċxš£UWU‚wÅUU¥WVUkĊÇnkV`°LV™„wƒƒnU@™„ƒlbĊ¯„Vnalšš@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆó„ȯw™ÆXbmLƒ‚@nknVxkx܄ĢҚW„Æl„V°„Ll‚²xlz'],
  35909. 'encodeOffsets': [[
  35910. 118193,
  35911. 23806
  35912. ]]
  35913. }
  35914. },
  35915. {
  35916. 'type': 'Feature',
  35917. 'id': '4452',
  35918. 'properties': {
  35919. 'name': '揭阳市',
  35920. 'cp': [
  35921. 116.1255,
  35922. 23.313
  35923. ],
  35924. 'childNum': 5
  35925. },
  35926. 'geometry': {
  35927. 'type': 'Polygon',
  35928. 'coordinates': ['@@V„Ȧ„Æ@X°V@@¼‚x²°@„lÞaWXX@‚aÞWlnUŽ„xVnnL„‚°V„@k‚mĢl@„ak™@mlk°aXƒ±„nwm±™²¯JV²@ƒwW˜—_mƒa„V»ƒU@m¯ĉUф™šJl™„ašbVn„lĸLlƅÛDZwÝ@ĉxó@è™@k™mbƒUĉ°kaƒ„@šmV„„ƒxUš¯KU_mlĉÈVlXUV¦ÆVxVŽVX™¤ĉwV¦ÝÆ'],
  35929. 'encodeOffsets': [[
  35930. 118384,
  35931. 24036
  35932. ]]
  35933. }
  35934. },
  35935. {
  35936. 'type': 'Feature',
  35937. 'id': '4404',
  35938. 'properties': {
  35939. 'name': '珠海市',
  35940. 'cp': [
  35941. 113.7305,
  35942. 22.1155
  35943. ],
  35944. 'childNum': 1
  35945. },
  35946. 'geometry': {
  35947. 'type': 'Polygon',
  35948. 'coordinates': [
  35949. '@@„è@„Þ°V¦VƁ°˜wnb„UÆ»nçÆ@nxܤ²llU°VnÈJސ°UôéšķUklƒô£VVˌKÞV°£n¥ƒ£ȗ™Ýy¯¯mÅkw¯bÇĔğ@Ýn¯ĊƒVğōŁŻƒķJ@Ț',
  35950. '@@X¯kmèVbnJ‚™'
  35951. ],
  35952. 'encodeOffsets': [
  35953. [
  35954. 115774,
  35955. 22602
  35956. ],
  35957. [
  35958. 116325,
  35959. 22697
  35960. ]
  35961. ]
  35962. }
  35963. },
  35964. {
  35965. 'type': 'Feature',
  35966. 'id': '4406',
  35967. 'properties': {
  35968. 'name': '佛山市',
  35969. 'cp': [
  35970. 112.8955,
  35971. 23.1097
  35972. ],
  35973. 'childNum': 1
  35974. },
  35975. 'geometry': {
  35976. 'type': 'Polygon',
  35977. 'coordinates': ['@@Èb˜Ž„InVVšnUÜxn„šVV¦nK˜lnbÅǬlalL@mn„Ubš¤l¦™šƒLUmUVlԜ¤@xmnVl°_XVVmƒkVmș@kn@VƒUK@°KW£nw@m„@Ux°x°@±„mƒna@¯ƒa„mšIU»˜ƒU¯nUV¥ÞUWmk@Vk¯™Ukn›ÑWݐƒĊÛ@Ǧ™W¯Wݗw›Lk°ƒkL¯wVa™WJXšWnbƒwkVƒ™W@kĊ'],
  35978. 'encodeOffsets': [[
  35979. 115088,
  35980. 23316
  35981. ]]
  35982. }
  35983. },
  35984. {
  35985. 'type': 'Feature',
  35986. 'id': '4451',
  35987. 'properties': {
  35988. 'name': '潮州市',
  35989. 'cp': [
  35990. 116.7847,
  35991. 23.8293
  35992. ],
  35993. 'childNum': 3
  35994. },
  35995. 'geometry': {
  35996. 'type': 'Polygon',
  35997. 'coordinates': ['@@°ŽÜknèmx„b„z„@V‚VX@VnV@lšIVVV¼nKlxn@@¦Vx°LXbla„ŽWbœV°£¯™W@nW@™‚aUñVœwWš»@¥ŤÅUÝǓÝóV@ńǎkUVmƒIUwÅVWÇX¹›—@W„¯bkl@nlšƒb@‚kġށn@l'],
  35998. 'encodeOffsets': [[
  35999. 119161,
  36000. 24306
  36001. ]]
  36002. }
  36003. },
  36004. {
  36005. 'type': 'Feature',
  36006. 'id': '4405',
  36007. 'properties': {
  36008. 'name': '汕头市',
  36009. 'cp': [
  36010. 117.1692,
  36011. 23.3405
  36012. ],
  36013. 'childNum': 2
  36014. },
  36015. 'geometry': {
  36016. 'type': 'Polygon',
  36017. 'coordinates': ['@@‚@U±°Iš±n²mx²ƒ˜@œWºXÈÆUVx„JUnlVȍ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUǼóšÛÈķKċ¥X„¥Wwğk™ƒ¯@ƒwķKƒkUm™aƒbkš™IƒšVÒ°Ċ@n„VU¼ƒ‚„bn˜`X—„x'],
  36018. 'encodeOffsets': [[
  36019. 119251,
  36020. 24059
  36021. ]]
  36022. }
  36023. },
  36024. {
  36025. 'type': 'Feature',
  36026. 'id': '4403',
  36027. 'properties': {
  36028. 'name': '深圳市',
  36029. 'cp': [
  36030. 114.5435,
  36031. 22.5439
  36032. ],
  36033. 'childNum': 1
  36034. },
  36035. 'geometry': {
  36036. 'type': 'Polygon',
  36037. 'coordinates': ['@@ÞLš„@xšbV„šVšK°™X°Kô¥Vw@anU„胐š‚lkĊl@wn_lKnbVmU„aUź@nÿ˜™UmÝѯUƒbk„@ÆkxŻ@™aÇX—wƒJƒƒ¯LķÝUĕ™ó™ĸóêWº@b²nmĬ™Æ'],
  36038. 'encodeOffsets': [[
  36039. 116404,
  36040. 23265
  36041. ]]
  36042. }
  36043. },
  36044. {
  36045. 'type': 'Feature',
  36046. 'id': '4419',
  36047. 'properties': {
  36048. 'name': '东莞市',
  36049. 'cp': [
  36050. 113.8953,
  36051. 22.901
  36052. ],
  36053. 'childNum': 1
  36054. },
  36055. 'geometry': {
  36056. 'type': 'Polygon',
  36057. 'coordinates': ['@@Ŏ@ššblKnšykVa‚KnbnIVmUƒ˜kUmUIUә„ƒçmV@bUxó¦¯LW‚¯š™L™UUƒ™a@w™ƒÝKğŚ™ƾ„„ƨÈĠy'],
  36058. 'encodeOffsets': [[
  36059. 116573,
  36060. 23670
  36061. ]]
  36062. }
  36063. },
  36064. {
  36065. 'type': 'Feature',
  36066. 'id': '4420',
  36067. 'properties': {
  36068. 'name': '中山市',
  36069. 'cp': [
  36070. 113.4229,
  36071. 22.478
  36072. ],
  36073. 'childNum': 1
  36074. },
  36075. 'geometry': {
  36076. 'type': 'Polygon',
  36077. 'coordinates': ['@@‚XœÒlmšV°ôÞÅ@m„¯°k„±‚@@aX¹¯VݏÇIUmV¯kk‚±Û£mw@‚Őmèżmô™¼èVš'],
  36078. 'encodeOffsets': [[
  36079. 115887,
  36080. 23209
  36081. ]]
  36082. }
  36083. }
  36084. ],
  36085. 'UTF8Encoding': true
  36086. };
  36087. });define('echarts/util/mapData/geoJson/guang_xi_geo', [], function () {
  36088. return {
  36089. 'type': 'FeatureCollection',
  36090. 'features': [
  36091. {
  36092. 'type': 'Feature',
  36093. 'id': '4510',
  36094. 'properties': {
  36095. 'name': '百色市',
  36096. 'cp': [
  36097. 106.6003,
  36098. 23.9227
  36099. ],
  36100. 'childNum': 12
  36101. },
  36102. 'geometry': {
  36103. 'type': 'Polygon',
  36104. 'coordinates': ['@@lklWXL@VšI‚l@XnJn@VUUalk@mK@kny@UlU@a°™„ƒUU@VmaU@Ua@UWw@ƒn@KmLm@alkšmnI‚m@an@VIUamWÅImwU@@a@K„X@JVL„UVmUaVkUa@m„@@Ulmkk°ƒUaVUlKXbVwVIkaVmUk@KVk@a„aW¯m@w„¥laœX@KmaškVmnUl@nxVKšInU@yVaVIV@na°KlxX@@_lmXšUV`VIV™V@„n@lšbn@@WUkValK@²yl@„„VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUa™LWa—w@m@K@UVVƒ@mVUUVKnL„mVL„K‚bVK@UUIk›mI@mUIVK@IUK@VkLƒ@WU@mU@WmUk@ƒI@VƒJk@WwX_@amK@UUWkIƒ„ƒK@LVb@mVmakL@J@bU@Ux@xƒbmI@`ƒIwm@UbmKUaUWa¯UkJWV@XƒJUU¯LUmV@ma@kkamKwƒLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@U™kUy@I@aUUmbƒ¤U@kUmL@bmJU@Ua@wkLWWkL@Uƒ@VaU@ƒLUakKWbkUWVkKkLVLUV@JVbƒz@Vƒ„@ƒVmUU@kVmK¯@VƒU_™VWakVmIUKUaU@@bml@XU@@V@LmKUV„mVUKƒƒKƒbkaUXƒKUL@x@V@l@„mxU¦„V@ŽlL@V@Ln@@VV@„nlKUaV@nLUbmJnL@VWLkbmV„@@L„W‚„XLlx„VVIVV@x@V²blUVm„LVUœK@kWWXUlV@Xl`„LX„l@@VšŽƒn@VnbVš@lVUVUÈVbš@@`UXU`l@@XUVm@kš@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVƒUVmU@VaUkUKƒVUwmLkUUVVlƒbka™XmwƒKUšVVU@@V±Uk@VWUUm»XamU™bƒKk™`ƒ„™U@UnWW_kKmbUVUVmnUV@„nJVUlšUbU@UV@n@JmI@VmbnVUXlx¯ŽkKmnVV@L@V™bkV™Umm™@Ub¯LmlUƒL@VWLkmkLmmn£WmnKU_mW™š™bnbmxƒ@U¦UJU„@Xmlk¦@‚mnUUm@@Jn@lV„ÔVJnIVW„I@a„ƒÆK@I@aVK„IlŽÞnnl@nl`nbÆX²l@xV„@llbVn²ŽVVl@nn„V@IlW@Un@@kVa°KšnÈmVaVXUlaVƒÈU„VlwôUlynIVašan@lVXb‚Iš@n¥la@Kš_n‚@bÆx@XnJV„nKVz@`VXVšU`@bƒ¦UV@VšIlx„UnV‚K„XÈbšVllšbVbnVn@'],
  36105. 'encodeOffsets': [[
  36106. 109126,
  36107. 25684
  36108. ]]
  36109. }
  36110. },
  36111. {
  36112. 'type': 'Feature',
  36113. 'id': '4512',
  36114. 'properties': {
  36115. 'name': '河池市',
  36116. 'cp': [
  36117. 107.8638,
  36118. 24.5819
  36119. ],
  36120. 'childNum': 11
  36121. },
  36122. 'geometry': {
  36123. 'type': 'Polygon',
  36124. 'coordinates': ['@@lLVl„bVV@nXVlI@JVX„mšn„W°b„IVV@‚ln„@nalVUb„nW‚@kVkÒlbVKn²°bUŽlV²@˜X@`nb„aUI@ƒ°wlU@aXJVI@aVK@wUamIXm‚@XUV@@bV@Vm„ImnUUwVaVKXU‚nVK@akƒVwV@nL@UV`n@@X‚lnIUJl@X¦˜V@aUIVm@anƒV@UwnL@VlbVL@KVVXUWƒ„wUUVUka@UVJnUlbnalbVVn@°„„LV`Þ@šXVxV@@bVlUVVbXnWlXnmlš@XXWVXJmbUI@V„llUVkn@@VWV@Vnb„@VXUJVnn`lLVk„a„»lVšLnw@WV@lInw@WnU@U@m‚knUVó„K‚wUmUXUƒU@@wVJVIl@XKVVVbVI„J@Un@lŽVLnm„b@U@Ul@nUš°VUVJnnVJV@„@mVU@ƒ@wkUVwkKWk™yUUkU@alkÈ@lJ@x„Ilƒ@UUWVkUw@Kn@@kmaƒVUl™UUL™ÇƒUUKl@UUmL@aXU@mlUUwmKkUUVKVUƒaƒKUnK@U@Vl@XUWU„KlwX@šb@K‚@XkV@UwWJka@aUwmV@U™@@U@wUm@»kLWVkIWŽXnmV@VkbmKƒLUbk™Va@aƒa@@aVU@aVak£@ƒ±UkVU¯V™UUƒJVƒUIƒ@kxmUmWUbL›w@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULUš@KUnƒwVaUKƒxU@UmaƒL—m@kVmVa@UkƒmI@ƒ@KmIkxU@@K™U@mmakI@VƒLkmWkkJ™_U‚@V@L@n˜xXbšKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVƒƒk@±z@‚kLUbVl@Xm@™akm@ƒU@UšUJU_™VWŽkn@`W@kw¯LmbU@UJUb@zmV™JULmwk@mVUn™lnb@L›Wkbƒ¦@x°nXŽƒb@bUl@LVlUnlbUJUxWakLUVVb¯„llkn@Vƒ@@nVbUlVbUnƒVUK@IƒW@L@bV@nxÆJnXVbUJm@@bnmJ™nkl@b‚nnK@L„m‚@Xx@VVbV@nb@UVVƒ„¯š@bkV@Vmz@lnLl@kŽVbUVm@mI@Wk™J@UWKkXkl'],
  36125. 'encodeOffsets': [[
  36126. 109126,
  36127. 25684
  36128. ]]
  36129. }
  36130. },
  36131. {
  36132. 'type': 'Feature',
  36133. 'id': '4503',
  36134. 'properties': {
  36135. 'name': '桂林市',
  36136. 'cp': [
  36137. 110.5554,
  36138. 25.318
  36139. ],
  36140. 'childNum': 13
  36141. },
  36142. 'geometry': {
  36143. 'type': 'Polygon',
  36144. 'coordinates': ['@@nU@J‚X@`XLm¦Vb`lšVXXWš@VblČnVšŽlanLnmVLšK@_Vaƒ¥@kUa„@VmVb„aV@XVVzlVVK@knKVmX£VKšLlbnš@b@llL@xĊôXaV@°È@¤„bn„V@@Wl_„V„U@W„nVamw„wVbn@„K‚VšLX@VmVUxlV@šnVV_nK@m‚I@Wn@@IšUĊ@@wVWX@@I°VVm@wmU@m@IUƒV™kƒlkUmmkÅV@@aV@@Wn_UKla@kšaV„šlVanb@k„@@KlVn@@aV@nIWW™UUaVU@™kKmwU@UImKk@UU@w@W@‚™k@™UkWƒ@mk_W@Ua@a™ƒƒ@—¯ƒmV£@mƒUUam@—kWakƒVama@UUm@nw@alaUmnUlVlIœV‚™šLVyk£Vm@k@UUJkƒK@kmKUw™KkWK@UXImyVwnI@m‚ƒkUlkUKkUVmƒw@kkJWUÈm@_k@@aƒaW@U„UJUwU@@IWKkƒmUUV@nVl@bVb@bU‚UXƒakw@ƒWUkbkKƒbm@™xUlkLm@@wmKUX@‚™UaVW™XVmU@@UUUƒxkmWXkKkUWaUaUb™L@`UL@LV`UXmK@VmakLVbkL‚xUJUIVbUVVb¯KƒV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIƒŽUamUUbm@U„kU@JUbW@X„WxUam@kbVVUnUJmUUV@bƒU@UUV™@ƒVk@ƒbƒmULV¦U@V„U`VLUL@xVbn@UJ@nWJXXVŽVV@bkxVbUx‚Lšš@x„¦@šU‚lXUVVlULV@@šnŽU„ƒb@xl„nJVnlVknUlVUbmŽU@ƒbVš„x'],
  36145. 'encodeOffsets': [[
  36146. 112399,
  36147. 26500
  36148. ]]
  36149. }
  36150. },
  36151. {
  36152. 'type': 'Feature',
  36153. 'id': '4501',
  36154. 'properties': {
  36155. 'name': '南宁市',
  36156. 'cp': [
  36157. 108.479,
  36158. 23.1152
  36159. ],
  36160. 'childNum': 7
  36161. },
  36162. 'geometry': {
  36163. 'type': 'Polygon',
  36164. 'coordinates': ['@@lKnbnU‚@Ua@K„L„ƒlJVX@VnL@bW`Xxl@„I@U„Jl@nV@X‚V@nXV„@lK@UVL@JULVJ@nnJlœVJ@VULaƒLUKƒnmKULVVUŽ@nU„š`lIXlln„K@UlJnb@nšV@LV@lwnJ@L@„nJl„@VUbUn@l˜n„KnbVŽV@„wVLUb„xVm@LV™VKXLVKVLXU@VllUX@`lb@bnb‚L@ŽUV@bV@@b@Lœx‚KVanXVƒUUmVUUUaVUky‚UUa„ImK@mUUVUkKU_@W@UVVVIUW„UVaVU@UUKnƒ@k@al@ll@bnL@b„VUV˜X@Vœ@@b‚Knblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@Va„alńK@LVJnalL@LnK„wlVUw‚mX@VXšƒlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@w™mšk„»‚UVW²a@_mW@U@I„y„LVUUKW@@™„LX@VUV@@yVU@UV@nwUUmJka@IU@ƒmƒVkaW@UwUX@`ƒ@kLWUk@mƒkUUm@k‚UUWkUƒkWxk@@VƒK@nV@UVaƒUUJmIkVƒ@UamLUbkVmamLka™@ƒ‚kmL¯WI@wJmwƒx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmƒk@ƒbkb›w@mKUkkU@J@bW@kVWz@bVUa›VUx@„ULkJWbXVVXƒ`@œmJUVU@@Lk@WbU@UJlnXlm„Vx@Ln@‚b@K„LX„WJUUW@kƒaUVUbmV@nnV@n@lVLƒVmLX‚mXkV±@kxÅL›šUbJWIÅJ@I‚mXalkUamKkškL±aVwKƒUU@mÞnbWJX„m„@lbmKULWUUVkaƒbnn@Vl@VVV@VƒbVbnLWLXJWxXLV@@VV'],
  36165. 'encodeOffsets': [[
  36166. 109958,
  36167. 23806
  36168. ]]
  36169. }
  36170. },
  36171. {
  36172. 'type': 'Feature',
  36173. 'id': '4502',
  36174. 'properties': {
  36175. 'name': '柳州市',
  36176. 'cp': [
  36177. 109.3799,
  36178. 24.9774
  36179. ],
  36180. 'childNum': 7
  36181. },
  36182. 'geometry': {
  36183. 'type': 'Polygon',
  36184. 'coordinates': ['@@ƒwU™„aV@nVaUVklmkUUmmIkƒ@w„aVƒm@™U@VKUkVUkWV@™ƒ¥@w™™KVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UƒV@U¥VK„n„al@„Uš@VU@V„V@aVUnVVIVmUUlan@VbXwWƒX@Va@IlVVƒn@VanVVb„lJXIVJlUXL@U@KmUnÑWakU@mkƒJUI@mk™@wUmmUV@JXaWIXWmaUIƒJƒkk@W„nJ@„ƒaUak@›kkJ@kUKU_ƒ@myUóWUkm¥kUmL@KUKm@k_UmVa@ƒk@@UmU@mm_—JWIUVUŽWLUlbVUJÇVUIVwƒKUVk@mU@n@lUL@Km@@l@L™VƒzJmUU¤m@UbV²U`U@@¼Vn@x@Vš@@VnUVx@blbXIVxU@Wl@@L™aW@kxƒLXVWVk@@U@VmLVŽ„L„bUVULVV‚lnLVxkV@nWV@bnKVVk@VL„VšÈVKšVVk„Unb@lm@@LVxUlVX@Vk„ƒJ@wkIÇ@kl@blVVVšzXllLUxlV@x@„UV@nƒ‚U@UImmUIUV™¯mVk@@V@VƒamnUKkm@@VƒIUJUaUUWLk@UJUI@xV@V„VWVnxƒLUômVV„@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn„`nU@bƒb@bVL@VnJ@„l@šV„aU@@_lW@UUU@Unƒlll@XLl@@UX@°bVWVanLlknVV@VVX@VVƒnUŽVLmbXJ@nllXX@`VXƒlmaXVWk@Wkƒw—J@„VL@J‚bnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmš„UL@VUL@V‚a@mXl@nK@UlK„L@Vl@@nkllb@š„Vnn@‚šnV„™V°l„šVInwlKXxlU°Žn@@ƒ‚I@UnVlakUJWkUK@anUWK@_ÞJ@U'],
  36185. 'encodeOffsets': [[
  36186. 112399,
  36187. 26500
  36188. ]]
  36189. }
  36190. },
  36191. {
  36192. 'type': 'Feature',
  36193. 'id': '4514',
  36194. 'properties': {
  36195. 'name': '崇左市',
  36196. 'cp': [
  36197. 107.3364,
  36198. 22.4725
  36199. ],
  36200. 'childNum': 7
  36201. },
  36202. 'geometry': {
  36203. 'type': 'Polygon',
  36204. 'coordinates': ['@@@JVzšl@V@Xn@ll@VlnX@@VWLnŽUVmUULVlUV@blnUlnXVV„K‚xnLlb@lnbU@Vn°KVV„I@WXUlI°VXb‚VVbnLVan@‚x„J@_nJ„a@wVwV@@a@IU@UU@WKXwWIXKmKUa„a@U‚UUUk@@Umm„albVUXVVKnL‚a@knƒWƒXImanÝV@„V‚LUx²blKl™nLVbklWbn@JÆIXJ‚IVaœ™ÆKlw²@lUnWWnK„UUK@k@mmU@mnUVaVU„b@lVXVXIWƒƒK@Lam@@KUwnƒWkkmVIV@Xal@@KV@VUnI@›„_UWWUkam@kkm@ka@mƒk@wkJWIUU@WXkW™XkWWLUUƒ@UakLƒW™XV±VIVWUU@anUWaUK@IU@Vak@@UUKWaƒ@m@ak@@wUkla@mUaUklakwVƒ¯¯@WWUkLkKmaƒ™kLUnV`UxWX@Jkn@bmlƒakkk@ƒb@l¯bm„ƒbJ›b@VXn„bVV@„ƒbƒJUkkKWVU@mœÛVUUW@UVUJWXkVkKmUL@WW@U„Vl@XXKW„XJ@XVlmbUxnnm@UlVnV@XVm¦VJb@šmLkKÇbXblVkn@l@bWnX`V@@IVV@ŽV„V°n@@_naÆVVbUVVbUJnzlVUl‚XkV@Vlx@X„VnxƒbƒKUK@b¯VVUV™L'],
  36205. 'encodeOffsets': [[
  36206. 109227,
  36207. 23440
  36208. ]]
  36209. }
  36210. },
  36211. {
  36212. 'type': 'Feature',
  36213. 'id': '4513',
  36214. 'properties': {
  36215. 'name': '来宾市',
  36216. 'cp': [
  36217. 109.7095,
  36218. 23.8403
  36219. ],
  36220. 'childNum': 6
  36221. },
  36222. 'geometry': {
  36223. 'type': 'Polygon',
  36224. 'coordinates': ['@@nVlw„@VJU„„IVVUšV°lU²V@„l¤Ub@bUV@b‚@„b@bUblšVa„KnLla@UnUWmXlJXUlKV@V_U±Van@V£nV‚I„yšU@K@kn@@LVK@k@mnVl@VU„LUxVJÈUVIU‚aVkXKVVUXJ˜In`@nnV@Vl@@„UbVnl`n@VL@LnKlVn¦VlôXV‚nz„@V`VL@llIœll@Vb„b@ƒmIXƒl@„l„IVJnbWXXJWb@IU‚nVVn@xlš@nVJ„I@W„U°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_šKVa„@VKU¯VLVKn@la„aUkU@maVU„J@k™@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@ƒaW™UUVw@aXKmƒVaUUkšmIƒlUU@wUa™xUmmU™¯™U@WƒLUmVIUym@UVmUa@wmw@çm@aWLU„™JUIUamKmL@™aƒx¯¥ƒkU¥U@±„k„UVmKU_mJUbkKm„ƒLÅǙ_@WWUXUmaVUkK™„UWW@nVxkUƒxmL@KkKmbUI@KƒLkƃbUbW@UbUJUXV`UnU¦mŽVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a›@@U—WVUƒU@amK@akkk@@b@lm„VL@VUVUbƒVVXUJUU@V@XV`lLUVVV@nnLƒJVbVlzUVVbVVnUVVU„'],
  36225. 'encodeOffsets': [[
  36226. 111083,
  36227. 24599
  36228. ]]
  36229. }
  36230. },
  36231. {
  36232. 'type': 'Feature',
  36233. 'id': '4509',
  36234. 'properties': {
  36235. 'name': '玉林市',
  36236. 'cp': [
  36237. 110.2148,
  36238. 22.3792
  36239. ],
  36240. 'childNum': 6
  36241. },
  36242. 'geometry': {
  36243. 'type': 'Polygon',
  36244. 'coordinates': ['@@VJUXVVXlWX@V™xVnX@@`ššULWŽUXÅbWK@mULUUmJ@n¯b@l@VULVx„x‚XU`VXXJVI„V@nm`@nUŽVXn@lWVn@b@Jn@nU@Lm`@Xn@WJƒ¦U@@VnL„lV@@Xl`nIlJnkVL„w@KVK@UšaVL@bVKX™lUUKVK@I„VšL„a@U@WšLUlVL@bU@@blb@VlbUxVbXUVJ@xVL„U„lV@VU„bVLnKl„XJ@L‚b@an@VanL@`VLšKV_UWl@U_„a@WVInlVUUUVm@I@W@wVakIWm@U@ƒXwlaVbnI@ƒm»Va@aXaVLšU„»@aVa@k™KkL@KmU@WƒzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVƒVUVmVI@UkKkLm`UkW@UwWW_„UaU@WakXmK@xUXƒJkƒUUWUk@Wl—mJ@km@@aUKzmyVk„a@kkWVUU¯lmU@@w‚kkmV@Vk@mÅIƒ‚Ukƒaƒ@Ub@m@UUU`mUbWaWmb™X™XKWIXUWm@љ@y@UkIUJUUWLUWƒL@UkVUxW@kaWbKWnXxW¦n„m`XLVlUbVbUx™I@JmLUKUb@VW@@bkL@b@VlU@xkš@L@lƒxXxWXX°V@VVVbUVV@UVVbULVnVJUb²b‚aUb@VVVVInlV@VnXaVUšlI„VUb'],
  36245. 'encodeOffsets': [[
  36246. 112478,
  36247. 22872
  36248. ]]
  36249. }
  36250. },
  36251. {
  36252. 'type': 'Feature',
  36253. 'id': '4504',
  36254. 'properties': {
  36255. 'name': '梧州市',
  36256. 'cp': [
  36257. 110.9949,
  36258. 23.5052
  36259. ],
  36260. 'childNum': 6
  36261. },
  36262. 'geometry': {
  36263. 'type': 'Polygon',
  36264. 'coordinates': ['@@VbXblVlLXWln„wVV@VV@UnšWUXVbš‚@VWXa@kVK„UaVaVkšUlyX@Vaƒ—VmUwUaVU@UÈymI@aU°@š™nWV@VaVaw@IV@VmnLVK@kmmna@™„™VbVI@aV@XbW`U„„LUVVx„@VbUV@bl@VLXblJn¦lL„°°@n™@K@UlLnK„a°LWbnJ„¦UÒV„UllLlVnKnbWnn„V`„w‚@@Xa±™n™l@XKV_„WVkVa@kVyUa@wU£UW@UIVW‚@@a—wWaX_WKkVmUULmak@UJUI@±m»™—k@m»VyUIm™nmmwnkUmVaVIUn_mW@»Vk„@VwkmmUXa@IƒaVm—mƒ@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWULƒ@VakU™@Ub@bƒ¼™VUKWb@bUbn¼@„mJUakbWx@„@VXnlJUb@x@X@JUnVVUVmkUJ@XƒbV`k@VXU`™LUK@_mKUbm@@b@„U`@nlV@b„UnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmŽkLVb@b™l@V@XlK@V@nUJUz„°mށwmLmlXbWVU@UUUlƒIU@VVmV@@¦‚bXbWxX„WlXVWL@LUmkbU@@LVVVJUblzna@WVnš@@lƒIUVnbV@Vlƒbkbm@ULUKV°ULƒ@'],
  36265. 'encodeOffsets': [[
  36266. 112973,
  36267. 24863
  36268. ]]
  36269. }
  36270. },
  36271. {
  36272. 'type': 'Feature',
  36273. 'id': '4511',
  36274. 'properties': {
  36275. 'name': '贺州市',
  36276. 'cp': [
  36277. 111.3135,
  36278. 24.4006
  36279. ],
  36280. 'childNum': 4
  36281. },
  36282. 'geometry': {
  36283. 'type': 'Polygon',
  36284. 'coordinates': ['@@nL@xn@lKVkšwn@„alLlaXV@„lx„bVWV@aUa@aUk@mVUnVl„XL@JV@VxVIVƒX@„b@bl@@`ÇnXVlI@l„xUnlVVLkllV„@nmJUxnzWJ@VXLlŽšLVxnL@l„LlŽVI@V@lUnl¤Uz™Kš@„Vl@š„L‚l„Lnš‚b@VnVVU@k„a‚Knxn@VkVJ@ńUlakmWIUaVanm@_UK@UVWUa@klXam™U@Vmƒ™VIXW„@lUVknVlKVLXŽVXšW@b@VlšnnVL@KXL‚Kn@lb@UnW°@Va„X„WVb°aVa@I¯aUkUaVKVwƒaXk@a„a‚™@wkm@alanUVw@alK@Umkw@UƒaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWšVƒXwƒU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlƒXU`WLk@mš²šWb@ށ@ƒxU_mƒXmmamLkUkKVkUƒVу¥mIXa¯KƒbmLkK@V@Lmš¯@ƒ¯kKm¥kIWaUKk@@aVUUaƒ@UwVUƒKVƒX_WaU@@bUJUaƒš@šmbnn@lULmKUnU@@J‚xUbUbU@mX™š¯@VŽ@bnJÇz@VUVVbVxUn„˜UbW@kz™VUlUbVbƒŽUL@lWb'],
  36285. 'encodeOffsets': [[
  36286. 113220,
  36287. 24947
  36288. ]]
  36289. }
  36290. },
  36291. {
  36292. 'type': 'Feature',
  36293. 'id': '4507',
  36294. 'properties': {
  36295. 'name': '钦州市',
  36296. 'cp': [
  36297. 109.0283,
  36298. 22.0935
  36299. ],
  36300. 'childNum': 3
  36301. },
  36302. 'geometry': {
  36303. 'type': 'Polygon',
  36304. 'coordinates': ['@@@IlVVlnL‚@œxla„al@n„VLlx@x@bXnV@@`mXX`lbnaVL@blV@b„wnx‚I@xXJ°nK‚l„š@lbnKnblUVanKVb„@lUnJVI„VUb@V‚U@m„L@Ul@Xw„llVVXV@lVnlVn„l@XVlK„@@_VWVxX@lb„U„nV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK™™@_W@Umšw@UXWWkUUVWUIVaƒUkJ™UVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWw„w@k@Kl™@wkV@U@alK@aX@@UmIUWUIƒ@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VƒbUWVUk@@wmKkUWLUWX@JmIƒlUkkKWKkLWU@UKWa@bU@@a@_UKWƒUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUXƒ@Um@wklVnUn›lkaUV@„lV²WVklWXXbWlkVkIm`UUƒLƒUU@UWƒx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULm‚šnVVIV`X@'],
  36305. 'encodeOffsets': [[
  36306. 110881,
  36307. 22742
  36308. ]]
  36309. }
  36310. },
  36311. {
  36312. 'type': 'Feature',
  36313. 'id': '4508',
  36314. 'properties': {
  36315. 'name': '贵港市',
  36316. 'cp': [
  36317. 109.9402,
  36318. 23.3459
  36319. ],
  36320. 'childNum': 3
  36321. },
  36322. 'geometry': {
  36323. 'type': 'Polygon',
  36324. 'coordinates': ['@@n@VzUJ‚nVŽ„K@XšVš°nVVnšwVb@xVV„knJl™VVUbn„WL@bUxVVXš„bl@lVXkWƒXwWaa@¥‚@nUUUV@„JVkVVV@XUWanknK‚xnƒ¯VyVI@m@UkL@W@Ušk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaƒV@akU@mV_@ƒa@KWIkƒmLUKƒaUVU@ƒkƒVUK@wUIWVUaVwka@Uka@aV@@aUKVk™K@X@Vƒb™KƒU@JULVLkVWšUL@aUK™b@VUL@LƒxUKmlkImJk_@WU@ƒkmK@UV@„¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mƒUUJWIUWV_WƒwU@mUknVVmxU@@VUV@zU@UVW@ƒK@šX@VLUVƒKƒz@J@VnX@`±bUXVƒ¼™lšn@xmxÝL@‚Ubn°@XWVUxUVVnkbWVXV@Xš`ÆÈ„KnƒlLVanIV`nLVUlƒ²ƒV@V¦„l°¦„w‚b@šnKnLVbVJšIVƒXK@b‚n@ènx@xVbUnV‚'],
  36325. 'encodeOffsets': [[
  36326. 112568,
  36327. 24255
  36328. ]]
  36329. }
  36330. },
  36331. {
  36332. 'type': 'Feature',
  36333. 'id': '4506',
  36334. 'properties': {
  36335. 'name': '防城港市',
  36336. 'cp': [
  36337. 108.0505,
  36338. 21.9287
  36339. ],
  36340. 'childNum': 3
  36341. },
  36342. 'geometry': {
  36343. 'type': 'Polygon',
  36344. 'coordinates': ['@@XV@X°°U„lxkbVlVb@nkbVl@xl@@b@n„‚XbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²šW„XlKVb„@VVXKlXšWlXXWV@VXJlI@x„l@nlbn@lln@lbXalIVK@ƒVwœUVb‚U@aXylUX@@aW@U_UJmU™nVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@W„wVXV@„V„KVVn_lJlUXkWaXWlkXU‚±kU@ƒVUlbœkVmUmlk™¯Ý™™W@mb@¦VxULm™kJUU@ma¯wƒmkX@VóJ±bUVUXÝWk™lWXXlƒxUaƒbƒIğ™Ç@U@mVUKkkm@UJm@XnWV@x'],
  36345. 'encodeOffsets': [[
  36346. 110070,
  36347. 22174
  36348. ]]
  36349. }
  36350. },
  36351. {
  36352. 'type': 'Feature',
  36353. 'id': '4505',
  36354. 'properties': {
  36355. 'name': '北海市',
  36356. 'cp': [
  36357. 109.314,
  36358. 21.6211
  36359. ],
  36360. 'childNum': 2
  36361. },
  36362. 'geometry': {
  36363. 'type': 'Polygon',
  36364. 'coordinates': ['@@VaVLnK@IšJVwUaVaUkWKn_mƒX¥WwXm‚LXalbU£UyV„Å@ݙwm@™°l›LÅUƒmk™mwÛaƑLÝUUm@ȣƃV_„Ó@£UƒƒUVƒ„™¼U°W̄™ÞVbXbôx@b@bmV@ǃ™UÝ@@ĢU`m@ŽnxnIVV‚VX„VL@`@bV@@aXbVL‚@XVlKXLlLVl„knJ@I‚WVXXKlVnL@xl@UVVX„a@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn„@VJVXnJ'],
  36365. 'encodeOffsets': [[
  36366. 112242,
  36367. 22444
  36368. ]]
  36369. }
  36370. }
  36371. ],
  36372. 'UTF8Encoding': true
  36373. };
  36374. });define('echarts/util/mapData/geoJson/gui_zhou_geo', [], function () {
  36375. return {
  36376. 'type': 'FeatureCollection',
  36377. 'features': [
  36378. {
  36379. 'type': 'Feature',
  36380. 'id': '5203',
  36381. 'properties': {
  36382. 'name': '遵义市',
  36383. 'cp': [
  36384. 106.908,
  36385. 28.1744
  36386. ],
  36387. 'childNum': 14
  36388. },
  36389. 'geometry': {
  36390. 'type': 'MultiPolygon',
  36391. 'coordinates': [
  36392. ['@@@UnUlJn„w‚JU°VL@bnVšU„wlJ@XƒŽXVlU@klVUJknl„UllL@bUJ@xULUlƒ„UblVkblbnw‚UXmla@„wV@VK@L@UXaVKVLXWƒUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@L‚V@ln„@LmV@Vx@blnVK„nlJXIlw„J@҄b@nlK@Un@UL@VVVVUUUVK„l„@VUVL„J@UVUUw„@Wm@™„UV„ÈVlbUb@JšLlŽX@@x„„ƒLmŽk@@nlx@bUJUzVJ„@@LVxUV@bWxnLnVVK@_‚K²xVbV@n¥@aVI@b„@l@Va„Knb@n‚`n„mmý„W@ƒU_šwV@VlVV@Vn@n„˜@nI@Jn@°¦VaUU@™„mVVWVaUńU@aVKnƒVbVUmmU@a@kUw™m@aUUmUUJ¯lakU‚aXaWUUaVƒkk„amkmUnVlULƒVlJ@XU@UJWUUw„k@aU@WbkWƒL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑm™nIVJ@kl@XalJVn@KVLœ¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVUƒ»UkVw@Wmk—JƒÅmUUVmwXalLXWWUnam@XkƒJ@UVU@U@W„@@U@I@Wl@Ènlw@KXLWb„lVUkalKUU„VVaV@@wnIlaUmkUƒKWU@KkUkLWaƒKUUWUn@VƒK@LnnWJUIƒVkUWVnV@V™@@XƒK@VUIUJ@IWJkX@VVJ™IƒVkK@I@UVaUWk@m„@wnUWKk@mxk@@„lV@b„xmb@x@VUmLkUƒJ@nVV@b@VkLVbU`¯I›l@™U_UW@UU@™™ƒK¯wm@™xƒL¯¥kIƒ™ƒ‚@bkbƒ@Ua@ƒm@kkW@XVbmV@ŽkV@bWbUbV@„¦ƒxXlmVk@ƒ¦™bkaWL@KUImK@wUK@VUI™b@bmK@LÅy@akXW@kbWlXblL@ŽULUbƒ`@U™kUymX¯@mšUJUUJƒL@Lm@@WX@lU„VlšXll„@l@Èk°V°Ž„X@VU@UVll@XUJVXUVm@@VXLWlnV@Xƒšk@mVULnxV@@bm‚kL@VWLUbU@UVm@ƒb@ķ¥UnmJ@UUVƒkkJUšlÔU`UIW@ƒ°kLUlUI@WVI™U@mWKkXk@ƒ‚WU@bXšW„@J@xX@l@LVl@xšLVxXX@x‚KnxVknb‚KVV@U„L„WlXU`@nUlšX@llVXšVU„KlkUKlI@anKVLXKVaUIVWV_VK@VnLlU„»VKVL„m'],
  36393. ['@@@KlKkUUVVX']
  36394. ],
  36395. 'encodeOffsets': [
  36396. [[
  36397. 108799,
  36398. 29239
  36399. ]],
  36400. [[
  36401. 110532,
  36402. 27822
  36403. ]]
  36404. ]
  36405. }
  36406. },
  36407. {
  36408. 'type': 'Feature',
  36409. 'id': '5226',
  36410. 'properties': {
  36411. 'name': '黔东南苗族侗族自治州',
  36412. 'cp': [
  36413. 108.4241,
  36414. 26.4166
  36415. ],
  36416. 'childNum': 17
  36417. },
  36418. 'geometry': {
  36419. 'type': 'MultiPolygon',
  36420. 'coordinates': [
  36421. [
  36422. '@@VV@XkV@bUbWJU¼Vb@Vnb@bš„@J@bƒL@LV@UVƒlUI@a™KULVb@bkJmx„šlLVxknVJk„‚xnKmnnL@bn`WIXlWLU@UxVbUVmKV„XI@JVIVJ@U„L@Wš@@UmUXUlV„UVJXImm@K„L@UVmVXV‚„LXblKlV@LXV„LlVVnkbmJ@xnXl@šbXa‚@Vana„ÒšL„m‚VnIl‚Þ¦°k@b„@@lV„nJlUnš‚VX_„@lVlK„šV„UUxVLVWVIXJšUlnnWlI@KUaUUVKn@VaVXV@na@ƒmw¯@mUkJUamI@lk@@am@@I„ƒUmVImUUw˜™@anUVaUU@LU@WaWUXWW„wV@VwnU@L@ynbl@@X@a„J@nW@@Vn@„lVLlxnI„lš@@UWKUƒnIlJXIVllIVVš¼XK@aVI„V‚@@bn@VKXLVKVVVInw„J@UWI@mX@WKnI@KmU„UVJUL@V„KW@@k„@aU@@W@InJWUXwWI@Wƒ@¯wkaVaUIl@nŽValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlƒaVmƒkna›wk™UU@ƒU@mUVƒšUVwœl°LVbnJVU™¯la@mX@@UWKXU@aV_V@@JlkUƒ¯@V™nK@km¯k„U@ƒWUW@mmƒU@™kmlU@wkL@WƒUkL@VmLƒJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aƒV¯K@U@UU@WmUL@aU@WV—w@ƒ˜I„xXll@UX‚K@KXXVJna@wWaƒ£naUKV„m@UU@mUmalm@@XkVm@U@VƒLmWU@kkWxU@@bVV@VkXVlƒVƒ@UUk@@ƒmI@KUw„m@UmVƒUUwU@lwkV@IUa@mUaVIVKVa@w@U@™UJkb@n@bmJ@XmlVUxWXkJmUkUUVW™xUlU@ƒaULUšmbU@@‚WXkmƒL@xUV@nUxÇm@„XLWbnlƒnV‚nnUV˜U‚nVVz„@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULka›JbƒU™U@U@lUK@XUJmn™J@bU@UwWa™x@zkJWnUJUUVšVV@bXn@xVb@J™L™m@X™w@`@bkb@VmXUV¯L@mW@@n@V@‚ƒL@K—IW@@aƒaUx¯@U„m@XbW@@L„V@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@‚‚nX@yVIVxXKVLlUVaXU°J',
  36423. '@@@KlKkUUVVX'
  36424. ],
  36425. ['@@UUVUkUmV@ln@VXVK@K']
  36426. ],
  36427. 'encodeOffsets': [
  36428. [
  36429. [
  36430. 110318,
  36431. 27214
  36432. ],
  36433. [
  36434. 110532,
  36435. 27822
  36436. ]
  36437. ],
  36438. [[
  36439. 112219,
  36440. 27394
  36441. ]]
  36442. ]
  36443. }
  36444. },
  36445. {
  36446. 'type': 'Feature',
  36447. 'id': '5224',
  36448. 'properties': {
  36449. 'name': '毕节地区',
  36450. 'cp': [
  36451. 105.1611,
  36452. 27.0648
  36453. ],
  36454. 'childNum': 8
  36455. },
  36456. 'geometry': {
  36457. 'type': 'Polygon',
  36458. 'coordinates': [
  36459. '@@UkVƒ@k‚W@Xn@@K„KVIVVIn™°@nWVzšl@V„_VaVK@kKWaXklaX@lW@bÆz@KnL@ašaVJ@UVL@xnLVJ@LXKlbša„¥l@nUWk„wƒ¥U@VaXa@amLkUƒKmƒ¯kƒmkIUaƒKUIWƒkKm@anw@mlwXIƒmƒUk¯@a@amUƒ`kkKWVkxmUUak_mJmw@w„mXUW¯X›_@WnI@aVwkWWýŃU@WLkU™aUbVV@lUVVnm@kUmV¯™kK™LƒwmVUUaWV™aaWw¯wƒÈ@VULUVUUƒK@nWJkI™l@Umxnbm@kbUJƒa¯bUbVxmLUV™aU@VUUWxkVVV@bUV@XWbnlUbƒbUJlbUV¯b@z„`WbXnmbƒaƒwUwVWUƒbUxmbU@Uam™@Vƒk™VaƒwVaUƒWI@mUKóz@lUlÅ@WIƒb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVƒImƒƒWa@kUaULƒW¯LƒK¯@kbƒL@b™x@J@bmnnlUšlzU`U@@Uƒb@„m‚n¦°bU„Vx@bkVm¼mx@mk™mVV@bkxVn„aVV@bU@mL@b²`lIVV@lXLlš„bVxn@@bl@XllIVšnbVšn°°wlbXw@mVa°lVnU@mš™VLVbn@@b„@@WVnUV@Xlxn`VznJVb@L@bV`V@šUnwšU„@WUXKV@UUlmUUlaXalLšm„bšIVbnJVIlVVaUUnWVXn‚VL‚k@ƒnWnblnlb²x„xVKVXlVXLVW„LlUVJna@wVL„¼@JVX@`@nnx@nWJU@Vx@XXKšŽUblxUš°„LVKVVlL@KnbVUnJ„IlUšƒnKl£VW„x„IlJ@nšVÞUVVnb‚VX@V_°lnK',
  36460. '@@@UmWUwkU@Um@@VkL@V@„„‚V„VkV@nbVa@ƒ'
  36461. ],
  36462. 'encodeOffsets': [
  36463. [
  36464. 108552,
  36465. 28412
  36466. ],
  36467. [
  36468. 107213,
  36469. 27445
  36470. ]
  36471. ]
  36472. }
  36473. },
  36474. {
  36475. 'type': 'Feature',
  36476. 'id': '5227',
  36477. 'properties': {
  36478. 'name': '黔南布依族苗族自治州',
  36479. 'cp': [
  36480. 107.2485,
  36481. 25.8398
  36482. ],
  36483. 'childNum': 12
  36484. },
  36485. 'geometry': {
  36486. 'type': 'Polygon',
  36487. 'coordinates': ['@@‚V@IöalK@UV@@KUaVIVVœLlaVbVWnX@‚@LnUlxl@naVLXVVaVU„J@lUUanWWI„@VlV@Xbƒb@V„n@VmVVbk@kU@V›V@X„J@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@b„x@XVVU@UbVb‚@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV„@WLXLW@U`šnkb@Vl@UL@VVV„L„llX@`lIXb„J˜IXW„L‚aVL@ŽXXW‚Ģ™b@bmK@L@°@Vnxmxšn„K@xVn@VkL@V™Lƒakbl`VnnxVnUlššV@@VVXV`@šœk°JV_UalK@U@aUU@m„IlVnK‚V@U@wnaƒw@akU@ƒl@nwl@XLmV@xnƒl@VXUb@V@JlL„UšJUI@UlWUƒnLVUUaVwV@XKWkXJm_@amKnmmLwlƒUIlmUwkKƒ™nwlI@aUaVKšL@bVJ„kVUU@@K„K@a@I™ƒ@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aƒU@KX@Wan@Vƒ°@Vw„b@bX@˜J@L„K@@U@mX@@n°KVUnW@Ula@a@_šx@WšnšK@IUa@wWm@aUUU™VVVIXmlI@yšwXbVxV@@ašInmVI@WVL@k@VšV„V‚aœIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUkaƒ@UymUV—VUmmU„mmkXaWK@ƒÈnVw@mVU@w„KlnXW@V@naV™VKUk@KVIUWƒ@mk@KXU@Um@@lVƒk@UVJna@UWaƒL@a@ƒXa@kmmVUUk@mkkƒamJ—ImJUUmIm±aUUkambkamVUU@VlbUbVVƒxX„WVUU@VUakU@UmUV‚U@mnUVVnUbVJ@b—UW¥kLVamVkUaWJU_UVWKk@@nl„UVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxƒbkb@xVJƒbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWƒXƒaVakImVƒ@ka@UUƒJ¯aƒX™mmb—KWU@wUUƒaUa™KmU@UXlWb—¼WLUKUb°„UlVbkbVL@VƒšƒJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUz„ŽVL@lnL@b™VVVULmKUk™Jkbm@ƒxVb@V—kƒKVnnV@b@ŽWXU‚„nV„l‚VVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_‚`UbkXVVlÆkbƒ@VLXVV@‚V@k„KXX@`V@@n'],
  36488. 'encodeOffsets': [[
  36489. 108912,
  36490. 26905
  36491. ]]
  36492. }
  36493. },
  36494. {
  36495. 'type': 'Feature',
  36496. 'id': '5222',
  36497. 'properties': {
  36498. 'name': '铜仁地区',
  36499. 'cp': [
  36500. 108.6218,
  36501. 28.0096
  36502. ],
  36503. 'childNum': 10
  36504. },
  36505. 'geometry': {
  36506. 'type': 'Polygon',
  36507. 'coordinates': ['@@°a@aÈbVUlU@aVKnVV„VUlyX¹lWVa@U™VƒnUVU@m™@mUl@„mÞw„@‚xnIVbna@KVI‚J@kwV¥ƒUXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUb™VbšJVbVKXkVKVanU@aWnWUWa@U™nk@mVIVK@wXxlLXbVJVlKœbl@VI@mšaXalVV„VbX@@ašalnkx@b@V‚b@Vnx@bVVUXn¤WXn@Vl@Vlzn@š`@I@KUU@ƒV£namVkXa@aVK‚nnU@anVlKƒa@UUU@amk@»kƒU¯@aš„VWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWaš@nmlIXmWUnwUwWm@wULmaUJkIUaƒaWa—klwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯ƒlKUUVU@mU@UkmaUbmV@b—š‚xVnVUJVnƒ„@Jn@@bl@@knJVblInV°@nx@„mbU@UWUbm@ULVVVb@LkJmXkm™VWIUJUXUKVwƒV™UƒŽkLkUƒ@W`Um™kVmIUƒ@kƒ@@a¯lÝ¥kmJUƒn™KƒÑmbUb@Wb™ak@mWU@UbƒUVVkLlbUVƒkXaWK@LkxÇmk@@X@J@Vƒ@@X@VUV@V„IWln@mbXVWXkKWbnxVUnV„ƘInl@XUxVl„¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU‚@nnVWXXJ@V›¦UK@LUmkIWbk@@lUImJnšVÒVUnVVbVIVĖUxV‚@bnUVL@WV@@X@V„KlXXaV@@bƒlVxXVVIV@@WkI„UVKUkVmlnnŽƒbllU„VbXVWbblVkb°ŽVInVVV@bšnVx@l@bnVVnUŽUam„UL@bƒVVÆUbUXU‚ƒn@šVVUb'],
  36508. 'encodeOffsets': [[
  36509. 110667,
  36510. 29785
  36511. ]]
  36512. }
  36513. },
  36514. {
  36515. 'type': 'Feature',
  36516. 'id': '5223',
  36517. 'properties': {
  36518. 'name': '黔西南布依族苗族自治州',
  36519. 'cp': [
  36520. 105.5347,
  36521. 25.3949
  36522. ],
  36523. 'childNum': 8
  36524. },
  36525. 'geometry': {
  36526. 'type': 'Polygon',
  36527. 'coordinates': ['@@VL@Vl@@IXW@kVUVbnW@XlKVVnU„VlL@b„aVbƒb@xX‚°ÔUxV@kbm@VxkxWJœ„V¦ƒŽ@ÈnšVKšxWXJmV@n„Ò@xVbn@@blLk`VX@bššla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnk‚a„KnwmmXkƍVm„Uš¥l@nb°n@„aVwVmVIVnI@a„¯@mšU°ƒl@@VnI@JV@UV@b@IUbVJmXöºƒzllUbVa@aXUl@„U@llLnKVaUa@UmK@UšwV„bnKV@VwVK@UXƒV@Vbn@‚w@U„WnX‚@„a@m„I„™@UUKlaUaVk¯ƒVaVLXK˜»XaWk¯mƒkğwmW@mIƒVkwƒJUIšÇVwU™UkVKkƒm@UkmU@WÅwm£Vƒ„m¤¯IkJWa™_™lUbmJzÝJk„ƒUÇVU„ƒ‚@bU„Ýn™m¯LUb@`mL@VkL@VƒUmmk@UU±Umka@kUƒ@ķymUkk@mmkÝmUaUakImV@V@VÅLƒ¦ƒJUXmJXšWb@n°Æœx‚¼nV@LlbUŽUbmL¯@ÞbV¤nbVx@bUVlblIœ™@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V'],
  36528. 'encodeOffsets': [[
  36529. 107157,
  36530. 25965
  36531. ]]
  36532. }
  36533. },
  36534. {
  36535. 'type': 'Feature',
  36536. 'id': '5202',
  36537. 'properties': {
  36538. 'name': '六盘水市',
  36539. 'cp': [
  36540. 104.7546,
  36541. 26.0925
  36542. ],
  36543. 'childNum': 5
  36544. },
  36545. 'geometry': {
  36546. 'type': 'MultiPolygon',
  36547. 'coordinates': [
  36548. ['@@ôyVL@nXJV„Ub„x‚bUŽlšU„@ŽšnŽVbV@naVw„a‚VUXVx„x„bnaWmXaƒ_@y°aVUkaVI„aVamkXa@WVU@aUUlUXwVV@UVšbVUnKUwVa°a„bVIlan@manw@VšklJXI@m„LVVVUVK@U„ǃk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKšwVL@akKm@Uwƒ@@XUVk@VUI@wWK@aUV™I@UkK@ƒmL™Wƒ@kImJƒUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb™™@aUWl_kK@am@Ua@wƒÑ@mnUWIX™wULm™@DŽU¥›ƒXIlwUwn@laU@Vw¯ÓW@w„aUaƒb@akKƒUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VšUnWKUL™ƒƒL@mU@UnVJ@b@„UV@Xƒ`m_@l@@bmbXJmnnš@°˜wnn@ŽVLX@V‚@nVl@nk@@b‚l@nn°WlXzW`XXVKnUlxVbUb@‚V„Xb@Ž‚VxÈbVlnbmn@ŽkVUL@„ƒŽmLUVVL'],
  36549. ['@@@ƒ@UmWUwkU@Um@@VkL@V@„„‚@„V@VkV@nbVa']
  36550. ],
  36551. 'encodeOffsets': [
  36552. [[
  36553. 107089,
  36554. 27181
  36555. ]],
  36556. [[
  36557. 107213,
  36558. 27479
  36559. ]]
  36560. ]
  36561. }
  36562. },
  36563. {
  36564. 'type': 'Feature',
  36565. 'id': '5204',
  36566. 'properties': {
  36567. 'name': '安顺市',
  36568. 'cp': [
  36569. 105.9082,
  36570. 25.9882
  36571. ],
  36572. 'childNum': 6
  36573. },
  36574. 'geometry': {
  36575. 'type': 'Polygon',
  36576. 'coordinates': ['@@lL@bUK™xÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@L„l°xXx‚bšbXUVb‚VnU„xšKlL°šnUlVn@UmVU@kUUVašblVXKV@ƄXþlXUxnU@mVK@_@ml@UU„@šblU@KnLVyUw„@@UmkšWVw@UVK@VXzVK@n„VVUUW@kVJnlaš@nKW™kaWL@U—™õb@JU@mU@@_WWƒL@lUU@WUUK„@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUW‚UkUƒƒmVXW@@amUUm„L˜l@UUa„wn@lašIVlnLVKUUšU@amK@kUKƒVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkƒb@mWƒX@Vxm@UaU@W„@VULUxU@mLƒaUŽ™x@VnL@VVbUbmLkK@kƒVk@WV@bUbVakk„yõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯„™V@nƒ°@bmJUUJUnUxƒbm@¯Žmak@™¦ƒVUnŎWlnnmxƒLbmlkL@l@nWVnlÆU„VnIlJ„@šXnK@„lL@VšJVU@bXL@xVJUl@VU@W„@Vxn@'],
  36577. 'encodeOffsets': [[
  36578. 108237,
  36579. 26792
  36580. ]]
  36581. }
  36582. },
  36583. {
  36584. 'type': 'Feature',
  36585. 'id': '5201',
  36586. 'properties': {
  36587. 'name': '贵阳市',
  36588. 'cp': [
  36589. 106.6992,
  36590. 26.7682
  36591. ],
  36592. 'childNum': 5
  36593. },
  36594. 'geometry': {
  36595. 'type': 'Polygon',
  36596. 'coordinates': ['@@nŽlLX„VJ„LVblJ„n°ln„„LlVnKlU@nUUa@WlX@l„n@‚Vb„@la@a„„šlJ°¦„Kšwn@°x„LVkUmmwUmk_la„bšK@UlK@UUm@wƒL™mnwmw@U@¯@KnL@aša‚ġXWW@UKbƒKWX—JƒIWakJ@_kWƒkƒKUU@UVKk@@Ula™mV_X@WKXKƒ@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Wƒw@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yƒI@WœU@UlVl@UanU@Uƒm@U„aWaU@Ukƒ@XJmXVbkV@ŽƒIUVUbWUUKmbk@kwmV@K@mWUXUakb›KUUUJVb@LU@@VkL˜š@VXKlbXšmL™@kbm‚UI@lVXUVƒU@mULWy@UUL@VUx™Xnl@Vƒ@VxUzmK@LkV™aƒ@VVk@@n@`UL@nmV@bmJ@Xœ`WX°WVƒn@xnxnIl`VbnVlwXUlLl‚„_nV@b@bl°„V„nWJkx@nmx@b'],
  36597. 'encodeOffsets': [[
  36598. 108945,
  36599. 27760
  36600. ]]
  36601. }
  36602. }
  36603. ],
  36604. 'UTF8Encoding': true
  36605. };
  36606. });define('echarts/util/mapData/geoJson/hai_nan_geo', [], function () {
  36607. return {
  36608. 'type': 'FeatureCollection',
  36609. 'features': [
  36610. {
  36611. 'type': 'Feature',
  36612. 'id': '469003',
  36613. 'properties': {
  36614. 'name': '儋州市',
  36615. 'cp': [
  36616. 109.3291,
  36617. 19.5653
  36618. ],
  36619. 'childNum': 1
  36620. },
  36621. 'geometry': {
  36622. 'type': 'Polygon',
  36623. 'coordinates': ['@@஼jpnr’``ŽpRVHʘ̤žZt^JÖA˜[†CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXƒCog_~‹I_fGDG|QDUWKBC\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_‹DI`kNDIGEYFM\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_ˆaRUTO@OHATŸ”'],
  36624. 'encodeOffsets': [[
  36625. 111506,
  36626. 20018
  36627. ]]
  36628. }
  36629. },
  36630. {
  36631. 'type': 'Feature',
  36632. 'id': '469005',
  36633. 'properties': {
  36634. 'name': '文昌市',
  36635. 'cp': [
  36636. 110.8905,
  36637. 19.7823
  36638. ],
  36639. 'childNum': 1
  36640. },
  36641. 'geometry': {
  36642. 'type': 'Polygon',
  36643. 'coordinates': ['@@€hIJ¤Ī¯LQDaFßL[VQìw€G‚F~Z^Ab[€¹ZYöpFº lN®D´INQQk]U‘[GSU©S_­c‹}aoSiA£cŁ¡©EiQeU­qWoESKSSOmwŸćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\gDOKMNKWQHIvXDJ\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP…\\Eji`yºEvåà'],
  36644. 'encodeOffsets': [[
  36645. 113115,
  36646. 20665
  36647. ]]
  36648. }
  36649. },
  36650. {
  36651. 'type': 'Feature',
  36652. 'id': '469033',
  36653. 'properties': {
  36654. 'name': '乐东黎族自治县',
  36655. 'cp': [
  36656. 109.0283,
  36657. 18.6301
  36658. ],
  36659. 'childNum': 1
  36660. },
  36661. 'geometry': {
  36662. 'type': 'Polygon',
  36663. 'coordinates': ['@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\ILHbEVd^J‚OHLh@NNBnHP`\\xH@NBRLJTlŽNv_^CTLd@bNDVFbxdFV€UPBTKOGEOUO@OEBXQP[H_EI\\EbeYa@UO_J‹MEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YW‘gEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaŽSPÝZ]XMXSŒ[^oVËNgNKlE RôEø'],
  36664. 'encodeOffsets': [[
  36665. 111263,
  36666. 19164
  36667. ]]
  36668. }
  36669. },
  36670. {
  36671. 'type': 'Feature',
  36672. 'id': '4602',
  36673. 'properties': {
  36674. 'name': '三亚市',
  36675. 'cp': [
  36676. 109.3716,
  36677. 18.3698
  36678. ],
  36679. 'childNum': 1
  36680. },
  36681. 'geometry': {
  36682. 'type': 'Polygon',
  36683. 'coordinates': ['@@®ĂhTBXTRPBRPjLVAR`dKf`TC‚NXMTXRJVdE\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFR’hZXP\\ZHHMA[^wBWXJlW¤EJ[bCTOF‹WWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbO„VNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųE—Tt‰lɂwr}jŸR±E{L}j]HąKÃT[P'],
  36684. 'encodeOffsets': [[
  36685. 111547,
  36686. 18737
  36687. ]]
  36688. }
  36689. },
  36690. {
  36691. 'type': 'Feature',
  36692. 'id': '469036',
  36693. 'properties': {
  36694. 'name': '琼中黎族苗族自治县',
  36695. 'cp': [
  36696. 109.8413,
  36697. 19.0736
  36698. ],
  36699. 'childNum': 1
  36700. },
  36701. 'geometry': {
  36702. 'type': 'Polygon',
  36703. 'coordinates': ['@@bRFnHNbHŒgN@NPEnbXP@bND`NT\\@\\QZb@`@J]V@XhžDpW„nCJGHGXO@CR§FANHVKLF\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\RHTFACQTIAUPOU@MG__IaYSFQK‘NSbORHXCZeTFJg„B`YBMNMFi~IVDV[tGJWXGDQRGF]ˆJrALgESLSAYDGIaFeXQLS\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd'],
  36704. 'encodeOffsets': [[
  36705. 112153,
  36706. 19488
  36707. ]]
  36708. }
  36709. },
  36710. {
  36711. 'type': 'Feature',
  36712. 'id': '469007',
  36713. 'properties': {
  36714. 'name': '东方市',
  36715. 'cp': [
  36716. 108.8498,
  36717. 19.0414
  36718. ],
  36719. 'childNum': 1
  36720. },
  36721. 'geometry': {
  36722. 'type': 'Polygon',
  36723. 'coordinates': ['@@ºŸx‹JYZQ”IŠYXLl@dR\\WZEn]bA\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZ‰Fu_@WMKAUˆ}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\@ÊJÒgòUĪRlR°KĮVŽLJ'],
  36724. 'encodeOffsets': [[
  36725. 111208,
  36726. 19833
  36727. ]]
  36728. }
  36729. },
  36730. {
  36731. 'type': 'Feature',
  36732. 'id': '4601',
  36733. 'properties': {
  36734. 'name': '海口市',
  36735. 'cp': [
  36736. 110.3893,
  36737. 19.8516
  36738. ],
  36739. 'childNum': 1
  36740. },
  36741. 'geometry': {
  36742. 'type': 'Polygon',
  36743. 'coordinates': ['@@ńZƂt̬æßFuz¹j_Fi†[AOVOFME_RBb]XCAKQKRSBQWSPY\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\GGUFcHKNMh@\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\yDI`KJIdOCGRNPNtd\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\c^ÍÞ'],
  36744. 'encodeOffsets': [[
  36745. 112711,
  36746. 20572
  36747. ]]
  36748. }
  36749. },
  36750. {
  36751. 'type': 'Feature',
  36752. 'id': '469006',
  36753. 'properties': {
  36754. 'name': '万宁市',
  36755. 'cp': [
  36756. 110.3137,
  36757. 18.8388
  36758. ],
  36759. 'childNum': 1
  36760. },
  36761. 'geometry': {
  36762. 'type': 'Polygon',
  36763. 'coordinates': ['@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\ZbLHTGj\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\NZZNGlLRRGLJTV@hPZANN^@T\\NEPPbDZXO`d^HSvcJDIV\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{uƒ­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\EfFVE\\F`'],
  36764. 'encodeOffsets': [[
  36765. 112657,
  36766. 19182
  36767. ]]
  36768. }
  36769. },
  36770. {
  36771. 'type': 'Feature',
  36772. 'id': '469027',
  36773. 'properties': {
  36774. 'name': '澄迈县',
  36775. 'cp': [
  36776. 109.9937,
  36777. 19.7314
  36778. ],
  36779. 'childNum': 1
  36780. },
  36781. 'geometry': {
  36782. 'type': 'Polygon',
  36783. 'coordinates': ['@@T\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\XM\\JNBH[PYZ‡úYzŸ`Ċ\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\ELT@LYTD‚aFENF\\lj'],
  36784. 'encodeOffsets': [[
  36785. 112385,
  36786. 19987
  36787. ]]
  36788. }
  36789. },
  36790. {
  36791. 'type': 'Feature',
  36792. 'id': '469030',
  36793. 'properties': {
  36794. 'name': '白沙黎族自治县',
  36795. 'cp': [
  36796. 109.3703,
  36797. 19.211
  36798. ],
  36799. 'childNum': 1
  36800. },
  36801. 'geometry': {
  36802. 'type': 'Polygon',
  36803. 'coordinates': ['@@D\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_ŒCn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\f{pqD[LAVXRCH{HC`eŒJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@‹haGGMEmaQ[@MESHaIQJQ……MckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@Tƒfg‚L^NH\\@heTCZaESNObHPƒHeZF\\X^ElM^F^'],
  36804. 'encodeOffsets': [[
  36805. 111665,
  36806. 19890
  36807. ]]
  36808. }
  36809. },
  36810. {
  36811. 'type': 'Feature',
  36812. 'id': '469002',
  36813. 'properties': {
  36814. 'name': '琼海市',
  36815. 'cp': [
  36816. 110.4208,
  36817. 19.224
  36818. ],
  36819. 'childNum': 1
  36820. },
  36821. 'geometry': {
  36822. 'type': 'Polygon',
  36823. 'coordinates': ['@@TP\\pATHTGlZDJGAQjE\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\KNbMTLjJJRFP`“pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\EhBN^HpXGNDBNNBnIß‹Å_g{³So]ã@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh'],
  36824. 'encodeOffsets': [[
  36825. 112763,
  36826. 19595
  36827. ]]
  36828. }
  36829. },
  36830. {
  36831. 'type': 'Feature',
  36832. 'id': '469031',
  36833. 'properties': {
  36834. 'name': '昌江黎族自治县',
  36835. 'cp': [
  36836. 109.0407,
  36837. 19.2137
  36838. ],
  36839. 'childNum': 1
  36840. },
  36841. 'geometry': {
  36842. 'type': 'Polygon',
  36843. 'coordinates': ['@@`ZĤd–`òüˆ˜ “BSPGP@VSbQ`‡@]HC~T^SE]N]FkW]E[fY„GGOPaTMbFDYfS@g[MGK]h„e@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI‡~BVNL@X`‚EvYŠwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WK‰Z“JYRIZwŒ¹ '],
  36844. 'encodeOffsets': [[
  36845. 111208,
  36846. 19833
  36847. ]]
  36848. }
  36849. },
  36850. {
  36851. 'type': 'Feature',
  36852. 'id': '469028',
  36853. 'properties': {
  36854. 'name': '临高县',
  36855. 'cp': [
  36856. 109.6957,
  36857. 19.8063
  36858. ],
  36859. 'childNum': 1
  36860. },
  36861. 'geometry': {
  36862. 'type': 'Polygon',
  36863. 'coordinates': ['@@jD`hNd\\^dZädĒH´Op@ˆùZY\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\QPRjQTAdgNOPgQaRSê'],
  36864. 'encodeOffsets': [[
  36865. 112122,
  36866. 20431
  36867. ]]
  36868. }
  36869. },
  36870. {
  36871. 'type': 'Feature',
  36872. 'id': '469034',
  36873. 'properties': {
  36874. 'name': '陵水黎族自治县',
  36875. 'cp': [
  36876. 109.9924,
  36877. 18.5415
  36878. ],
  36879. 'childNum': 1
  36880. },
  36881. 'geometry': {
  36882. 'type': 'Polygon',
  36883. 'coordinates': ['@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\QhATUfAtUasñiāEoI]eYǯ@aKmaeƒWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj'],
  36884. 'encodeOffsets': [[
  36885. 112409,
  36886. 19261
  36887. ]]
  36888. }
  36889. },
  36890. {
  36891. 'type': 'Feature',
  36892. 'id': '469026',
  36893. 'properties': {
  36894. 'name': '屯昌县',
  36895. 'cp': [
  36896. 110.0377,
  36897. 19.362
  36898. ],
  36899. 'childNum': 1
  36900. },
  36901. 'geometry': {
  36902. 'type': 'Polygon',
  36903. 'coordinates': ['@@\\OnVBFKHPJCJOJTDB\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\DXT\\EffAP\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqB‡IE^QHCRWHIXsHU\\UC}JEjMNAN_ZƒAIhSEYfWDQGaPMTL’ERZTJb``NHV@'],
  36904. 'encodeOffsets': [[
  36905. 112513,
  36906. 19852
  36907. ]]
  36908. }
  36909. },
  36910. {
  36911. 'type': 'Feature',
  36912. 'id': '469025',
  36913. 'properties': {
  36914. 'name': '定安县',
  36915. 'cp': [
  36916. 110.3384,
  36917. 19.4698
  36918. ],
  36919. 'childNum': 1
  36920. },
  36921. 'geometry': {
  36922. 'type': 'Polygon',
  36923. 'coordinates': ['@@JjDNdJ\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMK”oO_QEIIKiNSMa[LqOKOaVMWMGMDY\\_IKrL\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\@tfNDNOJ@Z{TeTJZ@VU€cB[OBOeeQT@^OXBJb\\AbWTF`RCJFH\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL'],
  36924. 'encodeOffsets': [[
  36925. 112903,
  36926. 20139
  36927. ]]
  36928. }
  36929. },
  36930. {
  36931. 'type': 'Feature',
  36932. 'id': '469035',
  36933. 'properties': {
  36934. 'name': '保亭黎族苗族自治县',
  36935. 'cp': [
  36936. 109.6284,
  36937. 18.6108
  36938. ],
  36939. 'childNum': 1
  36940. },
  36941. 'geometry': {
  36942. 'type': 'Polygon',
  36943. 'coordinates': ['@@FJp@fxpQ\\ApN\\GNPNBM`HLMrXLXj\\PEHnI@WUCEM\\GTc\\GZYHTPBHRCPTd€H\\K\\@HXi–BJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLƒUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXEŒSPaDI\\£FkXWIAX]xB\\GN'],
  36944. 'encodeOffsets': [[
  36945. 112031,
  36946. 19071
  36947. ]]
  36948. }
  36949. },
  36950. {
  36951. 'type': 'Feature',
  36952. 'id': '469001',
  36953. 'properties': {
  36954. 'name': '五指山市',
  36955. 'cp': [
  36956. 109.5282,
  36957. 18.8299
  36958. ],
  36959. 'childNum': 1
  36960. },
  36961. 'geometry': {
  36962. 'type': 'Polygon',
  36963. 'coordinates': ['@@TCNOLBTLBPx\\AJdl†NR†RIbJTGNF\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIj•GW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIŒP`@VZbaf[FFJG`O\\WRFA@PVPFPPH'],
  36964. 'encodeOffsets': [[
  36965. 111973,
  36966. 19401
  36967. ]]
  36968. }
  36969. }
  36970. ],
  36971. 'UTF8Encoding': true
  36972. };
  36973. });define('echarts/util/mapData/geoJson/hei_long_jiang_geo', [], function () {
  36974. return {
  36975. 'type': 'FeatureCollection',
  36976. 'features': [
  36977. {
  36978. 'type': 'Feature',
  36979. 'id': '2311',
  36980. 'properties': {
  36981. 'name': '黑河市',
  36982. 'cp': [
  36983. 127.1448,
  36984. 49.2957
  36985. ],
  36986. 'childNum': 6
  36987. },
  36988. 'geometry': {
  36989. 'type': 'Polygon',
  36990. 'coordinates': ['@@VÈÞ@Žkx˜nXްVÈa°V@kôw„b‚š„JVškXlVUx„„@ŽlL@xkVV°ƒ„VbxlVUnVxk@ƒ„ƒKkŽVb„Il„@°kVl„@„™lÆnkll@@V„VXƒŽš@V„²bUlƒVlV„U„VÇn@nkJšŽlkVbœ@›x²V@n°VUnlKU„n`@n°bWLnVUblVUVVbknV`°kkŽl@@V°@nz„J@XšxlWXb°n@bƒĠlbXb™bVbƒJ@Všb„a@„„@lbUbšVmnœ@lšVmnIW‚œ@WbÞ@„n@x°@š„ĢaƐéϚnœ„‚lȝĠŻÈwm@ôçU™mm£Xy°UV™›@wÈ£Ǫ¯kõÝçUњ™Uķ‚ƒĢkVфÆšÞU°nŎ¥ČUĊx°m°¦żVƐœx°ƒÇ£@y„UônރÆ@Èĉ°Kô¦šW„kWU—bÇ»@™ÈĕWÇÈ£ŤU@›n£ÆUUKVamanwŃmÝJ¯k@JƒIkaVaUUÇbkaÆÑkWmÝUۙ™Ý@™ƒwnU±ƒ@kkV¯KUkƒJƒ¼U¦ƒšÅ@ówķaķůV¥Uaó@Åwmƒƒ_kVƒwĉ‚ĉmmn_V»™a@U™ƒVwķóƒ‚U¦LǫéóXÇmōLǓÇķxÝkƒƒĉ™kmakbUͰ@W¼„@bƒšÈÆ@Ė™L„l@„°J¯„mkl¯L݃±L—amJ@¼ƒ„™VƧUó„™UX˜ċb¯ńVbkÆÝI@llx„k°V²šV@Uxގ˜L@b„@b™`ƒšÇzkókݤ@ğ¯Wƒ™LĉǙLmmnċVkbUaƒL@ޝ„‚bU°ğL݂Ý@'],
  36991. 'encodeOffsets': [[
  36992. 127744,
  36993. 50102
  36994. ]]
  36995. }
  36996. },
  36997. {
  36998. 'type': 'Feature',
  36999. 'id': '2327',
  37000. 'properties': {
  37001. 'name': '大兴安岭地区',
  37002. 'cp': [
  37003. 124.1016,
  37004. 52.2345
  37005. ],
  37006. 'childNum': 3
  37007. },
  37008. 'geometry': {
  37009. 'type': 'Polygon',
  37010. 'coordinates': ['@@k›ƒϙmƏêġb™ƒ¯@@wƒmÝ@XV@IlŽl@bUxl¯VlV™bV@ULVlUV™_kx™VVV™ÈÝJ@„¯šU„™lm¯x@xóÒĉ¼m„¯Wƒxţ@Uz¯ƒWwnUwťƒ@knƒWƒ£óVƒUUwğyó¦WI—Vmm™I@±kwÇ@@bƒ@ĉ¼ó@¯wó@¯aó¼›KՃaUwmWUwÅI@aƒKó@Ua™LƒaƒVÅwō¼UUÝl±I—¤VxÇx@zkJmnn‚mbnz™xlŽƒl¯ČkJl™°@„kb„Žmx@x™@kêmVnŽWxôXšxU°„bWLóJnÇWĵ„V¦™ŽƒUUb™b™ÆġK™šk¯™VU±aXmċÑUwĉKġ„k„™ŽVxk„ÇKkbƒIƒ‚ÛXWl¯bƒŽ™X¯K™bĊš„„ÞVƚnŽĸ²lxUްn°òÈb‚¦—xVbƒŽƒ@¯„Vx@¯VķÞČlĊ°KĸŽȘI°¤ČIôŽò»ƨnȰKǬ¦ôWŎÈƨwlƒnKVXmbX`lbšwkVW‚XXŽ„L°a„ƾaĊ£nƒ°@°¥ŎzÞ¥‚»œalwôkƒJ„a@ĶK„£„bU°ĊxźVÈUĠ¥ƨ™VI@XU°x°Ln¥šw°UmwXm݁V¥Ģް@nU@mÆ£š¯lKœšÜw@aÅU‚¥UaÝIkmV²‚nn@Ķ»@Uk¥VKÞ@ÞÛ@ƒkVmĢa@_ƒJómƒǖ¯Æw—óÇa@alƒUwšwĢřšk@wÆWXUWXƒWa™m@_ƒ»ÇéXaĸwVa@ÝKkUWkX‚kšKXxƒn@lĊV@¯m¯nřÆwš¥'],
  37011. 'encodeOffsets': [[
  37012. 130084,
  37013. 52206
  37014. ]]
  37015. }
  37016. },
  37017. {
  37018. 'type': 'Feature',
  37019. 'id': '2301',
  37020. 'properties': {
  37021. 'name': '哈尔滨市',
  37022. 'cp': [
  37023. 127.9688,
  37024. 45.368
  37025. ],
  37026. 'childNum': 11
  37027. },
  37028. 'geometry': {
  37029. 'type': 'Polygon',
  37030. 'coordinates': ['@@°`„_šJlUšŽ@„„@V¦°JUšŽnLôlnŤ@@šÈaUÒVbkbl¤ƒzk°ÇVÛô°IlVUVôU„xÆU„Ž@bźĀ„º@¦šb@l²‚UVlœ@°ÒĠxšnXxÆVô¼Þ@Üx²KލlƒVѰUȰôlwô@²ƒĸ°„lanV@„šVŎUll@bÈnÜm„wĢ@la@ÝÞb°UXb˜lŎ²ÆškšV‚I@ŽnJnĠްknƒÜbĢwna@a˜kÞKƒĀ„a‚™œ‚‚IVbU¥wĠwkô˜xnLƒċVçkaUƒ±IUmnġW„°WôĉšalƒÞÅĵ¯@W¹XÝaƒb¯a±X¯ºLƒaVƒmkLóƒƒbkaƒVUKVkkKV_@aÝykk±L@ƒÅU@yV_™aU¥ówÇx™@UkVƒn@lƒkÅlwšWVwUkĉmkklW@šašbVwnWWƒ—wWL™™@Ušƒ™UƒÇLšÇmƒ„@wƒJĉƒL¥@ƒÝ_@a¯y„UWw¯ƒ¯Uġx¯aÝXVmaU£ó±›¯nwƒa¯óÅVƒXman™„Uƒ›lUXkWa@mkI„›ğaƒm™IklÇU™„kĊƒƒzkKƒš„lU„ōĬlš™„@ŽnX°@llUxʲmKĉVWwk@UbUK@bmVmI—ƒVmwaWxXlWȁšmºšÞÆbUxV@ĵńWÆĉLkWUbƒaWzkbĉ`U„±LklōwUVÝ£™UW`Uwk@mk¯VkaõVX@WbL™K@XƧºWzxƒK@lmX@bkVVÆk¼Vbk@Vn'],
  37031. 'encodeOffsets': [[
  37032. 128712,
  37033. 46604
  37034. ]]
  37035. }
  37036. },
  37037. {
  37038. 'type': 'Feature',
  37039. 'id': '2302',
  37040. 'properties': {
  37041. 'name': '齐齐哈尔市',
  37042. 'cp': [
  37043. 124.541,
  37044. 47.5818
  37045. ],
  37046. 'childNum': 11
  37047. },
  37048. 'geometry': {
  37049. 'type': 'Polygon',
  37050. 'coordinates': ['@@Þ@ށĠKV¯a°ƒ@„KVblaČU‚mnnšKĊȚKX„°ŽĠ@Þ£ôllÈy„™š_@a‚ƒ@a—KݍVwU@±™¯Uƒlkw@kÞJlÅUa°ŃČaW—šVôƒƨVšU„ƒ@»nI˜b²Kބ°Klkn°ƒ¯I@ƒƒkšK@ĕÇń™@aƒX»¯@VĵlaÿVamI@aÅÝउýƒĊȗJƒôȁÅkmƑۃ@kxġ@@l™aVk¯»ƒīŹaƒkƒ¥Å¯™JUaWU@@w™aƒ»„KUkÆkUm„UmwÛ±±UUbUŽUXƒwWwÆÝk™lkUanaWwnKl™kal¯ka™ƽa›kÅx™a¯@™amb¯V™lÇwÛĀ™V@x™šmêVƜVV‚aôV„wÈx@šˌx„¦VÞ¯VšlmX@‚ƒL@¯Ua¯LmV@„„°X„ċK™V™ƒ@UƒÈ@‚¥@w—ƒġIU™km¥Źwƒ¦¯lmn@°kxVV@¦óam„n¦l@nx™lĉVóšmx™n™ÒĉĀĊ¼„þ„šǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVa™mVIkmô„lxkXÞþƒbl„ƒl@kV„ƆƒV„xV@š¼VÒ@šŽUŽšnnނJ'],
  37051. 'encodeOffsets': [[
  37052. 127744,
  37053. 50102
  37054. ]]
  37055. }
  37056. },
  37057. {
  37058. 'type': 'Feature',
  37059. 'id': '2310',
  37060. 'properties': {
  37061. 'name': '牡丹江市',
  37062. 'cp': [
  37063. 129.7815,
  37064. 44.7089
  37065. ],
  37066. 'childNum': 7
  37067. },
  37068. 'geometry': {
  37069. 'type': 'Polygon',
  37070. 'coordinates': ['@@U`lLUlVL„Ulb„aô„lKnŽU„„b‚K°¹²W°b„aÞb˜knyUlUkamř²L@m°@lšmš²n`ôÅlK„x„ÜKnxV@„l@œƒ›ÅXyW_k@™wm™ŹĕmƒX™»‚ƒÛ™l°ƒôšÈ„»š—ô˜ô_WW@Uœal»šwU@@wšUVƒš@VƒXI@w‚Ģ͑ÞȻ›aU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇa™wÅaݰ¯nUa±a™ƒ™@¦õÆğ„@„™@Åb›xU܁nÇłlb¯¦„ôó»mƒ—@±ƒUk@Wwƒa¯xU„V°ƒxXbǎŁUV™™ƒK@¹ƒKUaȯ@ōݙXƒal™ƒlÛkalÇUǫÇńÇakbÝƆ¯nlš¯Ž@¼™VUx@x¯W¼™Æ¯šmĖ„Ĭ¯ČƒVk‚ķÅmxœ°ô²V¤‚bUnÞW°bĢw°V°„XxƒV°z@bÞ`@„‚¦„KĊŽ„I@xƒŽn„™ÈÈK‚„šV™„@VššXK˜xX„mXUx™a™b@‚kXllĊnVlUx™XkxlÆk„m@U„Vlš@ÈwôxV¦šbU`@zÆV@„²KllÞz@b'],
  37071. 'encodeOffsets': [[
  37072. 132672,
  37073. 46936
  37074. ]]
  37075. }
  37076. },
  37077. {
  37078. 'type': 'Feature',
  37079. 'id': '2312',
  37080. 'properties': {
  37081. 'name': '绥化市',
  37082. 'cp': [
  37083. 126.7163,
  37084. 46.8018
  37085. ],
  37086. 'childNum': 10
  37087. },
  37088. 'geometry': {
  37089. 'type': 'Polygon',
  37090. 'coordinates': ['@@ऊþÆÞ@bnJUb‚ĀnblŽĊš„„ÞlĸwǔÈŎKÈnôWǬê‚KV¥„ĸôUxš„@VšbU¼m`nnĊŽĊ„xlUšmkaVÿšLšwš@°»UmbKmݙUšwUmVknKUUl¯ƒKU™ƒUȃ‚™nK@ĠkX±lX„°„L@¯¥@wV_m›ĵ¯Ww™L¯ƒUkōƒÇVU™l›w—V󁱃¯aƒVka°wVk°mÞ¯Ŧřƙl™²™Ŏk™U@ƒmUkb¯ƒķޱ„ó@kxȯó¯VUÒk„ÝŽ±LÛwÝ@ó»ÅUWw™mğw¯Ñ›@UkV±@k™a@¥ƒ¹Źÿ@aƒÅVƒwóVVUkU¯JÜóÈUl¯„yk£laUaVÑÇb@™ţ@kmómK™V¯IU¥ƒ@@ƒ™kV™Iƒ`@ô™¼„blU„lƒ™bÈb@xÇKkĢɳaÅɆō@ƒŽVƒK@z™@@¥ÆKnÜ@@aۏUw›wnU‚ķ@ƒ_ƒV°Ž@„klVššnULVVÞbVl@°™@nx™n°LŚÆlV„ȃmU²@VmĠLƒx„n¯xkWƒzšJ‚wnLmbXbW°šÆ‚™²™@™Žšx@JVx„L‚Ā²Æ°I¯º‚È@ÒnÈ'],
  37091. 'encodeOffsets': [[
  37092. 128352,
  37093. 48421
  37094. ]]
  37095. }
  37096. },
  37097. {
  37098. 'type': 'Feature',
  37099. 'id': '2307',
  37100. 'properties': {
  37101. 'name': '伊春市',
  37102. 'cp': [
  37103. 129.1992,
  37104. 47.9608
  37105. ],
  37106. 'childNum': 3
  37107. },
  37108. 'geometry': {
  37109. 'type': 'Polygon',
  37110. 'coordinates': ['@@ƒKƒ¯kWW²ğl@ŽmLšÇ„„VVš„Lk°VVmLUlVn™xšVnނLnaVޝ¼™@™x™KUĀlb™n„`n„Æxô@VbU¦ĸŰĸbôxÆ@„™V¥„»„IVl°LUŽll@²„mV„x@ššÞܚÞVnŽlXÅÒlbÈaVVUblb„J@I°lÞIn‚Æ„mxnbUbVLÅVm¤@œţVǤXÈÇĖ@šÈ¼˜aXVÜaXbWŽnzŎašř„KôbšUlw@¯naÆKnUU¯Üa@mkkVUĊm„™żÝ‚ǖŽ‚K„™°L²lÆI@ƒ¯¥ĉƛVaÞk@ÝVaĠlnUVwƒœómaƒ@™wĉ@™a™VƒxamX@aƒ@UaÅLƒaVWƒ_nWm£nWm_ÅV¯ƒm@m„󤁚ݦƒ¯ÅalmX£ƒ™VWUŚw™mÇ@@IV™„WUw@ašI@„k@wŎ»Wƒ„ƒ™ÅVaœK›Ika@¥lUkUlwÅwVyÈwWU@a¯U°m—Ç@UçƒaVa¯mV»ÅwÝUlƒUk™V@k„mUk‚X£šw°@@ǃaÝIƒƒam™Ûam„¯lğmmI@J™U™l±ÅōŽ—kWa¯VÝa@Þkbġ@ƒxÛnÇm@akkōVōl±škšÅšťŚÝ°¯nUl¯xlb„U°b²„ô‚˜Uœxšk‚VÈUŎ„Vl°„šKXxͰnœU`@x°¦@'],
  37111. 'encodeOffsets': [[
  37112. 131637,
  37113. 48556
  37114. ]]
  37115. }
  37116. },
  37117. {
  37118. 'type': 'Feature',
  37119. 'id': '2308',
  37120. 'properties': {
  37121. 'name': '佳木斯市',
  37122. 'cp': [
  37123. 133.0005,
  37124. 47.5763
  37125. ],
  37126. 'childNum': 7
  37127. },
  37128. 'geometry': {
  37129. 'type': 'Polygon',
  37130. 'coordinates': ['@@nš„b‚„ÞJ„b@ȯ@™xW¤Vlƒn@lšUVlk„ÞVÆxU¼°nUb„bVèÈ@˜ŽnIn‚@šĢmlUw°™żƒ‚VUn@lnL@VôbšwĊ‚lœ„JķĸĢl„wôwƨxVVUƒŦšxšLź™Èš°`nnĠwŎJސĶwôJ„@¤Xn܄ĸlšn°¼È°lŽ„„Uš‚b„xš@„l@ÞÞÈm°„lôwšL°¼ĸ‚°Þ²nĠ@ôwÞ`ŤI„V„ÒĠU„„@„VJĸbƄ²@°ŽĊKšœ„JĶa̐Ȱ@ô¥°nš¤‚bČUš@Vx„mUw@a݁ţƒÇ™ķƒ@ĕķīU¯²@ÆmVÑô¯X¥ċç@™ĉ»U¥ÝţKWVÅkUVÝŎUmǍÝx¯aķxÛUóL¯a±óōb¯™ƒÑŃVÿƒ_Åķ„a@UƒK@wm@Van@UmmLVa—@VImmXUWƒÝUřƒKUwÝUUƒkVƒk@l¯X›‚Å_ƒJ¯k™Jm„ÅLƒa@¥U@¯Vƒz¯@ƒ`@¼šmxƥšŏKÛk@±laÛ@@Xm@™ƒ@xƽ@WŎnšˣĕÅ@@aÅ@@nÝbǏ¯@ƒ_U›kUWƒkb™wÝU@ç„Wlw@anIƒ¯lyœX°m°VšašÛšm@„mVwÞK°ƒšXlaXmm_ƒ@UƒkwÝK@ƒVI™ƒXmV»ƒI@aƒ¯ğW™bġaU_¯JU¯ġŽƒ„ĉ„k„ō`±nÝÆk„™bóĊ¯Xƒ‚ĢX‚mVn²JV„lbUè„ČmK—wlóğx‚xV¦UaJ›šƒbƑÿÝL—l@bmbġx'],
  37131. 'encodeOffsets': [[
  37132. 132615,
  37133. 47740
  37134. ]]
  37135. }
  37136. },
  37137. {
  37138. 'type': 'Feature',
  37139. 'id': '2303',
  37140. 'properties': {
  37141. 'name': '鸡西市',
  37142. 'cp': [
  37143. 132.7917,
  37144. 45.7361
  37145. ],
  37146. 'childNum': 4
  37147. },
  37148. 'geometry': {
  37149. 'type': 'Polygon',
  37150. 'coordinates': ['@@‚LšKVVnkšbVšÈb‚²U°VnklVlaÈL@anU°ÜmXV`œnôLƒèšxlŽšLX„˜L²ašVVmÈX@ķ˜lnU„Èl`ȹš@ŤŽ°U@x„KnnV„mlnnUl‚lVnnaŎwlVÞ҄@n¦šLVްlšwVk„Lšaގl„n҄š@xmLÞ¤Wnœ¼‚WÈLVVUxlÈô„„WVaU_VKšKXUÆbn™‚nôK„bÞw°bÆWXamVwœK˜™Uw¯WUk„UlJUwVUa™@@kmyzm›ĉw@kVwškƒW¯ÅKU_Vmƒƒ™xU@aW@@kK@w„a@Kƒ@@kVUƒaky°_Vm™kna¯K@™ƒL™wġk@@IÇóX™ƒwVakmV@mwXUWanƒlĉ@ǙUw™KƒƒóšܛNJۄm°@›w—Å@ƒ±b¯Wƒ¹„WVwŹĕ¯kVmōb¯w@aƒwmV™UUb™V™IkaVwķ™xk¼›b@VXXó`󗙘ƒ¼Çó™¯„kŽÜš„š¼WŽn„źĖnššxl@X`WzœÆ'],
  37151. 'encodeOffsets': [[
  37152. 133921,
  37153. 46716
  37154. ]]
  37155. }
  37156. },
  37157. {
  37158. 'type': 'Feature',
  37159. 'id': '2305',
  37160. 'properties': {
  37161. 'name': '双鸭山市',
  37162. 'cp': [
  37163. 133.5938,
  37164. 46.7523
  37165. ],
  37166. 'childNum': 5
  37167. },
  37168. 'geometry': {
  37169. 'type': 'Polygon',
  37170. 'coordinates': ['@@™UƒƒUwó™mÑÞÑUÝÝUkmmŃyV¯ī„¥ƒUÿĉ¯mÇkaWbÅX¯aÝxƒaóLmmšÅaWV™LULV`UbƒXóƒkÇVwUUÇKX›»XmÝ£nK@wƒ™mÑkƒÝ™bƒKUl™x¯kU™Km¥ƒ@ÝÑkUōxmbUmkVkmmnkUƒmmƒL@w¯Vţ™@Ǻk_ƒÇmV—k@ĸVx‚VȰlLkllšUbōwƒnVW¼nlUx¯XmWUnÝ@™xÝUó¼¯J@LVbkJWnkb™W¯„ÝLUxƒn@‚™n™Ü™b¯U¯n›Wkz„°mJ@bkxƒX@èÞVšxlaX„lVVœ„`°@ȐÞa@mÆ@@bÆ@ˤĖm™Xōƾ@@wš„n@@WÜ@kb@²ÜlŐLƦ™nw™@»„_°@„y°UV@@¦„bÆKnƒšI°l„IÆ`œ°W@k„llUV„ÞVVx„LƚÞVX„WVnnUJ˜@UbnKVnm@Ubn@@x„L@VƒbÆĸ„`UĀÆ„„Ò°šŎa²ô°bôKÜVĸw°bÞwȎVnÞōVUÆlXU'],
  37171. 'encodeOffsets': [[
  37172. 137577,
  37173. 48578
  37174. ]]
  37175. }
  37176. },
  37177. {
  37178. 'type': 'Feature',
  37179. 'id': '2306',
  37180. 'properties': {
  37181. 'name': '大庆市',
  37182. 'cp': [
  37183. 124.7717,
  37184. 46.4282
  37185. ],
  37186. 'childNum': 5
  37187. },
  37188. 'geometry': {
  37189. 'type': 'Polygon',
  37190. 'coordinates': ['@@mÇ@сǰ¹¯J±ÅÿƒKUw‚I@™wšš@š±Å‚™X¯WanamKx™I„ylX°wƒm„wğKUn±@nVDŽUƒÅkƙ¯Kšmmwš@@¯UkÝaUUVK™mU™lk@ƒ¯„U„`ĸ@V‚mœxVxܐ@bÛ@m‚ÅL@¦š@@y„L‚U„Ŏ@ÆɅɴblġÈL@wÇaša„ƒkkVƒaš»@ó¯_ÝJ™wÇaÅXny›U¯¥Å„@w™bÝa™Lmm@@ƒVUŽlbğVmš™¯Xƒm_ƒ`¯_Ux™m™L™a¯b@mƒaó¦Çk™¤V„@bóJknVx™VXx±aƒLUbVxkLVlLWlƒ@nX@VÅbWlÈnƒx„bWšÅbmŽ@xœbml°b™„XbW„XVmnn`ƒLmšnbmb@šk@mwU@@š¯Jlbk°lbkšmLXxmbVbkllšÅނxX„xVWVVa²VܲnxƒVVnÅlVlƒL„¼šb@xV@XŽVbšIư„¦„lźb„Ĭ°¼Ulšb@kĢ@lw„@ƒÜlnȂƄóȘI„ĉ'],
  37191. 'encodeOffsets': [[
  37192. 128352,
  37193. 48421
  37194. ]]
  37195. }
  37196. },
  37197. {
  37198. 'type': 'Feature',
  37199. 'id': '2304',
  37200. 'properties': {
  37201. 'name': '鹤岗市',
  37202. 'cp': [
  37203. 130.4407,
  37204. 47.7081
  37205. ],
  37206. 'childNum': 3
  37207. },
  37208. 'geometry': {
  37209. 'type': 'Polygon',
  37210. 'coordinates': ['@@Þ¥‚™ô£nƒn@°„ÆUn`mXn¤mX„`UX„bÆKVb„@@bnW‚b„wšUšbĊ@šx„@nbšWVmƒ_mm@ó»Um„ŘWXkĠ»²¯‚¯nķšwŎ@ĊšŎK°bĸUnјKȦĠÈbÆknJššÆUĢV°IšŽšVƾƒwaV™ƒƒkÇ¯¯»™mķkۃWm@£ƒóIĵxݏōIğxmm¯_Ç™Źš™K™wťŽ„UVUŽƧwóxƒxġkĸķƒIk›ĉ™xóa@UmK@kVmUŻ„¯šVxkŽġn™‚@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbœJ›LUbšÆƒ„X„ō¼@xƒl@™J@bVxƒXUš@JÈ@šn™xVÆUXš‚„W¤knÆb„°'],
  37211. 'encodeOffsets': [[
  37212. 132998,
  37213. 49478
  37214. ]]
  37215. }
  37216. },
  37217. {
  37218. 'type': 'Feature',
  37219. 'id': '2309',
  37220. 'properties': {
  37221. 'name': '七台河市',
  37222. 'cp': [
  37223. 131.2756,
  37224. 45.9558
  37225. ],
  37226. 'childNum': 2
  37227. },
  37228. 'geometry': {
  37229. 'type': 'Polygon',
  37230. 'coordinates': ['@@²mŎ_lƒĊƒ„ƒĢV°°IV`ĢbšaĠX„°@b„JU¼Wnš„UJ@„ÞLlxV„„@n`lIUa@K°Iô»ÞVšwÞ@VmnX°WVwmkX»‚U„mŎxVak™lkkKǯUUwÇWUn™U±b—KWƒ™Kk™w„çóK›mU_nW¯ÛmV@bÇKkbkUml¯U±VÇaU™™amlUU™LK›„k@ƒU@mwÛLƒŽƒwkLóÆm_™±™nkޝ@@n±KnŚlbkVV‚mz—lWXº@Ķ°'],
  37231. 'encodeOffsets': [[
  37232. 133369,
  37233. 47228
  37234. ]]
  37235. }
  37236. }
  37237. ],
  37238. 'UTF8Encoding': true
  37239. };
  37240. });define('echarts/util/mapData/geoJson/he_bei_geo', [], function () {
  37241. return {
  37242. 'type': 'FeatureCollection',
  37243. 'features': [
  37244. {
  37245. 'type': 'Feature',
  37246. 'id': '1308',
  37247. 'properties': {
  37248. 'name': '承德市',
  37249. 'cp': [
  37250. 117.5757,
  37251. 41.4075
  37252. ],
  37253. 'childNum': 11
  37254. },
  37255. 'geometry': {
  37256. 'type': 'Polygon',
  37257. 'coordinates': ['@@lLnlmxn„„IVVlUnb@VVxXJWL@LގVnnV„J˜_@wkmšK„b‚x„wXk˜WXXšKlb²K@nVVVb„L@WlU²„lKVnUJVz@VVb@lżmVUVnbôaVX@°Ub@lWbXš@b@bVb°x„@VxÈLVlšaÆ@Þb²k°@lVUŽ@Xn@VW‚LXb@¤VXšKVVVLnm°_ƨ¤@aUIVa„alkX›°k„™V@„alwUVy„U@k󙰃na°UVUUmUÆw@mkLVUƒWVI„WšLnn@xlVnK„myU@ƒU°UXaV@U¥ƒU@Uƙ@aVUkWU¯ƒaU@WLUV@bkbmKULmKkUVUkmVIUwlWV²™Uml°U@W„LUwVm@UUK@_ƒKUUÜaXw@ƒVKUU@mVIUUlmnIVVVbÈVlKnbVKš@nI˜@nVnwVLVK„K„„˜Vnb@aUIVW@In™°@lVnIš@lWĢ@°UVL@b„@VyUUƒa@w@WUnU@Wǯ™K@UkkJWaÛbmk@mVaÞU@amkWƒ@mXUKkÿƒ£@a„kl@Um°UXwla„al@nmlXnW°znW@aƒwV™@ƒakbĉ¥VmU@ƒIƒVƒUƒJkUmWU™KbmkUaƒKkUVU@KV@@klw—™WaU@kmƒXVènbmlUUƒKƒX¯JkbƒI@JmIUWU@ƒLml@XkJ@U™kƒK@aVKwWa—IWwƒmUƒ@mU@J@UaċU™aUUƒVkI±ƒk@UUƒ@UbVVm@UVKƒLƒlkIWaULUWƒXUJU„ƒ@WbUb@lkXUxm@@JVn@J@b„nƒb@Vkx@bšLU‚Æn„JšaVXnKVVmzX‚°V@_lJXxWXƒK¯bÅamUƒ@lUI›bñJ@LÇKkIÇ`kxWL@„ƒ@@bUVUb¯xWKk„Å„VlULW@ƒŽn¦Ul@I™lmUUUVm@kWƒnkKma¯XUKWmnwVwÝL„mŽ™VUbUVWb@Lnxm„xVŽmbXx›¦@„nb@`™„ƒVƒ@kbƒLU„mVUlkbVXkºmnm@@xk¦šbĢÜlš'],
  37258. 'encodeOffsets': [[
  37259. 118868,
  37260. 42784
  37261. ]]
  37262. }
  37263. },
  37264. {
  37265. 'type': 'Feature',
  37266. 'id': '1307',
  37267. 'properties': {
  37268. 'name': '张家口市',
  37269. 'cp': [
  37270. 115.1477,
  37271. 40.8527
  37272. ],
  37273. 'childNum': 15
  37274. },
  37275. 'geometry': {
  37276. 'type': 'Polygon',
  37277. 'coordinates': ['@@k™ġۙal¥@wn@nml¹UWlaVknUVƒ„Kla„@„Ušƒ@_ma@ƒœ¥WwnaU‚wnƒmw@KXaVUVašUnmWUk°™lƒnUVUXWVw™IWVóKUI@WXƒxUU@mma@kUKWLkw@yk@ƒaVkUUċaUU@Wk@Unm@UVmLm±IUƒkJ™kWƒ@a„I@m@U„ƒVƒ„Ula„@VXVƒXmVwnkWKƒKU_k@m¥ƒmX_™JmnU@km@U@KmU™VƒU@U™@Umk@@LƒmW@Û£Wƒka@wk™@aƒI@mmk@mUa@UmUƒIƒwW@aWUƒbU@kbÇ@kwƒ@makVUk™U@aƒm@aU@mxkUƒbƒKUXUƒ±KXVWLUK@wkU@V™@WXUa@WbUxƒJIƒŽ@¦VèVVX@±ê¯KUIƒ`¯UULVx@Vƒ@UKƒIƒVkLmVkKmš@nUJÝbkIUJVXšVVxVbU„VJ„Un™°bV„mlU°„XnK@Ul@lVÈVUXšx@W„@VXšV‚KÞb„n@VnbV„m`ƒUx™kW@UVkL™Km¼@lUnUJVnV„XV@Vm@@LV„klƒIkl@VƒWlŽULWKUL@mJ„@blbUVUlmzUJUxm@UUbċÜk@Ub@VšLVV„¦ôbVŽmšUKUkU@m„„@VlVn¼WbUJ¯@@„°šnIllÈl˜@nXšWlLœk‚J@bkxlxkxlXUlklJƒšXL@bW„n`@nƎXxlL@xl@Xb‚LœKlVlIXblVUbUJW@lX@VL@VVŽšXšJšw„n@WnL°K„bVbl@VI@K„@U@nmVmV@XUWI@aXm@™VUUkWmn@lmUUk@mUmK@UnwVĉ@ƒƒmU_V@XJôVVUšLVUn@šllUnJl_n@šml@XŽlLlw²LVJUL@VmbVblVXmVnlš@Ť¦„nn@܎@bšl„@@XV`„Unb@VlLVb²J‚Xn¥ÆÑ@¥Þ@'],
  37278. 'encodeOffsets': [[
  37279. 118868,
  37280. 42784
  37281. ]]
  37282. }
  37283. },
  37284. {
  37285. 'type': 'Feature',
  37286. 'id': '1306',
  37287. 'properties': {
  37288. 'name': '保定市',
  37289. 'cp': [
  37290. 115.0488,
  37291. 39.0948
  37292. ],
  37293. 'childNum': 23
  37294. },
  37295. 'geometry': {
  37296. 'type': 'Polygon',
  37297. 'coordinates': ['@@VbXWš@@UlV@xVLXKWU²LV„VW„L„alVnwV@@b„n@bšVVllUnb„@lxÈ@laV@„aXV@b‚X„x„J‚nV@VVb@nnl@n„J@blšl@„ašƒU_VWUwVUškUm™Ukb±mVwœU@VIUW@UWk„@VU@ynL„m@IV@‚bnK„LVaVmnIlaXwV@@WVL°@@xnX„@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@œKVXÆ@nƒ@wƒKmU—™Wm@km@kÜKXU@ÑW±nIUwVƒ„Kla@I°wU±kškmm¯mƒ_ƒJnƒaƒwW@IVaUama@wƒUƒmU@mVw@aXk@mWa@£km@aƒ_kVmUnWW@¯bƒkUmk@ƒVÇm@@kUU™KUU™@UVUamVUaWIkb@xU@@amUkKƒVkam@@kVUkUWmKmUkLUb@xmJƒ™U@UImVÛVmnUwƒJƒU@VƒX@UWm@Ub°¦UšmxklmX@`ULU@@UW@@xkn¯@makV™UmxUb™°ƒlUšƒbUbƒnUJƒUUVƒa™LkbUU›JUU@mUUUƒJkaƒ@™xUIWJƒUnƒJ@V™zƒ@kb@`@bln@l™bƒŽ@X@š@š„@Xl‚bnbVb„@„„VJlInlšbVw@U„K„l@lbnan@Vb‚JôLn‚UzlV@lÈLVbVK@LVx—VWXX`WxXz‚bV`UXV¤nx@„bVlVnVlUL'],
  37298. 'encodeOffsets': [[
  37299. 117304,
  37300. 40512
  37301. ]]
  37302. }
  37303. },
  37304. {
  37305. 'type': 'Feature',
  37306. 'id': '1302',
  37307. 'properties': {
  37308. 'name': '唐山市',
  37309. 'cp': [
  37310. 118.4766,
  37311. 39.6826
  37312. ],
  37313. 'childNum': 11
  37314. },
  37315. 'geometry': {
  37316. 'type': 'Polygon',
  37317. 'coordinates': ['@@„@VVl@²„lJ„UVVšbČVVb‚@@InV„@‚V„nXx˜JXb‚xUL@b„Lšl@VlI@Wnk„KV@VXnJ@I„Jla°I„W„LVVnkmaUç„WVkôaܯ„@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯ƒ¯@aVUkKUamUUƒn»‚an™„IVwUWlkš@„LlWVakU@K„_lƒšbÞU°@šy°n„@„KÈkWW™ţ¥ĉōƒkġWUw¯£¯ƒÇwţwƒ@kK@kƒ¥ÝwÅbǤېťV™lW°@ĸ™x@VVVULVLkl@V@Xƒ`Ub@Xm@UWbƒk@ÆVbnLWV@lnXUbl‚@X¯lmU™VkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`ƒXmJnšmškxUVbUVlVVxUbV@nKlL„kVKÞbVKXI°KVšmVUIUKULVxVJVLkV@Vƒ@UbU@WUU@UbUK@b@nƒV@VkLmb@b'],
  37318. 'encodeOffsets': [[
  37319. 120398,
  37320. 41159
  37321. ]]
  37322. }
  37323. },
  37324. {
  37325. 'type': 'Feature',
  37326. 'id': '1309',
  37327. 'properties': {
  37328. 'name': '沧州市',
  37329. 'cp': [
  37330. 116.8286,
  37331. 38.2104
  37332. ],
  37333. 'childNum': 15
  37334. },
  37335. 'geometry': {
  37336. 'type': 'Polygon',
  37337. 'coordinates': ['@@@ln@UȄŽl@Vn„l°aX@mXnVlU„`@bln@¤Xb@nWl@bUx@nnV‚„„V@xnbVbUb@J‚X„x„b‚mXa@k„UVwlW„k„KôVm@w™kkK@kl»Èƒm™VKXkla°@XVV@VI@ml@@Vn@VX@V@J„@VxUzVVšš²blVk¦@šĠ@@»š@VK@VÈLlK@XnJ@alIUl„a„VVbš@„n@a„U@WUIV@mUn@mKXml@lL@LnWšb@XV@@a„VVb„V„@VV„IVWÈb˜IÈ»ƒǟlWšaVUÅUƒƒ™Um@kVU™WVkaUwmaóUƒJUU¯ÑU¥mk™¯UaƒKÅnÇyóXmWÛX¯aċbÛa›J—W™ÝU¯»ƒaóóUm@IƒšVVl@bƒLUJWLX@@xšXUxl¤V@V„nVUV„XVbVš@Ž„@@VVn„°VŽ@ţU¯VƒUmƒUWV@mUXƒaƒbUKUwUaÇKn„ƒVk¦Wb@VnLmV@bkV@n„xW`Å_UVƒV@bƒUklVX@VmlUƒx@VVL@x—VWVL@VW@UUm@'],
  37338. 'encodeOffsets': [[
  37339. 118485,
  37340. 39280
  37341. ]]
  37342. }
  37343. },
  37344. {
  37345. 'type': 'Feature',
  37346. 'id': '1301',
  37347. 'properties': {
  37348. 'name': '石家庄市',
  37349. 'cp': [
  37350. 114.4995,
  37351. 38.1006
  37352. ],
  37353. 'childNum': 19
  37354. },
  37355. 'geometry': {
  37356. 'type': 'Polygon',
  37357. 'coordinates': ['@@la„@šy@U„I‚m„VXIVJšw„@lb„IVVnV‚@VVœIVVlašK„bVU„VVI„mVa„aV™„kš¯VanwšVlUnb°@lm@wX@@VV@VK@_nWlknwV™¯¥Van@VX‚@„W@U„V„IVxnmÜUnUVJV@„šnI@wValKnV@k‚mU£na@mVk°K„LVa@UU@UƒmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@U„a¯wWU@UkƒL@ŽUn@x™V™lUXVJUb™LmU@aUWUkmKkLUUm@mW—XƒaƒmmkkWUm@@U¯JUUm™kU¯@mKĉxÝwÝ¥LƒUóŽmwkUUUWVkKm™kKmLX„lxVLVxXJ@nVJnz@VWL@`nX@šƒxƒ@kVUUmJmIXx„JV„ƒnUVƒ@UVV„@LUšƒ`UXVVƒ„ƒlXL@l@b@VmX@b™xn°™UƒbkKWLXlW@@bƒK„mKULmakLUlmb@šXb@xmXU`V„b@`lLx@nWVXL@‚°WlXnlb„KVK„XVb@˜X@l_lJ@V@XnŽ„I'],
  37358. 'encodeOffsets': [[
  37359. 116562,
  37360. 39691
  37361. ]]
  37362. }
  37363. },
  37364. {
  37365. 'type': 'Feature',
  37366. 'id': '1305',
  37367. 'properties': {
  37368. 'name': '邢台市',
  37369. 'cp': [
  37370. 114.8071,
  37371. 37.2821
  37372. ],
  37373. 'childNum': 18
  37374. },
  37375. 'geometry': {
  37376. 'type': 'Polygon',
  37377. 'coordinates': ['@@nKlLnšlLXUVVlVnxô„V‚KÞ¦ÞxĊwnL°@lVnšVV°I@Vn@V‚lXnl„n„b˜WnXn@VVlKnLVlVX@bnVšKVaUIVWškšU@wVm@¯@U¥VmU_°lšK„k‚w@LX‚Va„U@wšUƒUUKlUóW@UVUœUlƒ°K„wlKU_na„KVnlKkkšWWa@IœJVa@IlJnU@„KVUUmVlaXUl@lm@kXWÝÑnkƒ™±™k@wğ›@@U@mKĉLmVJ@zmlnŽWLUÝJU_ƒ@@šmJkXUVlbklÝ@Ýa™b¯@¯±JÅwġaUU@ƒkU™@mVI±bUKƒL™WUXƒJkaƒLóKULWbUVkKmnk@@bmLUŽƒl@b@mnmJkUULƒaƒbnŽmn@lVV@¦n@„l@b‚znx@`Vz@b„xnV@xl„lbnKVx'],
  37378. 'encodeOffsets': [[
  37379. 116764,
  37380. 38346
  37381. ]]
  37382. }
  37383. },
  37384. {
  37385. 'type': 'Feature',
  37386. 'id': '1304',
  37387. 'properties': {
  37388. 'name': '邯郸市',
  37389. 'cp': [
  37390. 114.4775,
  37391. 36.535
  37392. ],
  37393. 'childNum': 18
  37394. },
  37395. 'geometry': {
  37396. 'type': 'Polygon',
  37397. 'coordinates': ['@@„bVKlVnInm‚@@a„kVnK@al@nmlLVUXaVKôL„Klb„IVWšX„KVL²a‚JnUš@lV@„VVĢbÆx²I°Ž°@šaÞbÞ@lkkaVUlWnI@™„@V`ÞI‚VXKmnk@y‚InUĊKƒÇkUUamUUkƒƒ@aU@U™ƒk@WUwVkVJVkkw°a@„mK@UX@VV„LVW@wšwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkVƒ²™VƒaULUVmJUUUwƒLma@™UmkIUm›L—mVšmx@b™LUamKÅL@VmbkU¯KÝamzkJUb±Vkb™L@lU@WIkJƒzkKmKƒnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@Xƒ@XlWLkUƒ`VUnaWa„UV@UVIƒaUxUUmVƒK@I@W@DŽU@@U@bƒ‚@nmKXmx™@UxkVWUX„@`VLlL@`™zX‚Ýb@b‚„@VUVkIUJVz°KVlnLlKnL„xlLVVUVlXUJ@nn‚„I@mVUlbn@@Žm„@bV„nV'],
  37398. 'encodeOffsets': [[
  37399. 116528,
  37400. 37885
  37401. ]]
  37402. }
  37403. },
  37404. {
  37405. 'type': 'Feature',
  37406. 'id': '1303',
  37407. 'properties': {
  37408. 'name': '秦皇岛市',
  37409. 'cp': [
  37410. 119.2126,
  37411. 40.0232
  37412. ],
  37413. 'childNum': 5
  37414. },
  37415. 'geometry': {
  37416. 'type': 'Polygon',
  37417. 'coordinates': ['@@lnV@Xb˜škx@lU@@LUVlV„LVbnl‚ašLXVVn‚l„I„V„U„JV@UnĊ¦la„bš@nJ°UmƒV@„wn@VU„JVI°bnWlXnWVLVK²b‚akk„lI@aUaVƒUwVUUalaVwnUVak¥šX@W‚kœLVÓm„mUK@_lWš@n_UK@alÅ@ğÅƑŃݍmƒ@їţÇlƒLƒ@¯m™z¯@ÝV™ak„ƒ`@LlVUbkXƒK™@klVXUxƒJmšbm¼V„nVVblLUV@b„°V°XLVb@¤mbXxWX°xXŽVbmVUVU@kbmI¯xmUƒ@Û°óbUl'],
  37418. 'encodeOffsets': [[
  37419. 121411,
  37420. 41254
  37421. ]]
  37422. }
  37423. },
  37424. {
  37425. 'type': 'Feature',
  37426. 'id': '1311',
  37427. 'properties': {
  37428. 'name': '衡水市',
  37429. 'cp': [
  37430. 115.8838,
  37431. 37.7161
  37432. ],
  37433. 'childNum': 11
  37434. },
  37435. 'geometry': {
  37436. 'type': 'Polygon',
  37437. 'coordinates': ['@@„KVlV@X°xƒb@VnnmbVŽXblb@VkL@lV@Vbn@@l‚@XX@bWVXlmXnlV„V@@VUbƒK¯LUl@nmbV¤n@l‚LXnlVUV@ln@lb„UlLnV@bV@@wlaXJVbnUVbVUš@VVšLVVn@VVX@@U‚KXU˜U@wUK@U„wVnk@UUWlk„V@a„UVUÆ`X_ƒw@mlU@anUmK@UXal¥„UmƒÈLVbVxVL„a„bVW@nXU‚Vn„„V°UŤV@Uƒ¯Um@Uƒ@@U™UaƒWVUmUUƒU@k£Vw™W@wW@XKƒIUa@wU@@al@UK@_mKXKƒbUU@aVKmš@Xmƒƒ±@kbÇakLğVaUw@a@ƒmkUJƒk@ykw@£ƒWX@lknk@WVkbUŽVnUVƒL@‚mVkI@JUb›I@JXb™XllkLUmƒLmbV`kLƒx¯Lk„›VUV@VôXkVVL„V™V@xƒVUbW@Kxƒl™L¯kV`UnV¦°@'],
  37438. 'encodeOffsets': [[
  37439. 118024,
  37440. 38549
  37441. ]]
  37442. }
  37443. },
  37444. {
  37445. 'type': 'Feature',
  37446. 'id': '1310',
  37447. 'properties': {
  37448. 'name': '廊坊市',
  37449. 'cp': [
  37450. 116.521,
  37451. 39.0509
  37452. ],
  37453. 'childNum': 9
  37454. },
  37455. 'geometry': {
  37456. 'type': 'MultiPolygon',
  37457. 'coordinates': [
  37458. ['@@la„Ušš@šUnL@VWbklWxnIVV„V@X„JlbUlšXVbn@@K„mV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaƒaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUƒkIVa@a@klaUKUV@UkUV¯šKVƒV@kUmƒU@@a¯ImJUU@VV@UL@Uƒ@@WXUWa@Ukwm™@ƒX@@w@al@@aVIUmVUUUVWUknK@I@™l¥kU±a™™UUVyUwƒ@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnšÇ„k¼@llLšl@xUnóŽƒLƒlkXUxƒV@lWb„I„`°nnn™llŽV²¯x@JkbƒLU„VxmJX²@ÒWVÛL@lln@‚Xn˜šnV„L'],
  37459. ['@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķŽk_W@UVUKUš@bƒ@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V„@bVbl@„lX@lUôVlUœIV`lX„Vn@lUlVn@„l@UVaƒIUWl£Um™VWU@@UUKlUUUnƒVL@KšUnLVWUa›@™U']
  37460. ],
  37461. 'encodeOffsets': [
  37462. [[
  37463. 119037,
  37464. 40467
  37465. ]],
  37466. [[
  37467. 119970,
  37468. 40776
  37469. ]]
  37470. ]
  37471. }
  37472. }
  37473. ],
  37474. 'UTF8Encoding': true
  37475. };
  37476. });define('echarts/util/mapData/geoJson/he_nan_geo', [], function () {
  37477. return {
  37478. 'type': 'FeatureCollection',
  37479. 'features': [
  37480. {
  37481. 'type': 'Feature',
  37482. 'id': '4113',
  37483. 'properties': {
  37484. 'name': '南阳市',
  37485. 'cp': [
  37486. 112.4011,
  37487. 33.0359
  37488. ],
  37489. 'childNum': 12
  37490. },
  37491. 'geometry': {
  37492. 'type': 'Polygon',
  37493. 'coordinates': ['@@lKl@nVV@„bn„@VVnm‚nL‚LXx@š„‚VLlKVU„IXWÜ@șlbl@XUĊUlwnW„LÞw‚m@ÞUVmnVl@nX‚JXLm@VnnJla„I@VkxVb„@VŽln„J@knKVn„@°aVanal@XK°b„‚@š¯VJXIš„VK@al@nV„k‚@nK„a‚b„@XL@blVVKVLXK„@VaVI°mVaX@V_@a@yUkVw„VšIVašJ°™@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmٝVƒam@kakImƒUKƒ»lan@VXXa˜W@@UlUUa@a@UlwUƒV@Xal@@anIVaUK@V™XmwVmUmV„LXl‚@nalLnal@„šnKlkV@@UnJ‚UXnl@nVl¦V@@VnJ@nUVVVVIn@Va„JƗn@@K@m„kƒa@kmWVaUI@a@™k@@aUL@mmaVIUKUVƒ@@IU@mƒUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LƒJm„™lUnUJ™UUUWƒƒ@UnkKƒxmLa@ƒ@@lUU™bmUVWk@@nkUmam@UakJU_ƒVm@ÅlÇLUVmVUwULƒKU@ƒk@UƒVUlU@@Uƒ@UaUUWaŎƒzJƒaWLkl™b@bmL@„kKƒabWŽUVƒ_@mV@b¯JmXUbUK™¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKl„UV@Um@@Uk@kxWŽkbƒL@KkbmL@‚UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VšnU`W@@nÛ¼U@@VmKUkm@VVX@@xǚ@bUbVb@VX@@x‚LUb@lƒ¼XLlbUlVVU„Ub@n'],
  37494. 'encodeOffsets': [[
  37495. 113671,
  37496. 34364
  37497. ]]
  37498. }
  37499. },
  37500. {
  37501. 'type': 'Feature',
  37502. 'id': '4115',
  37503. 'properties': {
  37504. 'name': '信阳市',
  37505. 'cp': [
  37506. 114.8291,
  37507. 32.0197
  37508. ],
  37509. 'childNum': 9
  37510. },
  37511. 'geometry': {
  37512. 'type': 'Polygon',
  37513. 'coordinates': ['@@VllInJlknJVkVU@mXlUÞ`VnV™VU@U@y„@nXlKV„nJVkXKWaXI‚b@yVk„VUkVwn@‚K@nW@k„KlUXVVUlbnUV`n@V_V@llX@@V„b@bV@@nlVUb¯‚WLnbmb@ŽnLnK˜b„U„bVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°Una„LlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@a„WšÛnK@UlK@UU@VK„nlm„nXal„UllLUbVVšknJ@nV@Vm@a„l@@xnV„„lJVUU@™w@aƒk„@XW@_mWnUlŁUmVKV@VXwW»XƒWaUwnkWUkVUƒU@@@WlaUkkaƒIWVkm¯xmIUmƒLUVƒaUIó»m@mmwXk@a›mk¯¯l™@wƒmkLmmU@UbkUWJ@XUbƒJ@b@l@znÆmK@Xk@Ub@lm@ƒI@akmVKUUVUkU@U±JUbkƒ@IWmkxƒa@UUV™UWVkIUaW@UlLWn@VkJƒI@VkK@L@bmKƒkJmUUaUKWXk¼VxnJ@„V@@VULV¼ƒ@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIƒb—KƒŽƒ²UW™nWKUUkLUƒmUUam@UU™@ƒmUL@xkV@„VV@bmV@Vk@mwkUƒVUx@mbX‚ÇnVb„‚UL¯šWŽnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@š@bVJUbnX@l„b'],
  37514. 'encodeOffsets': [[
  37515. 116551,
  37516. 33385
  37517. ]]
  37518. }
  37519. },
  37520. {
  37521. 'type': 'Feature',
  37522. 'id': '4103',
  37523. 'properties': {
  37524. 'name': '洛阳市',
  37525. 'cp': [
  37526. 112.0605,
  37527. 34.3158
  37528. ],
  37529. 'childNum': 11
  37530. },
  37531. 'geometry': {
  37532. 'type': 'Polygon',
  37533. 'coordinates': ['@@VVUllLXl@LWn@J„@bƒKUVmnL@`VblLnbV@„b@JmL@LnV@VV@¯„VJVnXL˜@nm@aÞ@‚a„k@m„IšmVbXL‚ynLšk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnnƒ°U@»°U„wl@šb„WmUXƒÆ@VLXU@m@U„a@I›mkb™a@naWW@_@WXUV@@U‚ƒ²@„K@I±U@¥kKWLóLlƒa@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@Wa„kkƒlUnƒVUVaU@KUU@mmK@_ƒa@KX@VaUIm±™k„aVKVUkw™@kaƒƒW@kbkL±UUaƒK@UUKVak£ƒ@UmmL@lƒIkmUƒ@Ualw@UƒJkbmIUmn@WKImWk@mUUnÝV@ށnÝxƒKmXkxĉVWVk@kaċšÛ@WXƒJUV@zŽm„VWnbUbVbšLlUnŽ‚lUÒnWV—VWnk@@Vm@kxm@Un™l@Ll@@V@šXnƒškJV„šV@nlVXx˜U@l„n@aš@VLnWĊ¦nxš@lbVKXLl@ރVLƒ„XJl@XXl`lIXVl@Xl‚XUVšK„wV@lanx„zUbVJ@VVX@b'],
  37534. 'encodeOffsets': [[
  37535. 114683,
  37536. 35551
  37537. ]]
  37538. }
  37539. },
  37540. {
  37541. 'type': 'Feature',
  37542. 'id': '4117',
  37543. 'properties': {
  37544. 'name': '驻马店市',
  37545. 'cp': [
  37546. 114.1589,
  37547. 32.9041
  37548. ],
  37549. 'childNum': 10
  37550. },
  37551. 'geometry': {
  37552. 'type': 'Polygon',
  37553. 'coordinates': ['@@n@„b°UƂXnVlnLÜ@VLœm@n˜@na@J„„m@k„@lVšVxXX@„V`lLV„XVV@VVÞLVV°„²@lašbnxV@@b„Lšmlm„_VWnIWUna@lšLšbnV°ƒVL@KšV„LVUVaVLXK@mÆXna@wVm„a‚@Xw@KlL@a„@Va@wUkaWnIVƒla@Kn@Vn@VUl@nKVn„J@LnK@aVkVUUWƒ@VakUVanI‚²X‚W@UUU°KnUVLl@XaVK@ašU@KUI@W@_lm@KkLUKV_Uƒ@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzƒKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXƒaƒV—amLmK@namaXK°VakU@mU@@aƒa@UW@kkU@U`m@U_mVkaUVWUkVƒL@lmX@ށLm@UxVlƒUUl@zaWJXbWLUlmIUƒkLmWƒ@@z@VUVUšUmÝ_kVWŽ@nUVUlmIklmIkJUkƒl@n@Lm@؃IUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLƒ™k@mbkKmb@WkƒKUŽVnUnnxšW@UVLUbmJ@bk@WbU@V„kx@V@bVbkV@V‚@‚—XWbUWm@kb„¼VLn„lJlb'],
  37554. 'encodeOffsets': [[
  37555. 115920,
  37556. 33863
  37557. ]]
  37558. }
  37559. },
  37560. {
  37561. 'type': 'Feature',
  37562. 'id': '4116',
  37563. 'properties': {
  37564. 'name': '周口市',
  37565. 'cp': [
  37566. 114.873,
  37567. 33.6951
  37568. ],
  37569. 'childNum': 10
  37570. },
  37571. 'geometry': {
  37572. 'type': 'Polygon',
  37573. 'coordinates': ['@@lšnb@xlJ@UnLlKXUlJl_„KnV@xVL@bkbVVUè@šWb@„Ubmš„ŽkšVšmbX„VJnUl@„a°@@b„LVbƒlXx˜InmnLVw‚anJÆw²IlmnXVl°VVbÈaVb„@lkn@VWnLlUVmÞUUklƒkƒVkUaVaVaUw™K@kkaVWmw„_„‚l@nU„VVb@b„aV@VV@zXJl@@kl@šlœk°WVnÆbnbUšVJ„Iš@VKVm@k™K@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@—VWa„¥@k@lnƒUIÇKUaU@ƒUUVmIUV™Uk¥ƒVma@¯k@Wanwmƒ„@@n@@m@UIVƒkUVamUXWƒaV™U_™@ƒmUVUImW@aUIĉK@VmI™b@lU@@n™JƒkU™@KƒIUmmLk@UVm@UŽm@@LkbU„mJXlbV‚@xUbƒ@@bkK@LWx@ƒbUn@xmbÅW@nWLUKUbUVƒK™U@LUK¯„mU@šVV@xULUŽVL@bU`WšUz¯aUamKUaƒ@@xkX@x'],
  37574. 'encodeOffsets': [[
  37575. 116832,
  37576. 34527
  37577. ]]
  37578. }
  37579. },
  37580. {
  37581. 'type': 'Feature',
  37582. 'id': '4114',
  37583. 'properties': {
  37584. 'name': '商丘市',
  37585. 'cp': [
  37586. 115.741,
  37587. 34.2828
  37588. ],
  37589. 'childNum': 8
  37590. },
  37591. 'geometry': {
  37592. 'type': 'Polygon',
  37593. 'coordinates': ['@@XVl@lLȃ„@VkV@V»UanƒWX@VaÆÇô@ÈaVX@xVJXUÞU‚aVLĸbXKl„V@šm°Vn_ny˜XX»mUk¥lK@a„_@yšInaVKVa°_@WXI@ƒ@K‚VnIlbnaV@„l„@‚a@_w@ƒlwUKm™Xa@UV@š»Vƒšw@kUKVUUm@w±VUXUKUwmJUUƒ@km@@±mXkmUI™@mm™KUwkbWakLWaUIkJmŽƒX@l@@VUX@JWbX@VbULWbƒlUVULknlV@bVJk„mb¯KknWmk@@nmVkx™@ƒVmU¯KUnUL™@ƒJUIV™maÅaUm¯X›l™kk@@lk@WI@yUUU@ƒb@aUaƒUmVk@ƒƒ`nxUXlb@lšLVxUbUbVbUll„k„VlÝVUnkVmKUXm@klƒ@ƒnUx@xnxƒn@`VX@V²x@V@b@„Wl@zU`VUVVb„L@Vƒb™W@bkXllkLWV@V„@VVÈwlVœ@@X˜K²Llb„WnnÆL@VnJWn'],
  37594. 'encodeOffsets': [[
  37595. 118024,
  37596. 35680
  37597. ]]
  37598. }
  37599. },
  37600. {
  37601. 'type': 'Feature',
  37602. 'id': '4112',
  37603. 'properties': {
  37604. 'name': '三门峡市',
  37605. 'cp': [
  37606. 110.8301,
  37607. 34.3158
  37608. ],
  37609. 'childNum': 6
  37610. },
  37611. 'geometry': {
  37612. 'type': 'Polygon',
  37613. 'coordinates': ['@@WKUmUI°ƒU@@UmU@KnK@IƒaU@makKUa@_‚KnmVU„L@a‚ƒ@IXm@KWkkKVkUU@aUW@UUIVaƒymwkbU@ƒx™LVUWWkk@WUkJk_WWk@WI„ƒUK݄k@WKULka™@mwĉ¥mXUK™@@bƒm@k—VWwkU@m™UUƒlI„™Wm@™@Uk@@KškVmn@lwn@@Ul@Xm˜UXUmVсkmkV™KUaVamaUXnƒ‚@ykLUKƒ@™WwKmKnUm@UmƒƒaU@mUk@kL@lƒxċxUnkVmnXxWb@`kzWJ@V—LmVUn™lmUL@lW@Ub@VšXUbš`VLUbUJ@nmnUlUUm@@bUJlnU„š‚U@lxkbƒ@@XƒJUnƒ@kb¯VVVmlXXlJlzn@VlkVW@bkK™bmškŽUbVb„lƒXVxšKÈnšwÞlĊKlšVnKlwX@lL@xlUnVn„@šl@lmX@ƄÈb°¼ÈwVJlx„_°xšašlšUÈxlUnbVxnL@lllšbm„n@nb‚@@V„L@V„@@„VLšJnIVVlKnV„_'],
  37614. 'encodeOffsets': [[
  37615. 114661,
  37616. 35911
  37617. ]]
  37618. }
  37619. },
  37620. {
  37621. 'type': 'Feature',
  37622. 'id': '4107',
  37623. 'properties': {
  37624. 'name': '新乡市',
  37625. 'cp': [
  37626. 114.2029,
  37627. 35.3595
  37628. ],
  37629. 'childNum': 9
  37630. },
  37631. 'geometry': {
  37632. 'type': 'Polygon',
  37633. 'coordinates': ['@@XVlL„K°bUblbUbšl@nX@W„XVVKVkš@@Žmb@„Ubn„W`kL„LƒV@VVLnKlVXIlVš@@a„@l£nWlƒkVa„@°bnUlLVlna‚bnUVUXKlU@ƒ@lk@a„I°y„@ôkUU@wšmôšnkWakml™UkVmkUlmUUm@nkUKWanamU„LXW@U‚VnUln„`l„œblL°KXV@ĠJ@L°„šJšUVw„anK@UUImmƒkK@¯±Um@IVmUmmÅnWaUK¯aUk„w@W±kVƒx™U™VƒwƒnÅJUIWaÝJóI—bm`ÝbÅImJUI¯¥¯@mU¯UƒJmnUVóUkl±V@zXl„bWVXL@bm„mº@@XmJUXU°llk„@nWJk@U„@¦U`m¯ŽWx'],
  37634. 'encodeOffsets': [[
  37635. 116100,
  37636. 36349
  37637. ]]
  37638. }
  37639. },
  37640. {
  37641. 'type': 'Feature',
  37642. 'id': '4104',
  37643. 'properties': {
  37644. 'name': '平顶山市',
  37645. 'cp': [
  37646. 112.9724,
  37647. 33.739
  37648. ],
  37649. 'childNum': 8
  37650. },
  37651. 'geometry': {
  37652. 'type': 'Polygon',
  37653. 'coordinates': ['@@l¤UbVL@V„LVb²VlKlaX@„„lbš@lxUVULƒbšln²VJUbW@@L„b@`nL@nVV@LVŽUbUVm„kVl„ƒlXbl@Xn°ŽVK@_°`²IVVV@VUVJnInaWK@Uš@„K„LÆ@nmlXXWVUUw@klKVa@knyVkVanI‚JXUl@XbVUl@@aša@mXk‚bnK@UlK@UUUVaXaWmkUm¥n—WmXaWaœkl@VmÞb„KVL@aVI@mUwVm„@KōméUL™KVaUk@kUK@U˜WXI@VlKXU‚@VVnInVV@VLlK@UUƒkKU_@ƒWWUwU™@klƒn@ƒƒ@Imb—@@m›nUKÛ@mKUkWVXxmbVLXŽVVU²VV@xÅnmWmLU@kbmJ@b¯š™IUb™JƒUUxVl@z@bU`W@Ub¯nUJUbƒ@WLUKULkU@aWKƒ@aƒbmL@ƒlmUk@@bUL™ƒWJUI™°@ƒŽ¯aWLk@mbUb¯b'],
  37654. 'encodeOffsets': [[
  37655. 114942,
  37656. 34527
  37657. ]]
  37658. }
  37659. },
  37660. {
  37661. 'type': 'Feature',
  37662. 'id': '4101',
  37663. 'properties': {
  37664. 'name': '郑州市',
  37665. 'cp': [
  37666. 113.4668,
  37667. 34.6234
  37668. ],
  37669. 'childNum': 8
  37670. },
  37671. 'geometry': {
  37672. 'type': 'Polygon',
  37673. 'coordinates': ['@@@nWVUKÅ@W„nVnI‚ŽV@œkƂšwV@šnn@lxÞlnôJ˜zXJl@nalUČVlƒl@²UlkôVVUnm„I°VnV°@°¦VJnIÆJÞan_VmU@ama™@kU˜¥kaUklw@UIV¥kVUI@ƒmmUÅmUlƒwVU@amU—JWbUakVƒ—Vé¯Im`ƒk—@ƒwVWmLkU¯ŽƒXkWmLmx@UUƒbm@@x™J@LbW@UUVWUkVKƒ@ka™IUamKUkkmmLƒUkJUVWXkWmnÅ@ƒKƒL™@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤„b‚kôKXKlL@¦²V@JƒL±@„@VU@WV@X@`XXmb@Žšblaœn@Jƒb@V'],
  37674. 'encodeOffsets': [[
  37675. 115617,
  37676. 35584
  37677. ]]
  37678. }
  37679. },
  37680. {
  37681. 'type': 'Feature',
  37682. 'id': '4105',
  37683. 'properties': {
  37684. 'name': '安阳市',
  37685. 'cp': [
  37686. 114.5325,
  37687. 36.0022
  37688. ],
  37689. 'childNum': 6
  37690. },
  37691. 'geometry': {
  37692. 'type': 'Polygon',
  37693. 'coordinates': ['@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@a„wWWXWakKWkXmlašIVmX¥ƒU@a„@WnK@kƒƒ™V™I¯ƒ@KğI@WU¯LkK›akƒƒ_kmmVU@VWXƒKnVmbXbVLmln@VVknlVUnVlkšlnXbmlmlXblnÈlWbn@@nšK@V„L„bVV°VVzšlnš@V™xƒI™b™ŽU@WLUa¯V™UkWõ@¯kkmxk¼l‚„XUlVbVLnlULmU@lƒLkVUlƒX@xW@¯mUƒ@UmIUW™L@aXa˜kU™¯anƒWk°@k™kKmmUIWaambUkkKmV¯aƒ@UblŽk„mXk¤ƒ@@b™@UbULWVnb@lUVVnmšnVVU„J@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVšVWbnLUJWLUK@Lnn@blVU‚„nUblxVUVJXU„a˜@Ub„LnUVV@mVIVVn@UbV@‚XbmbUV„_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXl‚kVbœm‚X„ylIXJV@@kšKla²UVa„IVyÞb°LlVna@UÆKnLVbšK@anwU™'],
  37694. 'encodeOffsets': [[
  37695. 117676,
  37696. 36917
  37697. ]]
  37698. }
  37699. },
  37700. {
  37701. 'type': 'Feature',
  37702. 'id': '4102',
  37703. 'properties': {
  37704. 'name': '开封市',
  37705. 'cp': [
  37706. 114.5764,
  37707. 34.6124
  37708. ],
  37709. 'childNum': 6
  37710. },
  37711. 'geometry': {
  37712. 'type': 'Polygon',
  37713. 'coordinates': ['@@lUVbXa˜InV@bUV„x‚knVVÆnn@„VJlUU¦VJ@kxVllb—¦lVš@nb@bVŽUn˜aôJÞIXbVJÆI„m„xšUšV„w‚U²l@XƒxVl°bVLXb‚`XklUnmVblLœ@lmšx°LVK@UXIVašWlL@Ukƒ°KkVaVUXmmI@UÅKmmƒXka±K—L@W›@kUÇxUUƒ@@UXUlKkklW@ašX„a@UƒKUaVUUV_@yXk@ƒ@a@U±w@UUW@_„mmw@wVw„mUaÇbUa¯UUkmWkn±JÅxmIbUxmKmn—JWw„kUaƒK@a¯@ƒbk@mVUIWƒ—Lmwm@Ua@WJUb@LUl™@UUmLUbWJ@VL@VmXWWzUJUꄘ'],
  37714. 'encodeOffsets': [[
  37715. 116641,
  37716. 35280
  37717. ]]
  37718. }
  37719. },
  37720. {
  37721. 'type': 'Feature',
  37722. 'id': '4108',
  37723. 'properties': {
  37724. 'name': '焦作市',
  37725. 'cp': [
  37726. 112.8406,
  37727. 35.1508
  37728. ],
  37729. 'childNum': 8
  37730. },
  37731. 'geometry': {
  37732. 'type': 'Polygon',
  37733. 'coordinates': ['@@V@VL@x@bXŽWV@XkššlUŽWX@J„@nI@KlL„KšUVaV@œJlL@KUk@KÞL‚l²_‚@nWlL„UVVš@nLWVUJVn@anV@a„wÞUVLVx„b„@lW„@lbXn‚Vn@@¼šL°mšKVn@bnl@nVK@blb„L„W„U@VWLXV@nlKn@lVVbXw°nV_@¥Vƒl@XI@mlƒkkV¯VWnI@W‚@n¹nƒ@aWKXUƒaWk@yk@k„ċUkVmbk@WI—yóImÝkkwm@™mU@™xŁ›lU@mJƒX™ak@ƒx¯V@¼¯Vm„UmmIkVWK@UXIl@UWVUU@mVUI¯b¯@™lmKzWKUa™nƒJ@nƒlbÝ@@b'],
  37734. 'encodeOffsets': [[
  37735. 114728,
  37736. 35888
  37737. ]]
  37738. }
  37739. },
  37740. {
  37741. 'type': 'Feature',
  37742. 'id': '4110',
  37743. 'properties': {
  37744. 'name': '许昌市',
  37745. 'cp': [
  37746. 113.6975,
  37747. 34.0466
  37748. ],
  37749. 'childNum': 6
  37750. },
  37751. 'geometry': {
  37752. 'type': 'Polygon',
  37753. 'coordinates': ['@@lI„VnKlnVlnLVbšJlb„@ULVlUXVVX@‚a@KšI@wn@„aVV‚@nwnKlX„W°lVnKUX„x˜@„ln_°JVIXy‚XnW@U‚K@UXIVanKVVš@Vk@KVaXI‚@Vbn@nx˜KnaU™l™ƒn™Va@ƒXa@™VçUUla@aUK@wmUƒLk`kIWVkLmK@V@XUlƒn@JXV@nm„™bU‚óIƒmUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWaƒ@XbmJ@nUJ@bUKƒLÝaUnk@›lXbWbXnm˜n¦lVXnWbUbVV@VkL@VmLaWl@n™b@bk@UVWak@WVImJUbUlmz@lUbkL@lVx'],
  37754. 'encodeOffsets': [[
  37755. 115797,
  37756. 35089
  37757. ]]
  37758. }
  37759. },
  37760. {
  37761. 'type': 'Feature',
  37762. 'id': '4109',
  37763. 'properties': {
  37764. 'name': '濮阳市',
  37765. 'cp': [
  37766. 115.1917,
  37767. 35.799
  37768. ],
  37769. 'childNum': 6
  37770. },
  37771. 'geometry': {
  37772. 'type': 'Polygon',
  37773. 'coordinates': ['@@lLXbW‚XXƒx@bVVnLllVxULUl‚XXlVlUnlŽU¦Ub¯l˜nœK@V‚bVb@šXbVL„KVxVVnIlašb„a„¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mƒÅW¥—aW_k@WwXy@kmƒ@wU„mš„š¦šlUxVLV@UwšJ°xš@VX„@Vb„@š`VX@VX@llšIVbnJlI„bšV„l„˜J@ƒmѯLóa@ƒƒKUa„k™ƒ™Xƒ@UK@wU@ƒlWUUݯImW¯aƒLUKU@ƒkƒ»k@mƒwƒa@UnKWI@ƒUU@akVWK—k@a±ƒbóUWKXUmk™KUmLƒbUx„„@lmLXŽƒ@@b„VW¦Un™JkbWnXl'],
  37774. 'encodeOffsets': [[
  37775. 117642,
  37776. 36501
  37777. ]]
  37778. }
  37779. },
  37780. {
  37781. 'type': 'Feature',
  37782. 'id': '4111',
  37783. 'properties': {
  37784. 'name': '漯河市',
  37785. 'cp': [
  37786. 113.8733,
  37787. 33.6951
  37788. ],
  37789. 'childNum': 3
  37790. },
  37791. 'geometry': {
  37792. 'type': 'Polygon',
  37793. 'coordinates': ['@@@Lƒ‚UnVxnIWa„@Xb@WÆIVlXaVL@VVLVbkVVŽUVlX@bUVkLV‚l@VVôU@Ò²@Vb„nôJVšanƒ@mWU@I„mVk@WkI@wmak™@wlW@w„@VbnLVb°bVyX™V_@aUKVVK@wUU@™™a™K@kmbXVmJUXƒ`kn™nƒK@aU@mw™akb±@¯ƒUUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJ—X@VVL@lVlUbšLVKnêÆŽ'],
  37794. 'encodeOffsets': [[
  37795. 116348,
  37796. 34431
  37797. ]]
  37798. }
  37799. },
  37800. {
  37801. 'type': 'Feature',
  37802. 'id': '4106',
  37803. 'properties': {
  37804. 'name': '鹤壁市',
  37805. 'cp': [
  37806. 114.3787,
  37807. 35.744
  37808. ],
  37809. 'childNum': 3
  37810. },
  37811. 'geometry': {
  37812. 'type': 'Polygon',
  37813. 'coordinates': ['@@ó™™n@xVVólƒ@¯zƒJ@bkl@@„kVWLUVmVXbVJnnlLlš¯@Xlm„°bVš—lWb@bšKVXnJ@VV„°nX@@w„WVklU„K@knVVKmkUKUaVkƒWkl»nwlްlö@lXšV°UVbXKV@šša„Jšw@Um™™kUy¯UUUƒaƒK@U™L@mm@XaÇkkmWank'],
  37814. 'encodeOffsets': [[
  37815. 117158,
  37816. 36338
  37817. ]]
  37818. }
  37819. }
  37820. ],
  37821. 'UTF8Encoding': true
  37822. };
  37823. });define('echarts/util/mapData/geoJson/hu_bei_geo', [], function () {
  37824. return {
  37825. 'type': 'FeatureCollection',
  37826. 'features': [
  37827. {
  37828. 'type': 'Feature',
  37829. 'id': '4228',
  37830. 'properties': {
  37831. 'name': '恩施土家族苗族自治州',
  37832. 'cp': [
  37833. 109.5007,
  37834. 30.2563
  37835. ],
  37836. 'childNum': 8
  37837. },
  37838. 'geometry': {
  37839. 'type': 'Polygon',
  37840. 'coordinates': ['@@VK‚bX@lbUVnL°„@VlVnUl@VUX@„aVƒmaXƒlašUUU@wmaVUn@Vƒnmmk@m™U@kna™aU¥Vam™X_@WƒU™mW@_kƒVaVKnL‚lœ@VVal@k¥@kUW@kUKVUlUVсW@kÇaU»ValmkUVUVak™@aƒV¯_@W‚UkmVUlU@aœƒƒalI@akkVWUaWXUWwœWVbÆ@„„l„alIVK@U™m@UU„W@al²a‚¯UağÇm@ƒbkk@wƒ@@W™aULmxƒIU‚™ƒb¯@U`UX™JmL¯aƒKX›WUL@aknmK™@aWUXaWm@I@UÅmVU@™™aUV@b™VƒI@WkU›bXkm@VakwUKULWKXmJ@XUK@ƒmL@KUwVaUI@KU@mmn™mXka@»V@@UUaƒw¯yVk@ƒUUVmmkÛÈU@mWUnmx„šmlUbV¦UlbWVUL@UUƒ™IUmÇKV„VbUVVxkn™LUxV`VX@š„„kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlƒLnmUIWV@aknƒ`VXUJIVlUVVbUX@¤mbnLm‚m@UXk@mm@Ukaƒ¥@kV@@KkU@aUKWbkLWVkIVŽk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk„@XVVU@`VXUš‚¼k`VULka@VllVIn¤VU@@bl܃bkx@bkL›škKƒn@bn@@b@JUnV`UnVbVKlVXUlbn@°ƒVx„@@b„nVbUllVn@V—VK@UnW@UVUšlnk‚VÈޚxVb„VVI„xVaÆ@@aka@UVaU@@a„k@Wl@nbVIƎ@Jk@„L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlb„xnKVaV@l¦²nVl@llL„x@XVVœ‚͐š@našx@U@al™XUVa‚LÈþV°XxWXkK@šmLnlUb@b‚xnLVlVVkb@UJ@xWXXš'],
  37841. 'encodeOffsets': [[
  37842. 112816,
  37843. 32052
  37844. ]]
  37845. }
  37846. },
  37847. {
  37848. 'type': 'Feature',
  37849. 'id': '4203',
  37850. 'properties': {
  37851. 'name': '十堰市',
  37852. 'cp': [
  37853. 110.5115,
  37854. 32.3877
  37855. ],
  37856. 'childNum': 9
  37857. },
  37858. 'geometry': {
  37859. 'type': 'MultiPolygon',
  37860. 'coordinates': [
  37861. ['@@@a@w@kV@nbVK@ƒnUla„@la„Ål@nlVakwWX@WkLšaVmšwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@ƒVUa™kmƒkI™yUUVUmanU@mlwkƒ@_mWXaƒUWU@ǃ@U@aUaVwUKUIƒVkK@UWIXƒmaV@k@Vm@UnwlƒUamk@V@„ULUamxUJkU@Iƒ`WkkK¯XWak@@W@IUV™LWJkXkaÇVUKƒ@kUmbmUUƒUKƒbkKWUkI@ƒkKÝ@@aƒUm»nI@mƒU@UnWV_@aUmWbkLUl¯b@a›kkk@WkkJm_k@UV±@J@b›nU@@WÝIUJVbXL@nlJkx@„Wn@VkJmb—LmUƒ`VbUL@xVn„@XVƒŽ@„mVVnnJVbU„ƒx@„V„nVUbVVƒx@šn„™bUK@bƒ„@bƒJ„šm²„VU‚lbXzVJV„„JVbn@@Xmb@V@bVJÈ@‚Vnkn@°aVVV@šX„KnalLVmšUnnVKVlnLWlXX„Klk°š™šXŽWškLUVVV@nU@ml¯nmbk@W`Å@mb—LWm¯UƒxnêVèk@mbƒVƒnUK™@kKmXk@@JUI›lÛLllnbVnlJ@LULnlÆaVLnŽV@nkVJ„@lkô@²bÆm°w„L„WV@VXšKšVXI@W°ÆVšK„b°U„JVIVV„¦XKVL@l‚InaVÝnUl@@bX@‚™nmVL@lVL„lVLVUnbVW@xXn˜bœU°¤V@š™„a@kWKUUn@VlnL@UV@Ü»@mX@V_ƒakaÞ@VK‚¯@kkW'],
  37862. ['@@mUkUUm@nllVKXXVK']
  37863. ],
  37864. 'encodeOffsets': [
  37865. [[
  37866. 113918,
  37867. 33739
  37868. ]],
  37869. [[
  37870. 113817,
  37871. 32811
  37872. ]]
  37873. ]
  37874. }
  37875. },
  37876. {
  37877. 'type': 'Feature',
  37878. 'id': '4205',
  37879. 'properties': {
  37880. 'name': '宜昌市',
  37881. 'cp': [
  37882. 111.1707,
  37883. 30.7617
  37884. ],
  37885. 'childNum': 9
  37886. },
  37887. 'geometry': {
  37888. 'type': 'Polygon',
  37889. 'coordinates': ['@@°`„U@blšUbUVlVkn‚ŽUbV¼Èb@l‚XUÒkVUVVL@lVX@ll¦k@UbU‚›@kmKULUbl„@`nXšŽ„V@XW`nšUbV¦šbmb@lšV@nnlmnU„m@UVnb@xVV™VkbW„nb‚VnVa@an@UaVU‚JXnWlXX@l„¦@ŽlKÆX„bX‚V@VV„@°¯°xXx‚XV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@˜aXUmaVK@UXU„U@WVI‚W„XXV‚U@¥VKœ@‚Uގ„„‚a²LlV@kV@UanKma@UVUnK@UVLXyVL‚knJ@UV@@UXKWUXaV@Vb@mVLnKW„m@aUUm@@UkK@Ula„LXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVƒkU@m±@U@@wVKkaš_@VV@XUVwU¥‚šyUkm@V±ÈUKk»ÇL„m˜mLk@ó£kmWwƒm@U„IkWKXwWU@ƒkLƒwkbmaƒbkK@VƒLkmWIUKkUUƒÇIǫJ™XÅJULVŽÇLUVƒ@UK™@kI@WVI@UaƒWmXVVUL`±kÅLmKkƒƒkƒÅ@Ua›XXxWVXŽVbUXll@bkJ„b›„@bkVUVlnV@X'],
  37890. 'encodeOffsets': [[
  37891. 112906,
  37892. 30961
  37893. ]]
  37894. }
  37895. },
  37896. {
  37897. 'type': 'Feature',
  37898. 'id': '4206',
  37899. 'properties': {
  37900. 'name': '襄樊市',
  37901. 'cp': [
  37902. 111.9397,
  37903. 31.9263
  37904. ],
  37905. 'childNum': 7
  37906. },
  37907. 'geometry': {
  37908. 'type': 'Polygon',
  37909. 'coordinates': [
  37910. '@@@Xl@Xb°WlLXl„_@JlVVInwVbVK@ƒ@UnlVbk„mx@VUnl@U@nbW„XJ@VlL„UVJVLUxVb@b@VȄ‚@XV„VWbnX@`l„kx@nmVnbUVVVšzlJn„šlVb„UV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn„`Xnl@@UVa@VÈKš£VLVanW°U@UVU„@„`VIn‚mV@„nV@Xa@aVW@UšalkXKšblI„yƍXnlJXbl@@VV@nklU@`„nVK„LVKVb@V„U@UÈK„UVKšIlUX@V`lIVbn@nblVVmV@@XXJšUVV@knKVn@`@X‚VnK„wlLVmUUU@ƒU@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@ƒnk@UmK@U@UaUVUUKV_@al@namWUI@KUƒK@aV@WUIƒbƒ¥ULUJkIm™ƒK@U@K™V@U@a@UkU@K@wVaUwlU@mUƒULmKUkV@@anIWmUK@I¯„mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@ƒƒJma¯ImwUVkKƒb™aUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbƒƒÝV›@UL@¦VWUƒWXUJ@XƒVWV@VULnbWV—bW@kmWXUK@Vkam@kkm@UlmXUŽnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LƒnWmbmš@b™`ƒš',
  37911. '@@kUUm@nllVKXXVKmU'
  37912. ],
  37913. 'encodeOffsets': [
  37914. [
  37915. 113423,
  37916. 32597
  37917. ],
  37918. [
  37919. 113794,
  37920. 32800
  37921. ]
  37922. ]
  37923. }
  37924. },
  37925. {
  37926. 'type': 'Feature',
  37927. 'id': '4211',
  37928. 'properties': {
  37929. 'name': '黄冈市',
  37930. 'cp': [
  37931. 115.2686,
  37932. 30.6628
  37933. ],
  37934. 'childNum': 10
  37935. },
  37936. 'geometry': {
  37937. 'type': 'Polygon',
  37938. 'coordinates': ['@@VVUnWVXnVJ@„‚U@V@VXŽV@@IVJUnŽ@V@L@KlIVlVanLVbnVlI„ƒn@@a@Kl@@I„JlI@aXU@KlK„kVblJXU„VlU@V„bVkVKXn@VlxVa²I@VlVUxln@bšJXklaVWnLmÅ@y@k@ašI@W@aXIlVVaV@nnlKnLVW@IUa@a@K„UVVlI@wXKVV@IUƒla„@lUXwWƒnƒnalLlxXLll°@XwVKVaXIl™nb˜@nln@Va@U@k°ƒUmÆUVaXI„JV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkǰ£@aUUVaVVnKlkX‚mkƒ@ƒlUVaX@@Um@‚™UmlUXV„UVU@w‚K²¥Ua@I@UV™l@U™V±UIUǰ»VkUmVI@a@U™m™ĉ™¯V±bŹĖğaÇL¯lmŽkX@‚óĀ@ŽmšÝêb±WkLƒn@xXx@Ž@b@V@LW@UbƒlţXƒ`kxWnXô¯¦ÆV@L@JVLƒxkK@V@bkz°l‚lXz@J„UlVla@XUV„bVKXnW`XXV@laVV@V„X@V¯xƒx@xULVbUJ@n@LU@VmmakbUK@b™IWWUUVkUmkLm@VJkb@nUJƒ@`V@kX™aUaVmmLkUmJ@Uk@U„±lkzmJUb@b„VUxVXU¤ƒL@JƒX@VlL@JkLUVU@mnUl„¦@V'],
  37939. 'encodeOffsets': [[
  37940. 117181,
  37941. 32063
  37942. ]]
  37943. }
  37944. },
  37945. {
  37946. 'type': 'Feature',
  37947. 'id': '4210',
  37948. 'properties': {
  37949. 'name': '荆州市',
  37950. 'cp': [
  37951. 113.291,
  37952. 30.0092
  37953. ],
  37954. 'childNum': 7
  37955. },
  37956. 'geometry': {
  37957. 'type': 'Polygon',
  37958. 'coordinates': ['@@ÈJV„lVVLXJln„K@UlL„anbla„xlK@„XVWxXLlƒJ@V„nXxlnô¤l@nKn—‚ƒÈKl¼VL²Ç‚Un@Vl™zŽV¦UxWVU@@U™`lbUL@xV@²@@nlVU„UJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@a„IVmUk„™šxVJ„U„bܙ@Uk@WWnk@Vƒ„™Vm@I@m@Un@m™XUlVlUnJ@knJVU°@@aÆLX@ƒllL@¦nJV@XblLVa²U@UlWš@VX@`@LV@@bXJlIXml_lJœU°b„KÆLnVVl‚@ö—Vƒ‚mXaVIĢllUlVnLVlX@@b‚ašnnxšV„L‚bn@°ÆXmmkĉƒ¯w±™™™Uċ@KÝÅƧŃÝ癙Uw¯ƒm™¯k@W‚kV@¯UIUJW¼kb™Uƒwk@W`@¦Uônb@VƚlÈ@VU@ƒƒ£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Uƒa@JW@k£kaWVUKmnkKƒb™kkVWb—VmUUmwU@kk›@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamœUK™@mlk@Wb@VXL@x@xWI@a¯Ž¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@Uaƒa™L™KUVƒIƒ„™W™XamVVbUK@b@Lm@UWkxULWVUnm@UlUX'],
  37959. 'encodeOffsets': [[
  37960. 113918,
  37961. 30764
  37962. ]]
  37963. }
  37964. },
  37965. {
  37966. 'type': 'Feature',
  37967. 'id': '4208',
  37968. 'properties': {
  37969. 'name': '荆门市',
  37970. 'cp': [
  37971. 112.6758,
  37972. 30.9979
  37973. ],
  37974. 'childNum': 4
  37975. },
  37976. 'geometry': {
  37977. 'type': 'Polygon',
  37978. 'coordinates': ['@@n@lxlInVUnWJ@nUVV@Xb@xVƚb„alLVUnx°Jnb„I@„V`lInbl@@V°mn_VJÞUVLXx‚@nllKVb²kVa@KlknL°ƒ@JVLXnmJ@bU@VlnLVKV„@nX@lUšKVaXal@VKn@¥°L@Unw˜bnašV@KV@VUX@lVXI@KW@@IXWV@laVL„„KlaXUVVnkVWV@lwXblIXWVkVmšaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LƒV¯™U@WwkmULƒamVVUU@ƒƒIƒbUKUa™kmƒm@UakLmxU@UÒWlULţÿmwkIUm@a‚kÈblW@UVƒUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWƒ™aUwVaۚƒaƒVUI™wƒšVlUnƒJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmŽXX@‚@nWKUL@xVlknkL@bWJXbWLƒKkb@VlL@Vn@VV@bƒnX‚mLUK@nUaU@WbXVWL@VU@@V'],
  37979. 'encodeOffsets': [[
  37980. 114548,
  37981. 31984
  37982. ]]
  37983. }
  37984. },
  37985. {
  37986. 'type': 'Feature',
  37987. 'id': '4212',
  37988. 'properties': {
  37989. 'name': '咸宁市',
  37990. 'cp': [
  37991. 114.2578,
  37992. 29.6631
  37993. ],
  37994. 'childNum': 6
  37995. },
  37996. 'geometry': {
  37997. 'type': 'Polygon',
  37998. 'coordinates': ['@@ÞÆ‚LČ@šV‚š²š°xĊ„nlWnŎ¯m@aƒK@„„°‚n„Jšwn™VIUaÆJšÅ@wšwV™XW@aV_l@²V°lĊwlaXLšwlUkalVVaX@lVXI@a˜UXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@a„K@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXƒ„lV@mLXblJ@kV@kk@KU@WƒkUWVÅwkLmW@UmL@lUL™KULƒak@maUUÝwUJƒIb›KUUƒ@š™aWK@kUWVkUwVw@™mÝ@™I@wkW@a›ww@LU¥™kƒJ@nVJƒIkVVnkV›UkyUIUl@xWUkaW@@°kz„ŽWxkLUWmzk@@bVVVš„b@‚@XlVœ@Vl@bVbUn™`Wn—@Wb„VVI@`„LVbXLV`mnU@@lƒL@LUŽƒak@ƒLk@WbUJn¦@lVb@xVb@n'],
  37999. 'encodeOffsets': [[
  38000. 116303,
  38001. 30567
  38002. ]]
  38003. }
  38004. },
  38005. {
  38006. 'type': 'Feature',
  38007. 'id': '4213',
  38008. 'properties': {
  38009. 'name': '随州市',
  38010. 'cp': [
  38011. 113.4338,
  38012. 31.8768
  38013. ],
  38014. 'childNum': 2
  38015. },
  38016. 'geometry': {
  38017. 'type': 'Polygon',
  38018. 'coordinates': ['@@„@nš`lw„k„ƒ„UmUVWX@lk„@VanUĠ¼V@@mX@@nVV‚VXLmJVLnK@b„V@@J„@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVƒVUVLXmmk@wUaUKUV@°™@kmaUaÈmW„mUƒVklaX@lVnxl@@UnaUk@ƒVUVwVK„nš@VVn@VbVJUknUmmVmk_Vw„KUUm™Vak¥@UVKVIkW@UmIVWkIVƒkmmLkwmVUƒ@LƒUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯™mJUnmLUaUJUaWL@UkJ™ƒUƒ@ƒaklkU@¯@KWLUmUUWVkbƒLƒŽUKkbU@WX@JX@@LWJkUW@UVU@@L™Umb—amx@V¯K@¦mŽULk@WbUb™LkVW@kVVxUb@x@LlV@V@b@VšU@L@V„LnšlJVIVK„¦„aVJ@XUŽ@b„LV‚@LVJnXmbk@@bU`VLUVV‚b@V@VnL@Vml@„@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@b„VV@VV'],
  38019. 'encodeOffsets': [[
  38020. 115830,
  38021. 33154
  38022. ]]
  38023. }
  38024. },
  38025. {
  38026. 'type': 'Feature',
  38027. 'id': '4209',
  38028. 'properties': {
  38029. 'name': '孝感市',
  38030. 'cp': [
  38031. 113.9502,
  38032. 31.1188
  38033. ],
  38034. 'childNum': 7
  38035. },
  38036. 'geometry': {
  38037. 'type': 'Polygon',
  38038. 'coordinates': ['@@VnXK@L@°lVlk„b„@„VšlI@VXKVbVIVbnKVmnI°šlŽÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@„V@KV„nUlxnKlnU„lJUXnJ@VlXUJUL@Vl¦UbnšVVƒLUxl`UnnnmVVlnVK„bšmVX@a°Ý°LšaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn„@@UU¥V@@UUK@ƒmaUVUkkJ@L@K@UmVUI@JU@W@U@UV@ƒUIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwk™ƒVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbƒKƒb¯L@WƒXkWƒ@UakL@UV@UmVUmL@UXWVL@ašUƒVUUUVU@yUUƒIUa@wUKWVU@kƒ™™Wk¯UkwVKƒLUx™K@nVxUlUUWVUmw@wƒUUyXWlX¦WbUV@„U‚@blbUVVbXXƒl@lVL@bk@lxkVVnVx™¦ƒ`UnkL@V@L@Ž‚@@xnL@lVL@VnVVblLXb@‚@zlVUJVnUbV¤™bUnUlWXkJWakxU@UXml'],
  38039. 'encodeOffsets': [[
  38040. 116033,
  38041. 32091
  38042. ]]
  38043. }
  38044. },
  38045. {
  38046. 'type': 'Feature',
  38047. 'id': '4201',
  38048. 'properties': {
  38049. 'name': '武汉市',
  38050. 'cp': [
  38051. 114.3896,
  38052. 30.6628
  38053. ],
  38054. 'childNum': 1
  38055. },
  38056. 'geometry': {
  38057. 'type': 'Polygon',
  38058. 'coordinates': ['@@nbnm‚knJVUÈ@@Uƒ¥VknmV@VUlK@IkK@U„W@I„KV£UWVwƒU@aVanIly²kVƒl@@VnIlVnKUnVbšblWU@@_„‚VI@mlaUIn@lKVnUlVVXXšJ@aVLlanbUnV@@K@mVIUaVK@w„w°w@UƒW@UUUkbU@WWX_WmULƒaVU@WkbkUƒV@IWyk¯kly@a@UlL„wUK@I@KÅUW@ѱUm@wl¥kaƒ@@_Vw@ķƒa@akw@ƒkKW£XVUVwVwUaU@VUU™™xWKkbĉx¯k±Uk@U`@bWXUš™x@x™ÆÅIVbUJmš™xƒImƒ¯@ƒ™Umx™nUVVbnJV„@Lƒ@@ŽkV@bVnƒ@UVULlx°VXlššl„V@XUVL@xVb„JVV@zUVVVUV„™V@bUKWX@VnKUVVnU@@VlKVb„@lX„W@X°K„a„Lla@JX²Wb@ŽUV@@xVbXlWb@VUXVlXLV`Uš„lŽUxkLmVUŽlLUVVxX@lb@blL'],
  38059. 'encodeOffsets': [[
  38060. 117000,
  38061. 32097
  38062. ]]
  38063. }
  38064. },
  38065. {
  38066. 'type': 'Feature',
  38067. 'id': '4202',
  38068. 'properties': {
  38069. 'name': '黄石市',
  38070. 'cp': [
  38071. 115.0159,
  38072. 29.9213
  38073. ],
  38074. 'childNum': 3
  38075. },
  38076. 'geometry': {
  38077. 'type': 'Polygon',
  38078. 'coordinates': ['@@VšUVV@VbUx„aWUœblUVmnKlX@bXJVIlVUxVVVIU‚zlx¯š@‚VbnL@x‚x@UVaXK„b˜@Xk‚WU_Vm²klW„XVK„Žl@nXV@@w„mlK²X‚aÞén™@ôÿ@lWn°kUKmmUљUmm@ƒwkImWU@UakL@bVLUVċ@™bUK@alIXKWK@™nXnKmkUVwƒ@¯b@L„lUL±W™n@KULUaW@kL@lƒL@bU`@nUb@bmlU@UÇJ@UUbmKkblŽUULUJV¦¯V@VWI—V@bWJkUW@UbkUlbkV'],
  38079. 'encodeOffsets': [[
  38080. 117282,
  38081. 30685
  38082. ]]
  38083. }
  38084. },
  38085. {
  38086. 'type': 'Feature',
  38087. 'id': '429021',
  38088. 'properties': {
  38089. 'name': '神农架林区',
  38090. 'cp': [
  38091. 110.4565,
  38092. 31.5802
  38093. ],
  38094. 'childNum': 1
  38095. },
  38096. 'geometry': {
  38097. 'type': 'Polygon',
  38098. 'coordinates': ['@@n`lIXll@lœl@b°aVklKXaVn@bU`mX@V„V@nmJn¼„V@bÞ@lL@„lJXVlL„aVLV„nVnalV„@VLÈUlblWXIšKVU@J„™š_‚@an™na‚X„m@KmI@mkk@KVkWWw¯w¯°ƒ@UUU@WƒaÅWkL@ƒ¥@kWWXkWmIUVVbm@@bUbmUU„ƒbW@UVk@mVkU@U¯ƒmKVUkaW@aULƒÆVbƒb@VÅ@Un@VƒLWl¯Lš„'],
  38099. 'encodeOffsets': [[
  38100. 112624,
  38101. 32266
  38102. ]]
  38103. }
  38104. },
  38105. {
  38106. 'type': 'Feature',
  38107. 'id': '429006',
  38108. 'properties': {
  38109. 'name': '天门市',
  38110. 'cp': [
  38111. 113.0273,
  38112. 30.6409
  38113. ],
  38114. 'childNum': 1
  38115. },
  38116. 'geometry': {
  38117. 'type': 'Polygon',
  38118. 'coordinates': ['@@@K@UlKVm„_š¥UwUmlUkwl@@aUK@k„kWWUaVUka@aV@ƒVUXaW¥Xk@WWIklm@ÅxmI™VÝUkxkaƒ„@bWJaUL@„W@™l¯UULU‚ƒbƒkV™Ua¯bm¤UnÇUkmUšUx˜b@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@n„šlVbVL„a„J@„VV‚UnU„bVKlnXxV@°š„U@KnL'],
  38119. 'encodeOffsets': [[
  38120. 116056,
  38121. 31636
  38122. ]]
  38123. }
  38124. },
  38125. {
  38126. 'type': 'Feature',
  38127. 'id': '429004',
  38128. 'properties': {
  38129. 'name': '仙桃市',
  38130. 'cp': [
  38131. 113.3789,
  38132. 30.3003
  38133. ],
  38134. 'childNum': 1
  38135. },
  38136. 'geometry': {
  38137. 'type': 'Polygon',
  38138. 'coordinates': ['@@VK°VškX@@ƒVK‚bXI@a„ƒlblwÞVšUnJÆwn@lkXJ@X‚WVz„V@xnx‚VXUVVVkUw@mšLVw„KVU„@Um@alU@„@@KUƒmIUaVUšmnwmw™mb@aW@UkmKkUkVġkUJWbnU„õ˜@UkmUÅKƒL¯a›VkIk`WnkJƒ@xVLUVVbUbk@WlXbm„VxnxUblbUV™@@VUV@nVL'],
  38139. 'encodeOffsets': [[
  38140. 115662,
  38141. 31259
  38142. ]]
  38143. }
  38144. },
  38145. {
  38146. 'type': 'Feature',
  38147. 'id': '429005',
  38148. 'properties': {
  38149. 'name': '潜江市',
  38150. 'cp': [
  38151. 112.7637,
  38152. 30.3607
  38153. ],
  38154. 'childNum': 1
  38155. },
  38156. 'geometry': {
  38157. 'type': 'Polygon',
  38158. 'coordinates': ['@@UbVxšbX„mJVnXVlmVX@bkxVJVLVlXXWlX@@IVl„V‚U—aVwV™lnÈVVmn£°aVbUš„l„aVUK@mVU@Uš@VUkaVamwUwnƒWaXkl@VaUaVUUK@w„WI@aU@@K@_UW™@kX@V±VUbkKWaU@mI@¥kK„kW@ÅK@b¯@UVmI@lmIkVkUWVnšm@@V@n@JUnƒšU„@ŽmlXXl@@V'],
  38159. 'encodeOffsets': [[
  38160. 115234,
  38161. 31118
  38162. ]]
  38163. }
  38164. },
  38165. {
  38166. 'type': 'Feature',
  38167. 'id': '4207',
  38168. 'properties': {
  38169. 'name': '鄂州市',
  38170. 'cp': [
  38171. 114.7302,
  38172. 30.4102
  38173. ],
  38174. 'childNum': 1
  38175. },
  38176. 'geometry': {
  38177. 'type': 'Polygon',
  38178. 'coordinates': ['@@°¥WóXmlw„_ŤW„kVaX@@K@U@a@WwU@mWk@ƒULƒWkX±lUnV`XWl—@ƒaWLUb@Vw@wmKUa@°™kw‚yVUJUUVwkUUJWI@akWmLUnkV›aXVƒbUxUVWX¤lL@„lx@b„b@ĸUx@`„@lbk¦@x‚n²VƄX@'],
  38179. 'encodeOffsets': [[
  38180. 117541,
  38181. 31349
  38182. ]]
  38183. }
  38184. }
  38185. ],
  38186. 'UTF8Encoding': true
  38187. };
  38188. });define('echarts/util/mapData/geoJson/hu_nan_geo', [], function () {
  38189. return {
  38190. 'type': 'FeatureCollection',
  38191. 'features': [
  38192. {
  38193. 'type': 'Feature',
  38194. 'id': '4312',
  38195. 'properties': {
  38196. 'name': '怀化市',
  38197. 'cp': [
  38198. 109.9512,
  38199. 27.4438
  38200. ],
  38201. 'childNum': 12
  38202. },
  38203. 'geometry': {
  38204. 'type': 'Polygon',
  38205. 'coordinates': [
  38206. '@@@n„‚@b@XnJ@k°x@aVUnl‚UXnV@@VnJWUJV„nIVV°ŽUbVVVL@޲LUVa°V@aV@nm‚UXblLXWVXVmVLVK@an_„`@X@l°„VlXXW`nX@Jmn@b„@nV@Lm`„bUb‚n@VUVl@nIVbUlƒV@LkJUnVV@xVblVUbU@ƒzUKU@mx@xUnn@@WV@lbUb@šnVWXX‚V@VIV@VUnJ@VUz@JWbXllI@VXVVL@ŽVn@„„Wlb@„Žl„XVlL„aV@VJ@XX`„kVwVl@bk„‚bUŽlVXIlƒnLVa„mVwV@@nV@XaVJVbX@lwV@n„@nV@VWnIVVUŽÆ@Xx‚a@I„UUKmk@mVƒ„IXmWUš™VJnUVU@anaVwk™›U@UXa@W™@m_@a¯@@K@UVƒ„bnK@blIlbXa@WW_n@VƒU@¯bmyƒUkUJÇÅ@WU@kWKÅwƒnm°KVkmankVWnXVWV@UƒƒwXkV@mƒ„UlLnaƒVaX@VUn@VnVK@xlnXWšU@a™@@klak™Vw™mUaV@™wmIÛ`m—@mVUXmlIXƒV‚I@K@aU@UaV_UK@wkUmmUKWXŽmVkUƒL@mƒƒU_nK‚™@aVU@Ukak»@U™™@ymUƒ„¯™ƒUUƒVKkam@™nka@ƒmwkLWb¯mkaƒ_VaVKUƒ™IUw@kKmU@WK@UnƒmaULkU@wUalWV¹U@@WUI@WU@‚_@W@U@mƒU@WbbUK@Um@@UmbUwWWkk@WU„a@anUUwlWUwUU@wlJVUnnV@@mnI@m‚K@U@w„a@wUm@_mƒVUUaVUkƒƒƒ_kċUk™VWLƒ@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIl‚knmU@VUJk@@„ƒ@™kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb„¤@bmUUU¯Kƒkmb@V™VU„VVn@@„Vb@`lnœxmb„lUn‚bk„@xU„mV@bmWbUV@VJ„Il@nVUb‚K@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°x„IUbnJ@VWbXVmI@JVX@bk‚@bWL@JUXUK@U@Uƒ`n@@Xm@XVW@@nX@@`ƒImxU@@JUI@KƒLmK@UÅUUV@VW@™¯kUU@UamVUUmJ@n„xmLKƒkmJkwkKm_mKXU@aƒU@b@Wk@ma@zUJVUmbUlU@™xnXlWlXXblK„¤V@@nUVVLkVš„l@Xb@VVK‚nXKVx@znW@X‚@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@˜x@VnI@WlI@anV„IVxk‚l@lbXXšxVVVJVInbV@@ln¦ml@XXVWbkJWb',
  38207. '@@XLVKVXVKUa@UUUmV@l'
  38208. ],
  38209. 'encodeOffsets': [
  38210. [
  38211. 112050,
  38212. 28384
  38213. ],
  38214. [
  38215. 112174,
  38216. 27394
  38217. ]
  38218. ]
  38219. }
  38220. },
  38221. {
  38222. 'type': 'Feature',
  38223. 'id': '4311',
  38224. 'properties': {
  38225. 'name': '永州市',
  38226. 'cp': [
  38227. 111.709,
  38228. 25.752
  38229. ],
  38230. 'childNum': 10
  38231. },
  38232. 'geometry': {
  38233. 'type': 'Polygon',
  38234. 'coordinates': ['@@lxUXV‚lXUVnlVĢ„JVbUXVJV@XUW¯„VIUK@klW@Un@„nl@V`XUVL@l@šVx@„XXW`UnUbšxUlVnUšV„lb@VnJšUVVVInJlUšVnwVklKnw„LVJVšV@nIV@nbVa@KVVVUUa„KV_nVVJ@_VW„nV@n¥lI@anƒl¥X_VKlwVlULUVVVš@šU@VXL˜ƒ@IUmn@VU@wmKXUWU@m²šl@VIXWWkWUkWlkIVamUXamUnmWUU@@Un™lK@XJl@kVUk@mWKXkl@@aVU@UVWUUVa„In`VUVLnw@U@K@Uƒƒ@w@UVmUUƒ™°K@UnV@bV@Xk@KVm@amk„aU£VWUUmUUwm`UbULka›KXU@kVmU™@aV_UWVIn@˜y„XXK@klmV„V_kWVUn@WUU@UƒmaU@™wnwWanUmmXkƒam@UakLmK@b™xUUUU@Km¥Vaƒ¯@ƒkUaVUlm„UU@mUUÇmUk™Uyƒb™bUa™XUWWbÅLmL@V™aL@WWXUKmmk@a@UUK™XW¥kU@VƒUkxmVkUWbUJnVJ@nVJXzWxkŽ@lVbUX@VVL@`mbUnšŽUn™VV¼k@Ulm@mwLƒb@lmLUK@UamƒWkƒK@£Ua@ƒ›UkJkUmbVlkX@bWbUŽVŽnnUVl„@bšbVK@VX@lb„V@nU¤šx‚²„Knblb@x„V„ô@šlŽ@b@l@XWxnVl@„VV@XLVl‚LUŽUXV`šbXXmJU@@bm@UUkLW@UlUKWUUb™wUm™L@nklVVmVXXm@@bUKlÆn„‚XkllVUVVL@nUbV‚@V@nnV@xUn¯U@JW@UX@xĉ@™`m@@LV@b'],
  38235. 'encodeOffsets': [[
  38236. 113671,
  38237. 26989
  38238. ]]
  38239. }
  38240. },
  38241. {
  38242. 'type': 'Feature',
  38243. 'id': '4305',
  38244. 'properties': {
  38245. 'name': '邵阳市',
  38246. 'cp': [
  38247. 110.9619,
  38248. 26.8121
  38249. ],
  38250. 'childNum': 10
  38251. },
  38252. 'geometry': {
  38253. 'type': 'Polygon',
  38254. 'coordinates': ['@@XIlJšI„VVK@n@VVVKnLVwVmnLVK@U„@šw„J@wVIƚ°X@ÜȄUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVK„x@U„aV@lk„@XylbUaV_šVnal@W„U@a„I@aV@@aVUl@Xm‚UXWaXml@@kk@ma@V_UnUV™UUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJƒIkV@b@JUIm@Ul™V™m@Uw@a@kWƒXWKUknW@ƒWUU@k™mx™UkVmIUJUU™VmI@UkaUƒV™UmVk™wVaVmX_WW@ƒUw@™@kUKWVU_k@ƒmm@@VkX@lVLUJƒX°WVU@UIVWUaƒIUġmkVUkWUVWkwWXk`mI@¥kUVƒUƒUn±@m›XkWknV„UVmmU@@XƒVƒUk`@Xƒƒƒk@¥¯»mbĉó@mkU@kU™ƒƒ™KmX@˜UnmL@lULkKUƒWUU@ƒbUaUnƒ@Vb@l„¦Ub@l™@UKmnƒKUnl„UVVbUVn„@`Vn@xƒb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bƒbXVl@Xl‚XVxna@Vn@@VVL‚aXaV@n„‚@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm„@VXLV@n‚lL@VxšJV„ULUb„`lb°nXalKnx@„lbšmn@lbULV„„V°š„ƒnV@zšš@Vl¼lb@VUV@bšmLV`„„@n„KlVnU‚XWVLnnlV@xVLU`VbV@'],
  38255. 'encodeOffsets': [[
  38256. 113535,
  38257. 28322
  38258. ]]
  38259. }
  38260. },
  38261. {
  38262. 'type': 'Feature',
  38263. 'id': '4310',
  38264. 'properties': {
  38265. 'name': '郴州市',
  38266. 'cp': [
  38267. 113.2361,
  38268. 25.8673
  38269. ],
  38270. 'childNum': 10
  38271. },
  38272. 'geometry': {
  38273. 'type': 'Polygon',
  38274. 'coordinates': ['@@²zVaVlnVl@nšVk„Jl_XJlIVmnL@mV@VXn@lV@‚XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@J„I@mlI„KVLnUlVUVVLXašKVLl@nb@ŽW„XV°KUnVV„L@xVJ„L@b@LUVVVU„˜VXbmbVbn@@lUbm@x@XVVVŽ@@˜@bkImx@Vm@Xbƒb@l°XU¤„a‚L„mnL@bl@@™VUX@VxnV˜anLnƒWƒ¥XKVwnUWXmVIUWÆLVx„L„w@wVmlU@¥XƒWUkwlÇn_Uw„WV@VU°wnU—ƒy@aVškVlnL@lVn„w@VlJ@b„X„x@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@a„LlmUaVU™ƒm@ÅknUmaUKmVk@m™kk@UlWUkVm@w@kUU@W™U¯™¥@w„Ç@aVIlUV@kUWU@UUm»@k@mKVkUKUwƒaUaUa›@k„kUWJkImaU@UK™@maUzk`@zƒy@XmJkL@UUJmUkV@z›@kŽkVmK@¦UbWL@a@UbmKmwUK™Xk›VUUkmVkw@UUKmL@WUIWa—JW_k@@WmI@mk@WkWULUUVKUUVm@šU„bš@‚nUǃ@U@w„™V@Ua@aƒL@ak„›l@k™UƒJƒwó@@L@V@„™`@œƒJ@xnn™šmV@bkJmUó@ƒn—JW„UUmƒU@UV@Lk„WlnnmVXbmxšxV@nbV„V@XVm@UVlXU`ƒUŽkn@lWLƒW—zm@UJVXU`@bVšUn@lWVœLlbVKVan_VxnVVVUXV¤ƒbnl@bUn@LWlU@@amU@V¯L„šVVUn@V@x„„@V@L@VmxUKUVm_ƒJUbVV'],
  38275. 'encodeOffsets': [[
  38276. 114930,
  38277. 26747
  38278. ]]
  38279. }
  38280. },
  38281. {
  38282. 'type': 'Feature',
  38283. 'id': '4307',
  38284. 'properties': {
  38285. 'name': '常德市',
  38286. 'cp': [
  38287. 111.4014,
  38288. 29.2676
  38289. ],
  38290. 'childNum': 8
  38291. },
  38292. 'geometry': {
  38293. 'type': 'Polygon',
  38294. 'coordinates': ['@@l™U™mkUwUyV™@VW@¯Va—VmUU@KVUVUVLnaWƒnkUÓV_@mVU@݄w@ƒka@kVmƒUmK@IkaUamKkXWaUW@WUk„™@@KVU@aU@™L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@Xƒ@ó݃@UUk@UKƒV™ƒULƒKƒXkWWbkaƒIUƒWU@mUk@WLaUJġ™ƒ@@XÈÆVIl‚„Vnz°aV@U„m@X`@XWbkakJ@amLƒaU„@V@L°@@bn`š@@XWb@VœVlšUxmb@bUVmVUI™šXVWnƒJU„@nnlVLƒV@JbWzk`m@UVK²V‚x„k„LVl„@Vn@V„„°xVKVkœVVlUblx@bU„‚Æœ@@nVnUll„kx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUVƒ@ƒVkUkV›LkV™a™@@™ƒ¯xUxmX@JVb°WXkK@Vm@k„Vb™bn¤‚xUXkJƒblxnXÆK²l‚_@Wnašn@ŽUL@b‚JnIlV„@lUœ@@¯ô@lWȂIVKVm„U@aXaV@lwVXn@@K@UVKUUnU‚bn@lWšX„ƒlJnUšLšKV@„„l@²a@UlK@aV@naVX„WV_nKlL@KUm@a°U°@VXL@a@wWmXal@„k„@VLn›V@@bl@VnX@mwVa²aVU@mk@'],
  38295. 'encodeOffsets': [[
  38296. 114976,
  38297. 30201
  38298. ]]
  38299. }
  38300. },
  38301. {
  38302. 'type': 'Feature',
  38303. 'id': '4331',
  38304. 'properties': {
  38305. 'name': '湘西土家族苗族自治州',
  38306. 'cp': [
  38307. 109.7864,
  38308. 28.6743
  38309. ],
  38310. 'childNum': 8
  38311. },
  38312. 'geometry': {
  38313. 'type': 'Polygon',
  38314. 'coordinates': ['@@@KšL@wnK±nƒnm‚—@WUk„ƒÜÈn@n»@mVamk„mšU„„l@V™nmmU@wUan¯VKšLn„VWlInyWUœI@WWk@KXU˜n@mnUmU@WœƒmkV@ƒkXašaVaUm‚Ikƒƒ@kaƒX@ƒUm@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@™VakaU@@Xm@Vm@wnwV@VL„yV@VakUUa@wUUVmlI@K„UVkUamJk@VU@UmVaƒan_@KmUƒ@@anm@ImWX_WWUk¯ƒ@k@Wƒ_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbVޱK@UKUUVa¯UUmJUƒVIXmI@UU@WmVmkUV@b¯w@lmI@W@aƒ@m¯LXbmJVLklWL@V@XXŽmbVVU@@VU²Ul@VlX@bš`Xx›zUmkUVÒlŽ@bXLWxXVlš@V„bkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLV„lJkn@bmJk_ƒVmmkblxÈx@LUb„xVb@V™n@JmLVŽUš@„nV@¦VbnJ@lVVbkx™bm@UxVLV@n`UnVVV„kl°z„xVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@X„KUV@nVL@WnIWŽXLVKVLlxUbVKXVWbn@@UnKVLVb„JšU@aVU°b'],
  38315. 'encodeOffsets': [[
  38316. 112354,
  38317. 30325
  38318. ]]
  38319. }
  38320. },
  38321. {
  38322. 'type': 'Feature',
  38323. 'id': '4304',
  38324. 'properties': {
  38325. 'name': '衡阳市',
  38326. 'cp': [
  38327. 112.4121,
  38328. 26.7902
  38329. ],
  38330. 'childNum': 9
  38331. },
  38332. 'geometry': {
  38333. 'type': 'Polygon',
  38334. 'coordinates': ['@@lšV@XV@„mXVlXL„W‚X@l@bVxn@šŽšUVkn@VJ@I@alU„JXIVm@»‚LXllIXVVU@Kl@VnXKlb@lVbXIVVUšmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXb„Ul™VK„¦nLVVUVVbšb„K@U˜LnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VšIVUnJUVUl@nW„XllIUa„KVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@m„kVƒVUVaX@lšnaVLÈ@‚¥@kkJUWJUaƒXkaUm‚wVXJ@_lWUU@¥n_‚KkamUK„™@amKƒnKƒbV£¯W@k„aWan@@UnwlJ@a@—@UUU@W‚wn@Va@km@UanaWa—UVƒUUVU@K@aƒKUI@wƒKUUVm¯LWUXƒ@mak@UK™LWbUKVUkUmVUKƒLkJ@nƒJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`ƒIUlm™k@mUUkUb±yUX@VUV@bk@WlXL@nVlUl‚k@WI@ŽkLmš@VV@XVmnnVWbnVUblJXkVl‚XXlWXUJk@±™@nXVWVnL@xUVm@Vn@J—„WK@U™V™@UUVUVKUkkxULW`k¦m„@bkJm¦U@ƒmUX@`UImUU`ƒLVbUVUU@LUbmaU@mJU@U™UIƒKmxkLUl'],
  38335. 'encodeOffsets': [[
  38336. 114222,
  38337. 27484
  38338. ]]
  38339. }
  38340. },
  38341. {
  38342. 'type': 'Feature',
  38343. 'id': '4306',
  38344. 'properties': {
  38345. 'name': '岳阳市',
  38346. 'cp': [
  38347. 113.2361,
  38348. 29.1357
  38349. ],
  38350. 'childNum': 7
  38351. },
  38352. 'geometry': {
  38353. 'type': 'Polygon',
  38354. 'coordinates': ['@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@™™@UUƒbUKUƒmÛamm¯xVLkbÇÆƒUƒVUzkVUlƒUUKWLX¦W@ƒVUUUaƒKUbmLKm„@akU@aƒmVaUUVIVWkk@wkƒƒ@@xmLlmÅwmbVlXlÝIWVkK@kkVƒL@VWKU@Ublnaƒƒm@b@bšnW`@XUJk@UUWKƒk@UKƒnn‚@xmLUVm@kbVbV„nV@V„b‚@KnV„LWšXŽÆV̦VblŽš„n„UJWz@ƙVóUVbkV™aÅx@¦lVUbVVknWKƒ„k@ƒwƒK™VU„Å„ƒl@zkb@`m_mJ@xX„mbVbœ@llV@n„@llbXL˜UXalUšl„alVnwnLVKlšVbX@@I„V@blJ@bVL@VVVUXȤ‚VnkVÑXmlbnš‚„VKkÑř@UmaVç@±XUlI„xlV„@VaX¯lUVVUšVJn—V@°°nް„Vxĸł°¦šb²¦lJ@U@aUK@kUm@_m±VIXal@„Kl@„bV@K„K@k„m@UmUUaƒK@_UJƒaXU˜@Xmš_VmUk@WUk›@kU@a@m@UƒaUUU@al@ny‚XXWWwkly@¯n@@bnV@k@mVI‚„œVlUUmlU„JUw„I‚bXƒVaUal@K„b@ƒVKVkXVl@VkUU@ylUœVVaVL'],
  38355. 'encodeOffsets': [[
  38356. 116888,
  38357. 29526
  38358. ]]
  38359. }
  38360. },
  38361. {
  38362. 'type': 'Feature',
  38363. 'id': '4309',
  38364. 'properties': {
  38365. 'name': '益阳市',
  38366. 'cp': [
  38367. 111.731,
  38368. 28.3832
  38369. ],
  38370. 'childNum': 5
  38371. },
  38372. 'geometry': {
  38373. 'type': 'Polygon',
  38374. 'coordinates': ['@@„ŽÆxXL@l‚V„@̚VI‚bXKl@nVV@„XVŽ„JlbXalX„W„LVKš„„UVLl@VV„@ôބ@@Wn@lLlK@wnIVJX@VX@lVVUL‚VnkVVnKValUXblKnXl`UbVLÈU@W@IšKV@@bUV@Lš@lƒXV‚@VXXblWnLVblb@JnL„VUn@llb@„ƒx@ÞUV@nU`VÔmlX„mbUKUVUV@LVVUn˜ŽUb@°UXš@U‚VzVxnlVškšVnlVnaWƒ@wnIn`@_la@y„kƃVƒšU„L„xl@„ƒXLlmUUVakU@¥ÆwšblUUaôVšU@ÅXyVImƒ™ƒkUaġ¥ÅUWX™ƒKmU@Lƒa@UmUUƒUalan@VUnK@wm„m‚L@V„lXLVVl@VI@WX_™m@a™¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVƒU@JƒwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV™@™„kJċwUU@KUWkkW@IWW@km@klwkWVkkU™V¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@„lnU@m‚nÈmVƒa@bUL™wUb™@@VkxmUUƒ™UV›K@IƒUƒmk@akm@wmIƒŽkK@b™VWXkm@wULUmm@UVW@Ub„mbkKƒVn„U@Wl„xV„U@UXmWUXmlnbUl¯Lmn'],
  38375. 'encodeOffsets': [[
  38376. 113378,
  38377. 28981
  38378. ]]
  38379. }
  38380. },
  38381. {
  38382. 'type': 'Feature',
  38383. 'id': '4301',
  38384. 'properties': {
  38385. 'name': '长沙市',
  38386. 'cp': [
  38387. 113.0823,
  38388. 28.2568
  38389. ],
  38390. 'childNum': 5
  38391. },
  38392. 'geometry': {
  38393. 'type': 'Polygon',
  38394. 'coordinates': ['@@lVUllXkx@lln@‚XX@JlXXl‚V@LVVČxlIšƒš@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlK„x@I„VlUVJ@XXKlVVUXKVX@`VLX¦lxVŽnLš°‚an@„„‚bkmVaV@XL@U„KlU@llLXUÞJWkUknaÆxnŽ‚knK@w„@l„@xllUXUJVVUb„n@blV@bnƒ‚LnKVa„LVbVV„UX@W¥XKVL„VVklUVy„U„VÈÅlaUK°wnnÜbn‚V„VL„aVVš@šn@VmnVlIlJna„@Valkn@na@amwm@„UXw˜K@aUUVUUaVa—wWK@kU@UaW@kKUUƒƒ@k™W¯XWan@k„™mmÅ@@I@U@KmLkaVUƒKkLWVUƒk@UVmU@am@kkk¥ƒUƒVUK™„maUb@ŽUb™I@aƒKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xULƒ@ULWW—LƒĕmxVVL@šVb™KUwƒaŲWwX@@WƒUWLU@VbkV@aU@@VUnmJ@VUn@VƒLUK@U‚mUIk@UÇmU@@UW@J@LƒbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVƒUƒVUakbWwka@UWKkLUamKUXm`Å_U˜ƒULmaU@@lUV@X'],
  38395. 'encodeOffsets': [[
  38396. 114582,
  38397. 28694
  38398. ]]
  38399. }
  38400. },
  38401. {
  38402. 'type': 'Feature',
  38403. 'id': '4302',
  38404. 'properties': {
  38405. 'name': '株洲市',
  38406. 'cp': [
  38407. 113.5327,
  38408. 27.0319
  38409. ],
  38410. 'childNum': 6
  38411. },
  38412. 'geometry': {
  38413. 'type': 'Polygon',
  38414. 'coordinates': ['@@X‚‚Unw„Ė˜KXXVK„@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LXŽ‚@Xnll„L@bšJVa@VanbšƒVL„U„V@al@@UV¯ÅÇ@Ummk™w@¯ƒyVwnUVVVUkmWV—nKVUƒa@WXkVKn@lUVU„VVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWwƒƒ@k@m„X@KX¯V@VUVa@VnKWkœƒV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@ašUš@@am™@aUU„UmXmWUk@ƒƒnUW@_maVm™wUkamaUL@aƒwƒW@akI@UƒxUm@kmKUk™lUŽ@b„zV˜m¯xUVU@ƒXVxm`kÈlxXVW„@¦kVUn@xƒxƒKUwÅKVXUJWnXŽmVUxWL„¦XŽm„mK—bmUUwW@UV@šk@ƒšVLnŽlbLm`@¦VVkX@`WIUށxVnlb„WVbXIV‚lI@l¦Ç@UKmbk™W@UbUVU„ƒl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWx„zUVVVVKnXW`@bkIUl‚„nLVJUbUIWVXlWV@XklVbnn@xlš'],
  38415. 'encodeOffsets': [[
  38416. 115774,
  38417. 28587
  38418. ]]
  38419. }
  38420. },
  38421. {
  38422. 'type': 'Feature',
  38423. 'id': '4308',
  38424. 'properties': {
  38425. 'name': '张家界市',
  38426. 'cp': [
  38427. 110.5115,
  38428. 29.328
  38429. ],
  38430. 'childNum': 3
  38431. },
  38432. 'geometry': {
  38433. 'type': 'Polygon',
  38434. 'coordinates': ['@@@InWVw°wš„@š@šblUœKlUlV„U„@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkƒVkUm@m›@ÅVƒ@akwVaUk›UUlUL¯wƒƒ@UUmƒ@UkƒKƒlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmƒU@kxW@UaUIWbU@@mU@UxƒnUbmKk„WJkUValƒ@aUkUxƒlW_@WUIU@ƒbkKWUJVnUb™bWb„lU@nl›„@XnVmV@n—mWV@LXl@X›JXVmzkJUXmƒ™KULm°Vb@xnVmnUšk@ƒƒ™VƒnnlUb@nm¼m@Ûǃ„Vl@X˜mnm„²ŽmL@x™K@LUl@nULÆx@V@VXVWbXX˜l„@nLlm@bVKœX‚W„L°bnUš@VaVUš@šmšVw„JnwVK°zn@V‚Vb„a„@Ċ¼'],
  38435. 'encodeOffsets': [[
  38436. 113288,
  38437. 30471
  38438. ]]
  38439. }
  38440. },
  38441. {
  38442. 'type': 'Feature',
  38443. 'id': '4313',
  38444. 'properties': {
  38445. 'name': '娄底市',
  38446. 'cp': [
  38447. 111.6431,
  38448. 27.7185
  38449. ],
  38450. 'childNum': 5
  38451. },
  38452. 'geometry': {
  38453. 'type': 'Polygon',
  38454. 'coordinates': ['@@lL„nJ@xln@bnlV„‚„@JœLVUšŽV„nVlw@Uš@VašxVK@a„bnUmÇnV@km@ƒ‚I@VUVVXVaX@@wlVVUkW@_mKXU°‚UbVLnaV@‚V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nšU@WVU@kV@nbVK„V—lƒ@nLlƒ„LXU@ƒlmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²a˜ŽXblKnLlmVI@KUU@akLUaVa‚UXm@aƒ@wVUVKnLnWlXl‚n@@U@anUVm@U‚Inm@IUK@UmKVmU_kVUwm@@VmL—K@VƒL™aUaVUUUmKƒ¥ULkšƒVWaXwWa@UXImWUaULUUWKk@WnXbWށVWnk@UV@bU@@bƒJ@bƒV@XkŽmb™UU`VbkaWzƒ@klU@ƒb@VƒwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwƒVÛÇW@¯Å™UJ@xƒI™xƒ@@VULmKUnUxmKULUUm@@‚ULƒU™JkIWJ@b@LJUW„kJWnUV@nn˜Ü_nJšxU@VbšnUxlškb@lš@'],
  38455. 'encodeOffsets': [[
  38456. 113682,
  38457. 28699
  38458. ]]
  38459. }
  38460. },
  38461. {
  38462. 'type': 'Feature',
  38463. 'id': '4303',
  38464. 'properties': {
  38465. 'name': '湘潭市',
  38466. 'cp': [
  38467. 112.5439,
  38468. 27.7075
  38469. ],
  38470. 'childNum': 4
  38471. },
  38472. 'geometry': {
  38473. 'type': 'Polygon',
  38474. 'coordinates': ['@@Æ`n_VWnLVblKXL@VlbXxlaVb„U„VlUVJnInJ‚@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVn„a@K‚IX@@VV@nŽVÈl@VJn@VVL„K@UVm@UnIVm@UV@@blUUaV@XK„V@XW@XxƱ„bVxšLUa@™UKWk™@wmmUalk@WXUWkXUVJVaUImKƒVklJ@aX_mWULUUVUƒyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaƒLVbkJkƒWmXk@UVVŽmIUV™J@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x„Ž@bWnVUbVblK@bVV@LUJknmKkLWa—±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@„WVƒKk„mK@k„'],
  38475. 'encodeOffsets': [[
  38476. 114683,
  38477. 28576
  38478. ]]
  38479. }
  38480. }
  38481. ],
  38482. 'UTF8Encoding': true
  38483. };
  38484. });define('echarts/util/mapData/geoJson/jiang_su_geo', [], function () {
  38485. return {
  38486. 'type': 'FeatureCollection',
  38487. 'features': [
  38488. {
  38489. 'type': 'Feature',
  38490. 'id': '3209',
  38491. 'properties': {
  38492. 'name': '盐城市',
  38493. 'cp': [
  38494. 120.2234,
  38495. 33.5577
  38496. ],
  38497. 'childNum': 8
  38498. },
  38499. 'geometry': {
  38500. 'type': 'Polygon',
  38501. 'coordinates': ['@@„n@‚°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbƒnUKmxXV@bm@@Xš‚„LޚܦXlVnš‚mzVJ@n@‚²ÞôkƃÞaȰĉ‚wnljÜó„éVÛnĊīČlj‚ĉ@ō@KÞUlU@ƒkklÇÈњÑlġXɛ@UġƒƒaU@U_ƒW@n™@kaUL@VW@kKmkUV@bkbWW@bkzma@ƒJWI@KUKULƒ@U¦™`@XUJ™U@KmXƒw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@„„JVn@bkKmakVVXUVVVlI@`U@nzVVƒb@¤n@@UlKXLVVšI@V@nV@V‚@ÈUx@šóVōšƒkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVƒbV‚nLWVUX™WUXUŽWLUށ@Wl°z@VkxU@UVWIxWJkbƒĬ„nW@@bUl'],
  38502. 'encodeOffsets': [[
  38503. 122344,
  38504. 34504
  38505. ]]
  38506. }
  38507. },
  38508. {
  38509. 'type': 'Feature',
  38510. 'id': '3203',
  38511. 'properties': {
  38512. 'name': '徐州市',
  38513. 'cp': [
  38514. 117.5208,
  38515. 34.3268
  38516. ],
  38517. 'childNum': 7
  38518. },
  38519. 'geometry': {
  38520. 'type': 'Polygon',
  38521. 'coordinates': ['@@XKVX@WnIVx@K°Lnll@@I°K„nVašU°x²mlxš@VanU@aƒk@akmV@@w™@Ua@aUwVwUw@w›@UK@£kaĉlóIÇVkޱ@@kUKmVkIkxW@Ua¯UUm@UVI@WVI„JV@ƒ@Um@Uana„U@m‚I@J@XV@XaVlkXƒVaUUWLUyVIXmWak@ƒXkJókƒJUL@KWkk@ULU@Wa™lUIkJmI™mk„VbVš@lV°kXUKWKULU„mb@VUlVnƒb@VV@IVKUUmU@ak@@bmV@xklƒUƒU@UKmV@nƒJVbkXƒKUamLUJ¯UUVmI™bVV—Ll`@LƒLU`m@kXUVU@V„lxUK@xkIWbUKƒx@V‚kVVn™b¯@@U™@ƒxk‚mbkLÇK™b™@@XnJ@LmVklƒ@@XƒlUƒVkxƒakVVb@bVnUbU@@x˜VUšVb@š„ŽnIĊ`šXVVôJš_„K@xlU²Klk„U„@VaVVÈm@kVUVmnamUUaVƒXIVJ„@‚ç@¥nkVLn›„@@XVK@VUX@JVUV@UnVJVLUJVLUVlšnI„b‚KnU@m°™VanI@anV‚KVL„an„lK„blš„KÞk@¦@¤@„VKnLVK„L„KVzlWšLX@VmV@VbnU°@Ualk™˜WXLVU„KWkUUWšƒ@£Wa'],
  38522. 'encodeOffsets': [[
  38523. 121005,
  38524. 35213
  38525. ]]
  38526. }
  38527. },
  38528. {
  38529. 'type': 'Feature',
  38530. 'id': '3206',
  38531. 'properties': {
  38532. 'name': '南通市',
  38533. 'cp': [
  38534. 121.1023,
  38535. 32.1625
  38536. ],
  38537. 'childNum': 7
  38538. },
  38539. 'geometry': {
  38540. 'type': 'Polygon',
  38541. 'coordinates': ['@@VJ@bnzWl°L„xnW@LšVVI@Wš_V¥„@VKVL@LXJ„I‚@nbly@aXXla@aVUnllLX@@UVKlbš@@m„XV`V@„bĢ„lkČÇÆƒȘ¯šwnĕVĉVÿšUƒUĠƒŦğlXÑVǵ@±ōLʵ˝lÇbÝÞ¯xk@Çkķé™n¯@ğŽġƴǫ@kVVlUbƒL@xULǂóLUl¤@nkVV°VLkxVb@l™aUXUKWĖklVX@¤UšƒUkb'],
  38542. 'encodeOffsets': [[
  38543. 123087,
  38544. 33385
  38545. ]]
  38546. }
  38547. },
  38548. {
  38549. 'type': 'Feature',
  38550. 'id': '3208',
  38551. 'properties': {
  38552. 'name': '淮安市',
  38553. 'cp': [
  38554. 118.927,
  38555. 33.4039
  38556. ],
  38557. 'childNum': 5
  38558. },
  38559. 'geometry': {
  38560. 'type': 'Polygon',
  38561. 'coordinates': ['@@šnźUôÒɴ胚l¦nĖV‚kbmš„X@xVlVL@xUb@bUJVnUx‚šœ„lKVLÈx‚m„zXV@lW@XV‚b@bȚVxnb‚ƒVIXa°L„aÆVVaXUlK@aXIƄVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@ƒmVk@aX@ƒm„īlaXI‚wXJVUV@lw@U¯yb›UaƒUġUÅaUKVknaġm@kUm@wÆIV±nLÆw„ÇnUUkƒ@ƅÝU¯JÝI¯¦Ul@bƒ@@VVL@l@LƒLÅmƒL@b™@UaVaUWmLUKV¹KƒLWKX¥WI@mXk@UmaUVUU@VmL@W™bkIUWƒUmVóIkbmm™@UbVLUxmJkU@bkJWbnXU`Wz™KUÞÈlVb™Lmx@„kè@Æ'],
  38562. 'encodeOffsets': [[
  38563. 121062,
  38564. 33975
  38565. ]]
  38566. }
  38567. },
  38568. {
  38569. 'type': 'Feature',
  38570. 'id': '3205',
  38571. 'properties': {
  38572. 'name': '苏州市',
  38573. 'cp': [
  38574. 120.6519,
  38575. 31.3989
  38576. ],
  38577. 'childNum': 6
  38578. },
  38579. 'geometry': {
  38580. 'type': 'Polygon',
  38581. 'coordinates': ['@@ôèĊVnX°¤²„lxƒÈÜ@²x@J@b@X‚`nIUƙUUV@bl@VVnL@L@xƒJ@X@blJXnW@@`XbW„kVƒ@UbVxƒXUxkV@LóxVbUVWš²šVJĸklUǬ@ĢƳĠ°@šmƒī°»ÈÇ¥ULUU±a@bU@¯ƒU@KnImUVWUk™mXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkUL›K¯L™KkƒVIn@VaUƒVUUƒ›UkVk@ƒU@amUkJƒ@UUlwX¥W@@UkVmk@JUakL›@kk¯ÝmJUn@nmVXlmbVVkn@„UJ@±WUxV¯a¯KōbżÇxUxƒšUUlWL'],
  38582. 'encodeOffsets': [[
  38583. 122794,
  38584. 31917
  38585. ]]
  38586. }
  38587. },
  38588. {
  38589. 'type': 'Feature',
  38590. 'id': '3213',
  38591. 'properties': {
  38592. 'name': '宿迁市',
  38593. 'cp': [
  38594. 118.5535,
  38595. 33.7775
  38596. ],
  38597. 'childNum': 4
  38598. },
  38599. 'geometry': {
  38600. 'type': 'Polygon',
  38601. 'coordinates': ['@@XbWnUJVzXKVVUbW„klUWbU@@W@IJ@nƒVmbVbn@@V@„UŽƒIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VLœ@@xVxUxVx@bVbš@@xU@ln„mnX˜mXLVmV@X@lxVnVJôL„LXa‚x@b„@@KVL@bn@@m@™@alLUUVaU¥nIV±‚I@mXI@aWWXU@LlUXWW_XWmaUwǙ@aaWUX@@kWUƒynÇwUKkL›ƒ™VwUmVI@aVa@wUKUk@wƒWn™laUmĕk¥„™ɳçóÑŹV™mmzkVmm@a@Ióƒk@@LWU@`—„WbXLWlkImJVn@`nXVbXŽmL@Vn@‚l@nUVl°Xx°U@LVĠ@z°˜@¦UV@Xn@VJmV'],
  38602. 'encodeOffsets': [[
  38603. 121005,
  38604. 34560
  38605. ]]
  38606. }
  38607. },
  38608. {
  38609. 'type': 'Feature',
  38610. 'id': '3207',
  38611. 'properties': {
  38612. 'name': '连云港市',
  38613. 'cp': [
  38614. 119.1248,
  38615. 34.552
  38616. ],
  38617. 'childNum': 5
  38618. },
  38619. 'geometry': {
  38620. 'type': 'Polygon',
  38621. 'coordinates': ['@@@‚lzXxmÆV„„@@¦„@l`XnlKšXXm‚KnLla„b„@„xmbm@kL@V@Vl@@VUXšJX„mbš@@„°Æ@èÈzlW°XĢJlÈ`lInbšWV_@mš™@UUķnƒôw°ÆmnaVƒVÛVmĸ»Ģw±Ý@@mUIny™UmWkۥݙƒK™@Wn@@aWUnwVL„mUaWIUWVk@kkJUVWLUkŃWJ@bkLWVUbÅUƒb¯KWbUJ„WXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@š@nm@@aUK@Lƒ@@awWbƒKóKUIUmkwW@U@UnWK—nmWƒn@b„l@bmVUb™@kw±n¯w™VUb'],
  38622. 'encodeOffsets': [[
  38623. 121253,
  38624. 35264
  38625. ]]
  38626. }
  38627. },
  38628. {
  38629. 'type': 'Feature',
  38630. 'id': '3210',
  38631. 'properties': {
  38632. 'name': '扬州市',
  38633. 'cp': [
  38634. 119.4653,
  38635. 32.8162
  38636. ],
  38637. 'childNum': 5
  38638. },
  38639. 'geometry': {
  38640. 'type': 'Polygon',
  38641. 'coordinates': ['@@VUXblVVV„b@xV@kz„V@l‚wVLUbVV@VU@VbUbl‚b@nkͰIÞV@Ɔ„VlmVƒÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢV„V‚bœV‚aXk‚@VXKVVWšXVWXUmKU„aWaU@™¥@£XW‚UUV@@ynam_VWkUVUna@ÆV@mnkWmXkWU„W@k„@@akklƒlWUI@UnKl¥™I@VVma@a@I@U@a@anK@UmK@ÅVUnJl™kI@aVwka@mVIUW@UWL@WÅbmIƒƒULka™UWƒUxkLUKWlXL@VƒImƒÅVƒU™mĉL™Uól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@'],
  38642. 'encodeOffsets': [[
  38643. 121928,
  38644. 33244
  38645. ]]
  38646. }
  38647. },
  38648. {
  38649. 'type': 'Feature',
  38650. 'id': '3201',
  38651. 'properties': {
  38652. 'name': '南京市',
  38653. 'cp': [
  38654. 118.8062,
  38655. 31.9208
  38656. ],
  38657. 'childNum': 3
  38658. },
  38659. 'geometry': {
  38660. 'type': 'Polygon',
  38661. 'coordinates': ['@@k@ma@kUUVmVIUWVUUaVa@Ѳk°Jôk@Wmk¯KmX¯aUakKƒƒWU„@XU‚LXaV@@mUaVUUl@VmkaUXm@ƒWUUna°IlmV™m™IUW‚@Uk@@aV@VVX@„V‚I°»nm„U@VKVan@m»UaU@U_@WlIUa™aVaUala@¯n@‚ƒkaUkUUWKU@mwkUUmmL@K@ƒLmUUVƒKƒVÅImU—JƒƒVkVVLšèVLVU@W„L„V„š@nVÜULVŽUL@bW@XbWbkJƒUUVUxVXmVk@WUUkVmIƒV@„nbnVWbƒJU„kUULƒa@Jma@XkK@VVL@L@JƒLUVU@V¼ƒnXlƒbm@kbUKmn@lVb@VXXV‚UV@b@LVbÆxXbl@@lV@U„VV@XVK²VlIš`„UbVbUlVVn@WXn@@VUV@„@KmbVLXқLkKƒV@nX@VVUV@b™nVllbšmnb„IWVXU@`lLlknVnmlLlbUmVInK°nUƒU@l@VU@Vn@„ƒ@alI„`VIXaVaVa'],
  38662. 'encodeOffsets': [[
  38663. 121928,
  38664. 33244
  38665. ]]
  38666. }
  38667. },
  38668. {
  38669. 'type': 'Feature',
  38670. 'id': '3212',
  38671. 'properties': {
  38672. 'name': '泰州市',
  38673. 'cp': [
  38674. 120.0586,
  38675. 32.5525
  38676. ],
  38677. 'childNum': 5
  38678. },
  38679. 'geometry': {
  38680. 'type': 'Polygon',
  38681. 'coordinates': ['@@lUU@@y@In@WwXal@Þxl@@anVô@ÆX„lŎ™ôU@™Vw@ÇUU@@m@U™JUUWKkL@Vm@@£„aUUmyV@@_kJUUVUUWlUnblL@aUmƒI@ƒULUW@IU@WaUK@£UK@aV@°V@LnUWWXIla„VV™@£UWlkXĕVLVWšb@kUalwUKU¯lU@mk£VôKȁVK@w„KVaUkķlUI±™ğ¥ÝUʚ™Ž¯ôm¦ƒĸ™‚@XXK@VVXUJ@nlbUx@blJkšmIUV@ÆnL@VmL@b@b@V@J@bnb‚U@UšJk¦mL@VVJkXk„ll@bƒ@@lƒXXVWlXnml@nÅU@ŽmbUVlVUXn`mb@zU@V‚VWX@¤š¦V@Xb'],
  38682. 'encodeOffsets': [[
  38683. 122592,
  38684. 34015
  38685. ]]
  38686. }
  38687. },
  38688. {
  38689. 'type': 'Feature',
  38690. 'id': '3202',
  38691. 'properties': {
  38692. 'name': '无锡市',
  38693. 'cp': [
  38694. 120.3442,
  38695. 31.5527
  38696. ],
  38697. 'childNum': 3
  38698. },
  38699. 'geometry': {
  38700. 'type': 'Polygon',
  38701. 'coordinates': ['@@nLƒÒlxUVkL™am@™ƒkVWUULUxVVVbUV@bVLU‚nnź™ÞVĠ¦X™VUUaôw@KlUVw„WUwVa„@lUXƒWa@_X@WmkI@a@W„I@w@KmKUUk@@aVUšVVÅmJ_@W@a@I±wÛ@ƑÇkw±ƒ¯£mWĉUóçƒK¯VkUWK@XkV¯UWabƒmUa™UUb™lln@b@xƒbXŽWX`@„VxUblL@bn@Vb@`m@XbWnn@l¤„n@xnVlU„™VLÆWœkV@VbÞJ‚_nƒl@nKVU@aU™U@mVk°WVLUV¯bVXŽ˜bXlVn@VmL@x—V@bl„š‚@œnW@X@VVJ@²VJVU'],
  38702. 'encodeOffsets': [[
  38703. 123064,
  38704. 32513
  38705. ]]
  38706. }
  38707. },
  38708. {
  38709. 'type': 'Feature',
  38710. 'id': '3204',
  38711. 'properties': {
  38712. 'name': '常州市',
  38713. 'cp': [
  38714. 119.4543,
  38715. 31.5582
  38716. ],
  38717. 'childNum': 3
  38718. },
  38719. 'geometry': {
  38720. 'type': 'Polygon',
  38721. 'coordinates': ['@@„L˜ŽnxUbVVƒL@xnnW‚nn@VVXn@‚yœImx„„°ƒšL„a‚¥n@VkšKVw„W@nX„VJ@b‚@UVn„ƒ@UnUV@L‚b@`VLklVÞn„Æ@VaXLl™ÈJšmmVUK@aVUUaUUVwVKXVlUš„n@šblKVUkw„ÑmKUVUI@±UI@U@WmX@›™kƒ@a˜U@wnK@UUmWk—aWU°aVUUK¯XUl@nVŽVš@bUVmLk@m„`ÝIUaU@›lÅXUKƒškVmU@wƒmk£m@XmWan@@_Uam@@akKVaUw@ƒW_XW„a@w@akmm@mL@UJmnUKƒ@@XnJWLkKUb@„Vxk„WƒL—aWVUImVULUK@L@lkLVVVllb„m@@°kbVbUbšbVbkJ@XV`V@Vbn¼'],
  38722. 'encodeOffsets': [[
  38723. 122097,
  38724. 32389
  38725. ]]
  38726. }
  38727. },
  38728. {
  38729. 'type': 'Feature',
  38730. 'id': '3211',
  38731. 'properties': {
  38732. 'name': '镇江市',
  38733. 'cp': [
  38734. 119.4763,
  38735. 31.9702
  38736. ],
  38737. 'childNum': 4
  38738. },
  38739. 'geometry': {
  38740. 'type': 'Polygon',
  38741. 'coordinates': ['@@šVĊKšn„VÆUn„„J@UWKXkVLlKVwX„šVlbVK„„nJÆaš„ķn¥°óÇIkšWKUbÅ@mƒUÝlkUK@_a@KVUVm„@mƒVU@@aUIWƒ@mƒXUx™LUlm@¦ƒb™K¯„ƒƒnw›Jzm@UW@UmmXmm@w„KUUVamw—ƒKm@UbUL@ŽƒVmn¯¼JƒUW@UUU@@bl@@VŽVXšJšnnU‚‚k¯JmbVV„Xn@VWlbUnk@VVUŽVb@nU@WbKWVƒ@XV„„lLVb°bnW°Lnl@X'],
  38742. 'encodeOffsets': [[
  38743. 122097,
  38744. 32997
  38745. ]]
  38746. }
  38747. }
  38748. ],
  38749. 'UTF8Encoding': true
  38750. };
  38751. });define('echarts/util/mapData/geoJson/jiang_xi_geo', [], function () {
  38752. return {
  38753. 'type': 'FeatureCollection',
  38754. 'features': [
  38755. {
  38756. 'type': 'Feature',
  38757. 'id': '3607',
  38758. 'properties': {
  38759. 'name': '赣州市',
  38760. 'cp': [
  38761. 115.2795,
  38762. 25.8124
  38763. ],
  38764. 'childNum': 18
  38765. },
  38766. 'geometry': {
  38767. 'type': 'Polygon',
  38768. 'coordinates': ['@@„`l@Èbln„@„KVLl@„V@bȎlnšKXkVlVL@„lJnb„¦VKVVnX„W@w°@VU„mln„UV`šU„bVUV@„xnKVI°KXKVkVL@al@Xa„LVlULWV™VVL@b„x@VXVmb@x@V™VV@nn¤„šlb°b°KXXWbX`lbXx‚z@x„`VIVUnK„L‚x„WXLVKVbVLVU@wnW°b„@nalX„‚mXVJn@U²mKkVl„U@@xlnœaVmlKnœ@JVLlŽnVššl@XXÆèVlUX@xVLXVšb°W@wnUWmXk@K‚LVwUmUkUKUw@wVaVK@kƒ@WnkUKWkwlmXL@KVUlLVKXmWU„L@ašL@malaVk@aa‚ašƒnXš@VVUblb„Jn˜ƒXa„V‚wn£„K@UWmUk@ƒUaWIV@b™JW@KmmU@aUUUkmKkVKlUU™nKVU„lVaV£Å¥WUUK@UkUUw@m@mIkƒƒUUWƒLƒK¯Uw°¯@wUKUbƒKmƒ@kkKUL@UUKV¥U@manw@k@U@Wm@@U@Wwkm„wWaUU@UUmV¯kwƒ@@kmƒkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@ƒaXwla@UkVWaXk@K@lmkUmV@Vmbk@ƒ»XIƒ¥VUkƒVUVU@anKVUƒKUalU@wX@˜™@a@K—@ÝwƒL@ŽUnÇlUIkJmn@ŽƒbVVb@VmnkLƒV¯U@ƒ±l—IWmƒ@kaUI@aÇU@K@KUIkbWbƒJUIUyƒX¯ƒUbU@méUUmUk„WK—xWIkJm@V¥U_UJUwmVkšƒUU@ƒƒƒ@knƒwm@UmkWJkL@n@VW@@‚U@knm@kUml@xÅxƒ@@XUJlb„@VX„JVxn@lbV„@lULnV@VlnV@bWV@bXL@lVLVb„V@blLn@Vl„K@xln@bX@lašLVbnKUVVb„KlXVVkxƒV@nnVUb‚lV@@z—°WWkbƒIk‚WL@LUJ@bUI@b™`@UmI@mkK¯XW™™mUV¯@UUVUUam@@VULWUJƒIm`IUJ›KUkW@Uxn‚WbnnmlXbmIUVmV@Vnb@V™LUKWLnÒVVV@V„UL@„kJUV@bƒÈ@ŽšV°šŽ@XVV@l@xUz'],
  38769. 'encodeOffsets': [[
  38770. 116753,
  38771. 26596
  38772. ]]
  38773. }
  38774. },
  38775. {
  38776. 'type': 'Feature',
  38777. 'id': '3608',
  38778. 'properties': {
  38779. 'name': '吉安市',
  38780. 'cp': [
  38781. 114.884,
  38782. 26.9659
  38783. ],
  38784. 'childNum': 12
  38785. },
  38786. 'geometry': {
  38787. 'type': 'Polygon',
  38788. 'coordinates': ['@@lxnb@V@bV@ln@‚n„‚lInš@blVXK‚nk¼@VUKWL@b™L@`UXU`ƒ@V¦XLĠ@lJ„¦@„nV@l°nn@‚mVXnaš@nb‚K„n@l„IVƒš@VanJ@_lKVVnš„L@L‚K@Vn@VbšUVanKlLnbnJVbšnWVnVVanI@‚Vb@L„bVKVanXVbVJVU@aXLll„bôlƼXxVLVK@Xn@ƒxnVVVmb@LnVVKVXV@@mnaVXUVnV˜K@_UaUmšwnKV_‚anKVLš»„K@¯ÝU@›™U@kWlUn™lknK‚VnaUkma@ƒUIUwl»Åw@ƒVwV@n™‚n@ÈXlKVmna@kVw@anm‚@n_WWk@™™mUkUK@Im›kLUn›bkm@wV@kƒlUnLV±m@UInWƒkWmbƒ@¯amX@xUVUKUaULWKƒXwƒKmLUVUJƒ_@wyWwkaW_XaWW¯L¯akaƒ™m£@mUUš@U@wnaWU@Uƒw@aUKšUXUVKUkƒKWbk@@bUKUlWL¯LUJmLƒwU@UVƒa™VU_ƒVkmƒnUV¯@@xƒXmWUUULƒ¥makI@ƒUKUkWl™LkmǍ@aƒUk@UKƒLƒ@kmÇak@ƒ_VlkL@`lbnšlLVanLnbmVÆln@škJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzšxUxnl@bVLmŽšŽ@IVJXœVlƒLV`@bn²@J™@™V@Xmbñ@WbUJ@bm@@LUĬU‚„¦lV@xXb@blnUV'],
  38789. 'encodeOffsets': [[
  38790. 116652,
  38791. 27608
  38792. ]]
  38793. }
  38794. },
  38795. {
  38796. 'type': 'Feature',
  38797. 'id': '3611',
  38798. 'properties': {
  38799. 'name': '上饶市',
  38800. 'cp': [
  38801. 117.8613,
  38802. 28.7292
  38803. ],
  38804. 'childNum': 12
  38805. },
  38806. 'geometry': {
  38807. 'type': 'Polygon',
  38808. 'coordinates': ['@@„„@„V‚š„„I°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVVœ@lkLmbn`VbnU‚@Va„UnbVllUXV„a@w°VW@_VWšLššnVlbšLVbnl„KšnVK@IUW@_@am@™‚ÑUólK@U@WU@VwU@UI@aUU‚aXƒƒ@kwmJV@yX@k‚anƒƒ@mkwVmmI@aUU@aUUW@kVkV@@anKš»„XVWnIVUl`@_„W@wlUœV@UWKnU‚bnްInJl„UV@VnI‚b„Wn@VklL@l@Vn²m@U`kI@bWJƒnV@°VXnJm„XVmx@VVL@bkLmWULUmU@ƒbWXb@llnX@‚xkxVV„nVV@¤nL‚nVxnJVXX@˜ššbn`VI„b„@„blmlLnaV@„blWXnlUnbl@„ƒšKVanUVmm_XK@kWWnašU@UnaWUXa›ƒXamUkKmXUWƒLX¯WakKm™nUWwXa@KW_„aXWW_@WnIVl@XU‚LnWVknK@ImyUUÆbXK„Û@W@IÆUnƒVÝlkVK@mUIVwkUVaUm@aVIVyXIƒaÈwmmk@UnanVUmÅaó»lwšW@kkUVmUK@WKLƒUmWULkamK™Lk@Wa@wk@UU@U@mbUIWVKUXWmkUmVm›U@LkakKƒw@w@U™¯ƒ‚ƒUUn¯l@bmn@xkJWxkL@VkI@mƒkmJUI@V@b@VVxnbWlkÈkVƒLƒbkKmVƒL@V@²nxW‚kLUL@xlKVx„bXmVnšWJ@ޙ°@n™xUKUw±`UImVmnU@kalm@akwƒU@UUJmxU@@Uƒ@kU@Um@@Kn™ƒVm@k™KmkU@@WUnkLWxkVUwmKmLkU™bmKUbVŽ@xUnkJ@n±ŽšUxVXUšWJ@LUb™lUnm@ƒW@nknUJUVm@kXllknVbÆK„VVbš¼V„@šUl'],
  38809. 'encodeOffsets': [[
  38810. 119194,
  38811. 29751
  38812. ]]
  38813. }
  38814. },
  38815. {
  38816. 'type': 'Feature',
  38817. 'id': '3604',
  38818. 'properties': {
  38819. 'name': '九江市',
  38820. 'cp': [
  38821. 115.4224,
  38822. 29.3774
  38823. ],
  38824. 'childNum': 12
  38825. },
  38826. 'geometry': {
  38827. 'type': 'Polygon',
  38828. 'coordinates': ['@@WUkVUkmaƒVUb@mVUam_nalK@kU›nUWaU@@wna@UVkUWVUUI@a‚±n£m¯_ƒJ™ƒU@ƒƒƒĉ¦Ul@UV™Km™mLlm@ğ¹m`Uk¯@@UVK¯™@UUK@amkmKkVVUa@UkUƒKƒŽUa™L@VVXUJ™@ƒnƒ@™š™WUbƒnVb¯V@LÅlÝIƒJÅkݙm@Ua™WUU@UmUXmmwVUUKWUX±mUam@kWƒzUaVmÇw@aÅLmKXƒ‚UWKkL@W¯IƒwVw™lkUƒJ@Um@ÛÈWށKUxWkƒaUU@KkLVl@„UKUX±KUb@nVVUbUVmaUlUL@„ƒaUL@‚@nUlWzX`@„V@lx²„@Vlb@bšVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞb‚a„J@IšV°xnbl@nbÆ@VwnK@VnXlK°xnUlVX„V@Vl@L@lk@W_XK@KƒkWxUL@J„nVx@aX@VVUa˜IXlmL@bVVX@VbnK‚a²XVWƒk°a„@UnV¤nbmLmW@XbmJUbVL„aÞK„L@K@U@aVKlbV@nXlJœxV@VnšŽVȚ„ÞKôbźĕČmV@ĊšŽ²xÆIšV@Þ¦ĸ¼ÞVlŽVÞnxln°Jœk‚LXWVUVUVwnJVI@yn@lXlaXmWI@w—»ma@UmK@akKkXmW@_kaWakKWk@@K@IšWƒkUa„ƒ'],
  38829. 'encodeOffsets': [[
  38830. 119487,
  38831. 30319
  38832. ]]
  38833. }
  38834. },
  38835. {
  38836. 'type': 'Feature',
  38837. 'id': '3610',
  38838. 'properties': {
  38839. 'name': '抚州市',
  38840. 'cp': [
  38841. 116.4441,
  38842. 27.4933
  38843. ],
  38844. 'childNum': 11
  38845. },
  38846. 'geometry': {
  38847. 'type': 'Polygon',
  38848. 'coordinates': ['@@°V°UnÜ@n@lnLlV@bšV°L„lnLllVzVVXlV„V@@L@xX@WlX„m@UVƒL@V@n„°škVmVUnKlaXxVbšnlU@lVVnaVI@aX@V„šJš@V„@b„b@šVbš‚@X@lUL@Ž@VlIVm@wUVanLšalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVƒk@a@UVWn@@kl@@W„XlW@_Um@UVK@a„LnalInWV@@xnI@¥‚K„—šm@kKmƒnk@mlI„¤laXbVblknV@U‚KXVlUXa‚@@Unw@±mU@ak_±a@ƒUJUIƒVKW_Xa@aWU™šK@mmUVa@IXa@UWmšannlmX¯WKXwVUVwƒ@XUlK@klJXa@kƒkmm@Uwƒw@¯ƒW¯kw@WmbULƒaUUU@mVUU™WmkUb™KmkkK@aƒkUƒ¯¥Uƒl—ƒm@akU@mš@KVIVV@KUkUVUkaƒUWb—„mƒIkaVaUU™@mW™„b‚b@bUlkb‚b@n™K@bƒKXVWnULkKUV@LWKknlxXŽVLml@X„Ž@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯X™aWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mšU@Ux@„Æxk¼VxVJ@„nbVlmbUmLklmškVlX@‚VœšV@°Þ'],
  38849. 'encodeOffsets': [[
  38850. 118508,
  38851. 28396
  38852. ]]
  38853. }
  38854. },
  38855. {
  38856. 'type': 'Feature',
  38857. 'id': '3609',
  38858. 'properties': {
  38859. 'name': '宜春市',
  38860. 'cp': [
  38861. 115.0159,
  38862. 28.3228
  38863. ],
  38864. 'childNum': 10
  38865. },
  38866. 'geometry': {
  38867. 'type': 'Polygon',
  38868. 'coordinates': ['@@@VlbnK@b@JšLlUnx±ĀXxÆW„X@lš@V„@@blJ@nX@˜xUbVVUbVV@b—VmnmJœ„@bmbm@klUbƒLmbœš@lVb@xUX@bVVVbV¤@LVV„bXlVw‚LXÜÇn@@V„IlVškUx„x°J@XlKXLV„‚WnLÆK@bÈxUnVb„ylXn@Vbn‚W²XV‚LVVUŽnxWnnV@VVVšXVbn@ޚÆl„IÞJÆk@K°UUa„mVa@UUUš»@wV@VƒkkUKUVW£U@UmW@@aXkVUnVlKVV„UUkVmU™@kWaUanU„VVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkƒWK„UXV‚Ikx‚@na„bVK„b@nVJ„_V›@Vw„‚VUVVXUlUUaV@X@VblašbnKlkVaXaƒ¯@m@U„KVUn@WƒXkW@@w@KU@UƒWkUUUykkmKƒk¯K™U@akUmK@k@mmÛ¯V¯U@‚ƒL™¼UKmLbU`mL™xVnVb@`—LmUVUUWmb@nU@UWULmU@KnaUUmU„wmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIƒÒlVUnnŽ@VlLUJ@bUX¯@ƒaWVUKUXƒKUbm@UwKWa@a@VkUWn™@Uak@mbX„WJXbm@mL—aWVk@™wƒL@WmanU@knwWmkaWL—KWUXaƒU@¥l„UVVVbnwƒ¥nKV™»@aUk@a@UƒJ@kƒmLma™@mbUWnm@ULǺ@LXnmxUŽm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@X‚l°Vnb@bU@WbKUX@VmKUX'],
  38869. 'encodeOffsets': [[
  38870. 116652,
  38871. 28666
  38872. ]]
  38873. }
  38874. },
  38875. {
  38876. 'type': 'Feature',
  38877. 'id': '3601',
  38878. 'properties': {
  38879. 'name': '南昌市',
  38880. 'cp': [
  38881. 116.0046,
  38882. 28.6633
  38883. ],
  38884. 'childNum': 6
  38885. },
  38886. 'geometry': {
  38887. 'type': 'Polygon',
  38888. 'coordinates': ['@@šXš™„@„mš@VIUW@UšKVb„„LlV@VVbUŽlUnLnl@bVL@V°šUL@V°@Vln_Ġºn@‚knKnššLVU@VkĊ¥Vk@™Uƒ™»UaƒUÅLUalmkklWn@VUVIlm@m„Xn@VmškVa@KXIV™UWVw‚™²@m@U@VK@k@W™Ua@™ƒa@aUƒ™@™IUƒW@@bUJmbUU@kkV™mUaWwkbmLUVUn™lWbUbklmL™akbUaW@U@VbkVWVUUUVƒUx@‚Uœƒ`UI@mƒaULƒamb@lwJWUƒVXLl„UVmL@bUK@aUnUam@UUmJ@VnX@`UXVŽVb@bX@W¦nJUbƒUmVVbXb@lVšUnVlƒVUUkLmUUVWl@bX@VnV@X¤VUVLllU„U@@x™¼VV@V'],
  38889. 'encodeOffsets': [[
  38890. 118249,
  38891. 29700
  38892. ]]
  38893. }
  38894. },
  38895. {
  38896. 'type': 'Feature',
  38897. 'id': '3602',
  38898. 'properties': {
  38899. 'name': '景德镇市',
  38900. 'cp': [
  38901. 117.334,
  38902. 29.3225
  38903. ],
  38904. 'childNum': 3
  38905. },
  38906. 'geometry': {
  38907. 'type': 'Polygon',
  38908. 'coordinates': ['@@VVX@Vbmz„xUlU@mbmL@V²xVbUVVblbX@šVškVykValKVI@bn@n`lVWnX@l„L@™WKnƒVIVa@¯nK@alIXJVIVWUw‚ƒn@nU˜„nK@alI@a@anKm_™a—™W@UWmIUwmmK@£UUƒmUUlwwW@km@kWaX„aV@VnVKnXlK@aUK@UnwWUnƒmIUW@¯mU„XI@alJV_n@m±@U@kkKUlm@ƒXamJ@UVUkƒmI¯JmamVXL@V›UkV@xƒX@`k_UVmJUXƒW™¼mL@bU@UllX@VV@bVV@bnJUnlx@n„Žm„b@lWŽ@zU‚nIlx„@W„bVV@bVJV@UxV@@X@VkLVôÒ‚šn@@b@`VX@J'],
  38909. 'encodeOffsets': [[
  38910. 119903,
  38911. 30409
  38912. ]]
  38913. }
  38914. },
  38915. {
  38916. 'type': 'Feature',
  38917. 'id': '3603',
  38918. 'properties': {
  38919. 'name': '萍乡市',
  38920. 'cp': [
  38921. 113.9282,
  38922. 27.4823
  38923. ],
  38924. 'childNum': 4
  38925. },
  38926. 'geometry': {
  38927. 'type': 'Polygon',
  38928. 'coordinates': ['@@VWnL@UVW‚LXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KȹVK¯m@kmU@ƒƒ¥kIğ@WKU¥„@V_VW@_šK@aXKVL@Ul»mWLkU@am™kJƒm@kmU@@a@UmakwU@›„Xlƒ@VXk`UIW¼kWWX@‚œ@l‚xV¦XlW@Ubn„@ŽmUkL@UmJ¯UkUWVUaƒUlm@UXWl„nUJ@LmLU˜nXll@bUVUUmVUn„Ž@¦šxlŽnn@VÆÈU°kbV„VxllnL@VnVVUl@V„„anL'],
  38929. 'encodeOffsets': [[
  38930. 116652,
  38931. 28666
  38932. ]]
  38933. }
  38934. },
  38935. {
  38936. 'type': 'Feature',
  38937. 'id': '3606',
  38938. 'properties': {
  38939. 'name': '鹰潭市',
  38940. 'cp': [
  38941. 117.0813,
  38942. 28.2349
  38943. ],
  38944. 'childNum': 3
  38945. },
  38946. 'geometry': {
  38947. 'type': 'Polygon',
  38948. 'coordinates': ['@@@XV@nlšL@lUnš„mŽ@Ln@@VlV„@@VV@nwVI@V„Vlx@bknlbV@nmnUVJ‚_²‚VxVLšw@mš¯@ÝXIm™nUWƒaUwkL@wVKlKXmw@±@U„KnUlL„a„KlUlÇXkmaUw@U@a@Uƒ™UkwUJ@zWJ™w@WbkVWUL@VmUklUaWakbƒ£kJ@nmln„lL@Ž™nƒ˜L@¦mJ@wU@mXkJmbƒK@bUL@VVn@`kXƒW@Xk@@lm@UX@V@b„lÜUXVWLXJ@nmb@V@l'],
  38949. 'encodeOffsets': [[
  38950. 119599,
  38951. 29025
  38952. ]]
  38953. }
  38954. },
  38955. {
  38956. 'type': 'Feature',
  38957. 'id': '3605',
  38958. 'properties': {
  38959. 'name': '新余市',
  38960. 'cp': [
  38961. 114.95,
  38962. 27.8174
  38963. ],
  38964. 'childNum': 2
  38965. },
  38966. 'geometry': {
  38967. 'type': 'Polygon',
  38968. 'coordinates': ['@@m@@WULUKWwÅ»ókƒakkWK@bUVUIUamWUbULƒa@KUa@mJUbmUXU™mUamImakKmLUb™VUam@@UL@KƒKm™UUkL@`mIUb™@U„@V@bVl@bš¼UŽmL„¦mxUaUUƒVkŽ@¦„VWbXV˜LXKlbXnmx@lmVnb@X„Kšxl@XU˜bnKn@WaXIWƒnal@Vbš@XmlV@U@bXb‚LVxn@Va„LVWVLXU„b°@VW@aVIkK@UmVmkU„ÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI'],
  38969. 'encodeOffsets': [[
  38970. 118182,
  38971. 28542
  38972. ]]
  38973. }
  38974. }
  38975. ],
  38976. 'UTF8Encoding': true
  38977. };
  38978. });define('echarts/util/mapData/geoJson/ji_lin_geo', [], function () {
  38979. return {
  38980. 'type': 'FeatureCollection',
  38981. 'features': [
  38982. {
  38983. 'type': 'Feature',
  38984. 'id': '2224',
  38985. 'properties': {
  38986. 'name': '延边朝鲜族自治州',
  38987. 'cp': [
  38988. 129.397,
  38989. 43.2587
  38990. ],
  38991. 'childNum': 8
  38992. },
  38993. 'geometry': {
  38994. 'type': 'Polygon',
  38995. 'coordinates': ['@@Wxĵ„mš@„ó¤VX@@xܼƨš²xWxƒV„V@„XVƒ„„„ƒbWšXllaÞU°Ċ„@ô¼„LôÝWanV¥ƒÑnĉ°¥šÅX¥°¯@w°w@»°k£°mÈŹ‚mÈbƃŎ¦„K°z@Žkxl¦UbU¤šššklV„KŤÞȰ@@bšV@nVVUlÞ¦lUllœVlU°ÑU¯Vƒ°w„bXxl@V޲„˜@n„ô¼ƒó°™kmVk²ĕ‚w@wV™ÞÞ@@Ġƒö»˜¯œ@‚„šbnb°mÞ¯°V°„ÈJmX¥mam™UřƒUƒlaU¯™ƒ@w™Kk—l±n@@wƒkÝVUUl±¯I¯b™a™lƒ@™kLmakbƒ@ġƒŹé°™Þb°šékƒƒLm™„wX™‚aÅb@bVlƒbVb—ÒVbUb›UUanwƒakbVŽUV›ak„¯„UŽƒLmxV°UxnôŻX@J„Xkl‚bkbĉaƒbƒWU„ƒ@ƒk„WUU¯@@klmƒ@@™Å@aƒwWXlKkI@WbUaVIUanUƒƒ@ĕƒ¯K™„mUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KœIƒwl@UmƒI@an@@mlUÅmV_™KUkƒ@U`@_ƒKUmU™@U¯™mmb¯@kb™ImV¯ƒƒLkbƒKƒƒÛ@ÇnɱJóaÝĢkb@„›x—ÒÇllœ@‚޲V‚„ÆUVV„UÇ°X„óxlV¯„lV@bƒV@n—x›@—¤@„șŎnxV¼knšJ‚nšKX°˜¦UlnVbUbÆVnÞWVX¦llšb@l°œVJôÒnLVbšbXŽ'],
  38996. 'encodeOffsets': [[
  38997. 131086,
  38998. 44798
  38999. ]]
  39000. }
  39001. },
  39002. {
  39003. 'type': 'Feature',
  39004. 'id': '2202',
  39005. 'properties': {
  39006. 'name': '吉林市',
  39007. 'cp': [
  39008. 126.8372,
  39009. 43.6047
  39010. ],
  39011. 'childNum': 6
  39012. },
  39013. 'geometry': {
  39014. 'type': 'Polygon',
  39015. 'coordinates': ['@@ôl‚zšaÈV°„šK@„mŽ—LWl™nšVxUV‚È@ŽÝĬUÈn‚ôLša‚„²VmĀkV@„ĠĊnU@b„V@b˜@nl°UVnÞaôJ@bš™V„¦mlkššbmVXx¯@Vxm„nbƒ„šbÈK‚V@bÈL„wĠyônšmnbÜ@nn„V˜x@n²K‚„„J@k„al@nxÞU„Lź±Vwkw¯LWWUš™kŎīVwƒw„°y„Vĕ°wÈVlkÛ»@wW@Uô£@ƒn™ĶƒXwW™aUamKóÑUI¯›@k™akkW¥XUmÝÅUVaUa‚mVk—¥W¯™Lm™IlmU»mwȚō@ƒ˜£kJUÇk@am¯y¯UVwƒa@wġx¦ƒKƒƒ¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVƒ™ƒkIUlóŽċ¹™`óIƒlX„WŽXxmbUƒLݏƒbƧ@ƒx¯bƒÈ—l@xƒš¯zƒaݤ@nšm„VWb²bmn¯J¯Ò@n„š'],
  39016. 'encodeOffsets': [[
  39017. 128701,
  39018. 44303
  39019. ]]
  39020. }
  39021. },
  39022. {
  39023. 'type': 'Feature',
  39024. 'id': '2208',
  39025. 'properties': {
  39026. 'name': '白城市',
  39027. 'cp': [
  39028. 123.0029,
  39029. 45.2637
  39030. ],
  39031. 'childNum': 5
  39032. },
  39033. 'geometry': {
  39034. 'type': 'Polygon',
  39035. 'coordinates': ['@@ó™ǩŁ@WlwUaƑwÛÅÇéĉamKƒōÇ@Iƒ™ôġVƒȁÑŹçƒ™ÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦m‚Åb@nmlU²VxšlUn™@VbnW„bÇbk҃š„n@èlnlšU҄ްLšx@¼ĉb@҄šUŽċxՃènLVxƒÒƒbÅJ±a@_ÅJÅnƒŽVb„Kl„nUÜĊ@„Uš™xXVÆn„mšVššJÞ¯V™ĠwšƒXw°xWL„x„KV¦ôU„wVÝǬóÞޙ¼‚‚„ÞkŽVôȘxބU„lVn¦ÞšĊa°w„b°@šbÆw„lŤL²`„z°@V@@™nJVnl@@¥nUmmn„@mwnmmUnk@mlwUaƒLnƒ›wn¯°anƒWakI„ƒÇmXwÆamUXUlJXa‚UUklKUknmÞV@‚K@VWÞ@VkUwVƒ'],
  39036. 'encodeOffsets': [[
  39037. 127350,
  39038. 46553
  39039. ]]
  39040. }
  39041. },
  39042. {
  39043. 'type': 'Feature',
  39044. 'id': '2207',
  39045. 'properties': {
  39046. 'name': '松原市',
  39047. 'cp': [
  39048. 124.0906,
  39049. 44.7198
  39050. ],
  39051. 'childNum': 5
  39052. },
  39053. 'geometry': {
  39054. 'type': 'Polygon',
  39055. 'coordinates': ['@@„šźèȂÒU„óĢ„š@JŎȄ‚‚LnŽĊbÈêÜÆƒxVbkx@XǪłôš„kÞ`„šW„b@n°ašbšKšnVw°`š_X`W„š¦„ĊIkmVšakw‚K„x°UÞb„U@lšƒl@°¦œVW„šaÞbšxÞI@mVI@ƒVkŚUWK„¥nL‚a@ƒ„@ȍ„@°ƒÆ@nU@KÞalkUwVékUWw„™kU›VkkƒJk¯@»ókƒV¯ÆÇI@bĉô¯@™ķw¯nmmÅL¯wƒVƒUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWX™mLõm@kűV_ƒƒô»ÛƒÆ¯@™Va™VšaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxݤkzƒy¯XɅm@VšôÇX¯Ė¯ºÝnUŽnLVlUÔmV'],
  39056. 'encodeOffsets': [[
  39057. 126068,
  39058. 45580
  39059. ]]
  39060. }
  39061. },
  39062. {
  39063. 'type': 'Feature',
  39064. 'id': '2201',
  39065. 'properties': {
  39066. 'name': '长春市',
  39067. 'cp': [
  39068. 125.8154,
  39069. 44.2584
  39070. ],
  39071. 'childNum': 5
  39072. },
  39073. 'geometry': {
  39074. 'type': 'Polygon',
  39075. 'coordinates': ['@@„U°xÆKnn°mĸxš°@Ċó@aÈJ°Å„Uôl@¼l°„IllœUlVƒšXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlރlwô_„›„bVaĶLXÅÞÇ@K˜¯@wÛaƒçn¥š¯WXyW¯XwƒUmmÛ@ma™nómğzƒxÇK@aUÇL™a„ƒmanƒUw°@WwnU™al™nkƒ¥šU™@aóIÝbUm¯Vmk—@@aƒU@amVğĉ@ƒlUnÿ±Uƒ™bóKmVÇÞī@ÇVUUw‚™šmXk˜Kn@ƒ™L¯ƒÇU™byókōè@b‚n@lÝX@x¯ô@ƙUV_maXm@aóƒJWxnX@ŽVVnĖVnUJ@nōÆÇ¼V¼kxƒLklÝw@xƒx@zV`ÅbmxU±xU„nnm‚kn‚ŽğU™bUŽ‚šUb@šÅ°Ü„󼄄U`Ʋ@lön‚KšnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝz„V'],
  39076. 'encodeOffsets': [[
  39077. 128262,
  39078. 45940
  39079. ]]
  39080. }
  39081. },
  39082. {
  39083. 'type': 'Feature',
  39084. 'id': '2206',
  39085. 'properties': {
  39086. 'name': '白山市',
  39087. 'cp': [
  39088. 127.2217,
  39089. 42.0941
  39090. ],
  39091. 'childNum': 5
  39092. },
  39093. 'geometry': {
  39094. 'type': 'Polygon',
  39095. 'coordinates': ['@@Ušl¦kÒÆ°„IlÒU¤ôz„¼lJš„U„n‚ÆXVl°@²aÆbVKČXV¯°¥¯ĉ°W„„„L‚¥Ģw@x„bUx°V°zn‚‚b@ÈlVŽlIœ@˜w@m„U@akU°ƒkUôwWƒÈ¯VUƒVUƒÅ±U›@kÈk˜Ñœw@ƒlaÞġƒUÞ£@ƅ‚KnÑ̝@W‚aUaVUVkkw@a¯@¯™Ý™ƒVXnW@@WkXmK@xkKUb@bW@Uw¯„mmb@WKUbmUbUaWbƒJĉIVW@I—l±LkšmU™bUm™@ƒnkKWa¯n™@„`Ubma™„ĉL@bƚ—@W`ƒL@n¯‚Xb‚@kb@x™Lƒ„™@V‚kL±™™mlUIU¥mL@lÅx@_laƒƒ@U—aƒV@kmmƒK„£ƒƒLƒƒmKUnÅKVbmXVlèĉUUbml„ĢŤƒIlޝbǦœl‚@ô¼Ģ„@x°„l¤„n„a„l@x™b'],
  39096. 'encodeOffsets': [[
  39097. 129567,
  39098. 43262
  39099. ]]
  39100. }
  39101. },
  39102. {
  39103. 'type': 'Feature',
  39104. 'id': '2205',
  39105. 'properties': {
  39106. 'name': '通化市',
  39107. 'cp': [
  39108. 125.9583,
  39109. 41.8579
  39110. ],
  39111. 'childNum': 7
  39112. },
  39113. 'geometry': {
  39114. 'type': 'Polygon',
  39115. 'coordinates': ['@@ÆlXnĠx̰lȰš„K„°kXm‚@¦Vbk„ŤJšnݤk„VÞVVkȄb°y„™@w˜k„ǰa„wƨ@„aސ„K‚VnaWwXWƒ„kôJš_ČºôVkƒ»óyV£kуJůlÑk¥V™ša@wƒkƒbƒmk£¯ƒ@wġƒó»@›kÈ¥°ak„JÆ£ƒġnkVaĊVkçWUnUaÆLVmnL„„‚KU™±@—„m@a¯U„bmV¯m@_ƒK™™U™ƒaƒÅ™Wó¹ƒ@UanmWak@@wmI@y™@mk„JVa™@UaƒIkJ@n™@Um±kkxƒm™Ik„ƒbÇm@ްbXn„V@ްÈmlÞ¼¯XVº¯Lm„kWWXLmVVlknƒ@@lnWƙ„Vxbmšnšm„¯lÝaVȁè@¼V„„b™„ÆŽ°ÞUVšJ„„kx›I—xƒƒƒIV¤™ÒXxmn'],
  39116. 'encodeOffsets': [[
  39117. 128273,
  39118. 43330
  39119. ]]
  39120. }
  39121. },
  39122. {
  39123. 'type': 'Feature',
  39124. 'id': '2203',
  39125. 'properties': {
  39126. 'name': '四平市',
  39127. 'cp': [
  39128. 124.541,
  39129. 43.4894
  39130. ],
  39131. 'childNum': 5
  39132. },
  39133. 'geometry': {
  39134. 'type': 'Polygon',
  39135. 'coordinates': ['@@Ɇn°W„zlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmVƒ²w‚VnwÆaU_@y„w@wÞxlk„KlwU»È»ŎÅ@mVIUmmĕUU@mWXw„Iô‚@bWnnbU`‚šV@Űó@wÞW@km@aŎ烙@m°Ñ°Inm±aXaƒU™n@mƑšU¦@šÇޝaU£šaU™ġ¦ÅҙJōUŻókUÇ@™¥¯ak¯mUVak@@aċçÅaUƒm¦Ý`XbƄ@n`ƒI™xĊÞōÞml@šUb@Wl™_¯JkšÇUÝÆÅb@n™„llUb¯„±a@ƒ—ƒWĉJġ™Unóšm¤œxôaVnƒxôI@x„V@bmƙ„@lnLmޯޙxVb¯þ'],
  39136. 'encodeOffsets': [[
  39137. 126293,
  39138. 45124
  39139. ]]
  39140. }
  39141. },
  39142. {
  39143. 'type': 'Feature',
  39144. 'id': '2204',
  39145. 'properties': {
  39146. 'name': '辽源市',
  39147. 'cp': [
  39148. 125.343,
  39149. 42.7643
  39150. ],
  39151. 'childNum': 3
  39152. },
  39153. 'geometry': {
  39154. 'type': 'Polygon',
  39155. 'coordinates': ['@@żôŎVšIÆÑĢ¥Vš™bV¤°bȍ@™V¥ƒ™Þ£lÇUUUÝlƒÞ£™mţIlƒUa@¥nlWƒ¯ƒL¯™kÇġ¯ğwWmÅk¯UƒVU„„bWlXlmnƒbUx¯xVVknlŽUbV„ÇKUb@„™VnbmlnzUº±bmJUbWÈnèm҄š@X`WL'],
  39156. 'encodeOffsets': [[
  39157. 127879,
  39158. 44168
  39159. ]]
  39160. }
  39161. }
  39162. ],
  39163. 'UTF8Encoding': true
  39164. };
  39165. });define('echarts/util/mapData/geoJson/liao_ning_geo', [], function () {
  39166. return {
  39167. 'type': 'FeatureCollection',
  39168. 'features': [
  39169. {
  39170. 'type': 'Feature',
  39171. 'id': '2102',
  39172. 'properties': {
  39173. 'name': '大连市',
  39174. 'cp': [
  39175. 122.2229,
  39176. 39.4409
  39177. ],
  39178. 'childNum': 5
  39179. },
  39180. 'geometry': {
  39181. 'type': 'Polygon',
  39182. 'coordinates': ['@@‚IÞmVk@wXWÜbnwlLnU„@‚nLlbXW@a‚wnbl@XL‚aš@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlb„xl@„IVbnJVLUbn‚lnVw„JVU@ƒXU‚aUUlwn@°ƒn„VKnV°_VJšwl@nwlV„IXWlIVVnK@IWmkIVaVU@WÈUlmU@U„WUalkXġŻ@kIƒ»mm™akUm›ĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kƒw@ƒUƒmwĉ™@ƒWķсIĉÇbÝLkymbIƒwÇmÛbmbU„¯ÜõÈkÆVbŎxnXVÆnšǪ¦„bš¤Uš™xÝnĉÒmĊVȄ¤Èš„bƼ„Ā„„ÆÆÞ„źb„VVbX„‚°²¤'],
  39183. 'encodeOffsets': [[
  39184. 124786,
  39185. 41102
  39186. ]]
  39187. }
  39188. },
  39189. {
  39190. 'type': 'Feature',
  39191. 'id': '2113',
  39192. 'properties': {
  39193. 'name': '朝阳市',
  39194. 'cp': [
  39195. 120.0696,
  39196. 41.4899
  39197. ],
  39198. 'childNum': 6
  39199. },
  39200. 'geometry': {
  39201. 'type': 'Polygon',
  39202. 'coordinates': ['@@na@UVI@m„ÑW™kaV¥UI@wl@„aÈbšm@wVašk„@@K@kƒ™@a@UUmƒUUalmU@KÇUű¯@±kUKVkUaƒaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@U—m˜aXIWWUL™aULVbƒmk@UUmUk±™_Uym@mbkImaX¯WW™xWKzU@WƒkJWwkV™@Um@UbVVVVXb@VWX—@WŽ@Vkb@V™nUK±aUUlwX™ÇWKknU@mmUkƒLUVƒVUUVƒUaƒw™bkKmwnIƒ™kJ@nmbƒ`kmVkLWwUm@UUU™K@UmaUa@UUaWK@mUƒ¯Wkk¯VmUUŽ„xVXUVmL¯ymXkWUbmXUKƒVknWx¯JVnkLƒl@VVxnxlĀVL²WlX„l@bÝVUn@bnlÜaXblIVl@šš@Ȧ@VmbXV‚@@x„VVnUn@`°@VnXU@K@„VV@VmbnVn@ln@b„xƒ°Ub@bšLV`Ånƒ„W@@lUšnnWVU@Vbkl@Xl`XxV„UblŽkX@ް¦V„UVVbUlkV›@UbVbkLUxmJkXšš@b‚bœxVKÆlXX˜bnŽnala@ƒUk@U„VVklKVUXKVU°KVan@VUnLšKVL„WVaU_@mmUXa@m˜wXwVkVWXk‚k@›„k@klm@wXKl@U@KVUUUVaUƒV@„alL„xUx@b°°VnnVšxlIXJmx„LUVlV@bnX@Všb„aVx‚@XJ@b‚n@VŽVXȄl@llX@lU„Vô°°@ބVbn@‚V„k„@VW'],
  39203. 'encodeOffsets': [[
  39204. 123919,
  39205. 43262
  39206. ]]
  39207. }
  39208. },
  39209. {
  39210. 'type': 'Feature',
  39211. 'id': '2106',
  39212. 'properties': {
  39213. 'name': '丹东市',
  39214. 'cp': [
  39215. 124.541,
  39216. 40.4242
  39217. ],
  39218. 'childNum': 4
  39219. },
  39220. 'geometry': {
  39221. 'type': 'Polygon',
  39222. 'coordinates': ['@@lzXJ‚U@š²x‚@@Vš„@bUVmKUn„°n@lnVK„„nV@n@VlV„°WbXn@‚VzƒJ@¦@bkb‚bUl@bkbƒJ¯zƒWULWbklV„nb™¦VJ@„„K°U„kl@@W„bVn°@„Všm²U˜nX`„UÜLXmVXlKVbUVVnUbn˜ƒX@VUL@lUbWxš@²kl`n@Vlb„@nUVWVLVU@aV@²bl@ÈmšxWX„VÈU„JV„l@„„la„WnX‚KÈkÈ@Va°bÆm„@XV°IVV°UnalƒVUn@UwVU„@@VVJ„I@bl@XK@wWmXU‚UVbkJVXnJVI@mƒknwlKXL@`l@VI@UUaVKÞn„aVm@aÇ£XW„U@aÇUU@mbkKm£™@WW™ƒL@@Kk@kl›U—bWKUkUU¯UõÛƒmUUaVU„U@WU_W@kVkJƒ_WKkV@bUL™¯¯ƒ±mk¯ġƒğÑ@UmwƒKUakƒ™ƒa@a„m¥ÝƒIUWmk@w™mţ—L›KʝbȗKWĢklVbƒX@VV‚knÇV@XUVUblJXn@J'],
  39223. 'encodeOffsets': [[
  39224. 126372,
  39225. 40967
  39226. ]]
  39227. }
  39228. },
  39229. {
  39230. 'type': 'Feature',
  39231. 'id': '2112',
  39232. 'properties': {
  39233. 'name': '铁岭市',
  39234. 'cp': [
  39235. 124.2773,
  39236. 42.7423
  39237. ],
  39238. 'childNum': 7
  39239. },
  39240. 'geometry': {
  39241. 'type': 'Polygon',
  39242. 'coordinates': ['@@XJm@¯šmXUlnVbUJƒU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VV™V@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUV„x@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVz‚l@„nVVKVXރ@mk_lm„UUWV_nJlUÞÑÞVVUVƒVL„UVJ@I„Vna‚@@KV@XwWknwnKlalU„w„aĉݚwšJl_@aUaƒKUUU@WU@WXUÆ@@UVK@n@UnVVšblK@bœllb@b„bW@Xbl@UlnLl°°bš¦nKlVnI„V@UWU@WXkƒw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJšaX_VaUaVKmwnkmmn@lU@U@mnašXlKUmUIVmklaUK@UlUVUW@U™kVm™a@UUU@JmUU@@bmb—KWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m™™@klm@UXKVaUI@KWUXaƒÇWk™aWUkWUL±U@lUU@ƒUJƒI@V¯JmIm@@aU@Uwƒa™@UV@VkI›V¯aUkƒWkb@bVL„@@VVVUXW@Uaƒ@@b—‚ÝbUV݄@ŽƒLmUkVUbVllLUV@LššXŽWbUXm@U`@„kxlnnJlbnIllšLX„lVlUXmVK„n‚V@L'],
  39243. 'encodeOffsets': [[
  39244. 126720,
  39245. 43572
  39246. ]]
  39247. }
  39248. },
  39249. {
  39250. 'type': 'Feature',
  39251. 'id': '2101',
  39252. 'properties': {
  39253. 'name': '沈阳市',
  39254. 'cp': [
  39255. 123.1238,
  39256. 42.1216
  39257. ],
  39258. 'childNum': 5
  39259. },
  39260. 'geometry': {
  39261. 'type': 'Polygon',
  39262. 'coordinates': ['@@ȚĊܰ„b„L‚lÞxUbUn±‚@ÈnVÆL@xnLšlUVƒbƒxkImJkn@V±LUxkV@bšbšKVKnzVl@L°@Va„xÞUlbôxVVœ@@V±bnŽ@llXL˜ŽöXĶŽnal@nkVJVI@aU@@aVK@ašUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@a„VVIUa‚mVknW°™n@WI@KUƒmULWnkVkUWƒ™KkkmJkamIkmlw@ƒV_n@VWXaW™™@KVUkKUkValUnV„K@ÞƒVUÞa˜@a„@VbX@VWUU@Uƒ@UK@ala@IkKmUUa@U@ƒVƒkk™WVwU_@KÜUXbl@V¥XUVmƒƒƒXa‚kŃlUUkIm`UIUJW@UIKmkm@UUJƒImmU@ƒVUXU`mIUbUK@LƒJUU™l@Xƒ@UbƒJ™kU@ƒŽn„m@Uam@@ƒ™aUmLKƒwƒ™mWXUK@kUaÇa@JUIUa@aƒKVUƒUXmƒUy™_@lmbkLUKWLX`‚n@bVL@JXL„‚WX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LƒUVl@mb¯U@xU@UVVV@X@VVblJ@bn„VKUn„x@llnL±¤™b@k`VXÆK@„kV@¼kl@bWIUl@VmLnbm@@JXXmb'],
  39263. 'encodeOffsets': [[
  39264. 125359,
  39265. 43139
  39266. ]]
  39267. }
  39268. },
  39269. {
  39270. 'type': 'Feature',
  39271. 'id': '2104',
  39272. 'properties': {
  39273. 'name': '抚顺市',
  39274. 'cp': [
  39275. 124.585,
  39276. 41.8579
  39277. ],
  39278. 'childNum': 4
  39279. },
  39280. 'geometry': {
  39281. 'type': 'Polygon',
  39282. 'coordinates': ['@@„XVl°bœUlJ@UVUš@„bVxV@@bn@nJ°I@U„J‚I„VV@V@k²VVKlXXVšb‚lÈX„ŽWbXV@LVJUbWL@Vkn@lšš@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXU˜Lna@aV@nV@IVV@VšbUnšl@V‚XnKVa@U„UnyWkXaƒaVk@ašašbnm@_WKXmWanU@alaU—l@XJVLVxX@˜wnKnVlwƒƒ™@V_@a¯¥@UkKWUaUU‚anK@IƒaU@WUaVw@klUVyUUVUUÇ@Iôbša@mnUma@kXa@UWak@Wa—l@a›@WUƒLmU@U`mIUU™`mUk@@UUK±nkJƒbUam@kwm@@a@UU@Ua@@K@ƒVK@kmKU_UKƒUUaĉWmkkL@`™LƒnmlkLkbmK@k™@Ulmb@b™„@Ž„xUVƒIUlmVXXƒxm@™JUUk@WUk@ƒakx±@¯x¯Umb™KUUVmUU¯UmVVn™WkÆ„lWb„„„ŽUnWVU¦k@WaÛV@LV`UxšXllU„@„@VVbnVlL@J'],
  39283. 'encodeOffsets': [[
  39284. 126754,
  39285. 42992
  39286. ]]
  39287. }
  39288. },
  39289. {
  39290. 'type': 'Feature',
  39291. 'id': '2114',
  39292. 'properties': {
  39293. 'name': '葫芦岛市',
  39294. 'cp': [
  39295. 120.1575,
  39296. 40.578
  39297. ],
  39298. 'childNum': 4
  39299. },
  39300. 'geometry': {
  39301. 'type': 'Polygon',
  39302. 'coordinates': ['@@ll°X„ŽnV‚@XLVb@VVbnb@VšLVV@VVnXxlKnU‚l„_na@mlI„šmJnxlLša„xVbU„VV„UVU„KVlnnV@lmXLšÈWŽkxVV²bVLšm@Ula@UX˜@XW@UWaUUUUVan@V‚š@lUXxlIX„V@‚yXLšw‚ŽXXW°nblJnan@Vzš`l²nVVVl@„nUaVKšbVKnXVaUaVUšyšnXK@kVK‚@X@m@m‚LXa„LWƒU¯„w@™ƒa@UVw„¥°™ó¯¯y¯ƒUǯ»›w¯Iƒm—¯Ç™UUl™¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlƒnnŽU¼±Lk`@X™Wl¦UbmVUxkXVlkbllU„Vb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@ƒxU@n„'],
  39303. 'encodeOffsets': [[
  39304. 122097,
  39305. 41575
  39306. ]]
  39307. }
  39308. },
  39309. {
  39310. 'type': 'Feature',
  39311. 'id': '2109',
  39312. 'properties': {
  39313. 'name': '阜新市',
  39314. 'cp': [
  39315. 122.0032,
  39316. 42.2699
  39317. ],
  39318. 'childNum': 4
  39319. },
  39320. 'geometry': {
  39321. 'type': 'Polygon',
  39322. 'coordinates': ['@@šXnb°lš„VlnXVJ„LlVnl@zÆxnK@b„blKVLn@@V„aVLVK@L@Vl@XVVInVVKVwlUXwlKšL„ššVVb@aV@X„lUXbVW@n„lWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXV‚I„xVanJ@UšIVWšL@UV@@¤V@nInw˜W„k„lnIVx‚lnzUVÇJ¦VVÜLĸUnW@aV_šWĊXXa‚Knkl@nm™L™a@alUVw²K@UlmnIlJ„w„aVU™kmK@wÅKmU@DzVmVaÝwkƒKƒaÛ¯șĉķ¥ğ¥ƒ@kUWkƏī݃ƒ@@akU„K@KWIUm¯nƒU¯JmwUVmIkJÇLm@™UImJUU@aW@U@@nUb™JƒaƒbXVWn@UVmX@V@b„š@l@Lƒ@™lUb@x™nÇaƒbk@@xVJU¦lbXšƒÒ@nUJ@Vmb'],
  39323. 'encodeOffsets': [[
  39324. 123919,
  39325. 43262
  39326. ]]
  39327. }
  39328. },
  39329. {
  39330. 'type': 'Feature',
  39331. 'id': '2107',
  39332. 'properties': {
  39333. 'name': '锦州市',
  39334. 'cp': [
  39335. 121.6626,
  39336. 41.4294
  39337. ],
  39338. 'childNum': 5
  39339. },
  39340. 'geometry': {
  39341. 'type': 'Polygon',
  39342. 'coordinates': ['@@nJ@nlmVnXKl@@°n@@¦‚V„bVbUlVL²l°@ƲÈV@LV‚knVb„VVnnWVU‚@XmWU„a„bšIVa@mV@X@@bVVnIVJ@š‚nÈKlInJVUnx°I„V°mVnXJ@LƒLlV@b„@ބƐĬXllV„@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ƒÅLUWl_@ša²£‚Kkm@kƒwVmULmƒ@akIUa@U@WUUVU™aÝ@ğ›wkƒƒmĉ£UWƒ@@bÇL@m—a@_mKƒlƒXUwKƒLţÓ@UWw@K@U„I@m™U@UV¥„@°UnJ°@@_™KUwƒW@UnaWUmmI@m™ķwUaÇLóVĵwݙUUW™¯šƒ¦Ux@V„b@šƒxV°X„ƒKWbK@n@nW‚@UL@lWL™m™zUVVbUbmWXXWJ—b˜n@Vkl@LlVUn@xnV@bln'],
  39343. 'encodeOffsets': [[
  39344. 123694,
  39345. 42391
  39346. ]]
  39347. }
  39348. },
  39349. {
  39350. 'type': 'Feature',
  39351. 'id': '2103',
  39352. 'properties': {
  39353. 'name': '鞍山市',
  39354. 'cp': [
  39355. 123.0798,
  39356. 40.6055
  39357. ],
  39358. 'childNum': 4
  39359. },
  39360. 'geometry': {
  39361. 'type': 'Polygon',
  39362. 'coordinates': ['@@l„œxĠŽÞ@šbV@@w°Vna‚@Uk„V@K@UUUVa@K@w@UnKmUVan@@Uma@UXWƒWK@IUK@amW_XKVLlKna@kmKVak@VU„@VmšU@anIÆan@‚a„šUVnb@blLV`ÞLlU„bna‚Kn@naVU@¥°IVK@anUUKVaƒUVak™@mJƒkXƒ™UVwkƒVUUa°U@Wƒ@WlkXWlIXUlJlaœx‚IVVXLšll@nLV@lLXl„KĊzš¥maUƒlkXaVK„X°y„Ila@aVkala@a@¥„IUy@WmXaƒ¯kU@U@mmUƒƒULkmm@ƒ¯VmnLVU@a™ƒ@U@±w@™VWIkymLUUkJWXƒJkUmxk@™xUI¯`mUULmƒ¯„m@kxVVbWV@„UVƒIUx@bkšVšVVšxUbVV@V@zšJVXU‚lnk@@lkLƒlƒLUU±Jkšm@UIUVƒLUVU@™K@UƒnnV@l@Ll„ƒaUJ@zn`@nWlƒIUVUUUV±Ln‚@nmL@VUVkLVlUxVLVlÅXma™@@akLmWUX@JUnVJVkXJ@X@`WX„VUVUIlb„W@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`„LUL¯J@IVKmKÅI@J™nWVnLnšVxV¤™z@bmV@VUV@bUL'],
  39363. 'encodeOffsets': [[
  39364. 125123,
  39365. 42447
  39366. ]]
  39367. }
  39368. },
  39369. {
  39370. 'type': 'Feature',
  39371. 'id': '2105',
  39372. 'properties': {
  39373. 'name': '本溪市',
  39374. 'cp': [
  39375. 124.1455,
  39376. 41.1987
  39377. ],
  39378. 'childNum': 3
  39379. },
  39380. 'geometry': {
  39381. 'type': 'Polygon',
  39382. 'coordinates': ['@@lb@Vn„lnVVUb@šVJ@nnJ@bmXUx@xVbkbkŽWLUxnl@Ul@„xWx@nUV@¼Ull„knkK@bmbnl‚LVJX@VIVJn_lJVVšXUmnU°VVVUnVVšLna°V°w²@lw„bl@XVl@VVšIn@„wWWnUVk„JVUƒw@šƒ@anaVkš@@lnLlalKnk„mšK@_lKnlĊXVb„VVLV`nL@lUL@„@L@‚VbV@@V@bn@lxn@Vb„alI²mVL@Vl@nVš_VVnJV_‚@nV„K‚V@Xœ‚@b˜kXbl@XblylUUkš™@Xa@UVIlK@UUWVU„Llm@UUUnKWU@K@UXm„XVa@U°KVUUWUk@ašUVKkaWkƒKUknaWa@U—@m@mk@ƒaUJk@@_WKkLmx„l@nUJmIUWlIUaVWVXn@xWLk@@aƒJUI@Uƒ@UVVxm@UVk„mb¯VUU¯JWUƒ@Ån¯aUbÇ@ÇlLmWƒXkbƒƒk@UƒƒIÇVƒUXW™wÇnk@±aU@@bUVUKUXmVƒ@kaUm@k_±l™@XwVa@kVK@U„Wm—VaUmVUUakLUWWnÛKƒVW_—m±V™nƒU¯@Umƒa@Xk@ƒl¯V'],
  39383. 'encodeOffsets': [[
  39384. 126552,
  39385. 41839
  39386. ]]
  39387. }
  39388. },
  39389. {
  39390. 'type': 'Feature',
  39391. 'id': '2108',
  39392. 'properties': {
  39393. 'name': '营口市',
  39394. 'cp': [
  39395. 122.4316,
  39396. 40.4297
  39397. ],
  39398. 'childNum': 4
  39399. },
  39400. 'geometry': {
  39401. 'type': 'Polygon',
  39402. 'coordinates': ['@@ĊĖÆn¤„„°Ċ¯ŎWšô„@xXb‚wnKl@nX@VUVƒKmL@VU@Ux݄@Vlb„x„U@VUb@b‚kœ`‚IUlVUn„V@@UV@@JnXlK@bš@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVU„JXk@mm_@yVI„bkƒ@K@kmU„m@VšLV@VU„KVUVJn@l™²IVV„K„klK@kl@kmVUW™I@y@UUUVa™wUUU™l™@akmmVaUKmIUaƒJk@ƒwkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦™@bWKk@max@bWXkamKƒ@mVkKmxÛaWX@xUlÝnJ'],
  39403. 'encodeOffsets': [[
  39404. 124786,
  39405. 41102
  39406. ]]
  39407. }
  39408. },
  39409. {
  39410. 'type': 'Feature',
  39411. 'id': '2110',
  39412. 'properties': {
  39413. 'name': '辽阳市',
  39414. 'cp': [
  39415. 123.4094,
  39416. 41.1383
  39417. ],
  39418. 'childNum': 5
  39419. },
  39420. 'geometry': {
  39421. 'type': 'Polygon',
  39422. 'coordinates': ['@@š`Vz„‚Wn„VUV„L@bVbVJ@IÈbVb@lVLXW‚n„š„x‚LnKVŽšb@„n@Vbn@mƒ„V@šl„IVa„@@WškVV„I@KVLVanJV_VW„UV@nn„JVI‚Vn@na@alLlmkƒVk@»VU@mXwƒwk@@VmkVwXKllaUa@wVwnW@amI@mUI@™VaUUkmmƒ@UkaƒL@ƒUIĉyƒLWkkKU@mKk@™kWKUUJ›wkbkIWVkJWXkl@X„‚@X¯VVbUVl„UxšVW„„lnIš@l‚Ub„VUbVLmV@bUL¯J@¦UVmbm@LmbƒakVÝKU_kK@amaVUƒ™bm@ÅbmJ@b™VUnƒ@UVl@UbnL'],
  39423. 'encodeOffsets': [[
  39424. 125562,
  39425. 42194
  39426. ]]
  39427. }
  39428. },
  39429. {
  39430. 'type': 'Feature',
  39431. 'id': '2111',
  39432. 'properties': {
  39433. 'name': '盘锦市',
  39434. 'cp': [
  39435. 121.9482,
  39436. 41.0449
  39437. ],
  39438. 'childNum': 3
  39439. },
  39440. 'geometry': {
  39441. 'type': 'Polygon',
  39442. 'coordinates': ['@@Vbĸx‚š@nnJVnXŽmb@V„XVxšL@`¯@mI¯Vƒ@U¦@VšV@nƒJ@V@LXx@VŤÔ„K‚LVx„W„knL@`˜b@nÈK@a„@VXĊ¤„nVK@aVU@UnU@ašyU£Uwm™mKXUšm@IÆJnLUL@J°IVKƒKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aƒXkaVJVUƒUXW@_@WWIUlUIVm@IVW@IU@@VU@mƒUVVkJ›_l@aVa@UƒVƒwka@UރVwV@@UnK„LVU@UmWk@mLxWa@wóƒUVUIÇÆĉ¦¯¦¯xʟJ'],
  39443. 'encodeOffsets': [[
  39444. 124392,
  39445. 41822
  39446. ]]
  39447. }
  39448. }
  39449. ],
  39450. 'UTF8Encoding': true
  39451. };
  39452. });define('echarts/util/mapData/geoJson/nei_meng_gu_geo', [], function () {
  39453. return {
  39454. 'type': 'FeatureCollection',
  39455. 'features': [
  39456. {
  39457. 'type': 'Feature',
  39458. 'id': '1507',
  39459. 'properties': {
  39460. 'name': '呼伦贝尔市',
  39461. 'cp': [
  39462. 120.8057,
  39463. 50.2185
  39464. ],
  39465. 'childNum': 13
  39466. },
  39467. 'geometry': {
  39468. 'type': 'Polygon',
  39469. 'coordinates': ['@@„m@Łkƒ™Žƒklƒôƒ@£kJ°ý™ɅķÑó¤ğLĉÅlÇğŁW¯¯›™ƥóÿlwkţÈéÝƛó™°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧ„ō¥˹Ɔ@L@„Þ‚VLnš@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLƒƒÅ™¯UWġkmóƒ±UŹôV¼ƽ¼ƒł̥ĖƽǬʉxĉŽŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎՂ@šĊbôô̐¼ƒ@ĊôĊŽÞĀ™xšĖƧL±ŽœŽ‚Uš°U„°ĬƒČ°ÜƒêɴȂVł°@ƒ„nxŎèƒbȄÞȌ΀Ǹl޲IlxĊl²ÒmšôĖ™Èl„ĵºm„ÈêVþ„xɛČʉÇĵVmš„ÒƒÈɆôƐŰǀĊ°ÆǬĮƾb„yĊ@ĠšƒXǀċm»ôw°Ûk¥Çm¯ç™kkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘ‚™ĊLĢĉ„VÆĉʊÇĕóaU¥šĉ°mkŰġUĠřk°mƒÑČÿ˜ÛƒWĸ£ʠšÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸz„ŽĊKȲm¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@šÝ̓@ƒÈkl¥Ççkxk™›JXÇƒUÅ@˜£k»„óƿīÛ@lÅJl¥óý@¯ƽġƍÅan™ċ™°é¯¹'],
  39470. 'encodeOffsets': [[
  39471. 128194,
  39472. 51014
  39473. ]]
  39474. }
  39475. },
  39476. {
  39477. 'type': 'Feature',
  39478. 'id': '1529',
  39479. 'properties': {
  39480. 'name': '阿拉善盟',
  39481. 'cp': [
  39482. 102.019,
  39483. 40.1001
  39484. ],
  39485. 'childNum': 3
  39486. },
  39487. 'geometry': {
  39488. 'type': 'Polygon',
  39489. 'coordinates': ['@@™ƏnǟƨʫšŹɆÿ°¯ÆV²ˢ™żÿ@ÝÆŁȰ¯ȀƳĉó™™@ğkyš¹@īš›ƒwl£Źƒƒ¯Ŧé@™ÇÇxŋĉƩUUŃōL™Ç™ĵóÝnƒóç@™™ó@ġƒƱ„¥ƒç™WUçÆōƒ@é—çťK™çȭVһƽ̻aW¥ȁ£ʵNJǓƲɳޗǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠšŎȭœгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkǰȁÈnšõl¯ô„ÞɛÝkĢóWĊ„zÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġƃêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞUš¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź'],
  39490. 'encodeOffsets': [[
  39491. 107764,
  39492. 42750
  39493. ]]
  39494. }
  39495. },
  39496. {
  39497. 'type': 'Feature',
  39498. 'id': '1525',
  39499. 'properties': {
  39500. 'name': '锡林郭勒盟',
  39501. 'cp': [
  39502. 115.6421,
  39503. 44.176
  39504. ],
  39505. 'childNum': 12
  39506. },
  39507. 'geometry': {
  39508. 'type': 'Polygon',
  39509. 'coordinates': ['@@ʶĬĊIȘƨƨŽ@ĬÛĢșŤĉĬƒĀóšU‚ÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒšɆ¯̼V˺Ò˺ȂŤVĢêU܃x„Āˌ˘ƨ„ưѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźƒĸU°lżwUb°°°Vš£ÞlĠĉĊLޏɆnźÞ„n¦ĊaȂīġѝIĉůl»kƒ„™Çý„¥Ŏ¯ƒén£ġљÝȭxƒÇ™@Åçķ»óƱŎ¥™çWÿmlóa£Çb™yVÅČÇV»ÝU¯™KĉýǕċţnġ¯»ÇōUm»ğƒÑ™wƏbċÇŎċwˋÈÛÿʉѰŁkw@óÇ»ĉw™¥VÑŹU™mW»ğğljVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVljóJƒwĊÑkĕÝw¯nk¥ŏaó¦ĉƒV¦Å`ğуÑÝ@mwn¯m±@óƒÛKˍƏǓ±UšÝ™a¯lƒōšșk„èƒĬގn@ŤġŰk°ċx@œĉ`Ƨĕ°@ţÒĉwmĉ@ƒƒnƒƒa„™¥ķnƒÞĉVóÆókĉŽķ@ÝkƧƧÛaƒ°Ç@ÝÈU˜óbݼ@„ÛÒV°™@V¼ˋL™ÞɅŤŹǠVÞȗŤÇĖŚōbȁƜ'],
  39510. 'encodeOffsets': [[
  39511. 113817,
  39512. 44421
  39513. ]]
  39514. }
  39515. },
  39516. {
  39517. 'type': 'Feature',
  39518. 'id': '1506',
  39519. 'properties': {
  39520. 'name': '鄂尔多斯市',
  39521. 'cp': [
  39522. 108.9734,
  39523. 39.2487
  39524. ],
  39525. 'childNum': 8
  39526. },
  39527. 'geometry': {
  39528. 'type': 'Polygon',
  39529. 'coordinates': ['@@ĶL²ĬVłƑkkl@Ȏ™ŘWńÈĬȗ¯™ºlz@ĠššĊôŦô„ÒĠ°kÞܚ™n@¤„UĸèĸbŌÈXŽĸLlÒĢxɲÆ¤ÈÛƾJÈݰUšÅĶ»²VW¯ĸJôšbk‚V@ôlbnĊyÈzVôašb@ĸ‚ÞUl°yǬ²Ǭm°ššk„±lbn°@È»˜JX„VŎÑÆJ@k„LšƒÆl²™Ġ²ʊůĊġ‚řóƛÞÅ@m„ƒmLUÿóĉƧ@™»L@„›`ČĸmšȗÑţů±ĉğl¯Ā™wǎƒçƧŤÛI@±ÜĉǓçō°Uwô™ǫůķƳř±bÅ£™ÓÇwnÑó@ȁƽ@™ƒÇƧĢón»ŏĕóĊ¯b„Å™™VȯÅImƒōKU„™LǓ±Ýxċ—ŋ˜V±Āȗ°™„Źl±šÛ@WÒȁŚŹНŚÅèŌô„¼°ȰɞȂVĊ'],
  39530. 'encodeOffsets': [[
  39531. 109542,
  39532. 39983
  39533. ]]
  39534. }
  39535. },
  39536. {
  39537. 'type': 'Feature',
  39538. 'id': '1504',
  39539. 'properties': {
  39540. 'name': '赤峰市',
  39541. 'cp': [
  39542. 118.6743,
  39543. 43.2642
  39544. ],
  39545. 'childNum': 10
  39546. },
  39547. 'geometry': {
  39548. 'type': 'Polygon',
  39549. 'coordinates': ['@@ɲŁĢljĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽ™ɅġÅÑǫ»̐ʟȣU™¯wVWݍÈġW»Þ¹m݃ɛŎÿŎōͩůV¹›ō™éċ™óŹÅVVĢǩʈ@Ėċ@ķšÛšV°¯xÇÅţ¥™»°Ûô™ĉʟ„¥WýČ¥™w‚灻±mnÅķ¥ˋVƒbUÒġ»ÅxğLƧ™ƒbWĖÅxš¦U°ÝVóŰlô²@š¥ÜÞÛô„V@²±`𦙄™¯Ý@„ŽÅ„VÒō¼ôš™¤V²ŹĬÇĊƑƒţxƒç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠNJĠŽX¼šnźVUҚ¦Ċxȼ@ôlx¯łʊÒÜĀˌÇČxƍČÈƐašx„ÒĠŽn¼ŎVȐ‚¼Ģ°ŤmǖČĊþšLV°ÞŽU¼ċÈUƚzÈa‚¤ôbkŽ‚nXšè'],
  39550. 'encodeOffsets': [[
  39551. 122232,
  39552. 46328
  39553. ]]
  39554. }
  39555. },
  39556. {
  39557. 'type': 'Feature',
  39558. 'id': '1508',
  39559. 'properties': {
  39560. 'name': '巴彦淖尔市',
  39561. 'cp': [
  39562. 107.5562,
  39563. 41.3196
  39564. ],
  39565. 'childNum': 7
  39566. },
  39567. 'geometry': {
  39568. 'type': 'Polygon',
  39569. 'coordinates': ['@@²@Ζǀݴʶհĸ„˜ƒ¦Ķ™̒Uˌ¼ӾÇƾ¼̨UÞĉ˜Ƨ—éÝ»ƒĕĉ—ƐȍœōǪakó‚ó¯a@™ôţ™aV¯Þ¯°@²él¥ĵğťwōxó¯k±š—Vó@™aóbUÇyĉzmŽkaóŽU@l™aó‚ķIX°±Uĵ¼™Æ¯VÇÞƽIÇÜÅ£ɱŽġwkÑķKWŋÇķaķçƒV@£šmۙlÝğ¯ƒÑťóǿƴȯ°Åł@ÞŻĀˡš±ŽÅU¯°ɅĀ™źƧʬmǠšƐ'],
  39570. 'encodeOffsets': [[
  39571. 107764,
  39572. 42750
  39573. ]]
  39574. }
  39575. },
  39576. {
  39577. 'type': 'Feature',
  39578. 'id': '1505',
  39579. 'properties': {
  39580. 'name': '通辽市',
  39581. 'cp': [
  39582. 121.4758,
  39583. 43.9673
  39584. ],
  39585. 'childNum': 8
  39586. },
  39587. 'geometry': {
  39588. 'type': 'Polygon',
  39589. 'coordinates': ['@@ôƲĸ¼Æèš@„ÈȮwƾ»ʠĢ¥VÆ@²¥@»Ŏњ¯ĊJŤ£k»ÆÇX¯̼ōšī°aX£ôƒƾȁꥄƒ™aôŤ™ĢL°ƒĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKƒķšĉôÿ@ğÈĉ™»ÇVn™ĉV›wXĠݰšČÿĸwVƒ™¯¯ǵ±™ĉ‚ǫ™ÅÅm»²Ż±ƽIm¥ţÈķ@¯šƧJV»ÞUÝç¯UġºU£ţŽóaÅÅlƒƒ™Ƨī¯K¯Þ݃ğL̑ȍƽ@ōŎōĀƑɜnÞݺX¼ÇĢގUX°xVšʠȤ̏Ǭ¼ÆÒɆ̚ŽǫƾUĀóĸ°‚k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġNJɱłō¦'],
  39590. 'encodeOffsets': [[
  39591. 122097,
  39592. 46379
  39593. ]]
  39594. }
  39595. },
  39596. {
  39597. 'type': 'Feature',
  39598. 'id': '1509',
  39599. 'properties': {
  39600. 'name': '乌兰察布市',
  39601. 'cp': [
  39602. 112.5769,
  39603. 41.77
  39604. ],
  39605. 'childNum': 11
  39606. },
  39607. 'geometry': {
  39608. 'type': 'Polygon',
  39609. 'coordinates': ['@@ʠǠÞĸɲȺƒÒȂƛŎaƙÈĕȘţUÝźǟɆţšÝˌKU»š@U¯ÜÑ@ƒÞ»ôaV—ÞÇÈ@„¯ÜbƨƨÞlĸ@ĊôlôÅĊU„Ýĸmš¦ƒŽ„bm„„„Ċ@n‚ĊxŤÑ@¯‚ƨĖĊ_@›Čwl¯™ƒȭL›Ý„»ƽ¯ķů„Ǔ@ÇǓbċ™ÅÅÆwÿĠÇU£óaƒ¥¯aŎğĠţkw°»¯ůlÝĵkǻݰɱƧǫaóôɱ»Çk¯ŃóƒʇŐŻ›ĉNJŻĢ„ޝÒÈUl°ƒx°n„Ò™Ĭón™Ċğ°ÇŚĉ¦ʵVƒ°°ĬÛżÇJȁńʇʹó˂ƽŎ›Æţ¦'],
  39610. 'encodeOffsets': [[
  39611. 112984,
  39612. 43763
  39613. ]]
  39614. }
  39615. },
  39616. {
  39617. 'type': 'Feature',
  39618. 'id': '1522',
  39619. 'properties': {
  39620. 'name': '兴安盟',
  39621. 'cp': [
  39622. 121.3879,
  39623. 46.1426
  39624. ],
  39625. 'childNum': 6
  39626. },
  39627. 'geometry': {
  39628. 'type': 'Polygon',
  39629. 'coordinates': ['@@ÆXnlŎ°@LVLĠþœxĊUȮĊnU„ĠV@żaW¯XIŎġƒ¥Ý@K@w@K@I˺ŻŎ¦ƨƒƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝݚÞbVţĸÿŤxÈĖƐށêÇKnĸ¥ô@›ķÞUnÒl@UŚaƒīˋƒ¯ÑƧx@±kXřƐƏÛéV™ˋ»lō¯ĉ„ÅÇÓǫޗĖġV@ğ»›°ĵ„ÇÞǓ¼¯m˜ÛÅŃĉĠÇƾb²çƒ™šéż¯VƒƒğÞml»ōÑV痻V¯™¯šĕÆU¯y°k¯¯V»ôDŽѰa@Źk™ġKţšóŽšbƒ„ʦƽȂó„W¤¯b™Ĭ̻ŎW°ÅÈl¼ţ¤ĉI™°ōÒ@¼±¦Å@UŽġ¦ʟŽƽ¼šÞĢÒm¤„êō°ƒ¦Èþƒšl„k¼Ċ۰JĢńȁĬ„°ƒżn‚ÇbV„ݼ@¼óĸţ¤@°Ånšl'],
  39630. 'encodeOffsets': [[
  39631. 122412,
  39632. 48482
  39633. ]]
  39634. }
  39635. },
  39636. {
  39637. 'type': 'Feature',
  39638. 'id': '1502',
  39639. 'properties': {
  39640. 'name': '包头市',
  39641. 'cp': [
  39642. 110.3467,
  39643. 41.4899
  39644. ],
  39645. 'childNum': 5
  39646. },
  39647. 'geometry': {
  39648. 'type': 'Polygon',
  39649. 'coordinates': ['@@źxżĀǔÆǬVȘĀŤ¥œÅƾōôˁʈͳȂŃÈIÜŻ¯ī„¯ōm™¯ɱ˝ƒķÒÝIÝ»ÅV™ƒlÅôфġ™ğVmÞnnƒWçkW܁XƝÆwU»Șĕš£ĉÑ𱱚Åk™„ƒK@lÅIō҃UW‚—IǼ¯@m‚kaƒ²™l¯™ǫnǫ±¯zkŽÝVķUô™˜l²ô°ŎwŦxĶĠk¦±ê¯@ݰU°šbóŤ@š°bôlôǩb›ŎƏȎĊ˜„ĖÞ¼˜ê—ƨÝĊ'],
  39650. 'encodeOffsets': [[
  39651. 112017,
  39652. 43465
  39653. ]]
  39654. }
  39655. },
  39656. {
  39657. 'type': 'Feature',
  39658. 'id': '1501',
  39659. 'properties': {
  39660. 'name': '呼和浩特市',
  39661. 'cp': [
  39662. 111.4124,
  39663. 40.4901
  39664. ],
  39665. 'childNum': 6
  39666. },
  39667. 'geometry': {
  39668. 'type': 'Polygon',
  39669. 'coordinates': ['@@ʶUĊ¥ÈřĠ¯šĉômšīƒÑ¯m„wk¯ÇV°ÑƒżġĊljǓɱţǓ›ƝóX¯ƒɛÒóa@nÝÆôƜŚĉĢʉŰĊҙ¤ȗĖV¼ÅxWƞۂlXXèm„ÝmUnšĠƒĢóÒkƚ„ÆUÞ¼ÞJĸѰ„ɲĕš°Ŏn'],
  39670. 'encodeOffsets': [[
  39671. 114098,
  39672. 42312
  39673. ]]
  39674. }
  39675. },
  39676. {
  39677. 'type': 'Feature',
  39678. 'id': '1503',
  39679. 'properties': {
  39680. 'name': '乌海市',
  39681. 'cp': [
  39682. 106.886,
  39683. 39.4739
  39684. ],
  39685. 'childNum': 1
  39686. },
  39687. 'geometry': {
  39688. 'type': 'Polygon',
  39689. 'coordinates': ['@@Ș°ÇīXњŗ@ȍlkƒlUٱīĵKō¼VŽÇôXĸ¯Ž@šťê„°ź„k¤„x™œ@Ĭ'],
  39690. 'encodeOffsets': [[
  39691. 109317,
  39692. 40799
  39693. ]]
  39694. }
  39695. }
  39696. ],
  39697. 'UTF8Encoding': true
  39698. };
  39699. });define('echarts/util/mapData/geoJson/ning_xia_geo', [], function () {
  39700. return {
  39701. 'type': 'FeatureCollection',
  39702. 'features': [
  39703. {
  39704. 'type': 'Feature',
  39705. 'id': '6403',
  39706. 'properties': {
  39707. 'name': '吴忠市',
  39708. 'cp': [
  39709. 106.853,
  39710. 37.3755
  39711. ],
  39712. 'childNum': 4
  39713. },
  39714. 'geometry': {
  39715. 'type': 'Polygon',
  39716. 'coordinates': ['@@nLV‚@šVLšaÞbn@@l˜š@bUVlUV„zVx™¤kÞVèšXnš‚@nm°a@UƒÑ„@VŽXnV@Va„UšŽVKUUU@@U‚@@KVa@U²@‚wXkWnk„±lLnU@UmmVKnIVWnI@UK›@UK@@UVKXkmWLWUXmlkVwUyVa@w„w@aVI„K@aVÈw„KlLVV@LnV„VVnU‚ܲ°WÈIUÆ@nÞ¼‚‚@¦™@UÞUVW@UxUxVn„b„K‚b¯ÞU`VbǬ™V@XXÆVVl°InmnUôƒ°¯‚anam£œWVX‚KXmškôaVU@ƒVak@@wmaƒn@K@UÛUWKXUƒÇƒ@UI™b@alW@akLUKV@@Ukw±Iš›nL@kmwkWmk@JUIƒůVmnnU@m@UƒK„VKlkUwkƒƒnVUKmbkI±š—KƒkmVkKƒb@U@aƒVkUmn™`kIlaUK@UUKmbUIݚUa@mUa@aƒ„m@UUULUK@bmKkbWI@WXwlkXƒWa@k@kKƒLVkkK@L@JUVmzUKlwUUnW˜£XVlKUwVU@aXI@aWaUw@W@_nam@¯‚UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUaƒ@@WÅ_mJknmak@@mƒXƒaUV@„ƒxUšƒ„@‚ƒ„@VUnkVƒ@Vn@`ULUbWLXVW@kbUJ@XW`@ƒnÅĖWJƒ@—m°@xƒxšbnUa‚w²lƒÞ°xŤIVVULۂWbšbkVVXÆ`UbVL„@kx°LlV@Vœ„WbƒJn@bl¤ULV„°@lmL@ƒƒ£U@@aUwmKULVxUVVx@„™@kU™@mK¯LÇa¯@'],
  39717. 'encodeOffsets': [[
  39718. 108124,
  39719. 38605
  39720. ]]
  39721. }
  39722. },
  39723. {
  39724. 'type': 'Feature',
  39725. 'id': '6405',
  39726. 'properties': {
  39727. 'name': '中卫市',
  39728. 'cp': [
  39729. 105.4028,
  39730. 36.9525
  39731. ],
  39732. 'childNum': 3
  39733. },
  39734. 'geometry': {
  39735. 'type': 'Polygon',
  39736. 'coordinates': ['@@°@Èb°KnLš@lVš@@ƒUwVUUwVKnLVx@bV@„¤@„nK@k‚¯UƒVKk£@a‚m„IXa›ƒ@UkU¯Klwƒ@UKVaÅ_UWlU™aXa܁VKUUţJ¯w„ݱkxVbmŽ™a„w@wn¯˜„@XIÆĕ„m‚@X_@WVIlaX@WUXKVaVK@_Um„@lUVm@U„ƒ@„ƒV™„w@ƒVUÛwm@@W@ImKUkU@Ua‚aXƒ@wWaUKkw@UVaUamLU™nk@»±`¯@k—W@Ua™ykbƒI„„@VWJkLWUkJƒwU@ƒn¤mL¯wm@Umƒ²XVWbnV@bmxƒVkxUblLUV@kVWKU¼ƒŽkUƒ@mn@JnV@bUnmJUn@„k‚@XlxšLVVnKlLVV@š@LkKULVbk`WL@lkXW@kVƒ@UÞUlÇX™lkaUbmV¯@@L@šƒV@bkb@xƒlW„—bƒbW@—±@UJ@IU@mVk„VxV@@l„Illœn@Vm@ƒVUbl„@JLmKÛXmVkU›KULU`@LĉwƒKUX„lVUl@Vb„JX¦̼bÞxŎxɜĖĠ„Ŏaô@'],
  39737. 'encodeOffsets': [[
  39738. 108124,
  39739. 38605
  39740. ]]
  39741. }
  39742. },
  39743. {
  39744. 'type': 'Feature',
  39745. 'id': '6404',
  39746. 'properties': {
  39747. 'name': '固原市',
  39748. 'cp': [
  39749. 106.1389,
  39750. 35.9363
  39751. ],
  39752. 'childNum': 6
  39753. },
  39754. 'geometry': {
  39755. 'type': 'MultiPolygon',
  39756. 'coordinates': [
  39757. ['@@Vnn@°xnK‚£„mV@„xlIXVlKXI@Uƒƒ„JlašzVbX@l˜°@²_@¼mlVšnKVbUb@VlxVLXb@xW„bVbV@VlnL@J@Xn@Üx„b„W@nl@nblmnIÆ`@X„@Vbna@aVUUWVkƒ@kbWakbU@VwšW@_l@nmn@@alVlk@UkmVak@@a‚UXaƒL@¯@KVa@axWI@KnkVaVJn_lJ@„X@‚m@nVanUVb@mXLlJ„VWnLla„VVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUmƒ@K@_UW@alIUamaU¯kJma@IUK@U„@@UW@@aXLVƒVJVaXIƒKlaUkUV@ambUUJkIWJ@wUI™V@JU@UwV@@Um@™nU`@UkUmVUxWUUV@aÅb@aWXkKUUƒUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlƒUwlkK@wmaƒUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU‚™@UbUV@a›k@kkW@„kLW¤@„nV@VU@W_UV™UU`VLUV@IUVõVULU@UUUJ@wmkUJ@šWI@l@bkKkbVVƒbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW„@KULwWVXVWzXVVKVXkV›V@VUbV@U„VV@š@LXxVL@V„b‚Ž„LnKVLVxXVmb@l'],
  39758. ['@@@J@aƒU@LWK¯UUxVVn@Ġ„„LUW@UbUUUa@KUX']
  39759. ],
  39760. 'encodeOffsets': [
  39761. [[
  39762. 108023,
  39763. 37052
  39764. ]],
  39765. [[
  39766. 108541,
  39767. 36299
  39768. ]]
  39769. ]
  39770. }
  39771. },
  39772. {
  39773. 'type': 'Feature',
  39774. 'id': '6401',
  39775. 'properties': {
  39776. 'name': '银川市',
  39777. 'cp': [
  39778. 106.3586,
  39779. 38.1775
  39780. ],
  39781. 'childNum': 4
  39782. },
  39783. 'geometry': {
  39784. 'type': 'Polygon',
  39785. 'coordinates': ['@@šUšwVK@UVWÞUšbšw„V@knV˜@@KU_VK@K„ƒn@W_XWlL@Vn@Ċw@Ulaœ@Wanamī@aƒ»ŋó@aÆÅɲÿUaV_°ÝaƒLƒaUmVwVwX@VUVݚ@@¥Ý»@mVÅÇJ¯XÛ±VUmƒUmU@KUUkKƒLÇxUŽ@bƒLUJ@bƒx@xUbVzUxklWnXV‚KnXWlUL@V@ŽVLœ@VL@ŽmJUXmJULnn@VmVkKƒ²mlXWlx±@@VUb@L@@VV@VVUL™ƒVUbU@WmUƒ@„Ò@V¯bmn@VŽƒ„@lVnUšnVWŽXVl@¦VVUn@x‚š@‚XL@¦‚lXxš„Vb'],
  39786. 'encodeOffsets': [[
  39787. 108563,
  39788. 39803
  39789. ]]
  39790. }
  39791. },
  39792. {
  39793. 'type': 'Feature',
  39794. 'id': '6402',
  39795. 'properties': {
  39796. 'name': '石嘴山市',
  39797. 'cp': [
  39798. 106.4795,
  39799. 39.0015
  39800. ],
  39801. 'childNum': 2
  39802. },
  39803. 'geometry': {
  39804. 'type': 'Polygon',
  39805. 'coordinates': ['@@U¯ķó±ÇÛ¯™ķmbXb›@kb@Vĉxm@@UkKWXX`m@ƒ„@LULV`@L—@mU@lƒU™x™aÝVUX@VUL™x™VkLWVšš@J„nVLXVlŽUV@zl‚VL@V@b„„n@lU²WVLlLVbUŽVxUx@xǀL˜xôҜk‚K²ŽVa‚U@wXa@W™ÈĉUa@‚bÈk„m@¯'],
  39806. 'encodeOffsets': [[
  39807. 109542,
  39808. 39938
  39809. ]]
  39810. }
  39811. }
  39812. ],
  39813. 'UTF8Encoding': true
  39814. };
  39815. });define('echarts/util/mapData/geoJson/qing_hai_geo', [], function () {
  39816. return {
  39817. 'type': 'FeatureCollection',
  39818. 'features': [
  39819. {
  39820. 'type': 'Feature',
  39821. 'id': '6328',
  39822. 'properties': {
  39823. 'name': '海西蒙古族藏族自治州',
  39824. 'cp': [
  39825. 94.9768,
  39826. 37.1118
  39827. ],
  39828. 'childNum': 7
  39829. },
  39830. 'geometry': {
  39831. 'type': 'MultiPolygon',
  39832. 'coordinates': [
  39833. ['@@„V£°š@laœXô±źwš™ô@„Ulƒża܍n™Kƒw@U„aƒ™ša²L‚mÈLƚÈxlaUa„wÞmÜbÞUšnJ°a„kôƒ‚ÑkwÝVğwÇ@ÝkkV¯¥@ò„»„nŤ¥XImw@mVwša@Åw™mLkaW—wƒ¥l»kçƒó„»@ƒWÑĉŽğ@ĉ„™‚Ń„UwóřVómĵ»™™Ý@VǕ¯kšÝĊÅk™°ÓUklkU±šI„ÇÞkƒ±@šƽJƒ™@UġIk@W¦™VÑșÓÅnťKULnޝX›ƒ@¯mUÛ@WřmóKknōbƒxÝ@ƒŽU@kw@ÿÇLţšÝUkšmwƒŽk™lċVŚU¦™ŽƒLkUWlÅÑ@aƒ@ÅѱUóġʼƒÈĉmŻ@@wkw™Kl¯U™ġ@—„lÇU™Ó¯_ƒ‚Waĉ²Åló¼VbknƒKǎÅ@ƧĢō°Ý@ğ„W™ÅxUUm@™‚ÝXۂW„ULUè¯@mbUaƒLƒbUWġxIUJWz™a¯b™y™@ōÈóLU`ÇXUl™UĉV¯n›mÛbǕLklƒUĉVƒšóaġ„ƏbġKţnkbÝmmnÝWȭȃŽÝXţWókUÇl¯U¯‚ġUɅĀ@°¯„„š¯„VÆnmJ@ĊķnóJUbÝXUlVškL@lVxnnmb@¤Vzš`ÞÞŤ@„VnÆJV„°b„UôJkzlŽkl@²óš@ÆÇ°k˃šÇbÛU@lmb™XV˜kzƒV™ŽɅĀXˢlń„ĬŹ@›éÅ@ĉńưğbUšlŽɜ_°‚@xŦ˜škbVbƒKĢ„ŤVŎް@żÈźlĊ„ôKôb@nôxŦ„Æ@ôŽŎL@þÆb@šnnšWˌbÈx‚InaŎxlU@Ѳ±ƒğVŨƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôŽǪK°xUXô@Ŧa°m‚kXÆÞVŎkĊ°ÞLȄôyVašIlwX°UVwĢÑÜKôw@nV@œm°nmŽn„Ü‚ɞ£VbmŽXnƒ°ÜÒ@xx@V‚b²UlbkxVnšJUnVVĊ°KȚm°nxÇnn¤±¦@ŽUXVV@„lV„„bmVVȁŽVxšÒ™°šIšbźaȃšbVwš@šƒVL„™ƾÑ@ƒŦô¯ĊkôÑ'],
  39834. ['@@„@šƒ„@n„òVœa‚w²bVxšxÜaČVô_ĊJšIVmšL„a°@Ŏ¥XlK@ƒšk„l„KVbUb˜@nUĢn‚aÈ@lmǬ»Ġ¯œn‚mnƒƨVy™Ñǖ™Ġ»ɲInŽ‚@@ÅĢƳ@¯°™ôV„KÈbVIÇ¥¯@Ýó„™@ÑnīWKšƒk™‚k@¥š™¯™Åa™Xƒ±VÅw@±Ġ¯@»™š™n™Wmw@ƒ™@¯ƒVƒUUWçƒKĉ„a±VkkƒV¯w™x@šUJ‚x@bknÇb™mÅ@Uw±U¯¦UŽ™Kmš¯I¯Žť¼ğĊ™@ǃŹÈ¯@Ý»ÇnˡJƒbÛèÇnƒ„ÅK¯„ġĠʐW¼Ålm„@¤n²ƒŽÝb@b„š¯lƒ¯@ƒšÅ¤W„™¼nV@x„„°@Vx„@lbUblbX¼W‚œšÇ²lšUŽ@¼ŽV¦@bÇlVxUbVxÞbVšœbm¦ƒVV„']
  39835. ],
  39836. 'encodeOffsets': [
  39837. [[
  39838. 100452,
  39839. 39719
  39840. ]],
  39841. [[
  39842. 91980,
  39843. 35742
  39844. ]]
  39845. ]
  39846. }
  39847. },
  39848. {
  39849. 'type': 'Feature',
  39850. 'id': '6327',
  39851. 'properties': {
  39852. 'name': '玉树藏族自治州',
  39853. 'cp': [
  39854. 93.5925,
  39855. 33.9368
  39856. ],
  39857. 'childNum': 6
  39858. },
  39859. 'geometry': {
  39860. 'type': 'Polygon',
  39861. 'coordinates': ['@@ɆÿĢV°°VÈklVôŤXÞW„ȮÇÞXnmÞnlaŤmĢLƐãôb„™ĊU„VlkǖKÜaœn°mĊUšVVkÈWV_ôKŎǚ@šz°ašbXyVI‚JĢwVX„a„KVbna°@VçVKXƒÜÞWšn@VVÆwXšĠƒÞ@Ŏ¯ƨġÆ@ȍ„LlmUaô»ÆkĊ±Xb„°`šÔV‚kȘƒĢ@Všk°šLlx@xż@Ċn„Çź»ô̲VÆÒ„@@bÆÒXklV„KšV¥Æ™ČUšk‚l„nxl™çƒ¥ċç@±m¥ƒwÅJƒ@™™™Vƒ„mÈIléÈa°U¥™™@kÞV‚K²ÑWƒ°w²Ñ‚K²ñšyƐ„ÝšVmw„»kkWĉ—JWUƒVÅwƒL™mÅ@@ƒmw„kn¥Vу»°™°@@»„¯„Lla„JônV‚UůƒU@W¯Umѯ¯k@WykU@¯„wV¥ƒkVwţƒk»šwWǜĉĶçšK„ƒÞ™ÇaĉbƒI™lUƒ@kwƒWƒXUƒ°w™±@UšKn£Wĉ—KWxƒkĕVƒšamwXw™@™„Wmnk@aƒVkƒ™bĉLƒl™Imm„wUÇ‚Wx™nÝJn@¥Æ™kwƒaXƒÜĉ™¯ÅV¯¤mkƒx¯kķܙ²VWôŹVUƒƒ@V£™¥@ƒ°wn@™m@¯@UbUôķŽmn@ÆÛ@ÇýVaUÇĊVƒ@Çlğ—¯xÝŤ™lVÈÈVƒx„ƒ¤Vx™„kK@™@ƒx@„kVƒĖġ¥kIWbXŽŎx@nƒxÅUW`ƒ_—@±ŽUa™LUxƒK¯„WbkVlb—bmŽƒLÛÆWIUwƒWkwÝV@kI›ŽéUb›UUk™V¯Km¯k@Umݐ¯m¯›m—L›Þĉ‚ÛUm™ġ£UxkKm°™Lw›šk@kšƒVm„ƒKVUk›@¯a¯Ģ™móKUU™x™ImlÅn™™ÇbXèVVU„°„@ŽšŽ@„‚xXnmš™ššŽ@¼ğ°@²ÆxU‚„²šWÆb°š™š@¦llš™„XLmĬ@҃šÞô°@ȦUJÇaƒLóU¯š@°ġƴ@Ɓ@mɱJğ¼ǕššÒUzƧ‚m„n›mğ°ǫ¼knÇ@bġmmV—@VaUaƒLƒk™l@„kLW‚ō¦¯@ƒb™KUn™JĉIó`ċUÛb™wUw±ax›bñUmƒƒ@™„ƒ@—bƒaƒbǏÅXm˜„ƒÝ„ÅôVbގ™bl„UšÞVޚ„U‚°„VUxƒ@U„V„@l`™¼nL@Ċ„LW„„¤kXķWġXUVVVķ„UbVb@°kVVxÈa‚@ȦĊbšaźJ„U@Ț„„˜Vœƒlš@XkôaWƒĢ™Þ@laĸUÆb²mÞLĠ™ÞÑôbšÒĊa„JVbm¦'],
  39862. 'encodeOffsets': [[
  39863. 93285,
  39864. 37030
  39865. ]]
  39866. }
  39867. },
  39868. {
  39869. 'type': 'Feature',
  39870. 'id': '6326',
  39871. 'properties': {
  39872. 'name': '果洛藏族自治州',
  39873. 'cp': [
  39874. 99.3823,
  39875. 34.0466
  39876. ],
  39877. 'childNum': 6
  39878. },
  39879. 'geometry': {
  39880. 'type': 'Polygon',
  39881. 'coordinates': ['@@ÞVŤ™ÈK@ĀlxV@„Þ@„wŎalmôLšnXÆÜ@nV‚°@œ„°WmVKŦLÆmȚԂҚUX¥l@ĢJVš@„ŽƾI@w™W°™™Ån¥›kÅÝVwôƒÈç„@lÑĊĕša„JnaÆLVw°kny°UnkÆVȍĊll¦„Vƾ@@™nUźƒÈǂIn°X„wÞKô¦VWV£„@£°ókċ±I™™am¯Va™»ČĉV¥°™@m„k„¥l@„Ċm@ašU™mwXƒ@wÆxšmĢ_„`VnÆbšKVw„@@ƒnUVğVmVVöIlŽl@@çÛmƒ£UDŽw°@VUƒ¯»m¯ƒJōĖÅLƒa@»ĉ̱`U_k`ÇçšóƒkX™lK@ƒakÝރš£WċkÝ™kxƒJݯÅw™xķxmIÅx„@k±J@ýŋš›¤UœkŽmV™°ÅÝxkwmġƒnÝVU„š¦ƒŤlmšóXk¤™UKƒç™@mVkK@klīƒ£mš¯VUbƒW¯¼ċb¯ĵam¼mVX„m@k¤ÇX‚ÇbƒUƒ„¯J¯„¯È@˜™bVXVҙ¤V¼kxݚV„@l‚V—„WxÛ¦Wš¯šmKnlŽkŽ‚šU‚@nƑUĉ„Ý@ǺۄċUĉ¥™UƒÞŏ™z±òL±Ò¯xX„±ÒLÝU@lššV¦¯‚ÇbkêÇJƒnU„šš@š„‚ÆI„xn¦‚‚@²Č脦‚è'],
  39882. 'encodeOffsets': [[
  39883. 99709,
  39884. 36130
  39885. ]]
  39886. }
  39887. },
  39888. {
  39889. 'type': 'Feature',
  39890. 'id': '6325',
  39891. 'properties': {
  39892. 'name': '海南藏族自治州',
  39893. 'cp': [
  39894. 100.3711,
  39895. 35.9418
  39896. ],
  39897. 'childNum': 5
  39898. },
  39899. 'geometry': {
  39900. 'type': 'Polygon',
  39901. 'coordinates': ['@@VxƒŽńƒš@ĊĠŽĊXÒ°UƾĕÞm°£nb@‚@LUUW„Ûº@nlÆǬšĠ£ÞV°UXb‚VȂǵ„éƒ@kWanm°@™x„z„K°¯ĠVšƒVƒkw™Lnm°kÞxÆa„¥@‚wnĉƏ@™œ_l›š_VwšmĸèŤÅČU@™˜Wn@ÑmKU™nğƒK@ƒ°¯UÿV£nmšLl™„UƒUÛé±óókkmƒnƒakV@ǰóÝXƒWəÞťIţxmm™VÛUVȂÓnWyȁĉkƒVš°WnkĊa„¥‚_œK°ÿWna@ƒmU¯wƒlÝIU¤UXó¥ÝLƒx¯WmJÇÈŹ„mV@šƽ@ƒUk¥ĉkċŽÅUml¯Vmz¯lUxÅKmbƒI™bĉĖk҃@Çèó„UxÆÞœlm¦šÆ¯ššX@x™Ž@Ž„²ÝlƒÈ™JV²klVl¯ÔlšĉƙްlUǖÞ@ššĶ¼nŽUôôŚ'],
  39902. 'encodeOffsets': [[
  39903. 101712,
  39904. 37632
  39905. ]]
  39906. }
  39907. },
  39908. {
  39909. 'type': 'Feature',
  39910. 'id': '6322',
  39911. 'properties': {
  39912. 'name': '海北藏族自治州',
  39913. 'cp': [
  39914. 100.3711,
  39915. 37.9138
  39916. ],
  39917. 'childNum': 4
  39918. },
  39919. 'geometry': {
  39920. 'type': 'Polygon',
  39921. 'coordinates': ['@@ōmġxƽUm±Lǿþġԙ@kxmWƒb¯I¯‚mIUx@bƒbŹVǎƒkĵbƒlĉI¯¥ƒUšm@ƒÆ¯È@šašóšUlƒČ»@w›œ»›wXaƒƒó°ţç݄kUƒaV¥ÅbÝw¯lmnšKlxU„™„ğU¯°ƒLƒyšw¯@mnXb‚l„@ƒêȁǶUWa¯VÝUğ¤ǫ™kÅ@mܹXƒVV@K@ma¯¤Ýnƽ˝V@„ƒ¼„ôlèk¼„¦˜xXŽlbnKšÆx@Ž™bUx@nnxWJţ¦ƒmƒ¼ñ@ް¦lUÞlÈ@ĠxÞUlxÒó„ƒl¯bmI™ŽÝVÛaÝnƒxVbkbÇwřÇKn±K™b„šƒb@V„xšLmŽÛŽŻbk„ƒVó@™šŹxó²›Wkb™@¯U¤ƒźĊ@lUX„°lÆôU„ƒlLX‚aœV°wšxUb°xÜôÈKVkÈmlwškÈKšwšK™™VUŤĉŎ»„»„Il¥na°LV»²¯Üy@w̃°ĸwlwĢw°±„_lVkš@°ƒbƒÆ¯zƒ‚„š„@l_„@̱lŚVlUaރ„LVƒnKlnȏ°IllČa˜wÞѰx„UU™@wƒVkmĠLô»„KÞýôaÞ¥ôĀÞmƁ„™‚mUƒŎV¥Èl°²°a²¥V„@@w„amm@Ñn@Æ£żƒVƒĠ£@W„¯Þƒšl@š»@Uk@'],
  39922. 'encodeOffsets': [[
  39923. 105087,
  39924. 37992
  39925. ]]
  39926. }
  39927. },
  39928. {
  39929. 'type': 'Feature',
  39930. 'id': '6323',
  39931. 'properties': {
  39932. 'name': '黄南藏族自治州',
  39933. 'cp': [
  39934. 101.5686,
  39935. 35.1178
  39936. ],
  39937. 'childNum': 4
  39938. },
  39939. 'geometry': {
  39940. 'type': 'Polygon',
  39941. 'coordinates': ['@@ôl²ôÜê„VƒVkš™KmnU¤V°@„„LmĠVšnLÈL@alb@al@n°Vš_XmWUÈamaVIn@n‚aV£œóVWƒ™U£°ašxÈ¥@™‚aĊwȹ@óša™ƒğbm@k„w@mƒaÆw@ƒ„In¯mmƒ@UkkWƒÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯š™ĢU܃X¥òý—mmX™ÝÅlmU@£™Wly™XW»Åbƒl@aI›»k@klm@UxUUƒVƒ¼¯Xƒl™aUnķ‚ƒI@x™@¯„ƒK™„ĉUU`óšlȝô@¤ƒÞJ„k°xVŽ„n@ŽmbXޝ›L`ƒ¦ĉbml¯X™ŽUŽl„ȂĊXzm‚ȁÔU‚ÜVšUnnŤwŦJɚ݄XÞW¯ô@ÈlU„b„mln'],
  39942. 'encodeOffsets': [[
  39943. 103984,
  39944. 36344
  39945. ]]
  39946. }
  39947. },
  39948. {
  39949. 'type': 'Feature',
  39950. 'id': '6321',
  39951. 'properties': {
  39952. 'name': '海东地区',
  39953. 'cp': [
  39954. 102.3706,
  39955. 36.2988
  39956. ],
  39957. 'childNum': 6
  39958. },
  39959. 'geometry': {
  39960. 'type': 'Polygon',
  39961. 'coordinates': ['@@@҄bš¤ÆI°ôU¼š°UŽnnWx™š@b¯L@lUUWbXxWl„ƨnxVUllš„XVŽUŽnL@lȀý²KVnƾ‚ĢwV»ƒ@mÞ£nÆƒÞÑmL™ƒKUaVżĕƒWVk²ƒƒÆÝ@ƒXw°@„ô™@a°wóUUmIk™™aVmÞwmknyƒ¹VÿƧnŏm£X»˜™naV±„Ýw@ašb@aƒm¯„ĉVó¦kÝWKUU@WanU™b@ôǺĉxb@šÇ¦™w¯bV¤„šUX›ôU¤bmm@UJnbÇbXVWn™`¯Umk@@bka@bÇK'],
  39962. 'encodeOffsets': [[
  39963. 104108,
  39964. 37030
  39965. ]]
  39966. }
  39967. },
  39968. {
  39969. 'type': 'Feature',
  39970. 'id': '6301',
  39971. 'properties': {
  39972. 'name': '西宁市',
  39973. 'cp': [
  39974. 101.4038,
  39975. 36.8207
  39976. ],
  39977. 'childNum': 4
  39978. },
  39979. 'geometry': {
  39980. 'type': 'Polygon',
  39981. 'coordinates': ['@@@kmKVUƒWk™VkUmwƒƧXkWwXaVV@k°K@aš™XwmmV™¯V»¯óÅJ™£ƒamŽ—X@šċVţÆķç™nUx™`kœ›`@šÅmĊx@Žƒ¦U¦„blVރŤèô¯„„Wbœx›¼œŽ@xċ¼k„™V™ô™bÇ@Ű@„™n„V°¦ĊJ„kĶa„lȍźU„a@aVwnJ°°J„anXlwš@ĢÓ'],
  39982. 'encodeOffsets': [[
  39983. 104356,
  39984. 38042
  39985. ]]
  39986. }
  39987. }
  39988. ],
  39989. 'UTF8Encoding': true
  39990. };
  39991. });define('echarts/util/mapData/geoJson/shang_hai_geo', [], function () {
  39992. return {
  39993. 'type': 'FeatureCollection',
  39994. 'features': [
  39995. {
  39996. 'type': 'Feature',
  39997. 'id': '310230',
  39998. 'properties': {
  39999. 'name': '崇明县',
  40000. 'cp': [
  40001. 121.5637,
  40002. 31.5383
  40003. ],
  40004. 'childNum': 1
  40005. },
  40006. 'geometry': {
  40007. 'type': 'Polygon',
  40008. 'coordinates': ['@@uŏu»GPIV±ÐɃŜ{\\qJmC[W\\t„¾ÕjÕp‡nα|ěÔe`²„ †nZzZ~V|B^IpUbU†{bs\\a\\OvQ’Kªs†Mň£RAhQĤ‹lA`GĂA@ĥWĝO“'],
  40009. 'encodeOffsets': [[
  40010. 124908,
  40011. 32105
  40012. ]]
  40013. }
  40014. },
  40015. {
  40016. 'type': 'Feature',
  40017. 'id': '310119',
  40018. 'properties': {
  40019. 'name': '南汇区',
  40020. 'cp': [
  40021. 121.8755,
  40022. 30.954
  40023. ],
  40024. 'childNum': 1
  40025. },
  40026. 'geometry': {
  40027. 'type': 'Polygon',
  40028. 'coordinates': ['@@`y”ĉNǕDwǏ»ƒÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF…@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~'],
  40029. 'encodeOffsets': [[
  40030. 124854,
  40031. 31907
  40032. ]]
  40033. }
  40034. },
  40035. {
  40036. 'type': 'Feature',
  40037. 'id': '310120',
  40038. 'properties': {
  40039. 'name': '奉贤区',
  40040. 'cp': [
  40041. 121.5747,
  40042. 30.8475
  40043. ],
  40044. 'childNum': 1
  40045. },
  40046. 'geometry': {
  40047. 'type': 'Polygon',
  40048. 'coordinates': ['@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\FpDBDb@FAHKFE†@dEDDdC\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKw„ÕísƝ‘åĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn'],
  40049. 'encodeOffsets': [[
  40050. 124274,
  40051. 31722
  40052. ]]
  40053. }
  40054. },
  40055. {
  40056. 'type': 'Feature',
  40057. 'id': '310115',
  40058. 'properties': {
  40059. 'name': '浦东新区',
  40060. 'cp': [
  40061. 121.6928,
  40062. 31.2561
  40063. ],
  40064. 'childNum': 1
  40065. },
  40066. 'geometry': {
  40067. 'type': 'Polygon',
  40068. 'coordinates': ['@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\Z\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP'],
  40069. 'encodeOffsets': [[
  40070. 124383,
  40071. 31915
  40072. ]]
  40073. }
  40074. },
  40075. {
  40076. 'type': 'Feature',
  40077. 'id': '310116',
  40078. 'properties': {
  40079. 'name': '金山区',
  40080. 'cp': [
  40081. 121.2657,
  40082. 30.8112
  40083. ],
  40084. 'childNum': 1
  40085. },
  40086. 'geometry': {
  40087. 'type': 'Polygon',
  40088. 'coordinates': ['@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\BrJ\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@ƒA±DʼnXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH'],
  40089. 'encodeOffsets': [[
  40090. 123901,
  40091. 31695
  40092. ]]
  40093. }
  40094. },
  40095. {
  40096. 'type': 'Feature',
  40097. 'id': '310118',
  40098. 'properties': {
  40099. 'name': '青浦区',
  40100. 'cp': [
  40101. 121.1751,
  40102. 31.1909
  40103. ],
  40104. 'childNum': 1
  40105. },
  40106. 'geometry': {
  40107. 'type': 'Polygon',
  40108. 'coordinates': ['@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RC€PbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD'],
  40109. 'encodeOffsets': [[
  40110. 124061,
  40111. 32028
  40112. ]]
  40113. }
  40114. },
  40115. {
  40116. 'type': 'Feature',
  40117. 'id': '310117',
  40118. 'properties': {
  40119. 'name': '松江区',
  40120. 'cp': [
  40121. 121.1984,
  40122. 31.0268
  40123. ],
  40124. 'childNum': 1
  40125. },
  40126. 'geometry': {
  40127. 'type': 'Polygon',
  40128. 'coordinates': ['@@@DLDFRN@FNELPBDKHB@INK\\BBJF@ADP@RFCRHA@nJ@B\\[\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@'],
  40129. 'encodeOffsets': [[
  40130. 123933,
  40131. 31687
  40132. ]]
  40133. }
  40134. },
  40135. {
  40136. 'type': 'Feature',
  40137. 'id': '310114',
  40138. 'properties': {
  40139. 'name': '嘉定区',
  40140. 'cp': [
  40141. 121.2437,
  40142. 31.3625
  40143. ],
  40144. 'childNum': 1
  40145. },
  40146. 'geometry': {
  40147. 'type': 'Polygon',
  40148. 'coordinates': ['@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\JJFBDEH[DEFDH\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN'],
  40149. 'encodeOffsets': [[
  40150. 124213,
  40151. 32254
  40152. ]]
  40153. }
  40154. },
  40155. {
  40156. 'type': 'Feature',
  40157. 'id': '310113',
  40158. 'properties': {
  40159. 'name': '宝山区',
  40160. 'cp': [
  40161. 121.4346,
  40162. 31.4051
  40163. ],
  40164. 'childNum': 1
  40165. },
  40166. 'geometry': {
  40167. 'type': 'Polygon',
  40168. 'coordinates': ['@@ˆmÖoÖiƒ½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢ˆ'],
  40169. 'encodeOffsets': [[
  40170. 124300,
  40171. 32302
  40172. ]]
  40173. }
  40174. },
  40175. {
  40176. 'type': 'Feature',
  40177. 'id': '310112',
  40178. 'properties': {
  40179. 'name': '闵行区',
  40180. 'cp': [
  40181. 121.4992,
  40182. 31.0838
  40183. ],
  40184. 'childNum': 1
  40185. },
  40186. 'geometry': {
  40187. 'type': 'Polygon',
  40188. 'coordinates': ['@@T@@ELE\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFžLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ'],
  40189. 'encodeOffsets': [[
  40190. 124165,
  40191. 32010
  40192. ]]
  40193. }
  40194. },
  40195. {
  40196. 'type': 'Feature',
  40197. 'id': '310110',
  40198. 'properties': {
  40199. 'name': '杨浦区',
  40200. 'cp': [
  40201. 121.528,
  40202. 31.2966
  40203. ],
  40204. 'childNum': 1
  40205. },
  40206. 'geometry': {
  40207. 'type': 'Polygon',
  40208. 'coordinates': ['@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R'],
  40209. 'encodeOffsets': [[
  40210. 124402,
  40211. 32064
  40212. ]]
  40213. }
  40214. },
  40215. {
  40216. 'type': 'Feature',
  40217. 'id': '310107',
  40218. 'properties': {
  40219. 'name': '普陀区',
  40220. 'cp': [
  40221. 121.3879,
  40222. 31.2602
  40223. ],
  40224. 'childNum': 1
  40225. },
  40226. 'geometry': {
  40227. 'type': 'Polygon',
  40228. 'coordinates': ['@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH'],
  40229. 'encodeOffsets': [[
  40230. 124248,
  40231. 32045
  40232. ]]
  40233. }
  40234. },
  40235. {
  40236. 'type': 'Feature',
  40237. 'id': '310104',
  40238. 'properties': {
  40239. 'name': '徐汇区',
  40240. 'cp': [
  40241. 121.4333,
  40242. 31.1607
  40243. ],
  40244. 'childNum': 1
  40245. },
  40246. 'geometry': {
  40247. 'type': 'Polygon',
  40248. 'coordinates': ['@@RADL\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\QjOCERFBEHF@@HjJBJG@@J'],
  40249. 'encodeOffsets': [[
  40250. 124327,
  40251. 31941
  40252. ]]
  40253. }
  40254. },
  40255. {
  40256. 'type': 'Feature',
  40257. 'id': '310105',
  40258. 'properties': {
  40259. 'name': '长宁区',
  40260. 'cp': [
  40261. 121.3852,
  40262. 31.2115
  40263. ],
  40264. 'childNum': 1
  40265. },
  40266. 'geometry': {
  40267. 'type': 'Polygon',
  40268. 'coordinates': ['@@HFFB@HF@DCAELENSJADCNG\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB'],
  40269. 'encodeOffsets': [[
  40270. 124250,
  40271. 31987
  40272. ]]
  40273. }
  40274. },
  40275. {
  40276. 'type': 'Feature',
  40277. 'id': '310108',
  40278. 'properties': {
  40279. 'name': '闸北区',
  40280. 'cp': [
  40281. 121.4511,
  40282. 31.2794
  40283. ],
  40284. 'childNum': 1
  40285. },
  40286. 'geometry': {
  40287. 'type': 'Polygon',
  40288. 'coordinates': ['@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\@DG\\JJADI'],
  40289. 'encodeOffsets': [[
  40290. 124385,
  40291. 32068
  40292. ]]
  40293. }
  40294. },
  40295. {
  40296. 'type': 'Feature',
  40297. 'id': '310109',
  40298. 'properties': {
  40299. 'name': '虹口区',
  40300. 'cp': [
  40301. 121.4882,
  40302. 31.2788
  40303. ],
  40304. 'childNum': 1
  40305. },
  40306. 'geometry': {
  40307. 'type': 'Polygon',
  40308. 'coordinates': ['@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT'],
  40309. 'encodeOffsets': [[
  40310. 124385,
  40311. 32068
  40312. ]]
  40313. }
  40314. },
  40315. {
  40316. 'type': 'Feature',
  40317. 'id': '310101',
  40318. 'properties': {
  40319. 'name': '黄浦区',
  40320. 'cp': [
  40321. 121.4868,
  40322. 31.219
  40323. ],
  40324. 'childNum': 1
  40325. },
  40326. 'geometry': {
  40327. 'type': 'Polygon',
  40328. 'coordinates': ['@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV'],
  40329. 'encodeOffsets': [[
  40330. 124379,
  40331. 31992
  40332. ]]
  40333. }
  40334. },
  40335. {
  40336. 'type': 'Feature',
  40337. 'id': '310103',
  40338. 'properties': {
  40339. 'name': '卢湾区',
  40340. 'cp': [
  40341. 121.4758,
  40342. 31.2074
  40343. ],
  40344. 'childNum': 1
  40345. },
  40346. 'geometry': {
  40347. 'type': 'Polygon',
  40348. 'coordinates': ['@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB'],
  40349. 'encodeOffsets': [[
  40350. 124385,
  40351. 31974
  40352. ]]
  40353. }
  40354. },
  40355. {
  40356. 'type': 'Feature',
  40357. 'id': '310106',
  40358. 'properties': {
  40359. 'name': '静安区',
  40360. 'cp': [
  40361. 121.4484,
  40362. 31.2286
  40363. ],
  40364. 'childNum': 1
  40365. },
  40366. 'geometry': {
  40367. 'type': 'Polygon',
  40368. 'coordinates': ['@@DLLB\\NPGLFHUDMYABEeKEVMAAJ'],
  40369. 'encodeOffsets': [[
  40370. 124343,
  40371. 31979
  40372. ]]
  40373. }
  40374. }
  40375. ],
  40376. 'UTF8Encoding': true
  40377. };
  40378. });define('echarts/util/mapData/geoJson/shan_dong_geo', [], function () {
  40379. return {
  40380. 'type': 'FeatureCollection',
  40381. 'features': [
  40382. {
  40383. 'type': 'Feature',
  40384. 'id': '3706',
  40385. 'properties': {
  40386. 'name': '烟台市',
  40387. 'cp': [
  40388. 120.7397,
  40389. 37.5128
  40390. ],
  40391. 'childNum': 9
  40392. },
  40393. 'geometry': {
  40394. 'type': 'Polygon',
  40395. 'coordinates': ['@@ŤLšLllVń²è°xżĢĠÆl҄šŤbœ„V¤ĊXnŽlĢVĊ„Òš„ȰĊŰÞè˜L„±@џn»VUźċ²»ÆkôVɆkĊѲkŤVVwUUVmUaƒ@KkU@ƒmUmmk@UwUkmW@UVIXa@ƒmw@a™KULƒaƒx@Uk@UbWU@yULmK¯@kXƒVUwm@@JUUknWKUVƒLUbU@™wWykIƒa@w@mUI@ašUVynIWa„k„@@W„bl@@knmƒK@wnIl™°Kna@V¥ğ@ġUķ»™¥@UōJƒX¯¤k@™wmI¯‚k@mwƒak@@šlX@bUJ@VƒbknWxkLkxlŽšLVlkLmŽšb@bU@ƒbU@VbU`Vb@n„L@Žmb—U@˜VnUVmnU@mm™@kIUWVIUK›VkkUJUnmL@VmLUaVWaXamU@™™U@KUUmVƒU—JƒU™VÇwğn™mƒ@mXĉV@l¯xnô'],
  40396. 'encodeOffsets': [[
  40397. 122446,
  40398. 38042
  40399. ]]
  40400. }
  40401. },
  40402. {
  40403. 'type': 'Feature',
  40404. 'id': '3713',
  40405. 'properties': {
  40406. 'name': '临沂市',
  40407. 'cp': [
  40408. 118.3118,
  40409. 35.2936
  40410. ],
  40411. 'childNum': 10
  40412. },
  40413. 'geometry': {
  40414. 'type': 'Polygon',
  40415. 'coordinates': ['@@˜bXlƒl@zlV@lXXmŽkbVVlš„U@Vn@@Vmb@XšKšVX„WJ@XXl@„‚ŽÈbVLšUl`„@XXV@VVUxVbUxVbš¦„@‚WnXVJ@bnVUzl@„°Æx„U„KlU@mUUnUlUVWVUnVV@XX°V@Všll@Vk„aXVl@Ux@bmbXLlKlb@b@bUJn@@„„b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@™Xw‚KVxnLšU°@naV@UWUkWƒULmV—wÝKUUla@aó_@mƒK@aUU@ƒWUkwVm@aVI°W„@@IUw@a±¯@¥kUVUm@a‚wkw™@ƒK@kVKk@maXalI@alL„WXblaVLVU„V@LnKš@„l@w˜aXašLlnUl„LšmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@ݯÅ@ƒ™@naWƒ™IVW@IkK@klKn@naWIƒmk@ƒaƒbkKkLWn™WkLWmk_ƒ@UaVƒUKmLUw@mn£WwUmU™ƒaóV@UkUm@UKULUwmJUX@WW@XҙzVblJXŽWXk@UVWK—X‚¤UL@xU@ƒ@ƒVUaU@@XmVkLmWkXUyÝLmKXnVŽ@n@l™x@bWLnVVn™`knULmxUl„„WLXŽVb@VƒK@z¯x¯¼Wx™KUn@bk@ƒlƒVVVz'],
  40416. 'encodeOffsets': [[
  40417. 120241,
  40418. 36119
  40419. ]]
  40420. }
  40421. },
  40422. {
  40423. 'type': 'Feature',
  40424. 'id': '3707',
  40425. 'properties': {
  40426. 'name': '潍坊市',
  40427. 'cp': [
  40428. 119.0918,
  40429. 36.524
  40430. ],
  40431. 'childNum': 9
  40432. },
  40433. 'geometry': {
  40434. 'type': 'Polygon',
  40435. 'coordinates': ['@@l@@UšK@Ž@L@bX@@VlL@JƒLUVnX@`ÜXn`V²mJ@bU@@n„b@l°xnnĸVƚ°@„ƒĊ£Þ@lWnÑnkʶJmó°w@kk»V@»ƒ¥k@V@kw@wVm„a˜Å„mšaô£ŎƒXI@mln„Kla@mV_UKƒ@kUkw@alW™IU»™mƒ—@WUIl±UUÅU›bkJƒ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@ƒUIƒJUkmJ™ƒVkU@a„ƒWK—ImVƒ@UxmL@bX`WXU@U`ÇkUak@@°UblXk‚mLUKmL@VULóƒƒVk@@Vlbn@Ub@ċaUJUbƒIUlVLUVVbVKX„VlVXU@mb¯@™VmKUwLWx@šUb@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@mƒa@ƒm@UUU@U¦lJUXƒVƒmkb@nm„XVWŽkb™IVxUV@VUbWLXVƒLW`Ux@nk@Vn@x@VkJ@œV`mXkŽ@V„xV@lVššI@VULš˜VU„IV`°bVXXx„V@VWVnL@xV„Ub'],
  40436. 'encodeOffsets': [[
  40437. 121332,
  40438. 37840
  40439. ]]
  40440. }
  40441. },
  40442. {
  40443. 'type': 'Feature',
  40444. 'id': '3702',
  40445. 'properties': {
  40446. 'name': '青岛市',
  40447. 'cp': [
  40448. 120.4651,
  40449. 36.3373
  40450. ],
  40451. 'childNum': 6
  40452. },
  40453. 'geometry': {
  40454. 'type': 'Polygon',
  40455. 'coordinates': ['@@„@nU˜JXLƒ„@blVU‚š„nIVl„IVJ@„UxWLk¤@V@nlbXbWJÅnUJVbVL@x@b„ŽlIœaÆVVVk²VJ@X„˜šnV¼šJkX@blxlV„@VLU`@nkbƒLkm@nWJō„ó¤™bƒn—ƃbUn@xlxU@l@„¦@¼UŽl¼ĊUnW„@šnĠmÈxšU„V˜I„VnUVV@LšV@šnVWbXb‚UVbnK@UnKVmVIllœUVLUJVXlJš@nnV@nmVUUm@—˜Vna@ƒK@mUaV_UaV@„aV@@a™anlKUk™KklwlKXwlm„a@UVI@akW@™l@„bnxl@°nJšxl@°£„WŎIUÑn»lašmô¹Ŏ¥VaUUkƒmkġWɱIUUŹ`›@kk@ĉƨřV¥_Ç@™Ĭƒ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕ™kğmó°ƒbW@UKkLUaƒVmz@V@ŽUxVn'],
  40456. 'encodeOffsets': [[
  40457. 122389,
  40458. 36580
  40459. ]]
  40460. }
  40461. },
  40462. {
  40463. 'type': 'Feature',
  40464. 'id': '3717',
  40465. 'properties': {
  40466. 'name': '菏泽市',
  40467. 'cp': [
  40468. 115.6201,
  40469. 35.2057
  40470. ],
  40471. 'childNum': 9
  40472. },
  40473. 'geometry': {
  40474. 'type': 'Polygon',
  40475. 'coordinates': ['@@@¥šIVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIVƒ@wnƒmwmKXaWaXI@UV@Vy²blkVKkam™U@kb@Um@VmUkmƒKmkXKWwkU@Ulƒ@UnK@UVUUm‚KXwšUVL„w‚K„U„@@Wl@@wUkV¥—@@I@W@_V@VWUw@UUa@aƒaWa—@@_mKUw™l¯amzmV—@WK™nU@kƒWLķaUKbÝVmV@UWÇbÛ@ƒX™°UbW@XŽm„Vlk²UJUbmLÇxÅWUzl‚¯Ll„@VkK™XUbWJ@bU@¯@™ƒkbƒLmKka™„@l™_WšXºVbUz@J‚n²V@¤lX„Ž„nV°šLn`WbXLôVlKVUšxXn˜lXLlU@bVV@„XJWLUVnVV@„„@n‚l„°nn‚V„KÈbVXÆJU°VnXV„kV@@xVL„@šWlb'],
  40476. 'encodeOffsets': [[
  40477. 118654,
  40478. 36726
  40479. ]]
  40480. }
  40481. },
  40482. {
  40483. 'type': 'Feature',
  40484. 'id': '3708',
  40485. 'properties': {
  40486. 'name': '济宁市',
  40487. 'cp': [
  40488. 116.8286,
  40489. 35.3375
  40490. ],
  40491. 'childNum': 11
  40492. },
  40493. 'geometry': {
  40494. 'type': 'Polygon',
  40495. 'coordinates': ['@@nam_nKlVLXa„Il`š_@KVVXI@m@w‚ƒ„@@k@Kšnô@n`VbV@@L„L@KVVn@VX@‚VL„Jl„š@VUUƒU@Uam@Uk„wšKWaXamkJmIUVUÈblašUnV@kVKl@@lXL°kVJ@VÈnVJUX@V‚LXl@xVLnU‚@VK„V@a„IUaV@„bĊU„x„K‚kVJXUlV„ƒ„UVašI@WUI@KlUnw„mWk@WXIWƒ™U™L@Wna@Um@@UƒVk™UUlanWW@kkU@y„kWk—aWVUlÝbUU@kƒJUIU@@ƒ™JmaókƒLKǃUUkKWLk@WbkUUaƒbmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVۂm„aklKȯlLVUX@lK@aX@@kV@VmV@VwnJV_UWUwƒX™am@kW@wVUkKVIUUVmU@UV@IVK@aUL@aƒV@Lm„UKmx@ށômLkUWJ@šnXmlUxUL@Vkn›VUšU„@V™L™`Ub±LkV@kUKÇbÛ@ƒU™Wó_mJƒ@Wk@@Xƒ@ƒVLƒxUK™VWxLVnUV@VmL@Vk„@VlVXxWLnl‚Ln„VlUnn@@VlaV@nšlbULkl±aUzU@@VWJXbWbnLnxm„@xU„mJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VݼÇnUV™J@¦nnƒlnVlL@„Þb°KVV'],
  40496. 'encodeOffsets': [[
  40497. 118834,
  40498. 36844
  40499. ]]
  40500. }
  40501. },
  40502. {
  40503. 'type': 'Feature',
  40504. 'id': '3714',
  40505. 'properties': {
  40506. 'name': '德州市',
  40507. 'cp': [
  40508. 116.6858,
  40509. 37.2107
  40510. ],
  40511. 'childNum': 11
  40512. },
  40513. 'geometry': {
  40514. 'type': 'Polygon',
  40515. 'coordinates': ['@@„¤@VmbVXnVVbVJššX@Žll@z„lVInl@„@bVxUbĠ‚l@Èbla„IšxXVWb@L™@n‚ULWVXXšWWLnL@`@LUVVL@lVn„JšU@UUk‚a„™nš‚Vôô„b°¼V‚ސXš˜‚œIÜbČa˜bôW„XÞWÈzÆmnLVJ°ÈnlV²lbnW@™@UƒUV™šmnwmkkKWƒkla@mVIUKUa™aUwmn™JU@@amIk@@bVlkX@mmUklUUƒƒa@_UaUUƒV@wƒw™WkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wk™LWa@UUm@@wnmU™wla@anKn_@alK@ݙ_ƒ@@WUUUmlkaƒIƒyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWV—kW¯U@VƒL@b¯b@l±¦@šVV@lUbV„@škxVnUšl¼XV@b@lV@nIWxnbƒ‚™@UU™LƒxÅxm¯ƒaUƒ™wU@mUÅVÝKULm@bmKUXó@'],
  40516. 'encodeOffsets': [[
  40517. 118542,
  40518. 37801
  40519. ]]
  40520. }
  40521. },
  40522. {
  40523. 'type': 'Feature',
  40524. 'id': '3716',
  40525. 'properties': {
  40526. 'name': '滨州市',
  40527. 'cp': [
  40528. 117.8174,
  40529. 37.4963
  40530. ],
  40531. 'childNum': 7
  40532. },
  40533. 'geometry': {
  40534. 'type': 'Polygon',
  40535. 'coordinates': ['@@Vb@`„bV„kVlnV@nlWUk@al@nJ@bV@šInmVxšbVbVLUJ@nkb‚lX„lLnlmx™nUš„V@V@šmXn˜lbĸ@nnVx‚b@lnXV@UJ@nVxšxnxVbÆVn¯ƒĕ‚@@wÈçUÇlķVIœb‚@„Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@Kš@XUƒƒUkmUUalKXala@U@kkWlkÈl@kšV„mVIVmU_‚a„ƒƒwnwVW@wƒwUƒ@wU£ƒwkJWIyUI±bk‚VUJ@nmV™Ukl„Xmx@lnbW„kVƒUkLWŽƒxkKUUmUkb™J±—LÇxUKmkUmkkW™™a„mUaVkšJÆ_²KĠ@U„W@w„U‚¥nUWwK@aÝUkÅVaVK@akLWƒƒƒ¯I@bnbVx¯JW„ñšWbUL@šƒŽnV@VmbkUUV@IÇak@@bWak@WJUœJWL@bXV@„‚@„V„Jlb@zUlUŽUImšnbV‚mz@°UV@V™bV@@V@L@xLmKUnmJVX„J@VkLW@UVUL@b'],
  40536. 'encodeOffsets': [[
  40537. 120083,
  40538. 38442
  40539. ]]
  40540. }
  40541. },
  40542. {
  40543. 'type': 'Feature',
  40544. 'id': '3715',
  40545. 'properties': {
  40546. 'name': '聊城市',
  40547. 'cp': [
  40548. 115.9167,
  40549. 36.4032
  40550. ],
  40551. 'childNum': 8
  40552. },
  40553. 'geometry': {
  40554. 'type': 'Polygon',
  40555. 'coordinates': ['@@ô@VWnL‚an@VKÞLÆUnVV@šxV„„bn°Æw„wšKVVš@„maXwmJU@@k@aWUk»V™Umlw@™UƒVa@kUU@™²¥@k°a@a„K@U›ƒU@mmm@ów—ѱ¥¯@@w™Kmw—I›¥kU¯UmakJmIUaƒVkKUkm@VUUa™Uƒ@UaƒKUK¯@™w™UVŽUIUKVw™k™¥™wƒbVŽ@xn„@lWnXxlL@`„XlJX¦l°XxW¦@¦Ul™n@Ž™@@Um@@VXVmx@¯bllUnUJ@VULVn@b„xV‚VL@b„„VlnVVblV„ÈnVlIVJœLô„lJ@xl²„'],
  40556. 'encodeOffsets': [[
  40557. 118542,
  40558. 37801
  40559. ]]
  40560. }
  40561. },
  40562. {
  40563. 'type': 'Feature',
  40564. 'id': '3705',
  40565. 'properties': {
  40566. 'name': '东营市',
  40567. 'cp': [
  40568. 118.7073,
  40569. 37.5513
  40570. ],
  40571. 'childNum': 5
  40572. },
  40573. 'geometry': {
  40574. 'type': 'Polygon',
  40575. 'coordinates': ['@@ͬUǪlô@°Uœw°ōĠ¯š»Ģ炻XÇ@w™wƑa™ÇƒkwVƑ¯@řķUmm¯w@kƒa@mV@@anIU±m_ÛW@_mWVU„K@IkK@UW@@a@K@™L@Vk@±U@UV@lm@mUU@kLm„„xV¤@xV„„x@xUXmx„xƒ„bV`UnUJƒn™U@lÇkkllX@l@VkbWbkLVbnVVl„„WV™@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlƒÈ@›aUJkĸVÈÇè@x'],
  40576. 'encodeOffsets': [[
  40577. 121005,
  40578. 39066
  40579. ]]
  40580. }
  40581. },
  40582. {
  40583. 'type': 'Feature',
  40584. 'id': '3701',
  40585. 'properties': {
  40586. 'name': '济南市',
  40587. 'cp': [
  40588. 117.1582,
  40589. 36.8701
  40590. ],
  40591. 'childNum': 5
  40592. },
  40593. 'geometry': {
  40594. 'type': 'Polygon',
  40595. 'coordinates': ['@@²¦˜Òôxn@nn‚@V‚œ„°VlXU˜UX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@„z„JlbkŽVnVV@X„@š`@ÞkL@bm`mL@bkbšxnVm@xn@VV‚@XbšKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWšX„x@x„UVV@aVKVUX@lK@UƒIUWnIVmnL‚K@w@K@UU@ša@UVU@¯nyUman™VJVVk@ykaƒIƒU@@ƒWU@aXK‚IV›XIl@Xb@al@Èb@JVUlVna@UmU„@™VKXaò™Xƒ°IUwma@aU@UU@wVW@фw@a™I±`kbƒUkw™UmJ@UkmÇUUkmKknUVƒ@mJUkaWkƒa@KmKkUƒLmyXa¯_@WmImmbƒLmUkVUbUVƒJ™bƒUkkWJkUƒl™IUm™k™Lƒ›„lK@knaVmkI@mWaƒLUK™UU@@VmLUVLWK@UUUƒWUkkVmx@„Vl™¦'],
  40596. 'encodeOffsets': [[
  40597. 119014,
  40598. 37041
  40599. ]]
  40600. }
  40601. },
  40602. {
  40603. 'type': 'Feature',
  40604. 'id': '3709',
  40605. 'properties': {
  40606. 'name': '泰安市',
  40607. 'cp': [
  40608. 117.0264,
  40609. 36.0516
  40610. ],
  40611. 'childNum': 5
  40612. },
  40613. 'geometry': {
  40614. 'type': 'Polygon',
  40615. 'coordinates': ['@@n¼šŽW„nxšL@x°@š¥Uk@ƒnwlUVl„XVV@VXL‚KVUnK@UV@šVVL„KXb@nlJUnmb@lkLƒ‚„œšKšlVnšJ„klVXIll„Vša„IVUValUnV„K‚annnJ@X°`Wbnz„KlVnL‚Ž@L„bXl‚bVlnI„@VUU@UmVƒ@U@Uš¥@VmV@@_Ua@m°@@ƒ„kmUUm@UVmn@nX‚@@a„anJVUVL„mlIVJn@nkVLVa@KVmVLXVVLš@@U°bn@VaV@@K@aVkœbWaXUVymU@aUImWXƒ@™¥UaVwUaVwUUU@WWƒ@k_™VUKÇa@ƒƒnmxkV@LVJ@X™JUbƒVƒ„kUWVUIlƒLƒwĉVƒaU@VbƒJ@bƒUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmU™VkbÇaUVVnJlIn‚WbXb™LƒxVln@VbV@V„UV™@kƒƒIUK@UWm@UU@LƒK@KU@Uam_ó@™m@L@lƒ@„@x@nWJUU@L™`k_ƒJWbUKkmLn`mb'],
  40616. 'encodeOffsets': [[
  40617. 118834,
  40618. 36844
  40619. ]]
  40620. }
  40621. },
  40622. {
  40623. 'type': 'Feature',
  40624. 'id': '3710',
  40625. 'properties': {
  40626. 'name': '威海市',
  40627. 'cp': [
  40628. 121.9482,
  40629. 37.1393
  40630. ],
  40631. 'childNum': 4
  40632. },
  40633. 'geometry': {
  40634. 'type': 'Polygon',
  40635. 'coordinates': ['@@VbUnVVUxĊ¼š¼ô@Þф¯‚WǬLŎUÆW„¹Uǃō¯ÑƒÝkţ™™ţóġ™óL™ł̥U™wm¥kÝmkkKóbÝ@U¦@‚mb¯LkšmJ@x„Lmn@lk@ƒa@Xƒ@ƒlXbmJUz™V@bVJ@n@x„blJXzšxV@Va„KVUXLlmVV@In@Vx„UlW°@nLVK@zXVVal@@V„w„bVKšL@bnx@„WbUJ@VnXVlVxl@nnnV@„lV@L„‚'],
  40636. 'encodeOffsets': [[
  40637. 124842,
  40638. 38312
  40639. ]]
  40640. }
  40641. },
  40642. {
  40643. 'type': 'Feature',
  40644. 'id': '3711',
  40645. 'properties': {
  40646. 'name': '日照市',
  40647. 'cp': [
  40648. 119.2786,
  40649. 35.5023
  40650. ],
  40651. 'childNum': 3
  40652. },
  40653. 'geometry': {
  40654. 'type': 'Polygon',
  40655. 'coordinates': ['@@UaVUUKVk„JVaVIČb@Vam@ka@Ul@„Uô„VK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@Uny„UVblKVLX@„aô¯ó¥mÛĊÿÈ¥š™Þ¹lUīƒ¯Kĉ¼ʟbÇV™U™ŽUŽ™XmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImŽU@™nƒKVkkm™KWb—b@xƒk™@mL@KƒUUVUKkbWaƒXkK@bkJWbnbl@UL@l„Lš@lxx@b‚nUVlV@¦²°@bVx@Jƒ@¯XUJ@bUnlxVŽ„X@‚VV@b„L@nô`@bkbVVÞL˜xnU'],
  40656. 'encodeOffsets': [[
  40657. 121883,
  40658. 36895
  40659. ]]
  40660. }
  40661. },
  40662. {
  40663. 'type': 'Feature',
  40664. 'id': '3703',
  40665. 'properties': {
  40666. 'name': '淄博市',
  40667. 'cp': [
  40668. 118.0371,
  40669. 36.6064
  40670. ],
  40671. 'childNum': 4
  40672. },
  40673. 'geometry': {
  40674. 'type': 'Polygon',
  40675. 'coordinates': ['@@nƒlKV@nVn@@kVU‚@²VVaUƒ@wmKXU@UƒUWwUW¯aU_ƒJUV™—VK@U™JU™@kUƒw@UlnWU_@›lI@U@wUml@@mVwX_„KWUXKVa@UVUUwšJlaXWUnƒ@mla„n„UVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUƒbUlk@™k@U¯UWWU@mUUVUXkVmVVV@nkVƒLƒVÅwƒ¯k@WVXb›aUl@bV@@b@xkVVXVxkJ@nk@@ŽVLUlVb‚VXUVVUzV‚™LVbUbV„VWVkLmškJ@n±@UxU„VVkV@bƒx@ÒUX@xVVV@°J„„X„lK@bULUblÆÞV@b‚LXxmV¦ƒV@xƒXVŽğ@±LÅ`™IUlVbƒnšbXšllVnnlVLÈw˜K²ŽšIlanVVVlL„wXlK„VlUXƒma@knwƒWlkšVnU@mVIUl²aVJ‚zXJlI'],
  40676. 'encodeOffsets': [[
  40677. 121129,
  40678. 37891
  40679. ]]
  40680. }
  40681. },
  40682. {
  40683. 'type': 'Feature',
  40684. 'id': '3704',
  40685. 'properties': {
  40686. 'name': '枣庄市',
  40687. 'cp': [
  40688. 117.323,
  40689. 34.8926
  40690. ],
  40691. 'childNum': 2
  40692. },
  40693. 'geometry': {
  40694. 'type': 'Polygon',
  40695. 'coordinates': ['@@‚yUU„U„kl@@aVmšLXw°»°w@y„L@UUaWXKƒƒVknwVKlmš_UmmUXK@ašw@k@mUWmUL@ƒ@™@£@KƒbÝV@akw™aULmƒƒbUK™LUU@lm@—°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKǰkLlŽƒbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nL„aVblVXal@XKlLVVȄ‚L„KôlnbšI@„V@VJ„I@lVVÞaVkXU'],
  40696. 'encodeOffsets': [[
  40697. 120241,
  40698. 36119
  40699. ]]
  40700. }
  40701. },
  40702. {
  40703. 'type': 'Feature',
  40704. 'id': '3712',
  40705. 'properties': {
  40706. 'name': '莱芜市',
  40707. 'cp': [
  40708. 117.6526,
  40709. 36.2714
  40710. ],
  40711. 'childNum': 1
  40712. },
  40713. 'geometry': {
  40714. 'type': 'Polygon',
  40715. 'coordinates': ['@@lmnLVlÈVln@VnIšVlx„Vla²_šJlUUUVƒVw²@@mlIn™lKXU‚UUƒVaUašKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V™@UKWUUKUn@LUbUKmlm@UIkJƒnUKUVmIƒb@b@mWm@Un@VVnnVƒl@„¯@@nVb@`U@Un@Ž™¦@V@VU„VnV@'],
  40716. 'encodeOffsets': [[
  40717. 120173,
  40718. 37334
  40719. ]]
  40720. }
  40721. }
  40722. ],
  40723. 'UTF8Encoding': true
  40724. };
  40725. });define('echarts/util/mapData/geoJson/shan_xi_1_geo', [], function () {
  40726. return {
  40727. 'type': 'FeatureCollection',
  40728. 'features': [
  40729. {
  40730. 'type': 'Feature',
  40731. 'id': '6108',
  40732. 'properties': {
  40733. 'name': '榆林市',
  40734. 'cp': [
  40735. 109.8743,
  40736. 38.205
  40737. ],
  40738. 'childNum': 12
  40739. },
  40740. 'geometry': {
  40741. 'type': 'Polygon',
  40742. 'coordinates': ['@@™ýVƒnIW»ƒW@»kUÇL—݃U¯¥ÇIUWWїUWwX¯mƒ@»n@ÜÈķô™@a±kȱƒw„ÑmwçċmU»ÆkkVyIm™ĉÿ@ƒÝ¹ƒWnwÇVš™Åaƒzmmĉ¦ó™kVmx™xU¼VškVm_UlVlk„°IV‚kmJa›¦k™™LmmV@XmKnšlUô›VXbƒbƒ@UaÇLğܙ™Åwƒ£mKnmċwÅ@UkƒbmaVƒƒƒn@m¯aU™Jm_k˜@kWXyl@@kÅamw™LU™Þ™ƒ™mWÅzUKƒš™Uk±@™b@nnK‚bX¤mzVšŽVxÇn„‚¯„@ÒknWƒƒVUbkķÈÑWkk@Va™™U@„mUkbƒÝÅ@Ý¥ÇbkĬ™XV`kLǍVmalUUa™nV±nwmkƒJ@Inƒ°KVw¯UnÅ@¥™ƒ™U±bUU˜±œmWbÛKWnUm`UƒVK@bmnœm‚Èż@V„L@xƒxmš„Ť°nŽ@VmK™²VlšlKk„ô@„êÜV@VXLlmš¦UššV°Ș¯²ÿ@¥š@ƁĊ˜²IšmĶnnb°b„KVƒĸLl„Þ@UȮš™Ü°IVƒÞÝސlŽœx@ŽķĀWŽ„Ux„èƐ@š°ŽXnšlĊ˰m„nƒšV„²V°ÒƦ„aބ„˜@zll@bÞšlš¼nKĊ¼óȂb²±šIǪÒ¯ĖV@„lxnVlk„JlaXwŌĉ„„@VnŽššlÆĕ„UÆLœèŌŤôxȚlUœ@šxlaUċĕXm„IWmnkšVVƒ„VW_@aÈWUUmk@ƒ¯çVm»™±W¯n¥V™mkXw±ÇVwƒ'],
  40743. 'encodeOffsets': [[
  40744. 113592,
  40745. 39645
  40746. ]]
  40747. }
  40748. },
  40749. {
  40750. 'type': 'Feature',
  40751. 'id': '6106',
  40752. 'properties': {
  40753. 'name': '延安市',
  40754. 'cp': [
  40755. 109.1052,
  40756. 36.4252
  40757. ],
  40758. 'childNum': 13
  40759. },
  40760. 'geometry': {
  40761. 'type': 'Polygon',
  40762. 'coordinates': ['@@@kkÇmIšmUwVkUƒƒU²WmšVkm@m`mIĢĕUƒVa@™mXƒƒÿVVkyUýšĕ@l_UmnƒW„KVkţ™™¥™aƒwğ@™@aôƒ„ƒWa„kUmƒa¯¯™a±£kx™mmxUwÝ@xmU™b¯K™wó„Ý@kmm¹Ub@lklVbmnnVUV@x›UknƧJUX@ŽƒLÇWkw™LķƧÅwWJk„ƒLkþĉxWz™JUnǚkš@Ɛk¼ÜÔÈKšè@°lșÆk¦l„n@l¼@l¯L™°UU™Vǰƒ¹—`m¼mXk‚™bUaƒV@U¯x@¦™Ç™„UUmlmUVm„nnmlkw™@@šƒ¦Å‚ÇLmx¯Iklš„@¦mưVUx¯Lm„@J„InlmxU²šmVbkV‚bUnȎlKU_šWlīÈaÞ¦Æ@„ÞlanV@ƒšVšUbl@XlÇÒĸlŽVa„UX„lm@ѰƒƒÈmUw‚U™nyW£amL@mša²@lšV„™VLÆynX„šÝšVššKnxÆb@lk@WzXŽ@ll—n`šIV‚°b@n„m„„‚Unb„aVlÆ@ČxmnnL„¤ÆxššĠÛÈKVb„@„aWaœU‚ókVm™nL@W‚UnnšKlšœ¥‚bnIlU¯JlƒUkVkn`lUU™V»šwnwlUôšĊ¥nn„yÆb'],
  40763. 'encodeOffsets': [[
  40764. 113074,
  40765. 37862
  40766. ]]
  40767. }
  40768. },
  40769. {
  40770. 'type': 'Feature',
  40771. 'id': '6107',
  40772. 'properties': {
  40773. 'name': '汉中市',
  40774. 'cp': [
  40775. 106.886,
  40776. 33.0139
  40777. ],
  40778. 'childNum': 11
  40779. },
  40780. 'geometry': {
  40781. 'type': 'Polygon',
  40782. 'coordinates': ['@@lKnb@n„lWb°bkxĸwVb@ł„nlŽ„ƒĊ¥šL@XŽl™ÈƒVblÈK‚b„akVwôml²`‚nœ@‚nVKœl˜k²xŎƒ°¦VU„JĊw@çnWçރVkUóÛ@¥kwš™šUmƒX¯WšÑkƒ@UymIUwlUn¥‚mUk²a°¯V»@™ÝVș„ÝċÅÅVl»@l@a°±@_kammÅb™a@ƒƒm@ż™KknõĠ—@mšƒ„¯LÅw›‚—LVxmb@¼kV™@mw¯wVakKW»X±¼¯Vkxƒb„¼WŽ@nx@x±bóakbƒ@ÝmU™@ķÓÛL™kƒVUm™k¯¤ÝLUlÝ@Ýz™š„x@x™°™™™bƒmƒX¯aUJW¯—k@bÇWƒwÛwWxƒ@XWlb@Žƒ„VŽÈUlwšLnl°VlUô¦œU°¤VšUxVXUxlbkVVlƒI„°„ÅVlU°m@k„ÇU¯xUlƒLUlVL@b™°ĠInĠ°ÈnK‚„@xÞa²n‚aUyšXUKVkšWô¼Èa‚z°JXUVÇV_„JVƒšz@Žnb'],
  40783. 'encodeOffsets': [[
  40784. 109137,
  40785. 34392
  40786. ]]
  40787. }
  40788. },
  40789. {
  40790. 'type': 'Feature',
  40791. 'id': '6109',
  40792. 'properties': {
  40793. 'name': '安康市',
  40794. 'cp': [
  40795. 109.1162,
  40796. 32.7722
  40797. ],
  40798. 'childNum': 10
  40799. },
  40800. 'geometry': {
  40801. 'type': 'Polygon',
  40802. 'coordinates': ['@@„bĊaƨèšwôô„¼šb°ašXVƒÞVUÞ@‚aXƒm¥kImx¯¯ƒV@anU@UÇéğL@ƒ¯¥V£mƒ@ÝÈb„K‚™„X°wČÿ˜ƒ„b@xÈblxȯĊ„„mÆUVƒ„nÈ@ƨÜLĢ¥ƒŹnƒ°Vnn˜K„aô_ȃšwU‚aXmnW‚¯kl›LXƒÇ™ō¦ÝaÅVmbğUn¥±wÅéVƒan¥ƒ„U„»°am¥„£ƒÝ@ƒ„wVw™¥nU„уUmmVwmķIÅaóVWxkblb@ból@œğÒĉ¤ċXƒ˜¯X™xk„Ç@óÆÅx@š™xķ_kmݎǣkblb@`¯²@bk‚‚@k¼ÆUČÆƒÞǚÞU@šU¼¯°±bVlnm¦kVVxnJVz@‚l„™ÒXW°n„™V™šlx@¦ôÜVUl݄Xèm@è'],
  40803. 'encodeOffsets': [[
  40804. 110644,
  40805. 34521
  40806. ]]
  40807. }
  40808. },
  40809. {
  40810. 'type': 'Feature',
  40811. 'id': '6110',
  40812. 'properties': {
  40813. 'name': '商洛市',
  40814. 'cp': [
  40815. 109.8083,
  40816. 33.761
  40817. ],
  40818. 'childNum': 7
  40819. },
  40820. 'geometry': {
  40821. 'type': 'Polygon',
  40822. 'coordinates': ['@@²nl‚ôbš„°aVwnKÞIš`°wšXôw°VĊ°@ŽÅš„ÞÆV„zÞK@xšŽ@a‚LŚ@b@ŽnLlƒ@šln„mnLVw„a„bVƒ‚VnbU¼„Vƒ°„bl„šbÈ@ĶŦb˜@nÇ@amIyUI@ĠVmôƒU™ƒVwkwlanJ„¯lwó¥@an°Jš_„‚@š™nóƒó@£l¥UwmašÑ@ƒUm±V_ƒJ—£›J—UW¥¯@ƒ_k¯¼mUƒVUè¯b@wmL™»ğVmağI¯¤ċIUW™XƒKĵ¦ķaƒJUb™IƒlUóVmk@WÅÅÇ@ƒmU„ÅVƒnĉƒÇ°kwÇa@wƒa—„ċxƒWšƒLÇa@Þn„U¤°¦@„ĠKÈê@VmV@b„U°°nwlJn¦W„bÝ@VŽ'],
  40823. 'encodeOffsets': [[
  40824. 111454,
  40825. 34628
  40826. ]]
  40827. }
  40828. },
  40829. {
  40830. 'type': 'Feature',
  40831. 'id': '6103',
  40832. 'properties': {
  40833. 'name': '宝鸡市',
  40834. 'cp': [
  40835. 107.1826,
  40836. 34.3433
  40837. ],
  40838. 'childNum': 10
  40839. },
  40840. 'geometry': {
  40841. 'type': 'Polygon',
  40842. 'coordinates': ['@@@ƒ„£@›°Išb@¯°ynʃaUƒlƒU£„Umšĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥ƒ@kb¯wƒn™¥ÇkUÇnUƒ@¯±›kULm›@m±_kŽónUxlŽƒbaÇLkŽUaDŽkšW@™Kĉ¦ƒ„kƒm@ŁUaķxlw¯aXaƒk@mmakL@šmšÛŽ@¼m„@l„XV`ƒn™KUš°°@²š¤UÈ@VxmôƒxKl„VV²aVw„Xla„Vlx@UVnŽÇnk°ƒVVL™lkI™šƒJÇk¯V@šknƘn@lznmlVkzVŽ„VVxš@Ux„z@x±¼VxxU„l‚kb˜@„¼Čk˜VXlĠkôV²w‚LUKlwœJ@a‚IV¥Þƒn¯Ün„‚„@nk˜l²kÆ@š°„aVbnI@™š‚Ťn'],
  40843. 'encodeOffsets': [[
  40844. 110408,
  40845. 35815
  40846. ]]
  40847. }
  40848. },
  40849. {
  40850. 'type': 'Feature',
  40851. 'id': '6105',
  40852. 'properties': {
  40853. 'name': '渭南市',
  40854. 'cp': [
  40855. 109.7864,
  40856. 35.0299
  40857. ],
  40858. 'childNum': 11
  40859. },
  40860. 'geometry': {
  40861. 'type': 'Polygon',
  40862. 'coordinates': ['@@@ÈôL„xUް„Þ@mŽÈnl¤nUôL‚wX`@ÞÝL™ŽUšmLô„„ŽôbVbnºlnÞ@ôƒšx°LšanV‚wÞ@Vxnwšnlw²¤šb°°„bVnƒlXbƒ„ó„@bš‚Ġ@„xšbš¦ŤšV™Xġ„£W¥ƽɽƒó@ýóƝÝ»„£X™mƅšĊkUƒ„@™™šó„kťaĵŽÇ@™akƒƒa„¯ƒUV»maUU„ƒaƒbUxmKƒnkm@™k„mK@ƒxó@¯n¯KǦ@ôÅèlxkx°nƒƾ¯KU¯WķL@VÝIUb™yWbX¼Ç°'],
  40863. 'encodeOffsets': [[
  40864. 111589,
  40865. 35657
  40866. ]]
  40867. }
  40868. },
  40869. {
  40870. 'type': 'Feature',
  40871. 'id': '6104',
  40872. 'properties': {
  40873. 'name': '咸阳市',
  40874. 'cp': [
  40875. 108.4131,
  40876. 34.8706
  40877. ],
  40878. 'childNum': 14
  40879. },
  40880. 'geometry': {
  40881. 'type': 'Polygon',
  40882. 'coordinates': ['@@šIXyĊwlý„KlƒXIVaķƒ™»a›£„¯aVU@a™‚wÈō‚ašL²»‚VœUln°WȯW»XašzVaÞJ@Uƒ»@¯Ýbğwly@£kÑţ±Wу@ka™IUƒƒnƒ@¯ƒómţU™b™U¯lÇIÝb@¤Ý@kV@zĊ@™ĶnƒVV¤k„V„„bmź¯z@°™a¯J@œƒ¤@„„bUx™bƒ„@`™xUÔ±ºVXœW‚„UnUJ‚L̝ÈKlblmÈXŎ°šU„°LšŽlkÞKš@Èxl_°ĶUÒkblš'],
  40883. 'encodeOffsets': [[
  40884. 111229,
  40885. 36394
  40886. ]]
  40887. }
  40888. },
  40889. {
  40890. 'type': 'Feature',
  40891. 'id': '6101',
  40892. 'properties': {
  40893. 'name': '西安市',
  40894. 'cp': [
  40895. 109.1162,
  40896. 34.2004
  40897. ],
  40898. 'childNum': 5
  40899. },
  40900. 'geometry': {
  40901. 'type': 'Polygon',
  40902. 'coordinates': ['@@°²@‚„mVVÈÈlš¦„m°xla„@U¦°ÈV¤XbV°lXÞaÈJ°kšVšaŤVôn°„„@„mV„šJlb„@XÒŤ²lÒ@¤kzĠxÞa@°„¼ĸK°XV‚°L„ƽ¯mlwkwÆç@óÈ¥°L°mô@„w@aƙK@b™@wÝLƒyÅUƒÝƙ@ĉ¯¯Uóx™W¯x™_ÝJmLUx¯b™ƒóak±mÝUU„™W¯b™aƒ»óó™xƧçĉbƒaĉxƒIUV¯¥ō„±w—l'],
  40903. 'encodeOffsets': [[
  40904. 110206,
  40905. 34532
  40906. ]]
  40907. }
  40908. },
  40909. {
  40910. 'type': 'Feature',
  40911. 'id': '6102',
  40912. 'properties': {
  40913. 'name': '铜川市',
  40914. 'cp': [
  40915. 109.0393,
  40916. 35.1947
  40917. ],
  40918. 'childNum': 2
  40919. },
  40920. 'geometry': {
  40921. 'type': 'Polygon',
  40922. 'coordinates': ['@@ÆxĸƨšKlxÈX„K@VWƨIlmœV@wVUmUnmUalk@kVaUaóaƒóƒnKV™šÞK@ÝW_xóKmVk£ÇmnÝ@¯ƒVƒwóK@ǯXkm›VU±¼™KbÇŎx‚š@bUV°bƒœ¤‚bš¼ĸ„Ub'],
  40923. 'encodeOffsets': [[
  40924. 111477,
  40925. 36192
  40926. ]]
  40927. }
  40928. }
  40929. ],
  40930. 'UTF8Encoding': true
  40931. };
  40932. });define('echarts/util/mapData/geoJson/shan_xi_2_geo', [], function () {
  40933. return {
  40934. 'type': 'FeatureCollection',
  40935. 'features': [
  40936. {
  40937. 'type': 'Feature',
  40938. 'id': '1409',
  40939. 'properties': {
  40940. 'name': '忻州市',
  40941. 'cp': [
  40942. 112.4561,
  40943. 38.8971
  40944. ],
  40945. 'childNum': 14
  40946. },
  40947. 'geometry': {
  40948. 'type': 'Polygon',
  40949. 'coordinates': ['@@Vx@lnbn¦WlnnUšmš°š²VšV‚VVVnUn„ºlz@l„„@Jƒ@kXWVXl@Lƒa@„ƒKUL„ŽlbnKlLnK‚LnKÆXn°šbVV@bUVl°Un@LnaVJUbW@UX²l‚@ČwlVVIšWnkÆa°„„anV‚Kn°™UW¯@™aVUVk@Un@„aV@ValwUanmWU„k@WVUUanaVwnLVl°@nk@mVU@UVK@w„LVKVU@ƒ„K@UUKVUV@@bnL„a‚V„aôšlIXmlKX_°KVV@bVV„@šzV`kblI„V„Ul‚šL@bnV@V„Ċll„„VlIXW@k„a‚U²blKšVnIlJ„albXXlWVn°JnšnL@l@XlJlaX@„X˜W²@l_VmnKšU„blU@mnkVK„¯@U@ƒma@kX¥VƒmakkƒLƒa@aƒ@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@V—kaWWkX™KmƒXk¯ƒ@WKƒLkak@±bƒw@ƒaƒa@akaƒ@ma¯@ƒL—KÇÅkKWbkmġ™±ÅUƒLUK™VVkƒm¯LUVVbƒ„UwUW¯bm„ƒULƒxWJ—@ƒklmkUm@@KnwVkVK@akwƒ@@a¯bƒKkn›VUI™b¯mmbk@UbmKUL@xUUƒ@klmLUŽlVXI‚VVVUVUœU`mLXVWbXnW`Ų°xmށxU@mĉƒƒwU@mbU@UƒmbkVW¦kJ™@ƒX@`¯Im@UlUVVnb@bWJXnmbƒJUU™UUaƒ@UamIkaƒxƒ@@x@b'],
  40950. 'encodeOffsets': [[
  40951. 113614,
  40952. 39657
  40953. ]]
  40954. }
  40955. },
  40956. {
  40957. 'type': 'Feature',
  40958. 'id': '1411',
  40959. 'properties': {
  40960. 'name': '吕梁市',
  40961. 'cp': [
  40962. 111.3574,
  40963. 37.7325
  40964. ],
  40965. 'childNum': 13
  40966. },
  40967. 'geometry': {
  40968. 'type': 'Polygon',
  40969. 'coordinates': ['@@@a@w„@„wlbnJVb„@VbšVVV„InaWmXI@a‚aUmVUVkn@°J@_„Wš@lIX¥lUnaV„V@naV@„xĊ„n‚V@‚wn¯wƱX_WmXaWUnKV_V›VUUUUWJkUVnKlk¯™@@kmKUaٱKkU@WmI@WUIlUUmVwXƒ‚w@ƒUlUVwœV‚@„Lnb‚W@anU@UšaVkô@l»n@na˜JnUÈLVaƃUUVm„VKVƒ²L@mU_lK@UVWkU‚a@a@U¯aUaƒÑóÑUb™„ƒKk@@aƒk¯mVaUwVƒÑkWUmK@UUKmXUWÝwUa™LUU@aWJUUU@Ua݄U@WL@VKVaVI@WnU@alIVKƒƒ@kIƒmIkJ@™m@ƒ™@@_™K@xƒ@kaW@U„@Vmn@ŽUK@mIƒJUXV¤XXWlkKƒkkK@XmJVakImJU@ó™¯LWKUV@nUVƒLkxmKkLma@kXKmmƒLƒab™LmK@V@mXVÆUxƒX@`nL„aV@@VmLUVnLlLš˜„b@„šŽ°²nx@b‚VUxlb@V¯bUV@zV‚XVĊXVx@lVn@VnnmŽUš@LlJXVƒz¯VWVXbšV@bmn™VUVk„Çþń@XVxmbUlV„Uln„W„@„Xl‚@VLXÒ@bÞJ°¦„L˜ò„@nU‚b@°„X@ŽXbmVU„V„nb@x‚x'],
  40970. 'encodeOffsets': [[
  40971. 113614,
  40972. 39657
  40973. ]]
  40974. }
  40975. },
  40976. {
  40977. 'type': 'Feature',
  40978. 'id': '1410',
  40979. 'properties': {
  40980. 'name': '临汾市',
  40981. 'cp': [
  40982. 111.4783,
  40983. 36.1615
  40984. ],
  40985. 'childNum': 17
  40986. },
  40987. 'geometry': {
  40988. 'type': 'Polygon',
  40989. 'coordinates': ['@@nW‚@@UnLšK‚a„b„KnnWL@lnblKnLlw„KVU@mVUXL°KôšV@nIlJUbnI@WlL„llLXkWWU£VW„InJ‚@VL@nm@UVƒX@lb„@@wšL@`‚@„šn@V@lw„@n„VmVX„WmwnUlƒœa@_lK„wVlUn°xVKVXXWlUšVVI@K@K„n°KœwlVlU@kna@V_„Wn‚m„UVm@kXml_@m„LlKXw°m@_ôJVUV@X™l@UaV@Va°I„lk»VwUkVmwUmmVn@V¯@KƒU—wmK@U¯wUVÝ@mJƒU—nWK™@@UnKVa„_lykUmKÛnm@™x@ƒUUlwVk™ƒXW@ƒa@Uƒ@@K@ƒkIV™nammVakUlƒ@wX@@kƒ™¯@ƒVVbml@„„°UbULmlVbnbÅK±VƒKVXUJWa@ULWaUU@@U@aWK@UkxUKƒLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUx„LlUUx@VUV™U@aƒIUl™L@°mLU‚ƒbkUUaWUUaUU@aWK—LWJ@bUL@VUVVbU@m@a@kmKmnĉlUK™XƒWUblb—xmIkƒƒU@xWb@lkšVx™LXŽmzVV@bklVVUzm˜@bk„@Vx@xlŽU„@lUbVnl@„Wxnl@n@ŽUbV„mL‚mƒb@`X@lUX@@xlnkLWaUJnnWV™Vn@l„@bULVV@l™V@XnJVX'],
  40990. 'encodeOffsets': [[
  40991. 113063,
  40992. 37784
  40993. ]]
  40994. }
  40995. },
  40996. {
  40997. 'type': 'Feature',
  40998. 'id': '1407',
  40999. 'properties': {
  41000. 'name': '晋中市',
  41001. 'cp': [
  41002. 112.7747,
  41003. 37.37
  41004. ],
  41005. 'childNum': 11
  41006. },
  41007. 'geometry': {
  41008. 'type': 'Polygon',
  41009. 'coordinates': ['@@@šlInJ„lJ„@‚„ULkJ@bmV@XUJUb‚L@UXKV@ރVbV@VVXI@bVVšKVbÞxVXnWVL@VnLV‚lX„ÒUŽVxUb°n„l@bl@„LšƒVaô҄ÒVb°b@VnLnnV@lmn@lb„U„V@„‚JœUVV‚Xkl@lUzmJ@xšXkl‚bUn„JVšUb„nU‚lb„V@nlLX@lakšV`Ub°š@XVJnU‚L²KlxnI@KV@lbUbVV„KnVl@„zlm@Uš@nŽšI@WUaVl@@mVU„@XkW@ƒnkVKVƒ„_Vw„y@knwVa‚@XalU„@šVnml@„X@V„L‚KVaÞbnnlJšI„mVKn„VVVInVlU„@„m@™mXK@UmyUI@mWUUakamw@wUwmLkakwVƒmK™w@wUam£y@am_ƒW@™UU@knmm„amU@WUa@knw@ƒUUUUV@nƒJm@mVUkKVUUUkKmwƒKULƒKUImV@lUn™nŽm@mbUK@°™bUnmbUmkkƒWUb@am@UXkK@a±@™V™@ĉř„V‚UXVxUVkLWl¯@@bULUlm@@nm`—XƒlWakIkm›VUbUL@Vm@kIƒ@@Kšm@—VaX‚I@W@aU@kUƒVU_™KƒbƒJkkǎ™b@nkKmL™wÅW@kVUUƒVU@WUIƒJmIXmma@_kyVaUUlkUm@ƒkU›x¯Lƒm@L@LUJ™UkVWXUWUL¯wVmUkƒxkL@`›bk„mVnxƒXUWUnmƒƒ@kxU@'],
  41010. 'encodeOffsets': [[
  41011. 114087,
  41012. 37682
  41013. ]]
  41014. }
  41015. },
  41016. {
  41017. 'type': 'Feature',
  41018. 'id': '1408',
  41019. 'properties': {
  41020. 'name': '运城市',
  41021. 'cp': [
  41022. 111.1487,
  41023. 35.2002
  41024. ],
  41025. 'childNum': 13
  41026. },
  41027. 'geometry': {
  41028. 'type': 'Polygon',
  41029. 'coordinates': ['@@„Vl„nJ˜wkaVa„XšWVLĊknmnL‚l@@bn‚V@UaVU@UVK@aXI˜KXL@bVVVbXVVblV„aVnK@¯šKVk„J@bšVVU@UVwkVƒKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVV„KVLlw@VXL@b@VV@VŽXbVK‚@XbVIUW„L‚U²ÆLmaUankVKVaƒ¯@ƒnkUa„U°@„š‚n@@kWa„UVaXUW@IXKVw@U™ƒ„™WU@W@@UUƒU@mn@ƒ`m@UUULkUmJ™IUƒ@@UƒK@U@›anƒ™ak_@wmKUwmakV™kmK™V™k¯b™wƒ`kwUIÇx¯»ÇaŃmn@@™mƒmUkV@wkKW@kxmL™UkĉLÝk™xÝw¯lóVU„mV@ĀVVX¦W¤kz@`Vx°„²ĸ‚š@„Ul@x„êĸNJ°¤V„VlXLWnXxmV@nUl@„'],
  41030. 'encodeOffsets': [[
  41031. 113232,
  41032. 36597
  41033. ]]
  41034. }
  41035. },
  41036. {
  41037. 'type': 'Feature',
  41038. 'id': '1402',
  41039. 'properties': {
  41040. 'name': '大同市',
  41041. 'cp': [
  41042. 113.7854,
  41043. 39.8035
  41044. ],
  41045. 'childNum': 8
  41046. },
  41047. 'geometry': {
  41048. 'type': 'Polygon',
  41049. 'coordinates': ['@@²£šyl@Ȑ˜Ė@bĸŽĢbĸ„˜X„a‚KŤnn@ŎôllÈx„nVnÞDŽV@b‚nXllL°KšbVb@J@b—„‚„@ŽU„„xlKXLlKlXk„@Ulk„JlkUƒVKXUƒÇVIVm@_nǚLšašl‚w„VnU@UUwma@aƒaÝaLmUk@@Wƒ@U@@X™wVWÝUUUk@@VmLƒKV»nwUw™aUL@`mzƒJUIVƒUaUw™KUaVIlJôanÑlLVUn@ša„@VV„@@UUwVK°Vn_lJÆLœéW@UUUÅ@»lm@aÞIVwXW˜UUkkm@U@aƒU@mwU£VWU_kWmƒXwW_°yUkkK@UÇK@kkUVymóK—U@KWIƒbUak@mJ@bkbmLkŽ™UmƒkVU„W¦@lnb@„@Vƒ°ULml@nkVƒa™VmLUnk`±@—XƒWW@kbǦXޝ„WxI@xmbmxXlWV„„@bŎUz@J‚b@bÞb™ŽU@Wbk@ƒxk@WX¯VۙƒWÝbÝUkVUU@alI@a@akLWa™m@U¯UUmÇL@K@aU@¯VUkƒKmX@`@œkJ@nV‚Ub@lbVÆXVW„ULU`VbkLUV@XWl@bXJ˜@VbV@Vl'],
  41050. 'encodeOffsets': [[
  41051. 115335,
  41052. 41209
  41053. ]]
  41054. }
  41055. },
  41056. {
  41057. 'type': 'Feature',
  41058. 'id': '1404',
  41059. 'properties': {
  41060. 'name': '长治市',
  41061. 'cp': [
  41062. 112.8625,
  41063. 36.4746
  41064. ],
  41065. 'childNum': 12
  41066. },
  41067. 'geometry': {
  41068. 'type': 'Polygon',
  41069. 'coordinates': ['@@Uk™Lky@I‚JVa@mÞaWšy@_W@_WƒXVlUVwš@nw°K@m„UƒVaƒmVkU@mmmnLVUmKXa™U@IlKVUnK@UmWkX@WV_Vƒ@akU@a„KWIXyƒIUVmUn™Ua@WaXUVKVmkUWVkUƒLU@@VƒbƒKbƒIUmƒ@mbVL—x›WUUkn±V¯wƒbÅJUbmLkbmKÅKƒbVnUbƒV™KUb™KUbmLKmƒb™aƒKkUm@UŽnn‚VnxUVlUxl¼ƒk¯JUbU@Vbk@WšU@UVóI@`¯nWxkLƒK@nk`Wn@lUnƒVnm‚ƒXU`@mb@lkV@„VnklVVUblz@`nbWnnJ„IVJ@XUVV„UV@lÆXšxnKlL@mšaȍll„I„ašLV`„UlVV@@b@XJWUb@˜™n@L„@lJn@@UVKVaœUlnlJXb„k˜Wn_@mn@VkVK@a°@XklKVUUwVWUšƒĊƚ@šU²@@blLVWn@@bVa„XllVnnaVmša@¯VLnan@‚šmVm@knUVJ'],
  41070. 'encodeOffsets': [[
  41071. 116269,
  41072. 37637
  41073. ]]
  41074. }
  41075. },
  41076. {
  41077. 'type': 'Feature',
  41078. 'id': '1406',
  41079. 'properties': {
  41080. 'name': '朔州市',
  41081. 'cp': [
  41082. 113.0713,
  41083. 39.6991
  41084. ],
  41085. 'childNum': 5
  41086. },
  41087. 'geometry': {
  41088. 'type': 'Polygon',
  41089. 'coordinates': ['@@XXWVXVWnnlnn@èÆ¼@„„xlš„ŽV„nblšššVŽÈUVl‚š@„blnœL܃ĊmUkU@Ua‚—@WI@aXk@WVUlKUaV_VKXƒWUUÅka@VaU@mlI@›@_nW„LVl°UV@@b@LÈKVn°V@VšnXblK@b@bkJ@bVVlUÞVÞa„Xܚ°UXWl@„wl@XaV@šÝa@aa@IVyƍ@aƒƒXUWknwna@w‚JXw°ƒWÈ¥kI@W@kmKm™¯IUmkXWWkaƒbkImJ™UkL±aVƒb@lWXkJƒUkƒĉkƒ@UmU@a™KkƒVƒUkJlaU_™yƒ@UU@aUU¯LW`kLWnkJó™ƒbUƒbmK@aU@UVVL@VƒL@„UVULƒK@xUL@VUV@nml¯@UkmKUxmbVbUV@XƒlXVmnVbkxUbU@ƒbm@@VUlUVšb°@VX¯šm‚'],
  41090. 'encodeOffsets': [[
  41091. 114615,
  41092. 40562
  41093. ]]
  41094. }
  41095. },
  41096. {
  41097. 'type': 'Feature',
  41098. 'id': '1405',
  41099. 'properties': {
  41100. 'name': '晋城市',
  41101. 'cp': [
  41102. 112.7856,
  41103. 35.6342
  41104. ],
  41105. 'childNum': 6
  41106. },
  41107. 'geometry': {
  41108. 'type': 'Polygon',
  41109. 'coordinates': ['@@lV„Lšb„an‚LnKVašLVašL„UVaUm„aÆLnLlanKVaÆI„a°x²UlmVVœX˜wUKna„@Vn„J‚a„L„a@UV@@alUkKVKnkmmVwUk„w@ƒ™@kxWUXƒW@@mƒk@aUa@a¯aƒLkKmwkUm@kL@K@aWIXmƒVƒXƒWkUVakL@UVKƒw@aUK@UUKmLU@¯n™KUwVƒUIWJUWmka™@UXƒJƒk@UkmW@kLWKVƒx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@V™bƒLkKmVƒ@XWVUbƒVXb@lm@@lW@@xk„lVUbnnmbUšlJ@„@L„@@V„b@‚WXš„UlkxVV@„šwn@ÜmnLlVkzƒ`UbmL@Vš@XL˜m„VnIÞ@VU°x@VnL˜x„V@LU°'],
  41110. 'encodeOffsets': [[
  41111. 115223,
  41112. 36895
  41113. ]]
  41114. }
  41115. },
  41116. {
  41117. 'type': 'Feature',
  41118. 'id': '1401',
  41119. 'properties': {
  41120. 'name': '太原市',
  41121. 'cp': [
  41122. 112.3352,
  41123. 37.9413
  41124. ],
  41125. 'childNum': 5
  41126. },
  41127. 'geometry': {
  41128. 'type': 'Polygon',
  41129. 'coordinates': ['@@„@VV@wVKnLVal@na°nšaVJœUlm„L°a@b„@lx@bULUlmx@Ln@lVkn„l˜@XI„w‚K„Vnƒ°aVXVx„ƒUaVU°K„nUlšUVL„KÆVš²Ģ‚lnXalLÈÆ˜L„KUaVkUanmWU™a@WwkUWU¯y¯Ñ@anIl@@aVU„m„I„ymUƒLUUVakaU@@LmJkw±LKmVUI@W¯™VaU_l™kbW@kK@mƒUkaVƒmVaU™ƒIVmalk™W@wnIVy@klkWUU›VI@ƒƒUƒVkam@knU@mmmK@bblVUX@VkLV`@n±KU„ULƒ‚UnVVńUbÇKmV—Imbm@k¼ó@Ul™b@VmV@bXmaƒK@›UUxkV‚V@„xW„UxVnkVVJ@XnJ@XlV²LƂVbnL@lš@°'],
  41130. 'encodeOffsets': [[
  41131. 114503,
  41132. 39134
  41133. ]]
  41134. }
  41135. },
  41136. {
  41137. 'type': 'Feature',
  41138. 'id': '1403',
  41139. 'properties': {
  41140. 'name': '阳泉市',
  41141. 'cp': [
  41142. 113.4778,
  41143. 38.0951
  41144. ],
  41145. 'childNum': 3
  41146. },
  41147. 'geometry': {
  41148. 'type': 'Polygon',
  41149. 'coordinates': ['@@°@nb„@lb@b„b„b‚@„x²al@lb„KXU@m‚kUWkkmUUƒVwV@XUW@™naVklKXblKnL‚ƒnLVanImaXKlL„ašV@U@KUKW„alƒXK@£WKXUV@VU„ƒUUVW„_V™@W@@K„@šƒUƒƒIWmXUmƒULƒn™JkImmÝaUbLƒK@UƒWk@mn™Uƒ@kVWb@Ubmx@lƒzUxƒ`U„ULml@„XWlƒ@UV@nk@U‚Vb@X™Jm™@@Vknƒyk@ƒzƒJƒnUV@bk@mJ@b°Ò°zXVlVXx‚@šbXVmnVbUlVb'],
  41150. 'encodeOffsets': [[
  41151. 115864,
  41152. 39336
  41153. ]]
  41154. }
  41155. }
  41156. ],
  41157. 'UTF8Encoding': true
  41158. };
  41159. });define('echarts/util/mapData/geoJson/si_chuan_geo', [], function () {
  41160. return {
  41161. 'type': 'FeatureCollection',
  41162. 'features': [
  41163. {
  41164. 'type': 'Feature',
  41165. 'id': '5133',
  41166. 'properties': {
  41167. 'name': '甘孜藏族自治州',
  41168. 'cp': [
  41169. 99.9207,
  41170. 31.0803
  41171. ],
  41172. 'childNum': 18
  41173. },
  41174. 'geometry': {
  41175. 'type': 'Polygon',
  41176. 'coordinates': ['@@ƒaXamƒ¯wm@±°wUwV@UaVw²Kš™„U@UƒU„¥‚a„ƒ@£Þ™ôx‚Knkm™X¥™IUƒÝUwlk°V„@ƒÈ™‚KUwlkUyV¹„mšx²Xll„ÑW»š„l„w°UŎ„nƒ„„˜Jœƒl¯°V@wôIVÇn™nUllšLšVǚLô¼XW£@±„@¥k_ÇJƒkUéƒkšƒƒwXa@ƒšLlw²™Vx„b‚mš¼ÈxlLȃ„VWÞn¯mǙÑUÝlÛkwlĉmƒULmwUJ™ç@wkm@ÑlUX™ƒÑôġƒVa™ƒUф¯@wķÓkbV„mnU@@y¯IķKƒV@¹šaƒé@k„mÞU°¥@a¯@anKlblU„¥@óğç@Çw@wkla„çݱk¯±@ğÝUÛmݯwƒ@kb±¯akXWÜkXUÆÇUš¤X_Ɛw„V@¤ƒXU‚ƒbUƒŽƒIUlÇUkŽġ@™aXČmlUlèUV@„mVk¦Vxš@¦±š¯ƒƒ¯¯anlWš¯nƒƒÅw@w°KVak£m@klƒKknÇU™»óKšīlaUaV£@™™¯@ƙU™VƒÛÝÇXƒÇl—ÓlŹ„»WUğJ¯£mx™Lĵô›ºX„VlUll²bl„„lŽƒxónn°ÝšU¼mJUš¯nƒƒƒV@êĉ°Uĸ™w™@mƒ@¯kmXamѯaUwÝKU¥„mÅn¥Wmn™ƒ¹n±ƑƆÇôXê±NJnšƒ‚UôlĖkȂVÒ¯¼VnƒȮ¯ĀnƆ˜Ģ@Žk°V°¯ĢVlkšVxm¼X²™Ŏ@ŽVxknWܰU‚¯n™ÆÝœ@`„ôݲÒƒ‚Çzn‚mX@x„è°K°Å„UČĬóĖ݄ƒ˜ó¼ÅêƒÒƒbmšk@V„Ž˜„@ҁl@nĉܛê—x@Ėml՛J¯¦óxȭ°ÝmޝLĵè›Ā@Ɓ„l°żƒ‚šX@xmŽkV@z@‚„°blŽnÞ°J@bn@ƼUVƒUóŽóLƒ°X°ÝLƒxUn„°ƒĬƒn@lnL@ŽÆ@šn„KÆxnUnV˜InĬmÆnxŎ¼ĊIĢóÞ@ĊƒƨbUƒ‚mV¥lkƒ‚wnL„mšÅÆ¥Xƒ˜wU@w‚wUÞ™@alUUŚU™Vkkm°aU—°Ó°w°U„ƒ„b°aš²K˜¯œĕ˜@ÈbޏĊaš»„XVm°In„‚Ĭk¼Vb„ašJšôš£VĊan™‚k„ů™™nƒÜU@anKnĮ‚bÈmƎš»nI‚霣Ġ™'],
  41177. 'encodeOffsets': [[
  41178. 103073,
  41179. 33295
  41180. ]]
  41181. }
  41182. },
  41183. {
  41184. 'type': 'Feature',
  41185. 'id': '5132',
  41186. 'properties': {
  41187. 'name': '阿坝藏族羌族自治州',
  41188. 'cp': [
  41189. 102.4805,
  41190. 32.4536
  41191. ],
  41192. 'childNum': 13
  41193. },
  41194. 'geometry': {
  41195. 'type': 'Polygon',
  41196. 'coordinates': ['@@l@@þ²I@lƒ„VL°wnJ°Uĸ™Ŏè„Ilw„V°¤nĮ™¤Ý„lè„L@„ƒ„@x„l™è²ôĊ_ĊġVÈôJżīlbXšÆÈVŽkxÇVƒ„n°„¦Üb@è@nn@@°šUÈ¥WDŽ_Uala¯¯UǙkƒ»„mVwk»˜k²°VxlL@¤œ_@x‚`ȍ‚Ėöb˜š@l²alX„a@bnK°¦VK@nnWmx@nUnl@@lƒlĉk°l°UXkmW@Unš`k„ÇL„ŽW„ÛÈVxšVVlVk@l„IXb@ylXÈW˜Į„WŤzœy@šmIƒŽ²šJ‚š@nް@V„„J°a„Å@ƒŎkVǚk™aUw„KVw™™Vƒ„@nkm™@±ôkô™ĊJš¼šInÑm±nIššÞ‚XȃĊxĊUÈbÜyÈ£Vkw@kVUV™„m@ša„»ÜbÈmƒUXwÝxƒUn¥@°ġ™Å‚aœJVk™aW¯Û@W¥—UŏĶ™@¯kUƒŃ@ašI@mmanwސ‚W@œ™mw°»Uřk¹±W„xVx¯¦U°ƒzţW™w@°ÇVÑk¯@„y°aš£š@šmšnl¼„ašÝÝakwUƒ±aĉImlĵn@ƒm@kkVƒ¯Ñm™ĸ™°x„l™œ@˜ƒXVÞmlÛݙĉUÅ¥mwÅ¥VaUw›™XġċaVůÛŹlwU¯U™ó±™xÛV±¯¯n¯mċƒLmnĊm‚™@™_kJWaXmwUƒĉK™»™@mwX݃UDŽkKÇw™»nƒaUw±škx™K@„Wb„x™„„lVê„lÈIl`@¦ƒŽ@²X¤Wó»™KUșŽ™KkkmVmšUÈóJ@x¯Uk°›„—Iƒƒm„ōƒ¯Vƒxƒk™ŽX¼ƒÒkk±W™wƒnUºVzklVxLǚ@„ƒŽ¯UklVxސV„šJW¦nšmlLówݚ@¤ƒ„bƒ¦„V@VƒV™š±LUxVbU@Vx¯x@²n‚°xn„Wb„b'],
  41197. 'encodeOffsets': [[
  41198. 103073,
  41199. 33295
  41200. ]]
  41201. }
  41202. },
  41203. {
  41204. 'type': 'Feature',
  41205. 'id': '5134',
  41206. 'properties': {
  41207. 'name': '凉山彝族自治州',
  41208. 'cp': [
  41209. 101.9641,
  41210. 27.6746
  41211. ],
  41212. 'childNum': 17
  41213. },
  41214. 'geometry': {
  41215. 'type': 'Polygon',
  41216. 'coordinates': ['@@ĶóšKnw°¤ĠIXVƒ¼kź˜Ôk‚„ÈWŽÞȄÜUVšÅš°@šš‚@U¤Vbkb™ĬôLš¼ÈVlm„Llkn@l¤Ub¯L@xÆx„„°mX™mk°b„°°„²™@¥‚™Uwl¥nU@ƒVUkçVnkWċšbĢ@lÈVVk„J„‚V„aV„W@£ƒUƏxW`™£ÈVVÅlWXÛlW°b²la„@°xnÞVÜĠÞ²@l°Þ²ƒèkblŽ@xÈx@Ġènal£nU‚Dz@‚ÞK„nn¤@¼˜°U¼„nV‚šXU‚šbn™ĠUVbUlVš°LX„@lV„èÜUnK@_ƒyXVyUwmIU»Vƒ„kÇ¥šÿkkV¯m±n@ƒn¯ÜanVVƄz@Ž‚bœwÜb„m@wša@kƒmk»@™a@VUUó„w˜@nb°mš„XŽmnVbގVôanwšJ‚ak£lw„˜šLšÅnÝ@wl¥IÇӃ@U™™Lƒ¼kVǃÅó¯kVmmw@ƒn_‚Vn»°LÅ»@éÇçŹīVÇÝ@ÝğU™ƒaVݙ™š¯ķlŭġlƒ@óÞۂċ@¯nkUӄ—m±™IVġUwóKUn±¯—K›w»ƒKݐV„nl@„óxUwţ›£ĉƒUmŗÇ݃K™„ÝUlmKƒ£UVŽ@ÞȎW¦„Ò@Ĭšnny‚@nÒmœVŽ—¼@°Vbl@VlnUUwl™°a@„œ„@llnk°lbnKWĀnŽU„VxUŽ‚²Å‚m¦Û›ÇڃaU„Vbš@¦m`móX™Umm™xÅ@±Þn虲™U¯»m™ƒV—m@wƒU@wݚÝmLƒa@„™VÇUk„l°¯„VlkVƒ¦UšmxƒaULUèVx@„kIUxmWV¼¯VmȯšU„nl›È—@m»Å™ƒVWxÅbÅğW@kƒm@kVV¦mlnn@‚ō„l¦Åƙxkœ'],
  41217. 'encodeOffsets': [[
  41218. 102466,
  41219. 28756
  41220. ]]
  41221. }
  41222. },
  41223. {
  41224. 'type': 'Feature',
  41225. 'id': '5107',
  41226. 'properties': {
  41227. 'name': '绵阳市',
  41228. 'cp': [
  41229. 104.7327,
  41230. 31.8713
  41231. ],
  41232. 'childNum': 8
  41233. },
  41234. 'geometry': {
  41235. 'type': 'Polygon',
  41236. 'coordinates': ['@@„ńlV°š@Őĵ˜VX»ÆUĊќJ‚w„@È»m»š£°Kšk@ÇnÑÆš@„w°JUwnw@wšbVbš@VlźLUw„aƒ»„aUklyUUVakwWXwWƒUxkLƒmn¥mšwk™˜UX™lJ„w@aƒIk°X„¥Wƒ²l¥šaU™„IlmkklƒÈL@m°nlWU™aW—š@Vƒ„@UaV¥@ašk@Çk¹ƒK@a™K@kƒKkšÇX@VU@kx±V™èkIWwUVUkkKÇ@ƒa@wkml¯@kUWn£Wa„aVwnaV݃w¯@UaWx—n›JńUxUšma@L@„mbUށU±VVnkxUƙ„VŽm@kkKW°„X@¤ÇUkÆÇnU¦¯ŽkƒmLVwÅK@UóbÇÆVƒ¦™L@‚±êX¦mVޚkÜÝnWU—„›@kšƒŽ¯wķšnš°ÒU„lln@@„ĶmnkĊJ²bV„lxÞb™Þƒbk»™m™n™@™¤¯bƒz@Žl°UÒ¯È@ŽšxŤX„yV¯°¥Uwƒw²XlºVڝ¼nx›š@ށXݏmxnb@n™J@b'],
  41237. 'encodeOffsets': [[
  41238. 106448,
  41239. 33694
  41240. ]]
  41241. }
  41242. },
  41243. {
  41244. 'type': 'Feature',
  41245. 'id': '5117',
  41246. 'properties': {
  41247. 'name': '达州市',
  41248. 'cp': [
  41249. 107.6111,
  41250. 31.333
  41251. ],
  41252. 'childNum': 7
  41253. },
  41254. 'geometry': {
  41255. 'type': 'Polygon',
  41256. 'coordinates': ['@@Uxn°‚bnŽlUnÒÆƒnn@n‚¤„LnxlU„ššV@„Æl„x°XXxl`XœƒVW‚œL˜è—„±nÈbƒŽ°b@š²x°Kܼ°ĉ„V¦lJnU@¦šÞ‚JÞğ„mšLÞ»šxU„lb„VÆann„alŽ„VƍX@lnŎV„mU™maÅXƒa@aWmœ@‚£@wĉJVƒkk‚kkmƒnk@ƒmna@šal„Kš™‚J@Þwm‚ÅŃ@ambkUƒƒ@™™KUġKU@m‚ak¯±ƒ„a@aĉÑÅaVwšXlwƒ±—V¥l@@a™kƒ›@@£šmƒĉÝónWV@ށnÝÇÇx—UmbƒaVkkk@m„@m°ƒÝýXm›akÅīƒ@@ƒmb@@xmšnbƒ@mxšŽkWL@ƒ¯b@WUXmWœWKkbm@kx™Xmm@LUl„xlêóK™nUš„all™LƒlLó°m¯JVšU„K„„@x˜K²Āô¦l°'],
  41257. 'encodeOffsets': [[
  41258. 109519,
  41259. 31917
  41260. ]]
  41261. }
  41262. },
  41263. {
  41264. 'type': 'Feature',
  41265. 'id': '5108',
  41266. 'properties': {
  41267. 'name': '广元市',
  41268. 'cp': [
  41269. 105.6885,
  41270. 32.2284
  41271. ],
  41272. 'childNum': 5
  41273. },
  41274. 'geometry': {
  41275. 'type': 'Polygon',
  41276. 'coordinates': ['@@ÆL„Ċx°»Ŧ¦˜W„™šLȄ@xÞKܰÞnVxÅĀlÒnJ°a@w„V¯l@XWknKnw˜VȚ°XXa˜lX°VI°b„W„nšaššš¥@ƒw°™n@šyÆ@nkÞ@°¯lJn„°IÈl‚UšlXÅ@ķlUV¥VUUÝޙUUƒ@UwƒJUkĉm@ýƒƒlk™WUwVwWJk@VUK™lUkaVƒUƒmLk„m@ƒƒ@Uƒ›Ik`@„™UmlUkV¯ÇXKÝ_mm¯@Uƒ`kwmƒl¼±KV¯—¯Vk±Vk±kzma™KUnDZ™bk¦±ŽX„ƒ¦¯Wl„J@bƒxkIWš—Vlš™xnŽm¦„nlKVwX„WxXŽlxUbVVkzVlƒb„¼ƒbVxŹKUk™@Ua™a@xmxVx¯Iƒx™@ŎmÒ@șl¯L™¤n¼'],
  41277. 'encodeOffsets': [[
  41278. 107146,
  41279. 33452
  41280. ]]
  41281. }
  41282. },
  41283. {
  41284. 'type': 'Feature',
  41285. 'id': '5118',
  41286. 'properties': {
  41287. 'name': '雅安市',
  41288. 'cp': [
  41289. 102.6672,
  41290. 29.8938
  41291. ],
  41292. 'childNum': 8
  41293. },
  41294. 'geometry': {
  41295. 'type': 'Polygon',
  41296. 'coordinates': ['@@ln@xšèVInxVKn„‚ĊklxkÜVޚÒnÈm°nxš@š¼ĊLV„nx‚WXblIš`š@nmĉn‚KȄôÅlUÑmU„K²¹@ÇÅVÓůVýÞW„‚UVmX„ÆbnwšKUÿ‚™@UmmIUb¯¥Uwƒ™¯™Çmš™„çmanUm»UUƒl—kƒ¤ƒa¯bV™U_WĕmÇŚ±ĢUlƒUl™ÛVƒçkUƒ@WޝKU™VkUağVmš™aV™WUƒmV»—¯@»m£ƒmÝLŽ±@ÈmVk¤mb@ôƒ¦kVkamL@b°‚@b¯¦ÝVƒn@l„ê™b@º„UĸL°J@zV@nmUƒlaĸÔ@xƒ°VҚ„Ub„‚óĢ„ÒWškV@Ò'],
  41297. 'encodeOffsets': [[
  41298. 104727,
  41299. 30797
  41300. ]]
  41301. }
  41302. },
  41303. {
  41304. 'type': 'Feature',
  41305. 'id': '5115',
  41306. 'properties': {
  41307. 'name': '宜宾市',
  41308. 'cp': [
  41309. 104.6558,
  41310. 28.548
  41311. ],
  41312. 'childNum': 10
  41313. },
  41314. 'geometry': {
  41315. 'type': 'Polygon',
  41316. 'coordinates': ['@@VlÈnl‚XnWLX`m„²nV‚@b°xĢçlnšVm‚nn„@@„°‚UzšlV°nޘÒkxl„w„`UnVb„mšL@albÞKÈۚmܼ°@Xǚ@wmW@ńKĊL„lV„šLVŎçÞL²±‚ğkw@Uƒy@¹lKX™lKVa@w™™Č@‚w@a˜ÇU¯n™@@wġak—™aō‚ƒƒK@Å»VakUWmķwkbğ¥mL™akš™@ġރ°¯xVVÞ@VšxVš—VWx„XlxU‚™@k²WVŃULmèULVĊklĠ„VœJVx±nѝ¦mwğ@mƒƒlğkkl±@kšUk@¯±Ç™Kƒ—kxl¤b™Imx'],
  41317. 'encodeOffsets': [[
  41318. 106099,
  41319. 29279
  41320. ]]
  41321. }
  41322. },
  41323. {
  41324. 'type': 'Feature',
  41325. 'id': '5111',
  41326. 'properties': {
  41327. 'name': '乐山市',
  41328. 'cp': [
  41329. 103.5791,
  41330. 29.1742
  41331. ],
  41332. 'childNum': 9
  41333. },
  41334. 'geometry': {
  41335. 'type': 'Polygon',
  41336. 'coordinates': ['@@kšVŽk„ššÆkšV²UlºÈIlxƒLXèÜlU„„XU‚mkƒbVè„x°@„@¼°Knnn@m˜ÆIUbnJ@bVI°b°±@nK@mVakkƒKl¯nbšmĸ„èl@VnÈl‚UUw„wmwnm°¥„L„™lLnU@Va™ImbkƒmK„ƒƒnk@mƒb™ƒƒLV„JVUUƒ„VnkVmb@a¯JUaÆkk¥„IW¥„Klw—ÑmÝU¯™kVy¯@ƒƒ@mmn™Ukmġè¯w@aU±mnƒW_XKWmkÇmUkóbUÝUanmW™ƒ¯nma—@ƒxVôUV@šb@‚l¼„n@l™b@xƒnÛa›xa@ƒyUÅmUÛbm°@„m‚n²U°ll™ĀȦƒlU„V¼nJVxUz‚W„z@`mL'],
  41337. 'encodeOffsets': [[
  41338. 105480,
  41339. 29993
  41340. ]]
  41341. }
  41342. },
  41343. {
  41344. 'type': 'Feature',
  41345. 'id': '5113',
  41346. 'properties': {
  41347. 'name': '南充市',
  41348. 'cp': [
  41349. 106.2048,
  41350. 31.1517
  41351. ],
  41352. 'childNum': 7
  41353. },
  41354. 'geometry': {
  41355. 'type': 'Polygon',
  41356. 'coordinates': ['@@ȲVmšLnblyl²²UUl˜°U°²L‚»„knlx„_Vް@nnÞ`WL°ÈUŽVlnkšV@ƒl_œJV„‚@„„n@lƒnKV£™Çšƒ„UV¯šm„@laX˜U„‚UbVx„@VkôJU°Jn™@™‚wUk°wnUƒV_nJmknmm¯Vwk¯ó¥±ÿ—L@wƒƒƒLVU™kU›bX¯mykI@a±Kk¦ULmaXƒƒVm¯ƒK—z±ƒklUIVbÇJšƒkL¯™l™ƒU™ÿ™UƒlUkJƒUmŽUUkVVklKk@@a™U@„™J„²ƒxƒ¦kĬ@¼±ºXnWb—xƒU@xƒx@lšL@b„Llº@șl@bU¦Vbƒ@U„™@X˜‚bVškX¯m@nÇKk„llknƒJVš'],
  41357. 'encodeOffsets': [[
  41358. 107989,
  41359. 32282
  41360. ]]
  41361. }
  41362. },
  41363. {
  41364. 'type': 'Feature',
  41365. 'id': '5119',
  41366. 'properties': {
  41367. 'name': '巴中市',
  41368. 'cp': [
  41369. 107.0618,
  41370. 31.9977
  41371. ],
  41372. 'childNum': 4
  41373. },
  41374. 'geometry': {
  41375. 'type': 'Polygon',
  41376. 'coordinates': ['@@V„U„lbkVšŽVLUŽl@XI‚ŽUxVxšXkl„„@þĊnVl„IVx„@VVݚVÞUVU¦kV@ĸWÆô²š@VÞnš@Vaôb²W@‚K@XUmÑUW°¯°Ina@y„_lWn¼lLUbô¼„Kla@™nkUyô—Æx°@šn£™Ý@¥mVkIU¥Ċƒ‚¯Û»¯L±w@™¯a„Ça²m˜ƒ—ç›KX„UW›k_Ww¯WƒwÅk@ƒ™Uƒ™kVmwƒK£@mmmńmÑkVmamnnlmIU`V„m¯xVlx@šmš¯IV‚óIUlƒ@UwVaƒ—VW‚kbƒ@™nU°ƒV™„šÈU¤'],
  41377. 'encodeOffsets': [[
  41378. 108957,
  41379. 32569
  41380. ]]
  41381. }
  41382. },
  41383. {
  41384. 'type': 'Feature',
  41385. 'id': '5105',
  41386. 'properties': {
  41387. 'name': '泸州市',
  41388. 'cp': [
  41389. 105.4578,
  41390. 28.493
  41391. ],
  41392. 'childNum': 5
  41393. },
  41394. 'geometry': {
  41395. 'type': 'Polygon',
  41396. 'coordinates': ['@@VVXwVKn„˜wnVƒn„l@b¯xmKUbVn°°X°@blLšènV„@Vn‚l@U„LnmmUna„VV_ĶV@wnJ„„l@@kkKVólaUwnJm„wUlm@ašUaôKVnJWbޚ@VšwVLX¥VVš_Þ`šw„WƒÞŹmmnIn¥Wƒ@k„WV¯@ƒ°kI™ŽƒLk¼Ç@k¤±Xk˜™nmݯUlÅÛKWV¯kƒlUwkLƒÓ™@U—@ƒ‚w@ġXV„˜WX„š@UbVbšV›š_kÇV™lU°lnwŎ¦ÞaƯnmm¯šU„™m¥nkVmkƒl_ó¥¯UÇl¯@™ƒ™L™kƒ`¯ķLUy¯@mw—¼ķ°ġ_řU°mlšnÇVUޚ„@‚ƒš_ƒJUnV‚UXšbl˜Ģb@x@mšV°—È‚b@‚xċ@šš@xUbkLWškL@º„zV‚@lxĠ±²'],
  41397. 'encodeOffsets': [[
  41398. 107674,
  41399. 29639
  41400. ]]
  41401. }
  41402. },
  41403. {
  41404. 'type': 'Feature',
  41405. 'id': '5101',
  41406. 'properties': {
  41407. 'name': '成都市',
  41408. 'cp': [
  41409. 103.9526,
  41410. 30.7617
  41411. ],
  41412. 'childNum': 11
  41413. },
  41414. 'geometry': {
  41415. 'type': 'Polygon',
  41416. 'coordinates': ['@@°n°m²°ÜUšw²ŽôVš°ŽVkxÜźUŰČb‚ŽĢlaÈL„»ƒ@k„wVǂ@„ƒnÛÆ»È™UݰKl_„V°Uš`Vbn@VbÈLšaVU@ƨ»V™nIl™šUUa„±lIk±š@VnKmÅ@WaƒK¦™lVōškK™Ý@maXÇmw¯IU‚@kƒVƒwUmVIƒƒƒç—ÿƒU±ŽÅ@¯È@xƒK@wƒLUbÇKō@mÝ£@yóUóóUxkI@WlIUaƒbƒaŽVĀ™LmxÅaWƒUnVƒÝXUþưUÔÈÆ@±ºƒLnVVÒkóÆ'],
  41417. 'encodeOffsets': [[
  41418. 105492,
  41419. 31534
  41420. ]]
  41421. }
  41422. },
  41423. {
  41424. 'type': 'Feature',
  41425. 'id': '5120',
  41426. 'properties': {
  41427. 'name': '资阳市',
  41428. 'cp': [
  41429. 104.9744,
  41430. 30.1575
  41431. ],
  41432. 'childNum': 4
  41433. },
  41434. 'geometry': {
  41435. 'type': 'Polygon',
  41436. 'coordinates': ['@@„è„„UJVn„x„U@lV°JnxWÈnbÞ@šŽlLŎ™Ušk‚¥„LXbÆ@nŽmLU‚@zlbXmlnVynL„çšJVb‚UnómUnamU„an¥lKV_²aValWô„n@nƒ‚bVœK°¯VblW@kkƒlUnlV£°W@w„UXk°KVwƒmVkwVyVI@wkmƒVÅ_Umm@Uÿmbk£™xUaVw±V¼V¤kLWxU@Uk™bƒyƒXšómƒ°V@@zÝÒkKƒn™±U@@_VVkƒÇaVwnLWalm@@kkVVl™¦kIV`±n@w„Kƒƒk²™aƒVUUV¤™nkxmUkVWVnLUbVbƒ`kUU„mLU‚mX@`ÅbǚXbWLXŽ›n'],
  41437. 'encodeOffsets': [[
  41438. 106695,
  41439. 31062
  41440. ]]
  41441. }
  41442. },
  41443. {
  41444. 'type': 'Feature',
  41445. 'id': '5104',
  41446. 'properties': {
  41447. 'name': '攀枝花市',
  41448. 'cp': [
  41449. 101.6895,
  41450. 26.7133
  41451. ],
  41452. 'childNum': 3
  41453. },
  41454. 'geometry': {
  41455. 'type': 'Polygon',
  41456. 'coordinates': ['@@„b‚KÞnޙ@x„V@x˜n„Unš°¼šVš±mç²ÝÆ@šwnnšVWŽnôn_@¥‚™UaVƒ„bƙœÈ܎n¥Æ±VUwVƒmXÿmLkal¯km@k›ƒ@ƒ¯bkšVxmVUkk@Ua@¯˜»Un›mс@mz™m@īƒÑX¥Ç@ݙxU¦ƒšÅŽÇUkx@šlb„UWVX„mV@xĵ˱@@ޝxUšÆLnÆm„šx@nXL±lUUVwKWak@WxkbšÞƒŽĉbUn@‚ƒ@@xó¦„Ŏ'],
  41457. 'encodeOffsets': [[
  41458. 103602,
  41459. 27816
  41460. ]]
  41461. }
  41462. },
  41463. {
  41464. 'type': 'Feature',
  41465. 'id': '5114',
  41466. 'properties': {
  41467. 'name': '眉山市',
  41468. 'cp': [
  41469. 103.8098,
  41470. 30.0146
  41471. ],
  41472. 'childNum': 6
  41473. },
  41474. 'geometry': {
  41475. 'type': 'Polygon',
  41476. 'coordinates': ['@@„šVx°¦VanJVnš@„b„aVbkJ@XlJVwôôôV@zÞ¤@nƎÈLVa„K@x„L@w°ÇÆ@²„V˜ĀœmWXKWașÆa@_nWVnKVƒlV„_UaVamKXUWwnmmwœÑm£@ynUƒkWƒĉUkWVkkV±çkJmkKƒšƒK¯¦mnnxƒxVxVÇkUmk@ƒçķ™nmak°„LllUb@nmL@‚¯²¯aUJ@amIVaÅJn—m@mm¯L@»ƒŽ¯@ƒwUç„anlVƒWVƒÛkWç„KkwÇJk¹±V™UÅl™™ġV™²ÈƂnXĖV`Uš°a„b„£˜l„kVVn¼mVnbƒè™šÈn°š'],
  41477. 'encodeOffsets': [[
  41478. 105683,
  41479. 30685
  41480. ]]
  41481. }
  41482. },
  41483. {
  41484. 'type': 'Feature',
  41485. 'id': '5116',
  41486. 'properties': {
  41487. 'name': '广安市',
  41488. 'cp': [
  41489. 106.6333,
  41490. 30.4376
  41491. ],
  41492. 'childNum': 5
  41493. },
  41494. 'geometry': {
  41495. 'type': 'Polygon',
  41496. 'coordinates': ['@@„VlIV‚„kšVšĀ„Vkš°šlK™„ÈIUaVJlk²„˜y„Ln°„UW„nbVKl¥²L@blJnzW°œalV°Inô¯‚K„kšKkkƒbV™šmôLkéƒwVk@KnnšWlwn@laXL›ŽnXVW@X°a@„XKl™nw„@man™@w‚@na@„„@ƒw™ĕġġ™wUkUWb@mk@™¦ƒ¥mUÛb±yÅn@bml@kV@„ƒlknVbmVnlmš—bÇk¯bWyk@V_UamJ@I—@WaƒVXamIVWkUkbVaƒUUxƒ@VnkVU¼›bkKUxmK™„@WšƒxnV@n'],
  41497. 'encodeOffsets': [[
  41498. 108518,
  41499. 31208
  41500. ]]
  41501. }
  41502. },
  41503. {
  41504. 'type': 'Feature',
  41505. 'id': '5106',
  41506. 'properties': {
  41507. 'name': '德阳市',
  41508. 'cp': [
  41509. 104.48,
  41510. 31.1133
  41511. ],
  41512. 'childNum': 6
  41513. },
  41514. 'geometry': {
  41515. 'type': 'Polygon',
  41516. 'coordinates': ['@@nUW¥²é@šK„¥‚UÈÅôa@VÆLUxnKl„°V¥ÈmlÅÈV@£ƒWX¯lLln@UšƒVÅlwUm²U‚VVna@ƒ@KnbV™VwƃœI˜mXwWƒkIVwÝĕVUa™IƒèmKUzkmWnka@y™@l²kJƒ²Vb™VkšmJUšƧ¼@UV™bÇKUam@Ua™_¯VƒUk`¯LVÞǚżm܃„@Uȃx@l„ƒ¼ÇKkbWŽœšVxUbƦnxƦĊV'],
  41517. 'encodeOffsets': [[
  41518. 106594,
  41519. 32457
  41520. ]]
  41521. }
  41522. },
  41523. {
  41524. 'type': 'Feature',
  41525. 'id': '5110',
  41526. 'properties': {
  41527. 'name': '内江市',
  41528. 'cp': [
  41529. 104.8535,
  41530. 29.6136
  41531. ],
  41532. 'childNum': 4
  41533. },
  41534. 'geometry': {
  41535. 'type': 'Polygon',
  41536. 'coordinates': ['@@²èlUUllXĊVX„„lmV@zn¤›ÒnxmnXxlUnVlwšmU£VV„Ušbl±„„ƒL@x²mU_lJš¥UklU@ln@‚kXbmKUxÈbl„UU@`V@š²„mlLÞÑ@yU@„¯ôn‚™„W„zšaVlV@XwlKU£‚»—aVaUwm@mwUVUwkƒlVDzLlƒ„KV™m_@ykUmƒ@mU™çkKmxkIU‚Ý„@LUJ@n±„kº‚LXb™¼@mmIXa™@mamnkW™ƒKUƒƒxƒ_U`UklwUw™mUbƒV™²ƒakbƒmkn@`„UmҙšVxUb™I™`UƒaÝÈ'],
  41537. 'encodeOffsets': [[
  41538. 106774,
  41539. 30342
  41540. ]]
  41541. }
  41542. },
  41543. {
  41544. 'type': 'Feature',
  41545. 'id': '5109',
  41546. 'properties': {
  41547. 'name': '遂宁市',
  41548. 'cp': [
  41549. 105.5347,
  41550. 30.6683
  41551. ],
  41552. 'childNum': 4
  41553. },
  41554. 'geometry': {
  41555. 'type': 'Polygon',
  41556. 'coordinates': ['@@ÞĖUxlJX„Vb°@„xUÞmbUxƒbXbm¤VX@lk°ln@x„bÈ@lLVlVUXxlJšç²UlwV@@UÈWl™„L„w@w„V˜wXaWm²¹@»lī„¥„wƒ±šI@ƒšV@bl@kLUllUVVn@mmU„wX™ċbVb@VUkbmamšW@kƒa@™™k@ƒlaUa™@¯b@šmmwó@@lkXUa¯°›LU‚am„m@óƒkXUb±bU`kLm¦ƒbnVmbnVmô'],
  41557. 'encodeOffsets': [[
  41558. 107595,
  41559. 31270
  41560. ]]
  41561. }
  41562. },
  41563. {
  41564. 'type': 'Feature',
  41565. 'id': '5103',
  41566. 'properties': {
  41567. 'name': '自贡市',
  41568. 'cp': [
  41569. 104.6667,
  41570. 29.2786
  41571. ],
  41572. 'childNum': 3
  41573. },
  41574. 'geometry': {
  41575. 'type': 'Polygon',
  41576. 'coordinates': ['@@lIÞDŽbVŽš_šJVaUwš™nуV@_lm„nla„bš±„UVašnVxkxVlV_„`„wV„„LšlXnmnbš@WbnJ@nš»WaKl¹²ƒ@mVI@KރVlJnw@aW¯¯¯UmVanL°w@aƒk„mmU—xmƒULWxUUÝKōèU™KUƒƒkĉKƒL@ÆnX@x™‚Wȯ@Û»™nÇÜÝLka@b™KƒnUaVmƒ_ƒxkƒLX¦ƒJl¦ÅlVb°I@bnaUŽmlƒUV„UVƒIUŽ„Kš„„a@nml„„ƒŽnLl„našJUbV@'],
  41577. 'encodeOffsets': [[
  41578. 106752,
  41579. 30347
  41580. ]]
  41581. }
  41582. }
  41583. ],
  41584. 'UTF8Encoding': true
  41585. };
  41586. });define('echarts/util/mapData/geoJson/tai_wan_geo', [], function () {
  41587. return {
  41588. 'type': 'FeatureCollection',
  41589. 'features': [{
  41590. 'type': 'Feature',
  41591. 'id': '7100',
  41592. 'properties': {
  41593. 'name': '台湾',
  41594. 'cp': [
  41595. 121.0295,
  41596. 23.6082
  41597. ],
  41598. 'childNum': 1
  41599. },
  41600. 'geometry': {
  41601. 'type': 'Polygon',
  41602. 'coordinates': ['@@\\sŽ@pS}aekgKSu™SsMß`¡CqZ·be@Q^o@‹gieMp‹‰]}•}Ľc_Kk…{™ù“A¡r‰[uom@эĥJiq©mʼnq¯Bq]ÙYgSåk_gwU­isTE…“‘ĕiqiUEkue_‰OSsZ‹aWKo¡­q“ycY£w}‹ĩ™ĕS§Z©S™N¥SyLÑ¡±Ks^IY‰PdƒY[Uo†Fp}´\\¬\\j]ˆe܍ò‹¤¡–ā a\\bn™U㺹Ìs¼j®[cíȈEŽĝĆ`ļf¶Š®K|VØDdKGpVnU‚FjpH—F`†B’[pMºxÖjbpÎxp€¬‚|ΟÜÒCв®‚ÜAp„ZG~€Šd˜ÞàV¨|¸€`|Œ²tx~\\~|dFf^zG€ĄŚhœdL\\hĸž¼†ŠOªP®lV`p\\]Xpll˜æ¤œCpQ|oF}fMRi†NSon_²qämœM„NM‹\\•'],
  41603. 'encodeOffsets': [[
  41604. 124853,
  41605. 25650
  41606. ]]
  41607. }
  41608. }],
  41609. 'UTF8Encoding': true
  41610. };
  41611. });define('echarts/util/mapData/geoJson/tian_jin_geo', [], function () {
  41612. return {
  41613. 'type': 'FeatureCollection',
  41614. 'features': [
  41615. {
  41616. 'type': 'Feature',
  41617. 'id': '120225',
  41618. 'properties': {
  41619. 'name': '蓟县',
  41620. 'cp': [
  41621. 117.4672,
  41622. 40.004
  41623. ],
  41624. 'childNum': 1
  41625. },
  41626. 'geometry': {
  41627. 'type': 'Polygon',
  41628. 'coordinates': ['@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOL“lu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB'],
  41629. 'encodeOffsets': [[
  41630. 120575,
  41631. 41009
  41632. ]]
  41633. }
  41634. },
  41635. {
  41636. 'type': 'Feature',
  41637. 'id': '120114',
  41638. 'properties': {
  41639. 'name': '武清区',
  41640. 'cp': [
  41641. 117.0621,
  41642. 39.4121
  41643. ],
  41644. 'childNum': 1
  41645. },
  41646. 'geometry': {
  41647. 'type': 'Polygon',
  41648. 'coordinates': ['@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\C@CT`FHC@\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\BPJXC^FAVNFCHFB@FFH@JF@\\ABCFD\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@D˜UÂmR@FBL@BD'],
  41649. 'encodeOffsets': [[
  41650. 119959,
  41651. 40574
  41652. ]]
  41653. }
  41654. },
  41655. {
  41656. 'type': 'Feature',
  41657. 'id': '120115',
  41658. 'properties': {
  41659. 'name': '宝坻区',
  41660. 'cp': [
  41661. 117.4274,
  41662. 39.5913
  41663. ],
  41664. 'childNum': 1
  41665. },
  41666. 'geometry': {
  41667. 'type': 'Polygon',
  41668. 'coordinates': ['@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\BFOLGXMXW\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX'],
  41669. 'encodeOffsets': [[
  41670. 119959,
  41671. 40574
  41672. ]]
  41673. }
  41674. },
  41675. {
  41676. 'type': 'Feature',
  41677. 'id': '120223',
  41678. 'properties': {
  41679. 'name': '静海县',
  41680. 'cp': [
  41681. 116.9824,
  41682. 38.8312
  41683. ],
  41684. 'childNum': 1
  41685. },
  41686. 'geometry': {
  41687. 'type': 'Polygon',
  41688. 'coordinates': ['@@NGFMDATCNDR@CCbINEHNJA@C\\EEGVE@IhE–[˜w”epc¢·²›^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@C‹Q@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`aˆ@VZzKDkJBLNXGDqKEWE@cFEFA@ƒISIi@@KMABJGBcMuFEzGVH\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@'],
  41689. 'encodeOffsets': [[
  41690. 119688,
  41691. 40010
  41692. ]]
  41693. }
  41694. },
  41695. {
  41696. 'type': 'Feature',
  41697. 'id': '120221',
  41698. 'properties': {
  41699. 'name': '宁河县',
  41700. 'cp': [
  41701. 117.6801,
  41702. 39.3853
  41703. ],
  41704. 'childNum': 1
  41705. },
  41706. 'geometry': {
  41707. 'type': 'Polygon',
  41708. 'coordinates': ['@@BFLBFJXDb@DEFD\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBO‚bLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\XUXF\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoƒGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs‡@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE‘~CAIFDPEHGEQPHJADFJGHCJLB'],
  41709. 'encodeOffsets': [[
  41710. 120145,
  41711. 40295
  41712. ]]
  41713. }
  41714. },
  41715. {
  41716. 'type': 'Feature',
  41717. 'id': '120109',
  41718. 'properties': {
  41719. 'name': '大港区',
  41720. 'cp': [
  41721. 117.3875,
  41722. 38.757
  41723. ],
  41724. 'childNum': 1
  41725. },
  41726. 'geometry': {
  41727. 'type': 'Polygon',
  41728. 'coordinates': ['@@JFFL°_`ONJKDDFIFZN xlb~yFVNRŒrdJGzDPVFBCTNND\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëC—b…™@—KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEB‰MgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\LjGR@NC@@G@HO@AfR@DŒM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ'],
  41729. 'encodeOffsets': [[
  41730. 120065,
  41731. 39771
  41732. ]]
  41733. }
  41734. },
  41735. {
  41736. 'type': 'Feature',
  41737. 'id': '120107',
  41738. 'properties': {
  41739. 'name': '塘沽区',
  41740. 'cp': [
  41741. 117.6801,
  41742. 38.9987
  41743. ],
  41744. 'childNum': 1
  41745. },
  41746. 'geometry': {
  41747. 'type': 'Polygon',
  41748. 'coordinates': ['@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\]\\@@cFDˆ@nACOMW@M@ITURBRZNHNWRQšoO•j½f‡cqŸAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NƒDTŽLJrQTHFXZFB`'],
  41749. 'encodeOffsets': [[
  41750. 120391,
  41751. 40118
  41752. ]]
  41753. }
  41754. },
  41755. {
  41756. 'type': 'Feature',
  41757. 'id': '120111',
  41758. 'properties': {
  41759. 'name': '西青区',
  41760. 'cp': [
  41761. 117.1829,
  41762. 39.0022
  41763. ],
  41764. 'childNum': 1
  41765. },
  41766. 'geometry': {
  41767. 'type': 'Polygon',
  41768. 'coordinates': ['@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC„{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±œ¡¸od“f—x•\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH'],
  41769. 'encodeOffsets': [[
  41770. 119688,
  41771. 40010
  41772. ]]
  41773. }
  41774. },
  41775. {
  41776. 'type': 'Feature',
  41777. 'id': '120113',
  41778. 'properties': {
  41779. 'name': '北辰区',
  41780. 'cp': [
  41781. 117.1761,
  41782. 39.2548
  41783. ],
  41784. 'childNum': 1
  41785. },
  41786. 'geometry': {
  41787. 'type': 'Polygon',
  41788. 'coordinates': ['@@ROHFFGCOJEDB’}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKA…L…FKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF'],
  41789. 'encodeOffsets': [[
  41790. 120139,
  41791. 40273
  41792. ]]
  41793. }
  41794. },
  41795. {
  41796. 'type': 'Feature',
  41797. 'id': '120110',
  41798. 'properties': {
  41799. 'name': '东丽区',
  41800. 'cp': [
  41801. 117.4013,
  41802. 39.1223
  41803. ],
  41804. 'childNum': 1
  41805. },
  41806. 'geometry': {
  41807. 'type': 'Polygon',
  41808. 'coordinates': ['@@ZV\\N^L^FJFFJIbSCAFTJTIpKDGLB†E†KLBjHTVNBZWbE\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKIS„C@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJF‡PIhBD\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^'],
  41809. 'encodeOffsets': [[
  41810. 120048,
  41811. 40134
  41812. ]]
  41813. }
  41814. },
  41815. {
  41816. 'type': 'Feature',
  41817. 'id': '120108',
  41818. 'properties': {
  41819. 'name': '汉沽区',
  41820. 'cp': [
  41821. 117.8888,
  41822. 39.2191
  41823. ],
  41824. 'childNum': 1
  41825. },
  41826. 'geometry': {
  41827. 'type': 'Polygon',
  41828. 'coordinates': ['@@LMEI\\MTABKN@FCDMH@COAcH[AoēA™M¡Wa[Meq™pQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\FNEEYBCnQGMDCDE\\IHFp„EFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@'],
  41829. 'encodeOffsets': [[
  41830. 120859,
  41831. 40235
  41832. ]]
  41833. }
  41834. },
  41835. {
  41836. 'type': 'Feature',
  41837. 'id': '120112',
  41838. 'properties': {
  41839. 'name': '津南区',
  41840. 'cp': [
  41841. 117.3958,
  41842. 38.9603
  41843. ],
  41844. 'childNum': 1
  41845. },
  41846. 'geometry': {
  41847. 'type': 'Polygon',
  41848. 'coordinates': ['@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycI‹qMQEU}zkaŸwENRDENB@ADG@@HF@YnaAOFƒ|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH'],
  41849. 'encodeOffsets': [[
  41850. 120045,
  41851. 39982
  41852. ]]
  41853. }
  41854. },
  41855. {
  41856. 'type': 'Feature',
  41857. 'id': '120103',
  41858. 'properties': {
  41859. 'name': '河西区',
  41860. 'cp': [
  41861. 117.2365,
  41862. 39.0804
  41863. ],
  41864. 'childNum': 1
  41865. },
  41866. 'geometry': {
  41867. 'type': 'Polygon',
  41868. 'coordinates': ['@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt'],
  41869. 'encodeOffsets': [[
  41870. 119992,
  41871. 40041
  41872. ]]
  41873. }
  41874. },
  41875. {
  41876. 'type': 'Feature',
  41877. 'id': '120102',
  41878. 'properties': {
  41879. 'name': '河东区',
  41880. 'cp': [
  41881. 117.2571,
  41882. 39.1209
  41883. ],
  41884. 'childNum': 1
  41885. },
  41886. 'geometry': {
  41887. 'type': 'Polygon',
  41888. 'coordinates': ['@@ZBVFFIGABEEA@KXBDOFM[EACJgˆOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN'],
  41889. 'encodeOffsets': [[
  41890. 120063,
  41891. 40098
  41892. ]]
  41893. }
  41894. },
  41895. {
  41896. 'type': 'Feature',
  41897. 'id': '120104',
  41898. 'properties': {
  41899. 'name': '南开区',
  41900. 'cp': [
  41901. 117.1527,
  41902. 39.1065
  41903. ],
  41904. 'childNum': 1
  41905. },
  41906. 'geometry': {
  41907. 'type': 'Polygon',
  41908. 'coordinates': ['@@NMVDCG\\E^B@HlB@YEDS@C…HsNSiMGDebUXAJEjidVTAFHDFJ'],
  41909. 'encodeOffsets': [[
  41910. 119940,
  41911. 40093
  41912. ]]
  41913. }
  41914. },
  41915. {
  41916. 'type': 'Feature',
  41917. 'id': '120105',
  41918. 'properties': {
  41919. 'name': '河北区',
  41920. 'cp': [
  41921. 117.2145,
  41922. 39.1615
  41923. ],
  41924. 'childNum': 1
  41925. },
  41926. 'geometry': {
  41927. 'type': 'Polygon',
  41928. 'coordinates': ['@@DBXFADB@L@LFHM\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF'],
  41929. 'encodeOffsets': [[
  41930. 119980,
  41931. 40125
  41932. ]]
  41933. }
  41934. },
  41935. {
  41936. 'type': 'Feature',
  41937. 'id': '120106',
  41938. 'properties': {
  41939. 'name': '红桥区',
  41940. 'cp': [
  41941. 117.1596,
  41942. 39.1663
  41943. ],
  41944. 'childNum': 1
  41945. },
  41946. 'geometry': {
  41947. 'type': 'Polygon',
  41948. 'coordinates': ['@@J\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^'],
  41949. 'encodeOffsets': [[
  41950. 119942,
  41951. 40112
  41952. ]]
  41953. }
  41954. },
  41955. {
  41956. 'type': 'Feature',
  41957. 'id': '120101',
  41958. 'properties': {
  41959. 'name': '和平区',
  41960. 'cp': [
  41961. 117.2008,
  41962. 39.1189
  41963. ],
  41964. 'childNum': 1
  41965. },
  41966. 'geometry': {
  41967. 'type': 'Polygon',
  41968. 'coordinates': ['@@D†T@FCHG\\FFOROMEgYc@'],
  41969. 'encodeOffsets': [[
  41970. 119992,
  41971. 40041
  41972. ]]
  41973. }
  41974. }
  41975. ],
  41976. 'UTF8Encoding': true
  41977. };
  41978. });define('echarts/util/mapData/geoJson/world_geo', [], function () {
  41979. return {
  41980. 'type': 'FeatureCollection',
  41981. 'offset': {
  41982. 'x': 170,
  41983. 'y': 90
  41984. },
  41985. 'features': [
  41986. {
  41987. 'type': 'Feature',
  41988. 'id': 'AFG',
  41989. 'properties': { 'name': 'Afghanistan' },
  41990. 'geometry': {
  41991. 'type': 'Polygon',
  41992. 'coordinates': ['@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾njƀ̚ІɣʪҴMوǯʲĹ،˒˰Nj˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ–͑ɳ̡ߛ€ͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ‡܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ'],
  41993. 'encodeOffsets': [[
  41994. 62680,
  41995. 36506
  41996. ]]
  41997. }
  41998. },
  41999. {
  42000. 'type': 'Feature',
  42001. 'id': 'AGO',
  42002. 'properties': { 'name': 'Angola' },
  42003. 'geometry': {
  42004. 'type': 'MultiPolygon',
  42005. 'coordinates': [
  42006. ['@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭—ŵÏԃϞկ~ԉƝЙDžÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ['],
  42007. ['@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ']
  42008. ],
  42009. 'encodeOffsets': [
  42010. [[
  42011. 16719,
  42012. -6018
  42013. ]],
  42014. [[
  42015. 12736,
  42016. -5820
  42017. ]]
  42018. ]
  42019. }
  42020. },
  42021. {
  42022. 'type': 'Feature',
  42023. 'id': 'ALB',
  42024. 'properties': { 'name': 'Albania' },
  42025. 'geometry': {
  42026. 'type': 'Polygon',
  42027. 'coordinates': ['@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂'],
  42028. 'encodeOffsets': [[
  42029. 21085,
  42030. 42860
  42031. ]]
  42032. }
  42033. },
  42034. {
  42035. 'type': 'Feature',
  42036. 'id': 'ARE',
  42037. 'properties': { 'name': 'United Arab Emirates' },
  42038. 'geometry': {
  42039. 'type': 'Polygon',
  42040. 'coordinates': ['@@Ƭ¤ŒɱڂƂ۞uԖ{ֺ֪ظՠՎԮdž˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝDZᡋъ͏࡚Ț'],
  42041. 'encodeOffsets': [[
  42042. 52818,
  42043. 24828
  42044. ]]
  42045. }
  42046. },
  42047. {
  42048. 'type': 'Feature',
  42049. 'id': 'ARG',
  42050. 'properties': { 'name': 'Argentina' },
  42051. 'geometry': {
  42052. 'type': 'MultiPolygon',
  42053. 'coordinates': [
  42054. ['@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп'],
  42055. ['@@Ӵ؇͠ڰॠ“ƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢ƎݐжLjфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξDŽę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ']
  42056. ],
  42057. 'encodeOffsets': [
  42058. [[
  42059. -67072,
  42060. -56524
  42061. ]],
  42062. [[
  42063. -66524,
  42064. -22605
  42065. ]]
  42066. ]
  42067. }
  42068. },
  42069. {
  42070. 'type': 'Feature',
  42071. 'id': 'ARM',
  42072. 'properties': { 'name': 'Armenia' },
  42073. 'geometry': {
  42074. 'type': 'Polygon',
  42075. 'coordinates': ['@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒'],
  42076. 'encodeOffsets': [[
  42077. 44629,
  42078. 42079
  42079. ]]
  42080. }
  42081. },
  42082. {
  42083. 'type': 'Feature',
  42084. 'id': 'ATF',
  42085. 'properties': { 'name': 'French Southern and Antarctic Lands' },
  42086. 'geometry': {
  42087. 'type': 'Polygon',
  42088. 'coordinates': ['@@ը˃ߐĿˆDžɽϣಇÃq҂ŮΎÊǢ'],
  42089. 'encodeOffsets': [[
  42090. 70590,
  42091. -49792
  42092. ]]
  42093. }
  42094. },
  42095. {
  42096. 'type': 'Feature',
  42097. 'id': 'AUS',
  42098. 'properties': { 'name': 'Australia' },
  42099. 'geometry': {
  42100. 'type': 'MultiPolygon',
  42101. 'coordinates': [
  42102. ['@@ߺ́ҜŘپNJԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫ€ԭܘŗֈӝܸtϬռõ'],
  42103. ['@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػʼnׁªˇӕ̇व‰ޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗljѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕœуʁЗˋؕ֛Bࢽ՜ҋDŽlӖкŘƚȒ‡̠ĺאģӼѻࡖƏӒ˜ӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐœͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿDZҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠNJϬеɡ͉҇ͻ˿ƒĮͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنLjǠŽˬȮѾdžҦtʈ̸̾ʂЩÎՃȾķ˜Λ̨ёÚӇ‡̥']
  42104. ],
  42105. 'encodeOffsets': [
  42106. [[
  42107. 148888,
  42108. -41771
  42109. ]],
  42110. [[
  42111. 147008,
  42112. -14093
  42113. ]]
  42114. ]
  42115. }
  42116. },
  42117. {
  42118. 'type': 'Feature',
  42119. 'id': 'AUT',
  42120. 'properties': { 'name': 'Austria' },
  42121. 'geometry': {
  42122. 'type': 'Polygon',
  42123. 'coordinates': ['@@Û΃ӁCǎǻ˧էLJƗܽsщȏۛÞயɐȉ̊ࠧƣĭDžԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ•׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅'],
  42124. 'encodeOffsets': [[
  42125. 17388,
  42126. 49279
  42127. ]]
  42128. }
  42129. },
  42130. {
  42131. 'type': 'Feature',
  42132. 'id': 'AZE',
  42133. 'properties': { 'name': 'Azerbaijan' },
  42134. 'geometry': {
  42135. 'type': 'MultiPolygon',
  42136. 'coordinates': [
  42137. ['@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv'],
  42138. ['@@ϊËƞɈԈͺѴѵђ׭ϺŸʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘIJбҔɔŚʀ…׀ԙ']
  42139. ],
  42140. 'encodeOffsets': [
  42141. [[
  42142. 46083,
  42143. 40694
  42144. ]],
  42145. [[
  42146. 48511,
  42147. 42210
  42148. ]]
  42149. ]
  42150. }
  42151. },
  42152. {
  42153. 'type': 'Feature',
  42154. 'id': 'BDI',
  42155. 'properties': { 'name': 'Burundi' },
  42156. 'geometry': {
  42157. 'type': 'Polygon',
  42158. 'coordinates': ['@@Á০ɃϢԜßʲӎҀŸͧǸȏT˗ȹǭ͛ѫ̧̥΍Ÿ'],
  42159. 'encodeOffsets': [[
  42160. 30045,
  42161. -4607
  42162. ]]
  42163. }
  42164. },
  42165. {
  42166. 'type': 'Feature',
  42167. 'id': 'BEL',
  42168. 'properties': { 'name': 'Belgium' },
  42169. 'geometry': {
  42170. 'type': 'Polygon',
  42171. 'coordinates': ['@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ'],
  42172. 'encodeOffsets': [[
  42173. 3395,
  42174. 52579
  42175. ]]
  42176. }
  42177. },
  42178. {
  42179. 'type': 'Feature',
  42180. 'id': 'BEN',
  42181. 'properties': { 'name': 'Benin' },
  42182. 'geometry': {
  42183. 'type': 'Polygon',
  42184. 'coordinates': ['@@ۛįȹ׆žኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ'],
  42185. 'encodeOffsets': [[
  42186. 2757,
  42187. 6410
  42188. ]]
  42189. }
  42190. },
  42191. {
  42192. 'type': 'Feature',
  42193. 'id': 'BFA',
  42194. 'properties': { 'name': 'Burkina Faso' },
  42195. 'geometry': {
  42196. 'type': 'Polygon',
  42197. 'coordinates': ['@@ֹɐϽ‹̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖdžˀ޼ΒҦŢɀLJՠJáСŔϣӀչ€НॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم'],
  42198. 'encodeOffsets': [[
  42199. -2895,
  42200. 9874
  42201. ]]
  42202. }
  42203. },
  42204. {
  42205. 'type': 'Feature',
  42206. 'id': 'BGD',
  42207. 'properties': { 'name': 'Bangladesh' },
  42208. 'geometry': {
  42209. 'type': 'Polygon',
  42210. 'coordinates': ['@@i׽̉ŶÆگʉѬµєDžКΕӨޟ’ü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯'],
  42211. 'encodeOffsets': [[
  42212. 94897,
  42213. 22571
  42214. ]]
  42215. }
  42216. },
  42217. {
  42218. 'type': 'Feature',
  42219. 'id': 'BGR',
  42220. 'properties': { 'name': 'Bulgaria' },
  42221. 'geometry': {
  42222. 'type': 'Polygon',
  42223. 'coordinates': ['@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ'],
  42224. 'encodeOffsets': [[
  42225. 23201,
  42226. 45297
  42227. ]]
  42228. }
  42229. },
  42230. {
  42231. 'type': 'Feature',
  42232. 'id': 'BHS',
  42233. 'properties': { 'name': 'The Bahamas' },
  42234. 'geometry': {
  42235. 'type': 'MultiPolygon',
  42236. 'coordinates': [
  42237. ['@@ȵ£ɇӜ̿ʐǾՔʨ‘ۣ̎Jӥ'],
  42238. ['@@ࣷƅÏ̴Ђäֈ{~ɕ'],
  42239. ['@@ƟׯƷņ`ѮϓͪCĪڐϗ']
  42240. ],
  42241. 'encodeOffsets': [
  42242. [[
  42243. -79395,
  42244. 24330
  42245. ]],
  42246. [[
  42247. -79687,
  42248. 27218
  42249. ]],
  42250. [[
  42251. -78848,
  42252. 27229
  42253. ]]
  42254. ]
  42255. }
  42256. },
  42257. {
  42258. 'type': 'Feature',
  42259. 'id': 'BIH',
  42260. 'properties': { 'name': 'Bosnia and Herzegovina' },
  42261. 'geometry': {
  42262. 'type': 'Polygon',
  42263. 'coordinates': ['@@̦FȿσМ͓ūЃȡ™ƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\Ϟȅ'],
  42264. 'encodeOffsets': [[
  42265. 19462,
  42266. 45937
  42267. ]]
  42268. }
  42269. },
  42270. {
  42271. 'type': 'Feature',
  42272. 'id': 'BLR',
  42273. 'properties': { 'name': 'Belarus' },
  42274. 'geometry': {
  42275. 'type': 'Polygon',
  42276. 'coordinates': ['@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳˆljÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌™ϊ'],
  42277. 'encodeOffsets': [[
  42278. 24048,
  42279. 55207
  42280. ]]
  42281. }
  42282. },
  42283. {
  42284. 'type': 'Feature',
  42285. 'id': 'BLZ',
  42286. 'properties': { 'name': 'Belize' },
  42287. 'geometry': {
  42288. 'type': 'Polygon',
  42289. 'coordinates': ['@@OŮĸžƴı̞ԔDŽZHūDŽGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ'],
  42290. 'encodeOffsets': [[
  42291. -91282,
  42292. 18236
  42293. ]]
  42294. }
  42295. },
  42296. {
  42297. 'type': 'Feature',
  42298. 'id': 'BMU',
  42299. 'properties': { 'name': 'Bermuda' },
  42300. 'geometry': {
  42301. 'type': 'Polygon',
  42302. 'coordinates': ['@@OEMA]NOGNG\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC'],
  42303. 'encodeOffsets': [[
  42304. -66334,
  42305. 33083
  42306. ]]
  42307. }
  42308. },
  42309. {
  42310. 'type': 'Feature',
  42311. 'id': 'BOL',
  42312. 'properties': { 'name': 'Bolivia' },
  42313. 'geometry': {
  42314. 'type': 'Polygon',
  42315. 'coordinates': ['@@य़”͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟšӟǐʕZγʓa͒এྖ“ūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ'],
  42316. 'encodeOffsets': [[
  42317. -64354,
  42318. -22563
  42319. ]]
  42320. }
  42321. },
  42322. {
  42323. 'type': 'Feature',
  42324. 'id': 'BRA',
  42325. 'properties': { 'name': 'Brazil' },
  42326. 'geometry': {
  42327. 'type': 'Polygon',
  42328. 'coordinates': ['@@૮ନॆࠄ֠΂ۼҪjڤуӞеLJǒӜŖӼBҦ̡ƴ̿Ƌ̻œį͔ýޔƿʤ֥ɪ΃ǏࢱLjÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ”͑ঐʔbYδǏʖ™ӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶DzΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێNJŔŴݴŸϚᘰpθſӔύ̬LؐӀƒǚē†͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆnjʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ’֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪšȜȗʼnσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥Ģǒˆ˜ϠƦ˚ɢҬíȲŠҚçøǢƗǘĎʐͺõЈĒӔDZξǥʺɪȊ•ŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤ƁŠࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴŽఔ۝੸व٪ʏܖ‘̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę'],
  42329. 'encodeOffsets': [[
  42330. -59008,
  42331. -30941
  42332. ]]
  42333. }
  42334. },
  42335. {
  42336. 'type': 'Feature',
  42337. 'id': 'BRN',
  42338. 'properties': { 'name': 'Brunei' },
  42339. 'geometry': {
  42340. 'type': 'Polygon',
  42341. 'coordinates': ['@@ͬ̾܎Ң›Я·՛Б€ǭ˹ϥѦ'],
  42342. 'encodeOffsets': [[
  42343. 116945,
  42344. 4635
  42345. ]]
  42346. }
  42347. },
  42348. {
  42349. 'type': 'Feature',
  42350. 'id': 'BTN',
  42351. 'properties': { 'name': 'Bhutan' },
  42352. 'geometry': {
  42353. 'type': 'Polygon',
  42354. 'coordinates': ['@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ'],
  42355. 'encodeOffsets': [[
  42356. 93898,
  42357. 28439
  42358. ]]
  42359. }
  42360. },
  42361. {
  42362. 'type': 'Feature',
  42363. 'id': 'BWA',
  42364. 'properties': { 'name': 'Botswana' },
  42365. 'geometry': {
  42366. 'type': 'Polygon',
  42367. 'coordinates': ['@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤˆ|Ჾش„ಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ'],
  42368. 'encodeOffsets': [[
  42369. 26265,
  42370. -18980
  42371. ]]
  42372. }
  42373. },
  42374. {
  42375. 'type': 'Feature',
  42376. 'id': 'CAF',
  42377. 'properties': { 'name': 'Central African Republic' },
  42378. 'geometry': {
  42379. 'type': 'Polygon',
  42380. 'coordinates': ['@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧDzधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩Ƙԅѻѯޱėʐ›Ϧϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜'],
  42381. 'encodeOffsets': [[
  42382. 15647,
  42383. 7601
  42384. ]]
  42385. }
  42386. },
  42387. {
  42388. 'type': 'Feature',
  42389. 'id': 'CAN',
  42390. 'properties': { 'name': 'Canada' },
  42391. 'geometry': {
  42392. 'type': 'MultiPolygon',
  42393. 'coordinates': [
  42394. ['@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С'],
  42395. ['@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ'],
  42396. ['@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ'],
  42397. ['@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝ‹փǂǾیɻńইܯԅ†צЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶™Njɫ҅Չ'],
  42398. ['@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ'],
  42399. ['@@͡ѳχîəʢ Î͖ʦΆkɈǣ'],
  42400. ['@@ঝҧץnǿɪزϲ଼SiǍ'],
  42401. ['@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å'],
  42402. ['@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ'],
  42403. ['@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦDžԠ͍'],
  42404. ['@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓ֍܆ฤ۞഍ƒणĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ€¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻʼnࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘIJܒƦࣆԋࣴьࡩΦժ˼৾žڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ'],
  42405. ['@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈ›રƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬Nj'],
  42406. ['@@݉ևಹך˸Ş૸’ٔȁ'],
  42407. ['@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ˜̠ИÈነěชң'],
  42408. ['@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի'],
  42409. ['@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР'],
  42410. ['@@࣓عय़ŒԽ݆`кѮΨ࠰ɮც‡ྈȱళݟ৉Ǎ'],
  42411. ['@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν'],
  42412. ['@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ'],
  42413. ['@@ٞϵ€љϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ'],
  42414. ['@@̙͢ݠƘࢢ™ƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ij୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ'],
  42415. ['@@ढ˓ကFܨˡȑ́८ȍՔȧଊ™௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ'],
  42416. ['@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ'],
  42417. ['@@ϣy༽Âɡɼၜ]מƻĵĩ'],
  42418. ['@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ'],
  42419. ['@@৽ǏඉBbŤࡴʦҌદǝ'],
  42420. ['@@కǥۃȚέ͂áΎજ‘ӪÅ৐̇ɫ̣'],
  42421. ['@@͜Ε൏Ĥ൩˘ሏŒߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ'],
  42422. ['@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև'],
  42423. ['@@ᖢßᅮŅ໤ɫ™ɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹLjڼ͘๰Ȩʄ̊஋͠ΥѠᘞ—ڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దLjঘ‚࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲ–Ҁĝ᝚ƚᆔÁᆒÁ']
  42424. ],
  42425. 'encodeOffsets': [
  42426. [[
  42427. -65192,
  42428. 47668
  42429. ]],
  42430. [[
  42431. -63289,
  42432. 50284
  42433. ]],
  42434. [[
  42435. -126474,
  42436. 49675
  42437. ]],
  42438. [[
  42439. -57481,
  42440. 51904
  42441. ]],
  42442. [[
  42443. -135895,
  42444. 55337
  42445. ]],
  42446. [[
  42447. -81168,
  42448. 63651
  42449. ]],
  42450. [[
  42451. -83863,
  42452. 64216
  42453. ]],
  42454. [[
  42455. -87205,
  42456. 67234
  42457. ]],
  42458. [[
  42459. -77686,
  42460. 68761
  42461. ]],
  42462. [[
  42463. -97943,
  42464. 70767
  42465. ]],
  42466. [[
  42467. -92720,
  42468. 71166
  42469. ]],
  42470. [[
  42471. -116907,
  42472. 74877
  42473. ]],
  42474. [[
  42475. -107008,
  42476. 75183
  42477. ]],
  42478. [[
  42479. -78172,
  42480. 74858
  42481. ]],
  42482. [[
  42483. -88639,
  42484. 74914
  42485. ]],
  42486. [[
  42487. -102764,
  42488. 75617
  42489. ]],
  42490. [[
  42491. -95433,
  42492. 74519
  42493. ]],
  42494. [[
  42495. -123351,
  42496. 73097
  42497. ]],
  42498. [[
  42499. -95859,
  42500. 76780
  42501. ]],
  42502. [[
  42503. -100864,
  42504. 78562
  42505. ]],
  42506. [[
  42507. -110808,
  42508. 78031
  42509. ]],
  42510. [[
  42511. -96956,
  42512. 78949
  42513. ]],
  42514. [[
  42515. -118987,
  42516. 79509
  42517. ]],
  42518. [[
  42519. -96092,
  42520. 79381
  42521. ]],
  42522. [[
  42523. -112831,
  42524. 79562
  42525. ]],
  42526. [[
  42527. -112295,
  42528. 80489
  42529. ]],
  42530. [[
  42531. -98130,
  42532. 79931
  42533. ]],
  42534. [[
  42535. -102461,
  42536. 80205
  42537. ]],
  42538. [[
  42539. -89108,
  42540. 81572
  42541. ]],
  42542. [[
  42543. -70144,
  42544. 85101
  42545. ]]
  42546. ]
  42547. }
  42548. },
  42549. {
  42550. 'type': 'Feature',
  42551. 'id': 'CHE',
  42552. 'properties': { 'name': 'Switzerland' },
  42553. 'geometry': {
  42554. 'type': 'Polygon',
  42555. 'coordinates': ['@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ'],
  42556. 'encodeOffsets': [[
  42557. 9825,
  42558. 48666
  42559. ]]
  42560. }
  42561. },
  42562. {
  42563. 'type': 'Feature',
  42564. 'id': 'CHL',
  42565. 'properties': { 'name': 'Chile' },
  42566. 'geometry': {
  42567. 'type': 'MultiPolygon',
  42568. 'coordinates': [
  42569. ['@@Bም࣒@Ԓw˧ͻܛʻЭ‚ӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı'],
  42570. ['@@͢୅؆ŘĺɁ˿ࢍࣵг€ඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠ„Ԩപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह']
  42571. ],
  42572. 'encodeOffsets': [
  42573. [[
  42574. -70281,
  42575. -53899
  42576. ]],
  42577. [[
  42578. -69857,
  42579. -22010
  42580. ]]
  42581. ]
  42582. }
  42583. },
  42584. {
  42585. 'type': 'Feature',
  42586. 'id': 'CHN',
  42587. 'properties': { 'name': 'China' },
  42588. 'geometry': {
  42589. 'type': 'MultiPolygon',
  42590. 'coordinates': [
  42591. [
  42592. '@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ',
  42593. '@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ'
  42594. ],
  42595. ['@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩŒЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏ„ϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮ”ۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾ő‚іͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎˆ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંIJͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాŒঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ']
  42596. ],
  42597. 'encodeOffsets': [
  42598. [
  42599. [
  42600. 124701,
  42601. 24980
  42602. ],
  42603. [
  42604. 112988,
  42605. 19127
  42606. ]
  42607. ],
  42608. [[
  42609. 130722,
  42610. 50955
  42611. ]]
  42612. ]
  42613. }
  42614. },
  42615. {
  42616. 'type': 'Feature',
  42617. 'id': 'CIV',
  42618. 'properties': { 'name': 'Ivory Coast' },
  42619. 'geometry': {
  42620. 'type': 'Polygon',
  42621. 'coordinates': ['@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫNjvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝnjĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾŒֺɏɠ஡Ο۷ɕेθܣ›ͧ'],
  42622. 'encodeOffsets': [[
  42623. -2924,
  42624. 5115
  42625. ]]
  42626. }
  42627. },
  42628. {
  42629. 'type': 'Feature',
  42630. 'id': 'CMR',
  42631. 'properties': { 'name': 'Cameroon' },
  42632. 'geometry': {
  42633. 'type': 'Polygon',
  42634. 'coordinates': ['@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךDzȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰ‚ˌʂ¶ͮ՟Ê֏‹֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓œϥĘʏÓґڛȤڷɜ੗'],
  42635. 'encodeOffsets': [[
  42636. 13390,
  42637. 2322
  42638. ]]
  42639. }
  42640. },
  42641. {
  42642. 'type': 'Feature',
  42643. 'id': 'COD',
  42644. 'properties': { 'name': 'Democratic Republic of the Congo' },
  42645. 'geometry': {
  42646. 'type': 'Polygon',
  42647. 'coordinates': ['@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍Oهʍɹ‹ԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\̍ķʑh΋œşʼɊʀμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆːƒ۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨDZ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶDzȦΫ݊֏'],
  42648. 'encodeOffsets': [[
  42649. 31574,
  42650. 3594
  42651. ]]
  42652. }
  42653. },
  42654. {
  42655. 'type': 'Feature',
  42656. 'id': 'COG',
  42657. 'properties': { 'name': 'Republic of the Congo' },
  42658. 'geometry': {
  42659. 'type': 'Polygon',
  42660. 'coordinates': ['@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆Зݐ•ʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅ„ۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ'],
  42661. 'encodeOffsets': [[
  42662. 13308,
  42663. -4895
  42664. ]]
  42665. }
  42666. },
  42667. {
  42668. 'type': 'Feature',
  42669. 'id': 'COL',
  42670. 'properties': { 'name': 'Colombia' },
  42671. 'geometry': {
  42672. 'type': 'Polygon',
  42673. 'coordinates': ['@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ڛтȢ̦иÊΞՆ͐Ѵ̳ȦDŽӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ij̵ˆǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟ†ȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē…͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā'],
  42674. 'encodeOffsets': [[
  42675. -77182,
  42676. -155
  42677. ]]
  42678. }
  42679. },
  42680. {
  42681. 'type': 'Feature',
  42682. 'id': 'CRI',
  42683. 'properties': { 'name': 'Costa Rica' },
  42684. 'geometry': {
  42685. 'type': 'Polygon',
  42686. 'coordinates': ['@@җȆǟǮĬƤ‰ȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖnjŴňֆɝȖŊˊéƔǥʜÇȪDzɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ'],
  42687. 'encodeOffsets': [[
  42688. -84956,
  42689. 8423
  42690. ]]
  42691. }
  42692. },
  42693. {
  42694. 'type': 'Feature',
  42695. 'id': 'CUB',
  42696. 'properties': { 'name': 'Cuba' },
  42697. 'geometry': {
  42698. 'type': 'Polygon',
  42699. 'coordinates': ['@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\ԆǟÕʁئ“ٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ'],
  42700. 'encodeOffsets': [[
  42701. -84242,
  42702. 23746
  42703. ]]
  42704. }
  42705. },
  42706. {
  42707. 'type': 'Feature',
  42708. 'id': '-99',
  42709. 'properties': { 'name': 'Northern Cyprus' },
  42710. 'geometry': {
  42711. 'type': 'Polygon',
  42712. 'coordinates': ['@@ÐJŨȮ؄Yކʢ֧ΧÔƿęˆLJÙűj¥iĎѾNjVɫïƿ¬'],
  42713. 'encodeOffsets': [[
  42714. 33518,
  42715. 35984
  42716. ]]
  42717. }
  42718. },
  42719. {
  42720. 'type': 'Feature',
  42721. 'id': 'CYP',
  42722. 'properties': { 'name': 'Cyprus' },
  42723. 'geometry': {
  42724. 'type': 'Polygon',
  42725. 'coordinates': ['@@€ãࡱͿЩŊȟͶЎŒǀ«ɬðnjUÒ½j覎ŲiLjÚ̇'],
  42726. 'encodeOffsets': [[
  42727. 34789,
  42728. 35900
  42729. ]]
  42730. }
  42731. },
  42732. {
  42733. 'type': 'Feature',
  42734. 'id': 'CZE',
  42735. 'properties': { 'name': 'Czech Republic' },
  42736. 'geometry': {
  42737. 'type': 'Polygon',
  42738. 'coordinates': ['@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂdžɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕ—ÅȑLJ¡wý˹ēϋbšȁ'],
  42739. 'encodeOffsets': [[
  42740. 17368,
  42741. 49764
  42742. ]]
  42743. }
  42744. },
  42745. {
  42746. 'type': 'Feature',
  42747. 'id': 'DEU',
  42748. 'properties': { 'name': 'Germany' },
  42749. 'geometry': {
  42750. 'type': 'Polygon',
  42751. 'coordinates': ['@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁDž׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍ–ţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐDz۰°Ƽȃ֮вȓ̀ӈٌōՠŸ'],
  42752. 'encodeOffsets': [[
  42753. 10161,
  42754. 56303
  42755. ]]
  42756. }
  42757. },
  42758. {
  42759. 'type': 'Feature',
  42760. 'id': 'DJI',
  42761. 'properties': { 'name': 'Djibouti' },
  42762. 'geometry': {
  42763. 'type': 'Polygon',
  42764. 'coordinates': ['@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ'],
  42765. 'encodeOffsets': [[
  42766. 44116,
  42767. 13005
  42768. ]]
  42769. }
  42770. },
  42771. {
  42772. 'type': 'Feature',
  42773. 'id': 'DNK',
  42774. 'properties': { 'name': 'Denmark' },
  42775. 'geometry': {
  42776. 'type': 'MultiPolygon',
  42777. 'coordinates': [
  42778. ['@@ԋڹ࢟ӄŝΒ௼˨ˎу'],
  42779. ['@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂƒѝʟ˙ĶɽҘŵ']
  42780. ],
  42781. 'encodeOffsets': [
  42782. [[
  42783. 12995,
  42784. 56945
  42785. ]],
  42786. [[
  42787. 11175,
  42788. 57814
  42789. ]]
  42790. ]
  42791. }
  42792. },
  42793. {
  42794. 'type': 'Feature',
  42795. 'id': 'DOM',
  42796. 'properties': { 'name': 'Dominican Republic' },
  42797. 'geometry': {
  42798. 'type': 'Polygon',
  42799. 'coordinates': ['@@ŀƞپIӾɏɜtƴ̕Ҡhʡϐ‰Ю̷̯ͿЍǼϫ•ˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ'],
  42800. 'encodeOffsets': [[
  42801. -73433,
  42802. 20188
  42803. ]]
  42804. }
  42805. },
  42806. {
  42807. 'type': 'Feature',
  42808. 'id': 'DZA',
  42809. 'properties': { 'name': 'Algeria' },
  42810. 'geometry': {
  42811. 'type': 'Polygon',
  42812. 'coordinates': ['@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfnj@ÊQ঺ബب࠼Ÿێɦ͎тচͪ˜جӢòϞ̶સƚƸ͜ɛDz̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓŽέ̘ҵϼƸڒϷςՃ'],
  42813. 'encodeOffsets': [[
  42814. 12288,
  42815. 24035
  42816. ]]
  42817. }
  42818. },
  42819. {
  42820. 'type': 'Feature',
  42821. 'id': 'ECU',
  42822. 'properties': { 'name': 'Ecuador' },
  42823. 'geometry': {
  42824. 'type': 'Polygon',
  42825. 'coordinates': ['@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ'],
  42826. 'encodeOffsets': [[
  42827. -82229,
  42828. -3486
  42829. ]]
  42830. }
  42831. },
  42832. {
  42833. 'type': 'Feature',
  42834. 'id': 'EGY',
  42835. 'properties': { 'name': 'Egypt' },
  42836. 'geometry': {
  42837. 'type': 'Polygon',
  42838. 'coordinates': ['@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣ‚ճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽'],
  42839. 'encodeOffsets': [[
  42840. 35761,
  42841. 30210
  42842. ]]
  42843. }
  42844. },
  42845. {
  42846. 'type': 'Feature',
  42847. 'id': 'ERI',
  42848. 'properties': { 'name': 'Eritrea' },
  42849. 'geometry': {
  42850. 'type': 'Polygon',
  42851. 'coordinates': ['@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò'],
  42852. 'encodeOffsets': [[
  42853. 43368,
  42854. 12844
  42855. ]]
  42856. }
  42857. },
  42858. {
  42859. 'type': 'Feature',
  42860. 'id': 'ESP',
  42861. 'properties': { 'name': 'Spain' },
  42862. 'geometry': {
  42863. 'type': 'Polygon',
  42864. 'coordinates': ['@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമƒͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδè’ЈƎŬZپϲɪɻфөˆƝŁӹCɁЬ΃ū̥ɇ'],
  42865. 'encodeOffsets': [[
  42866. -9251,
  42867. 42886
  42868. ]]
  42869. }
  42870. },
  42871. {
  42872. 'type': 'Feature',
  42873. 'id': 'EST',
  42874. 'properties': { 'name': 'Estonia' },
  42875. 'geometry': {
  42876. 'type': 'Polygon',
  42877. 'coordinates': ['@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ'],
  42878. 'encodeOffsets': [[
  42879. 24897,
  42880. 59181
  42881. ]]
  42882. }
  42883. },
  42884. {
  42885. 'type': 'Feature',
  42886. 'id': 'ETH',
  42887. 'properties': { 'name': 'Ethiopia' },
  42888. 'geometry': {
  42889. 'type': 'Polygon',
  42890. 'coordinates': ['@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફ™ݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ'],
  42891. 'encodeOffsets': [[
  42892. 38816,
  42893. 15319
  42894. ]]
  42895. }
  42896. },
  42897. {
  42898. 'type': 'Feature',
  42899. 'id': 'FIN',
  42900. 'properties': { 'name': 'Finland' },
  42901. 'geometry': {
  42902. 'type': 'Polygon',
  42903. 'coordinates': ['@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ'],
  42904. 'encodeOffsets': [[
  42905. 29279,
  42906. 70723
  42907. ]]
  42908. }
  42909. },
  42910. {
  42911. 'type': 'Feature',
  42912. 'id': 'FJI',
  42913. 'properties': { 'name': 'Fiji' },
  42914. 'geometry': {
  42915. 'type': 'MultiPolygon',
  42916. 'coordinates': [
  42917. ['@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ'],
  42918. ['@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ'],
  42919. ['@@é­@ШǨžĽЗ']
  42920. ],
  42921. 'encodeOffsets': [
  42922. [[
  42923. 182655,
  42924. -17756
  42925. ]],
  42926. [[
  42927. 183669,
  42928. -17204
  42929. ]],
  42930. [[
  42931. -184235,
  42932. -16897
  42933. ]]
  42934. ]
  42935. }
  42936. },
  42937. {
  42938. 'type': 'Feature',
  42939. 'id': 'FLK',
  42940. 'properties': { 'name': 'Falkland Islands' },
  42941. 'geometry': {
  42942. 'type': 'Polygon',
  42943. 'coordinates': ['@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ'],
  42944. 'encodeOffsets': [[
  42945. -62668,
  42946. -53094
  42947. ]]
  42948. }
  42949. },
  42950. {
  42951. 'type': 'Feature',
  42952. 'id': 'FRA',
  42953. 'properties': { 'name': 'France' },
  42954. 'geometry': {
  42955. 'type': 'MultiPolygon',
  42956. 'coordinates': [
  42957. ['@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ'],
  42958. ['@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣü‚ɇؙҽ]ϟВƀ˾ρ“ʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅʼnिϞ̧ǹ໹Ϣͯ͜ѢԎdžူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵']
  42959. ],
  42960. 'encodeOffsets': [
  42961. [[
  42962. 9790,
  42963. 43165
  42964. ]],
  42965. [[
  42966. 3675,
  42967. 51589
  42968. ]]
  42969. ]
  42970. }
  42971. },
  42972. {
  42973. 'type': 'Feature',
  42974. 'id': 'GAB',
  42975. 'properties': { 'name': 'Gabon' },
  42976. 'geometry': {
  42977. 'type': 'Polygon',
  42978. 'coordinates': ['@@ࡹࡔ։ۚԙࢄ‚˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ–҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ'],
  42979. 'encodeOffsets': [[
  42980. 11361,
  42981. -4074
  42982. ]]
  42983. }
  42984. },
  42985. {
  42986. 'type': 'Feature',
  42987. 'id': 'GBR',
  42988. 'properties': { 'name': 'United Kingdom' },
  42989. 'geometry': {
  42990. 'type': 'MultiPolygon',
  42991. 'coordinates': [
  42992. ['@@҉ֽًǦԱ[ǦҊǥ҈۴–ࣔԳ'],
  42993. ['@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰDžķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐdžռఢ÷D@ŮӤ֛Ԯ_\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì']
  42994. ],
  42995. 'encodeOffsets': [
  42996. [[
  42997. -5797,
  42998. 55864
  42999. ]],
  43000. [[
  43001. -3077,
  43002. 60043
  43003. ]]
  43004. ]
  43005. }
  43006. },
  43007. {
  43008. 'type': 'Feature',
  43009. 'id': 'GEO',
  43010. 'properties': { 'name': 'Georgia' },
  43011. 'geometry': {
  43012. 'type': 'Polygon',
  43013. 'coordinates': ['@@Ųάȿִӟ̲ҭĬ̯ʴĺIJ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡'],
  43014. 'encodeOffsets': [[
  43015. 42552,
  43016. 42533
  43017. ]]
  43018. }
  43019. },
  43020. {
  43021. 'type': 'Feature',
  43022. 'id': 'GHA',
  43023. 'properties': { 'name': 'Ghana' },
  43024. 'geometry': {
  43025. 'type': 'Polygon',
  43026. 'coordinates': ['@@೉ӯҳ˽ݳʑݡʆœͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍'],
  43027. 'encodeOffsets': [[
  43028. 1086,
  43029. 6072
  43030. ]]
  43031. }
  43032. },
  43033. {
  43034. 'type': 'Feature',
  43035. 'id': 'GIN',
  43036. 'properties': { 'name': 'Guinea' },
  43037. 'geometry': {
  43038. 'type': 'Polygon',
  43039. 'coordinates': ['@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮Ƈɘ‚ʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔƒɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞNj·νƃA'],
  43040. 'encodeOffsets': [[
  43041. -8641,
  43042. 7871
  43043. ]]
  43044. }
  43045. },
  43046. {
  43047. 'type': 'Feature',
  43048. 'id': 'GMB',
  43049. 'properties': { 'name': 'Gambia' },
  43050. 'geometry': {
  43051. 'type': 'Polygon',
  43052. 'coordinates': ['@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl'],
  43053. 'encodeOffsets': [[
  43054. -17245,
  43055. 13468
  43056. ]]
  43057. }
  43058. },
  43059. {
  43060. 'type': 'Feature',
  43061. 'id': 'GNB',
  43062. 'properties': { 'name': 'Guinea Bissau' },
  43063. 'geometry': {
  43064. 'type': 'Polygon',
  43065. 'coordinates': ['@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈•c˵ġĕð˧ƃōȃCɕƗʭfύХ'],
  43066. 'encodeOffsets': [[
  43067. -15493,
  43068. 11306
  43069. ]]
  43070. }
  43071. },
  43072. {
  43073. 'type': 'Feature',
  43074. 'id': 'GNQ',
  43075. 'properties': { 'name': 'Equatorial Guinea' },
  43076. 'geometry': {
  43077. 'type': 'Polygon',
  43078. 'coordinates': ['@@ƿŴ़̀െmPয়௡T˳µ'],
  43079. 'encodeOffsets': [[
  43080. 9721,
  43081. 1035
  43082. ]]
  43083. }
  43084. },
  43085. {
  43086. 'type': 'Feature',
  43087. 'id': 'GRC',
  43088. 'properties': { 'name': 'Greece' },
  43089. 'geometry': {
  43090. 'type': 'MultiPolygon',
  43091. 'coordinates': [
  43092. ['@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ'],
  43093. ['@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦdž„ت{ڨɲע̉ކĀVмЦɝ']
  43094. ],
  43095. 'encodeOffsets': [
  43096. [[
  43097. 24269,
  43098. 36562
  43099. ]],
  43100. [[
  43101. 27243,
  43102. 42560
  43103. ]]
  43104. ]
  43105. }
  43106. },
  43107. {
  43108. 'type': 'Feature',
  43109. 'id': 'GRL',
  43110. 'properties': { 'name': 'Greenland' },
  43111. 'geometry': {
  43112. 'type': 'Polygon',
  43113. 'coordinates': ['@@ᬜԆ᱒›ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ™⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼNjҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկ€ध৚շಽ“൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\Ϗပΐћɣଌȿ઼ԣ͈ڱກlj٫͖ਣӘ˼֭উѵᕖ•୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ“૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟ‘Ꮕ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή'],
  43114. 'encodeOffsets': [[
  43115. -47886,
  43116. 84612
  43117. ]]
  43118. }
  43119. },
  43120. {
  43121. 'type': 'Feature',
  43122. 'id': 'GTM',
  43123. 'properties': { 'name': 'Guatemala' },
  43124. 'geometry': {
  43125. 'type': 'Polygon',
  43126. 'coordinates': ['@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏljâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ'],
  43127. 'encodeOffsets': [[
  43128. -92257,
  43129. 14065
  43130. ]]
  43131. }
  43132. },
  43133. {
  43134. 'type': 'Feature',
  43135. 'id': 'GUF',
  43136. 'properties': { 'name': 'French Guiana' },
  43137. 'geometry': {
  43138. 'type': 'Polygon',
  43139. 'coordinates': ['@@͉͑ГÑŗʀȉ–ʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ'],
  43140. 'encodeOffsets': [[
  43141. -53817,
  43142. 2565
  43143. ]]
  43144. }
  43145. },
  43146. {
  43147. 'type': 'Feature',
  43148. 'id': 'GUY',
  43149. 'properties': { 'name': 'Guyana' },
  43150. 'geometry': {
  43151. 'type': 'Polygon',
  43152. 'coordinates': ['@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱ‰ҫî˙ɡϟƥ˅—ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩ™ْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ'],
  43153. 'encodeOffsets': [[
  43154. -61192,
  43155. 8568
  43156. ]]
  43157. }
  43158. },
  43159. {
  43160. 'type': 'Feature',
  43161. 'id': 'HND',
  43162. 'properties': { 'name': 'Honduras' },
  43163. 'geometry': {
  43164. 'type': 'Polygon',
  43165. 'coordinates': ['@@ơˀʭòÐʹŗĞǣÒσij‹ŔʩƈǷǚʛìǨɈáǒÐNJЊɼϦ͎ĔȂƨʊ\\þ垦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙœƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ“'],
  43166. 'encodeOffsets': [[
  43167. -89412,
  43168. 13297
  43169. ]]
  43170. }
  43171. },
  43172. {
  43173. 'type': 'Feature',
  43174. 'id': 'HRV',
  43175. 'properties': { 'name': 'Croatia' },
  43176. 'geometry': {
  43177. 'type': 'Polygon',
  43178. 'coordinates': ['@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆Šbג…Ƹƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜlj̼Ų'],
  43179. 'encodeOffsets': [[
  43180. 19282,
  43181. 47011
  43182. ]]
  43183. }
  43184. },
  43185. {
  43186. 'type': 'Feature',
  43187. 'id': 'HTI',
  43188. 'properties': { 'name': 'Haiti' },
  43189. 'geometry': {
  43190. 'type': 'Polygon',
  43191. 'coordinates': ['@@Ԣ™ܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ'],
  43192. 'encodeOffsets': [[
  43193. -74946,
  43194. 20394
  43195. ]]
  43196. }
  43197. },
  43198. {
  43199. 'type': 'Feature',
  43200. 'id': 'HUN',
  43201. 'properties': { 'name': 'Hungary' },
  43202. 'geometry': {
  43203. 'type': 'Polygon',
  43204. 'coordinates': ['@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽš١ə̻űۛNJػήˉļǍ˴ƗV'],
  43205. 'encodeOffsets': [[
  43206. 16592,
  43207. 47977
  43208. ]]
  43209. }
  43210. },
  43211. {
  43212. 'type': 'Feature',
  43213. 'id': 'IDN',
  43214. 'properties': { 'name': 'Indonesia' },
  43215. 'geometry': {
  43216. 'type': 'MultiPolygon',
  43217. 'coordinates': [
  43218. ['@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ'],
  43219. ['@@ܙȁijĶø˸ΰԢࠨͬĐǓfʫշع'],
  43220. ['@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖'],
  43221. ['@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮'],
  43222. ['@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗'],
  43223. ['@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ'],
  43224. ['@@̿˥ׅƸǏΰࡘ¢Ⱦˣ'],
  43225. ['@@̨ٝۿΌۯìӃÅׇˆȦҦਠ”ऎʕ'],
  43226. ['@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘLJbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹'],
  43227. ['@@ڭ࠭كlj߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîও”றՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴ–ࠨ؎Ʀȉ'],
  43228. ['@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃'],
  43229. ['@@सާহį˫ֵšݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ'],
  43230. ['@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզ‘ಢNjݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱‘ಟ']
  43231. ],
  43232. 'encodeOffsets': [
  43233. [[
  43234. 123613,
  43235. -10485
  43236. ]],
  43237. [[
  43238. 127423,
  43239. -10383
  43240. ]],
  43241. [[
  43242. 120730,
  43243. -8289
  43244. ]],
  43245. [[
  43246. 125854,
  43247. -8288
  43248. ]],
  43249. [[
  43250. 111231,
  43251. -6940
  43252. ]],
  43253. [[
  43254. 137959,
  43255. -6363
  43256. ]],
  43257. [[
  43258. 130304,
  43259. -3542
  43260. ]],
  43261. [[
  43262. 133603,
  43263. -3168
  43264. ]],
  43265. [[
  43266. 137363,
  43267. -1179
  43268. ]],
  43269. [[
  43270. 128247,
  43271. 1454
  43272. ]],
  43273. [[
  43274. 131777,
  43275. 1160
  43276. ]],
  43277. [[
  43278. 120705,
  43279. 1872
  43280. ]],
  43281. [[
  43282. 108358,
  43283. -5992
  43284. ]]
  43285. ]
  43286. }
  43287. },
  43288. {
  43289. 'type': 'Feature',
  43290. 'id': 'IND',
  43291. 'properties': { 'name': 'India' },
  43292. 'geometry': {
  43293. 'type': 'Polygon',
  43294. 'coordinates': ['@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସʼnӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸'],
  43295. 'encodeOffsets': [[
  43296. 79706,
  43297. 36346
  43298. ]]
  43299. }
  43300. },
  43301. {
  43302. 'type': 'Feature',
  43303. 'id': 'IRL',
  43304. 'properties': { 'name': 'Ireland' },
  43305. 'geometry': {
  43306. 'type': 'Polygon',
  43307. 'coordinates': ['@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\ٌǥ'],
  43308. 'encodeOffsets': [[
  43309. -6346,
  43310. 55161
  43311. ]]
  43312. }
  43313. },
  43314. {
  43315. 'type': 'Feature',
  43316. 'id': 'IRN',
  43317. 'properties': { 'name': 'Iran' },
  43318. 'geometry': {
  43319. 'type': 'Polygon',
  43320. 'coordinates': ['@@݈njװӔ֚{τƾװýघэڤğ।ݓظ‰òۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ'],
  43321. 'encodeOffsets': [[
  43322. 55216,
  43323. 38092
  43324. ]]
  43325. }
  43326. },
  43327. {
  43328. 'type': 'Feature',
  43329. 'id': 'IRQ',
  43330. 'properties': { 'name': 'Iraq' },
  43331. 'geometry': {
  43332. 'type': 'Polygon',
  43333. 'coordinates': ['@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉'],
  43334. 'encodeOffsets': [[
  43335. 46511,
  43336. 36842
  43337. ]]
  43338. }
  43339. },
  43340. {
  43341. 'type': 'Feature',
  43342. 'id': 'ISL',
  43343. 'properties': { 'name': 'Iceland' },
  43344. 'geometry': {
  43345. 'type': 'Polygon',
  43346. 'coordinates': ['@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎ—ʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ'],
  43347. 'encodeOffsets': [[
  43348. -14856,
  43349. 68051
  43350. ]]
  43351. }
  43352. },
  43353. {
  43354. 'type': 'Feature',
  43355. 'id': 'ISR',
  43356. 'properties': { 'name': 'Israel' },
  43357. 'geometry': {
  43358. 'type': 'Polygon',
  43359. 'coordinates': ['@@ƥ˅̣Ŝǫ֓ɂĥɋř—ɛЄŖp͛нഉց෾ʔˢ˶ɞϼǠيŤɆzVˬCþƦɤ\\`·ŕŵhM'],
  43360. 'encodeOffsets': [[
  43361. 36578,
  43362. 33495
  43363. ]]
  43364. }
  43365. },
  43366. {
  43367. 'type': 'Feature',
  43368. 'id': 'ITA',
  43369. 'properties': { 'name': 'Italy' },
  43370. 'geometry': {
  43371. 'type': 'MultiPolygon',
  43372. 'coordinates': [
  43373. ['@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò'],
  43374. ['@@Ԍ׭ş૕ϣÂ΁˫͇ɞ‘২ȓӒҨ¥рʼ'],
  43375. ['@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀”ʂβǵМ¢Ҽ˶ƢƃА€ǼͺتĿψƚâΆԘšĮdžࠨƤȊ̉']
  43376. ],
  43377. 'encodeOffsets': [
  43378. [[
  43379. 15893,
  43380. 39149
  43381. ]],
  43382. [[
  43383. 9432,
  43384. 42200
  43385. ]],
  43386. [[
  43387. 12674,
  43388. 47890
  43389. ]]
  43390. ]
  43391. }
  43392. },
  43393. {
  43394. 'type': 'Feature',
  43395. 'id': 'JAM',
  43396. 'properties': { 'name': 'Jamaica' },
  43397. 'geometry': {
  43398. 'type': 'Polygon',
  43399. 'coordinates': ['@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒƒ'],
  43400. 'encodeOffsets': [[
  43401. -79431,
  43402. 18935
  43403. ]]
  43404. }
  43405. },
  43406. {
  43407. 'type': 'Feature',
  43408. 'id': 'JOR',
  43409. 'properties': { 'name': 'Jordan' },
  43410. 'geometry': {
  43411. 'type': 'Polygon',
  43412. 'coordinates': ['@@Ʀˆपͫ࿪ࣆͺ৽Džų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆƒŨоഊo͜Ůʚ@Ԥ'],
  43413. 'encodeOffsets': [[
  43414. 36399,
  43415. 33172
  43416. ]]
  43417. }
  43418. },
  43419. {
  43420. 'type': 'Feature',
  43421. 'id': 'JPN',
  43422. 'properties': { 'name': 'Japan' },
  43423. 'geometry': {
  43424. 'type': 'MultiPolygon',
  43425. 'coordinates': [
  43426. ['@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ'],
  43427. ['@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡“غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ'],
  43428. ['@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯']
  43429. ],
  43430. 'encodeOffsets': [
  43431. [[
  43432. 137870,
  43433. 34969
  43434. ]],
  43435. [[
  43436. 144360,
  43437. 38034
  43438. ]],
  43439. [[
  43440. 147365,
  43441. 45235
  43442. ]]
  43443. ]
  43444. }
  43445. },
  43446. {
  43447. 'type': 'Feature',
  43448. 'id': 'KAZ',
  43449. 'properties': { 'name': 'Kazakhstan' },
  43450. 'geometry': {
  43451. 'type': 'Polygon',
  43452. 'coordinates': ['@@ӕƹ્דο׹̹KɱЊ੫‚ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖDž̊অ˺ϛݮҩɆ…˜ࠊāŽؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼—ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטNjΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ'],
  43453. 'encodeOffsets': [[
  43454. 72666,
  43455. 43281
  43456. ]]
  43457. }
  43458. },
  43459. {
  43460. 'type': 'Feature',
  43461. 'id': 'KEN',
  43462. 'properties': { 'name': 'Kenya' },
  43463. 'geometry': {
  43464. 'type': 'Polygon',
  43465. 'coordinates': ['@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ'],
  43466. 'encodeOffsets': [[
  43467. 41977,
  43468. -878
  43469. ]]
  43470. }
  43471. },
  43472. {
  43473. 'type': 'Feature',
  43474. 'id': 'KGZ',
  43475. 'properties': { 'name': 'Kyrgyzstan' },
  43476. 'geometry': {
  43477. 'type': 'Polygon',
  43478. 'coordinates': ['@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ'],
  43479. 'encodeOffsets': [[
  43480. 72666,
  43481. 43281
  43482. ]]
  43483. }
  43484. },
  43485. {
  43486. 'type': 'Feature',
  43487. 'id': 'KHM',
  43488. 'properties': { 'name': 'Cambodia' },
  43489. 'geometry': {
  43490. 'type': 'Polygon',
  43491. 'coordinates': ['@@΁Ѭыࢄȣ২ՠۨઘdž߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū'],
  43492. 'encodeOffsets': [[
  43493. 105982,
  43494. 10888
  43495. ]]
  43496. }
  43497. },
  43498. {
  43499. 'type': 'Feature',
  43500. 'id': 'KOR',
  43501. 'properties': { 'name': 'South Korea' },
  43502. 'geometry': {
  43503. 'type': 'Polygon',
  43504. 'coordinates': ['@@ܨযȺխPॷ̓ҥݽljڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ‡͞Ϝצ¢ΨÈŨȮ'],
  43505. 'encodeOffsets': [[
  43506. 131431,
  43507. 39539
  43508. ]]
  43509. }
  43510. },
  43511. {
  43512. 'type': 'Feature',
  43513. 'id': 'CS-KM',
  43514. 'properties': { 'name': 'Kosovo' },
  43515. 'geometry': {
  43516. 'type': 'Polygon',
  43517. 'coordinates': ['@@›ǣŃPĘ́ȩĐdzɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒŸǎƻŢLĥȳijij„×ȉӹŻ'],
  43518. 'encodeOffsets': [[
  43519. 21261,
  43520. 43062
  43521. ]]
  43522. }
  43523. },
  43524. {
  43525. 'type': 'Feature',
  43526. 'id': 'KWT',
  43527. 'properties': { 'name': 'Kuwait' },
  43528. 'geometry': {
  43529. 'type': 'Polygon',
  43530. 'coordinates': ['@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é'],
  43531. 'encodeOffsets': [[
  43532. 49126,
  43533. 30696
  43534. ]]
  43535. }
  43536. },
  43537. {
  43538. 'type': 'Feature',
  43539. 'id': 'LAO',
  43540. 'properties': { 'name': 'Laos' },
  43541. 'geometry': {
  43542. 'type': 'Polygon',
  43543. 'coordinates': ['@@˚Ϝœ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧ž³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢'],
  43544. 'encodeOffsets': [[
  43545. 107745,
  43546. 14616
  43547. ]]
  43548. }
  43549. },
  43550. {
  43551. 'type': 'Feature',
  43552. 'id': 'LBN',
  43553. 'properties': { 'name': 'Lebanon' },
  43554. 'geometry': {
  43555. 'type': 'Polygon',
  43556. 'coordinates': ['@@ɣ[ýƥ˫D̘ۄмעfˆϘ§Ɛͣқ̓ȷҟ'],
  43557. 'encodeOffsets': [[
  43558. 36681,
  43559. 34077
  43560. ]]
  43561. }
  43562. },
  43563. {
  43564. 'type': 'Feature',
  43565. 'id': 'LBR',
  43566. 'properties': { 'name': 'Liberia' },
  43567. 'geometry': {
  43568. 'type': 'Polygon',
  43569. 'coordinates': ['@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐdzʂIǢ͸ʄsŸʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە'],
  43570. 'encodeOffsets': [[
  43571. -7897,
  43572. 4470
  43573. ]]
  43574. }
  43575. },
  43576. {
  43577. 'type': 'Feature',
  43578. 'id': 'LBY',
  43579. 'properties': { 'name': 'Libya' },
  43580. 'geometry': {
  43581. 'type': 'Polygon',
  43582. 'coordinates': ['@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ'],
  43583. 'encodeOffsets': [[
  43584. 15208,
  43585. 23412
  43586. ]]
  43587. }
  43588. },
  43589. {
  43590. 'type': 'Feature',
  43591. 'id': 'LKA',
  43592. 'properties': { 'name': 'Sri Lanka' },
  43593. 'geometry': {
  43594. 'type': 'Polygon',
  43595. 'coordinates': ['@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓'],
  43596. 'encodeOffsets': [[
  43597. 83751,
  43598. 7704
  43599. ]]
  43600. }
  43601. },
  43602. {
  43603. 'type': 'Feature',
  43604. 'id': 'LSO',
  43605. 'properties': { 'name': 'Lesotho' },
  43606. 'geometry': {
  43607. 'type': 'Polygon',
  43608. 'coordinates': ['@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ'],
  43609. 'encodeOffsets': [[
  43610. 29674,
  43611. -29650
  43612. ]]
  43613. }
  43614. },
  43615. {
  43616. 'type': 'Feature',
  43617. 'id': 'LTU',
  43618. 'properties': { 'name': 'Lithuania' },
  43619. 'geometry': {
  43620. 'type': 'Polygon',
  43621. 'coordinates': ['@@ãɊĚɲχƄࢡƨDZ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ'],
  43622. 'encodeOffsets': [[
  43623. 23277,
  43624. 55632
  43625. ]]
  43626. }
  43627. },
  43628. {
  43629. 'type': 'Feature',
  43630. 'id': 'LUX',
  43631. 'properties': { 'name': 'Luxembourg' },
  43632. 'geometry': {
  43633. 'type': 'Polygon',
  43634. 'coordinates': ['@@ǘȏ³ρʍiȉòĞҼɖŽ'],
  43635. 'encodeOffsets': [[
  43636. 6189,
  43637. 51332
  43638. ]]
  43639. }
  43640. },
  43641. {
  43642. 'type': 'Feature',
  43643. 'id': 'LVA',
  43644. 'properties': { 'name': 'Latvia' },
  43645. 'geometry': {
  43646. 'type': 'Polygon',
  43647. 'coordinates': ['@@†نЮՆߊ˼ڜعڪhNJ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ'],
  43648. 'encodeOffsets': [[
  43649. 21562,
  43650. 57376
  43651. ]]
  43652. }
  43653. },
  43654. {
  43655. 'type': 'Feature',
  43656. 'id': 'MAR',
  43657. 'properties': { 'name': 'Morocco' },
  43658. 'geometry': {
  43659. 'type': 'Polygon',
  43660. 'coordinates': ['@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜDZƷ͛ષƙϝ̵ӡñ—ثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI'],
  43661. 'encodeOffsets': [[
  43662. -5318,
  43663. 36614
  43664. ]]
  43665. }
  43666. },
  43667. {
  43668. 'type': 'Feature',
  43669. 'id': 'MDA',
  43670. 'properties': { 'name': 'Moldova' },
  43671. 'geometry': {
  43672. 'type': 'Polygon',
  43673. 'coordinates': ['@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ'],
  43674. 'encodeOffsets': [[
  43675. 27259,
  43676. 49379
  43677. ]]
  43678. }
  43679. },
  43680. {
  43681. 'type': 'Feature',
  43682. 'id': 'MDG',
  43683. 'properties': { 'name': 'Madagascar' },
  43684. 'geometry': {
  43685. 'type': 'Polygon',
  43686. 'coordinates': ['@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝLjثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмŒҶǤ̶Ʋτ\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί'],
  43687. 'encodeOffsets': [[
  43688. 50733,
  43689. -12769
  43690. ]]
  43691. }
  43692. },
  43693. {
  43694. 'type': 'Feature',
  43695. 'id': 'MEX',
  43696. 'properties': { 'name': 'Mexico' },
  43697. 'geometry': {
  43698. 'type': 'Polygon',
  43699. 'coordinates': ['@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔ‡ԚîȬDZ…ЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳIJķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿDŽ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФ™ˀҍو̓٠^͔؇ͬ˫™ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКƒͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈ„ؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼ŽϜ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|'],
  43700. 'encodeOffsets': [[
  43701. -99471,
  43702. 26491
  43703. ]]
  43704. }
  43705. },
  43706. {
  43707. 'type': 'Feature',
  43708. 'id': 'MKD',
  43709. 'properties': { 'name': 'Macedonia' },
  43710. 'geometry': {
  43711. 'type': 'Polygon',
  43712. 'coordinates': ['@@ńOœǤӺżȊ˺¶ϴbтˏÒ։DžƒƑƥҕh͋ǿջõΑȴšήń˸'],
  43713. 'encodeOffsets': [[
  43714. 21085,
  43715. 42860
  43716. ]]
  43717. }
  43718. },
  43719. {
  43720. 'type': 'Feature',
  43721. 'id': 'MLI',
  43722. 'properties': { 'name': 'Mali' },
  43723. 'geometry': {
  43724. 'type': 'Polygon',
  43725. 'coordinates': ['@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟IȿLjҥš޻ΑDžʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴʼnùʱʎ¬ʢĿİdzĉ˚Ǥɐ΅ΚijɴȇȂǙvȫş˕őɱǹΫäɷɈƓ„ɕőƅAµ̮žʾí̽͘ʀǓӔԺ'],
  43726. 'encodeOffsets': [[
  43727. -12462,
  43728. 14968
  43729. ]]
  43730. }
  43731. },
  43732. {
  43733. 'type': 'Feature',
  43734. 'id': 'MMR',
  43735. 'properties': { 'name': 'Myanmar' },
  43736. 'geometry': {
  43737. 'type': 'Polygon',
  43738. 'coordinates': ['@@ӫηץ›ϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺Ž࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟ“ۙߓۭijঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յdẕӓȗ'],
  43739. 'encodeOffsets': [[
  43740. 101933,
  43741. 20672
  43742. ]]
  43743. }
  43744. },
  43745. {
  43746. 'type': 'Feature',
  43747. 'id': 'MNE',
  43748. 'properties': { 'name': 'Montenegro' },
  43749. 'geometry': {
  43750. 'type': 'Polygon',
  43751. 'coordinates': ['@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó'],
  43752. 'encodeOffsets': [[
  43753. 20277,
  43754. 43521
  43755. ]]
  43756. }
  43757. },
  43758. {
  43759. 'type': 'Feature',
  43760. 'id': 'MNG',
  43761. 'properties': { 'name': 'Mongolia' },
  43762. 'geometry': {
  43763. 'type': 'Polygon',
  43764. 'coordinates': ['@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼‰ௐɁࠈגͿӶࢊࢊश΍ނįনɍLjؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽ‹ഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז'],
  43765. 'encodeOffsets': [[
  43766. 89858,
  43767. 50481
  43768. ]]
  43769. }
  43770. },
  43771. {
  43772. 'type': 'Feature',
  43773. 'id': 'MOZ',
  43774. 'properties': { 'name': 'Mozambique' },
  43775. 'geometry': {
  43776. 'type': 'Polygon',
  43777. 'coordinates': ['@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ“࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞ˜غǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ'],
  43778. 'encodeOffsets': [[
  43779. 35390,
  43780. -11796
  43781. ]]
  43782. }
  43783. },
  43784. {
  43785. 'type': 'Feature',
  43786. 'id': 'MRT',
  43787. 'properties': { 'name': 'Mauritania' },
  43788. 'geometry': {
  43789. 'type': 'Polygon',
  43790. 'coordinates': ['@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ'],
  43791. 'encodeOffsets': [[
  43792. -12462,
  43793. 14968
  43794. ]]
  43795. }
  43796. },
  43797. {
  43798. 'type': 'Feature',
  43799. 'id': 'MWI',
  43800. 'properties': { 'name': 'Malawi' },
  43801. 'geometry': {
  43802. 'type': 'Polygon',
  43803. 'coordinates': ['@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈LJۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ'],
  43804. 'encodeOffsets': [[
  43805. 35390,
  43806. -11796
  43807. ]]
  43808. }
  43809. },
  43810. {
  43811. 'type': 'Feature',
  43812. 'id': 'MYS',
  43813. 'properties': { 'name': 'Malaysia' },
  43814. 'geometry': {
  43815. 'type': 'MultiPolygon',
  43816. 'coordinates': [
  43817. ['@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ'],
  43818. ['@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜œа٪אшڀͼHќыžιֆɻ۬ʧÑ֝͡¥ƮЧ']
  43819. ],
  43820. 'encodeOffsets': [
  43821. [[
  43822. 103502,
  43823. 6354
  43824. ]],
  43825. [[
  43826. 121466,
  43827. 4586
  43828. ]]
  43829. ]
  43830. }
  43831. },
  43832. {
  43833. 'type': 'Feature',
  43834. 'id': 'NAM',
  43835. 'properties': { 'name': 'Namibia' },
  43836. 'geometry': {
  43837. 'type': 'Polygon',
  43838. 'coordinates': ['@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КdžԊƞհ}ԄϝŶÐ₮˜׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍سƒ{Ჽࠣ‡BយA᷋ݣѕҋÕՇDŽϗÔƗάͩɰГг'],
  43839. 'encodeOffsets': [[
  43840. 16738,
  43841. -29262
  43842. ]]
  43843. }
  43844. },
  43845. {
  43846. 'type': 'Feature',
  43847. 'id': 'NCL',
  43848. 'properties': { 'name': 'New Caledonia' },
  43849. 'geometry': {
  43850. 'type': 'Polygon',
  43851. 'coordinates': ['@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ'],
  43852. 'encodeOffsets': [[
  43853. 169759,
  43854. -21585
  43855. ]]
  43856. }
  43857. },
  43858. {
  43859. 'type': 'Feature',
  43860. 'id': 'NER',
  43861. 'properties': { 'name': 'Niger' },
  43862. 'geometry': {
  43863. 'type': 'Polygon',
  43864. 'coordinates': ['@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟ’ځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ'],
  43865. 'encodeOffsets': [[
  43866. 2207,
  43867. 12227
  43868. ]]
  43869. }
  43870. },
  43871. {
  43872. 'type': 'Feature',
  43873. 'id': 'NGA',
  43874. 'properties': { 'name': 'Nigeria' },
  43875. 'geometry': {
  43876. 'type': 'Polygon',
  43877. 'coordinates': ['@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘIJࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ‘֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧDZȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש'],
  43878. 'encodeOffsets': [[
  43879. 8705,
  43880. 4887
  43881. ]]
  43882. }
  43883. },
  43884. {
  43885. 'type': 'Feature',
  43886. 'id': 'NIC',
  43887. 'properties': { 'name': 'Nicaragua' },
  43888. 'geometry': {
  43889. 'type': 'Polygon',
  43890. 'coordinates': ['@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾ”ŀȔŬRkЮȠrǬOǺɤʜǝĒľƺIJ̊ɴbǦĄQňȪĖ|ƜŹǚ›ȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩDZʛÈƓǦˉêȕʼnօɞųŇ'],
  43891. 'encodeOffsets': [[
  43892. -87769,
  43893. 11355
  43894. ]]
  43895. }
  43896. },
  43897. {
  43898. 'type': 'Feature',
  43899. 'id': 'NLD',
  43900. 'properties': { 'name': 'Netherlands' },
  43901. 'geometry': {
  43902. 'type': 'Polygon',
  43903. 'coordinates': ['@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ'],
  43904. 'encodeOffsets': [[
  43905. 6220,
  43906. 54795
  43907. ]]
  43908. }
  43909. },
  43910. {
  43911. 'type': 'Feature',
  43912. 'id': 'NOR',
  43913. 'properties': { 'name': 'Norway' },
  43914. 'geometry': {
  43915. 'type': 'MultiPolygon',
  43916. 'coordinates': [
  43917. ['@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷ“ūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖›ພǘ'],
  43918. ['@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ'],
  43919. ['@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\͊˼௾ˆ੖̋'],
  43920. ['@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ']
  43921. ],
  43922. 'encodeOffsets': [
  43923. [[
  43924. 28842,
  43925. 72894
  43926. ]],
  43927. [[
  43928. 25318,
  43929. 79723
  43930. ]],
  43931. [[
  43932. 18690,
  43933. 81615
  43934. ]],
  43935. [[
  43936. 26059,
  43937. 82338
  43938. ]]
  43939. ]
  43940. }
  43941. },
  43942. {
  43943. 'type': 'Feature',
  43944. 'id': 'NPL',
  43945. 'properties': { 'name': 'Nepal' },
  43946. 'geometry': {
  43947. 'type': 'Polygon',
  43948. 'coordinates': ['@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć'],
  43949. 'encodeOffsets': [[
  43950. 90236,
  43951. 28546
  43952. ]]
  43953. }
  43954. },
  43955. {
  43956. 'type': 'Feature',
  43957. 'id': 'NZL',
  43958. 'properties': { 'name': 'New Zealand' },
  43959. 'geometry': {
  43960. 'type': 'MultiPolygon',
  43961. 'coordinates': [
  43962. ['@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ'],
  43963. ['@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨Ÿլͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ']
  43964. ],
  43965. 'encodeOffsets': [
  43966. [[
  43967. 177173,
  43968. -41901
  43969. ]],
  43970. [[
  43971. 178803,
  43972. -37024
  43973. ]]
  43974. ]
  43975. }
  43976. },
  43977. {
  43978. 'type': 'Feature',
  43979. 'id': 'OMN',
  43980. 'properties': { 'name': 'Oman' },
  43981. 'geometry': {
  43982. 'type': 'MultiPolygon',
  43983. 'coordinates': [
  43984. ['@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ'],
  43985. ['@@ʼnƳDž˺ʔ˺ľñā΍']
  43986. ],
  43987. 'encodeOffsets': [
  43988. [[
  43989. 60274,
  43990. 21621
  43991. ]],
  43992. [[
  43993. 57745,
  43994. 26518
  43995. ]]
  43996. ]
  43997. }
  43998. },
  43999. {
  44000. 'type': 'Feature',
  44001. 'id': 'PAK',
  44002. 'properties': { 'name': 'Pakistan' },
  44003. 'geometry': {
  44004. 'type': 'Polygon',
  44005. 'coordinates': ['@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદĈ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢•͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ'],
  44006. 'encodeOffsets': [[
  44007. 76962,
  44008. 38025
  44009. ]]
  44010. }
  44011. },
  44012. {
  44013. 'type': 'Feature',
  44014. 'id': 'PAN',
  44015. 'properties': { 'name': 'Panama' },
  44016. 'geometry': {
  44017. 'type': 'Polygon',
  44018. 'coordinates': ['@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽ‡ĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲIJǩŲK͸͘ö̠̝iDZͲ›ĀæɴȵЮÔΨɄԜǞ˺ʤҬ·‹ĉҶ…ώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС'],
  44019. 'encodeOffsets': [[
  44020. -79750,
  44021. 7398
  44022. ]]
  44023. }
  44024. },
  44025. {
  44026. 'type': 'Feature',
  44027. 'id': 'PER',
  44028. 'properties': { 'name': 'Peru' },
  44029. 'geometry': {
  44030. 'type': 'Polygon',
  44031. 'coordinates': ['@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎIJΓʇȧx̭ΎâͼĝΚщӆΌDŽ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍlj॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝDZί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡'],
  44032. 'encodeOffsets': [[
  44033. -71260,
  44034. -18001
  44035. ]]
  44036. }
  44037. },
  44038. {
  44039. 'type': 'Feature',
  44040. 'id': 'PHL',
  44041. 'properties': { 'name': 'Philippines' },
  44042. 'geometry': {
  44043. 'type': 'MultiPolygon',
  44044. 'coordinates': [
  44045. ['@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱'],
  44046. ['@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ'],
  44047. ['@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ'],
  44048. ['@@Ԏʹ՘BgΗϳΣՕʧ‡ϸÒєŽА'],
  44049. ['@@ʀभ٫ɞj˭ȶԯЍȋ•עʧªƁԘӶãY͈ԣٜ߮mɴ̻'],
  44050. ['@@ɟܩέоѓ٘ܚ‰̡̈'],
  44051. ['@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊIJਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA']
  44052. ],
  44053. 'encodeOffsets': [
  44054. [[
  44055. 129410,
  44056. 8617
  44057. ]],
  44058. [[
  44059. 126959,
  44060. 10526
  44061. ]],
  44062. [[
  44063. 121349,
  44064. 9540
  44065. ]],
  44066. [[
  44067. 124809,
  44068. 12178
  44069. ]],
  44070. [[
  44071. 128515,
  44072. 12455
  44073. ]],
  44074. [[
  44075. 124445,
  44076. 13384
  44077. ]],
  44078. [[
  44079. 124234,
  44080. 18949
  44081. ]]
  44082. ]
  44083. }
  44084. },
  44085. {
  44086. 'type': 'Feature',
  44087. 'id': 'PNG',
  44088. 'properties': { 'name': 'Papua New Guinea' },
  44089. 'geometry': {
  44090. 'type': 'MultiPolygon',
  44091. 'coordinates': [
  44092. ['@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ'],
  44093. ['@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ'],
  44094. ['@@ݤտղࢻӖ„‘ω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅ–aᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕'],
  44095. ['@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ']
  44096. ],
  44097. 'encodeOffsets': [
  44098. [[
  44099. 159622,
  44100. -6983
  44101. ]],
  44102. [[
  44103. 155631,
  44104. -5609
  44105. ]],
  44106. [[
  44107. 150725,
  44108. -7565
  44109. ]],
  44110. [[
  44111. 156816,
  44112. -4607
  44113. ]]
  44114. ]
  44115. }
  44116. },
  44117. {
  44118. 'type': 'Feature',
  44119. 'id': 'POL',
  44120. 'properties': { 'name': 'Poland' },
  44121. 'geometry': {
  44122. 'type': 'Polygon',
  44123. 'coordinates': ['@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵšωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔'],
  44124. 'encodeOffsets': [[
  44125. 15378,
  44126. 52334
  44127. ]]
  44128. }
  44129. },
  44130. {
  44131. 'type': 'Feature',
  44132. 'id': 'PRI',
  44133. 'properties': { 'name': 'Puerto Rico' },
  44134. 'geometry': {
  44135. 'type': 'Polygon',
  44136. 'coordinates': ['@@јõưǕɋɃمLӫ‡·άŢŬیK'],
  44137. 'encodeOffsets': [[
  44138. -67873,
  44139. 18960
  44140. ]]
  44141. }
  44142. },
  44143. {
  44144. 'type': 'Feature',
  44145. 'id': 'PRK',
  44146. 'properties': { 'name': 'North Korea' },
  44147. 'geometry': {
  44148. 'type': 'Polygon',
  44149. 'coordinates': ['@@Şƥ͉ºη˵ʣ˷Ž׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑˆÁùСdžĵƿʙé‡ǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮Ўˁܪ‹ſѺಚβͰҼժӹ'],
  44150. 'encodeOffsets': [[
  44151. 133776,
  44152. 43413
  44153. ]]
  44154. }
  44155. },
  44156. {
  44157. 'type': 'Feature',
  44158. 'id': 'PRT',
  44159. 'properties': { 'name': 'Portugal' },
  44160. 'geometry': {
  44161. 'type': 'Polygon',
  44162. 'coordinates': ['@@̦Ɉ΄ŬɂЫӺDƞłӪ‡ɼуϱɩYٽƍū‘Їγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠™˲'],
  44163. 'encodeOffsets': [[
  44164. -9251,
  44165. 42886
  44166. ]]
  44167. }
  44168. },
  44169. {
  44170. 'type': 'Feature',
  44171. 'id': 'PRY',
  44172. 'properties': { 'name': 'Paraguay' },
  44173. 'geometry': {
  44174. 'type': 'Polygon',
  44175. 'coordinates': ['@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲLJ΄ǐ֦ɩǀʣþޓİ͓̼›̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ'],
  44176. 'encodeOffsets': [[
  44177. -64189,
  44178. -22783
  44179. ]]
  44180. }
  44181. },
  44182. {
  44183. 'type': 'Feature',
  44184. 'id': 'QAT',
  44185. 'properties': { 'name': 'Qatar' },
  44186. 'geometry': {
  44187. 'type': 'Polygon',
  44188. 'coordinates': ['@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ'],
  44189. 'encodeOffsets': [[
  44190. 52030,
  44191. 25349
  44192. ]]
  44193. }
  44194. },
  44195. {
  44196. 'type': 'Feature',
  44197. 'id': 'ROU',
  44198. 'properties': { 'name': 'Romania' },
  44199. 'geometry': {
  44200. 'type': 'Polygon',
  44201. 'coordinates': ['@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁ€ρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ'],
  44202. 'encodeOffsets': [[
  44203. 23256,
  44204. 49032
  44205. ]]
  44206. }
  44207. },
  44208. {
  44209. 'type': 'Feature',
  44210. 'id': 'RUS',
  44211. 'properties': { 'name': 'Russia' },
  44212. 'geometry': {
  44213. 'type': 'MultiPolygon',
  44214. 'coordinates': [
  44215. ['@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌš૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ'],
  44216. ['@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ'],
  44217. ['@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗʼnҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ'],
  44218. ['@@ः©ƭˌੲΖ@ַ'],
  44219. ['@@ળ»@ָň–܈E௒ʉïŗࡽȩ'],
  44220. ['@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə'],
  44221. ['@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ'],
  44222. ['@@ډرᶽzඃȣမղҎ׀૎ǂᕞ™ᴬѽ'],
  44223. ['@@ӹóᩣŊɟώູɦūҒ࡮Ƕ…Ҟသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ'],
  44224. ['@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴDŽєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎DŽာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽Šͻड़ȋő௣ޭ‹Ϋ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ†܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜLJـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻Š֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחnjЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻˜ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿ†ՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉ‚ώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽”ȷ՞ȟ˨NJĀڴ‡͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱijšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾™ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ'],
  44225. ['@@ⵙ͕ໞીےĦقÃᒈӋʟͿ'],
  44226. ['@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ'],
  44227. ['@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ']
  44228. ],
  44229. 'encodeOffsets': [
  44230. [[
  44231. 147096,
  44232. 51966
  44233. ]],
  44234. [[
  44235. 23277,
  44236. 55632
  44237. ]],
  44238. [[
  44239. -179214,
  44240. 68183
  44241. ]],
  44242. [[
  44243. 184320,
  44244. 72533
  44245. ]],
  44246. [[
  44247. -182982,
  44248. 72595
  44249. ]],
  44250. [[
  44251. 147051,
  44252. 74970
  44253. ]],
  44254. [[
  44255. 154350,
  44256. 76887
  44257. ]],
  44258. [[
  44259. 148569,
  44260. 77377
  44261. ]],
  44262. [[
  44263. 58917,
  44264. 72418
  44265. ]],
  44266. [[
  44267. 109538,
  44268. 78822
  44269. ]],
  44270. [[
  44271. 107598,
  44272. 80187
  44273. ]],
  44274. [[
  44275. 52364,
  44276. 82481
  44277. ]],
  44278. [[
  44279. 102339,
  44280. 80775
  44281. ]]
  44282. ]
  44283. }
  44284. },
  44285. {
  44286. 'type': 'Feature',
  44287. 'id': 'RWA',
  44288. 'properties': { 'name': 'Rwanda' },
  44289. 'geometry': {
  44290. 'type': 'Polygon',
  44291. 'coordinates': ['@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘތԄʎɺȰďԈʸ'],
  44292. 'encodeOffsets': [[
  44293. 31150,
  44294. -1161
  44295. ]]
  44296. }
  44297. },
  44298. {
  44299. 'type': 'Feature',
  44300. 'id': 'ESH',
  44301. 'properties': { 'name': 'Western Sahara' },
  44302. 'geometry': {
  44303. 'type': 'Polygon',
  44304. 'coordinates': ['@@oҊŸ@@ÉeNjEౝ᪁ª‚ᒷ޿÷ȳћDŽ்ᾓNǽ˫˜΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ʼnϢ@˔ȒԲ‚'],
  44305. 'encodeOffsets': [[
  44306. -9005,
  44307. 27772
  44308. ]]
  44309. }
  44310. },
  44311. {
  44312. 'type': 'Feature',
  44313. 'id': 'SAU',
  44314. 'properties': { 'name': 'Saudi Arabia' },
  44315. 'geometry': {
  44316. 'type': 'Polygon',
  44317. 'coordinates': ['@@ʼnΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīא–ӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦœ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фdžŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒdž͍Žș࡙͐ᡌщǞDzϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ'],
  44318. 'encodeOffsets': [[
  44319. 43807,
  44320. 16741
  44321. ]]
  44322. }
  44323. },
  44324. {
  44325. 'type': 'Feature',
  44326. 'id': 'SDN',
  44327. 'properties': { 'name': 'Sudan' },
  44328. 'geometry': {
  44329. 'type': 'Polygon',
  44330. 'coordinates': ['@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃ…ǥ࠵@řǦ؃†̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dij'],
  44331. 'encodeOffsets': [[
  44332. 34779,
  44333. 9692
  44334. ]]
  44335. }
  44336. },
  44337. {
  44338. 'type': 'Feature',
  44339. 'id': 'SDS',
  44340. 'properties': { 'name': 'South Sudan' },
  44341. 'geometry': {
  44342. 'type': 'Polygon',
  44343. 'coordinates': ['@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵDZϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄…Śǥ࠶@†ǦѠDŽĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg'],
  44344. 'encodeOffsets': [[
  44345. 34779,
  44346. 9692
  44347. ]]
  44348. }
  44349. },
  44350. {
  44351. 'type': 'Feature',
  44352. 'id': 'SEN',
  44353. 'properties': { 'name': 'Senegal' },
  44354. 'geometry': {
  44355. 'type': 'Polygon',
  44356. 'coordinates': ['@@΍ٺн̚φDŽРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽžԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇–ɥħ˥‚ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy'],
  44357. 'encodeOffsets': [[
  44358. -17114,
  44359. 13922
  44360. ]]
  44361. }
  44362. },
  44363. {
  44364. 'type': 'Feature',
  44365. 'id': 'SLB',
  44366. 'properties': { 'name': 'Solomon Islands' },
  44367. 'geometry': {
  44368. 'type': 'MultiPolygon',
  44369. 'coordinates': [
  44370. ['@@ɾ˿חN͉ԬԈȯǜ‰'],
  44371. ['@@͝mԧĎǫżÀͮֈƁ˜ǭƎə'],
  44372. ['@@ųƹحܰǫԈ˺@̠ڥʹЗ'],
  44373. ['@@–ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ'],
  44374. ['@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛']
  44375. ],
  44376. 'encodeOffsets': [
  44377. [[
  44378. 166010,
  44379. -10734
  44380. ]],
  44381. [[
  44382. 164713,
  44383. -10109
  44384. ]],
  44385. [[
  44386. 165561,
  44387. -9830
  44388. ]],
  44389. [[
  44390. 163713,
  44391. -8537
  44392. ]],
  44393. [[
  44394. 161320,
  44395. -7524
  44396. ]]
  44397. ]
  44398. }
  44399. },
  44400. {
  44401. 'type': 'Feature',
  44402. 'id': 'SLE',
  44403. 'properties': { 'name': 'Sierra Leone' },
  44404. 'geometry': {
  44405. 'type': 'Polygon',
  44406. 'coordinates': ['@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼˁʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ'],
  44407. 'encodeOffsets': [[
  44408. -11713,
  44409. 6949
  44410. ]]
  44411. }
  44412. },
  44413. {
  44414. 'type': 'Feature',
  44415. 'id': 'SLV',
  44416. 'properties': { 'name': 'El Salvador' },
  44417. 'geometry': {
  44418. 'type': 'Polygon',
  44419. 'coordinates': ['@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«IJȠ¾ʜëǸǙʪƇŒœτĴǤÑŘĝÏͳ'],
  44420. 'encodeOffsets': [[
  44421. -89900,
  44422. 13706
  44423. ]]
  44424. }
  44425. },
  44426. {
  44427. 'type': 'Feature',
  44428. 'id': '-99',
  44429. 'properties': { 'name': 'Somaliland' },
  44430. 'geometry': {
  44431. 'type': 'Polygon',
  44432. 'coordinates': ['@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎˆKaE΋Aࡑ@ѫ'],
  44433. 'encodeOffsets': [[
  44434. 50113,
  44435. 9679
  44436. ]]
  44437. }
  44438. },
  44439. {
  44440. 'type': 'Feature',
  44441. 'id': 'SOM',
  44442. 'properties': { 'name': 'Somalia' },
  44443. 'geometry': {
  44444. 'type': 'Polygon',
  44445. 'coordinates': ['@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબšᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ'],
  44446. 'encodeOffsets': [[
  44447. 50923,
  44448. 11857
  44449. ]]
  44450. }
  44451. },
  44452. {
  44453. 'type': 'Feature',
  44454. 'id': 'SRB',
  44455. 'properties': { 'name': 'Republic of Serbia' },
  44456. 'geometry': {
  44457. 'type': 'Polygon',
  44458. 'coordinates': ['@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞijƑšϳa˹µƒØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢšŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾ™ҖͣĦˋ'],
  44459. 'encodeOffsets': [[
  44460. 21376,
  44461. 46507
  44462. ]]
  44463. }
  44464. },
  44465. {
  44466. 'type': 'Feature',
  44467. 'id': 'SUR',
  44468. 'properties': { 'name': 'Suriname' },
  44469. 'geometry': {
  44470. 'type': 'Polygon',
  44471. 'coordinates': ['@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓDzЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ'],
  44472. 'encodeOffsets': [[
  44473. -58518,
  44474. 6117
  44475. ]]
  44476. }
  44477. },
  44478. {
  44479. 'type': 'Feature',
  44480. 'id': 'SVK',
  44481. 'properties': { 'name': 'Slovakia' },
  44482. 'geometry': {
  44483. 'type': 'Polygon',
  44484. 'coordinates': ['@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹dzđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺ĔxþLj¢ÆȒȖ˜žưʢD'],
  44485. 'encodeOffsets': [[
  44486. 19306,
  44487. 50685
  44488. ]]
  44489. }
  44490. },
  44491. {
  44492. 'type': 'Feature',
  44493. 'id': 'SVN',
  44494. 'properties': { 'name': 'Slovenia' },
  44495. 'geometry': {
  44496. 'type': 'Polygon',
  44497. 'coordinates': ['@@ۜÝъȐܾtLjƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙב†ȈúȫΨĞа'],
  44498. 'encodeOffsets': [[
  44499. 14138,
  44500. 47626
  44501. ]]
  44502. }
  44503. },
  44504. {
  44505. 'type': 'Feature',
  44506. 'id': 'SWE',
  44507. 'properties': { 'name': 'Sweden' },
  44508. 'geometry': {
  44509. 'type': 'Polygon',
  44510. 'coordinates': ['@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ”૪Щ಼ֱv಑˴͛ฃʃ'],
  44511. 'encodeOffsets': [[
  44512. 22716,
  44513. 67302
  44514. ]]
  44515. }
  44516. },
  44517. {
  44518. 'type': 'Feature',
  44519. 'id': 'SWZ',
  44520. 'properties': { 'name': 'Swaziland' },
  44521. 'geometry': {
  44522. 'type': 'Polygon',
  44523. 'coordinates': ['@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω'],
  44524. 'encodeOffsets': [[
  44525. 32842,
  44526. -27375
  44527. ]]
  44528. }
  44529. },
  44530. {
  44531. 'type': 'Feature',
  44532. 'id': 'SYR',
  44533. 'properties': { 'name': 'Syria' },
  44534. 'geometry': {
  44535. 'type': 'Polygon',
  44536. 'coordinates': ['@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓'],
  44537. 'encodeOffsets': [[
  44538. 39724,
  44539. 34180
  44540. ]]
  44541. }
  44542. },
  44543. {
  44544. 'type': 'Feature',
  44545. 'id': 'TCD',
  44546. 'properties': { 'name': 'Chad' },
  44547. 'geometry': {
  44548. 'type': 'Polygon',
  44549. 'coordinates': ['@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކŒ֐É֐ͭՠ'],
  44550. 'encodeOffsets': [[
  44551. 14844,
  44552. 13169
  44553. ]]
  44554. }
  44555. },
  44556. {
  44557. 'type': 'Feature',
  44558. 'id': 'TGO',
  44559. 'properties': { 'name': 'Togo' },
  44560. 'geometry': {
  44561. 'type': 'Polygon',
  44562. 'coordinates': ['@@ڱdzȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ŽЭǜǥኝȺׅ'],
  44563. 'encodeOffsets': [[
  44564. 1911,
  44565. 6290
  44566. ]]
  44567. }
  44568. },
  44569. {
  44570. 'type': 'Feature',
  44571. 'id': 'THA',
  44572. 'properties': { 'name': 'Thailand' },
  44573. 'geometry': {
  44574. 'type': 'Polygon',
  44575. 'coordinates': ['@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצœӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ›܅˙ϛ޿ŦગDž՟ۧȤ১'],
  44576. 'encodeOffsets': [[
  44577. 105047,
  44578. 12480
  44579. ]]
  44580. }
  44581. },
  44582. {
  44583. 'type': 'Feature',
  44584. 'id': 'TJK',
  44585. 'properties': { 'name': 'Tajikistan' },
  44586. 'geometry': {
  44587. 'type': 'Polygon',
  44588. 'coordinates': ['@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ‡͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯nj؋ˑʱĺӀࡘǹض؟ȨɔφۮŸЌҬˌբ૲ȜǩϵŤɹΎv'],
  44589. 'encodeOffsets': [[
  44590. 72719,
  44591. 41211
  44592. ]]
  44593. }
  44594. },
  44595. {
  44596. 'type': 'Feature',
  44597. 'id': 'TKM',
  44598. 'properties': { 'name': 'Turkmenistan' },
  44599. 'geometry': {
  44600. 'type': 'Polygon',
  44601. 'coordinates': ['@@ñۼطŠॣݔڣĠगюׯþσƽ֙|ׯӓ݇NjƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦžˮƳаࡽ०ׇոЃ࢞Щ૤Ϋwԥʩ€Ѕɤſ̙۽NjǙڥӁʭڏŵǫϟهŏࡩ͈'],
  44602. 'encodeOffsets': [[
  44603. 62680,
  44604. 36506
  44605. ]]
  44606. }
  44607. },
  44608. {
  44609. 'type': 'Feature',
  44610. 'id': 'TLS',
  44611. 'properties': { 'name': 'East Timor' },
  44612. 'geometry': {
  44613. 'type': 'Polygon',
  44614. 'coordinates': ['@@IJȤܢȌז†ˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ'],
  44615. 'encodeOffsets': [[
  44616. 127968,
  44617. -9106
  44618. ]]
  44619. }
  44620. },
  44621. {
  44622. 'type': 'Feature',
  44623. 'id': 'TTO',
  44624. 'properties': { 'name': 'Trinidad and Tobago' },
  44625. 'geometry': {
  44626. 'type': 'Polygon',
  44627. 'coordinates': ['@@ӚŊǮ‡‘صۭġƯúʒɲiͪ'],
  44628. 'encodeOffsets': [[
  44629. -63160,
  44630. 11019
  44631. ]]
  44632. }
  44633. },
  44634. {
  44635. 'type': 'Feature',
  44636. 'id': 'TUN',
  44637. 'properties': { 'name': 'Tunisia' },
  44638. 'geometry': {
  44639. 'type': 'Polygon',
  44640. 'coordinates': ['@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒljпЫMϱ̆ȽōܫփхDŽқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț'],
  44641. 'encodeOffsets': [[
  44642. 9710,
  44643. 31035
  44644. ]]
  44645. }
  44646. },
  44647. {
  44648. 'type': 'Feature',
  44649. 'id': 'TUR',
  44650. 'properties': { 'name': 'Turkey' },
  44651. 'geometry': {
  44652. 'type': 'MultiPolygon',
  44653. 'coordinates': [
  44654. ['@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟ†ȗΑׇij߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒ’Μྀٔŏ৞հ঒ʄർlุף'],
  44655. ['@@۫ҏ˃Ϻ\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ']
  44656. ],
  44657. 'encodeOffsets': [
  44658. [[
  44659. 37800,
  44660. 42328
  44661. ]],
  44662. [[
  44663. 27845,
  44664. 41668
  44665. ]]
  44666. ]
  44667. }
  44668. },
  44669. {
  44670. 'type': 'Feature',
  44671. 'id': 'TZA',
  44672. 'properties': { 'name': 'United Republic of Tanzania' },
  44673. 'geometry': {
  44674. 'type': 'Polygon',
  44675. 'coordinates': ['@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà'],
  44676. 'encodeOffsets': [[
  44677. 34718,
  44678. -972
  44679. ]]
  44680. }
  44681. },
  44682. {
  44683. 'type': 'Feature',
  44684. 'id': 'UGA',
  44685. 'properties': { 'name': 'Uganda' },
  44686. 'geometry': {
  44687. 'type': 'Polygon',
  44688. 'coordinates': ['@@ः\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß'],
  44689. 'encodeOffsets': [[
  44690. 32631,
  44691. -1052
  44692. ]]
  44693. }
  44694. },
  44695. {
  44696. 'type': 'Feature',
  44697. 'id': 'UKR',
  44698. 'properties': { 'name': 'Ukraine' },
  44699. 'geometry': {
  44700. 'type': 'Polygon',
  44701. 'coordinates': ['@@̾“ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨLjߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉŽأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº'],
  44702. 'encodeOffsets': [[
  44703. 32549,
  44704. 53353
  44705. ]]
  44706. }
  44707. },
  44708. {
  44709. 'type': 'Feature',
  44710. 'id': 'URY',
  44711. 'properties': { 'name': 'Uruguay' },
  44712. 'geometry': {
  44713. 'type': 'Polygon',
  44714. 'coordinates': ['@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ'],
  44715. 'encodeOffsets': [[
  44716. -59008,
  44717. -30941
  44718. ]]
  44719. }
  44720. },
  44721. {
  44722. 'type': 'Feature',
  44723. 'id': 'USA',
  44724. 'properties': { 'name': 'United States of America' },
  44725. 'geometry': {
  44726. 'type': 'MultiPolygon',
  44727. 'coordinates': [
  44728. ['@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ'],
  44729. ['@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ'],
  44730. ['@@ĝ҉|Úĸа•'],
  44731. ['@@­µÓŻˆŃȒ’ɤŚêÃʐ˥'],
  44732. ['@@ıĉ˱ƴªÖŸĈȘijȝ'],
  44733. ['@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦljεǴՑևƀׂ˓˜ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥—͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓLJō̵Ů́ǃ؍€طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕDŽ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠˆȚχˤٯ۴řۆ҃ҞȀۢ…ܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J'],
  44734. ['@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ'],
  44735. ['@@ԧŽսƾԛɮࠦƞښùĂ͑'],
  44736. ['@@԰DžԾĒڸɛ࠲őéĝُDZٕǾ͋Ʋݍµȧôº̈́'],
  44737. ['@@؊ϛώnjහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ʼn૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩDŽ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झdzťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થLJ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢŽڽԶਕ͌ױр߫ΨଽˈҺѲ๰‚ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ']
  44738. ],
  44739. 'encodeOffsets': [
  44740. [[
  44741. -159275,
  44742. 19542
  44743. ]],
  44744. [[
  44745. -159825,
  44746. 21140
  44747. ]],
  44748. [[
  44749. -160520,
  44750. 21686
  44751. ]],
  44752. [[
  44753. -161436,
  44754. 21834
  44755. ]],
  44756. [[
  44757. -163169,
  44758. 22510
  44759. ]],
  44760. [[
  44761. -97093,
  44762. 50575
  44763. ]],
  44764. [[
  44765. -156678,
  44766. 58487
  44767. ]],
  44768. [[
  44769. -169553,
  44770. 61348
  44771. ]],
  44772. [[
  44773. -175853,
  44774. 65314
  44775. ]],
  44776. [[
  44777. -158789,
  44778. 72856
  44779. ]]
  44780. ]
  44781. }
  44782. },
  44783. {
  44784. 'type': 'Feature',
  44785. 'id': 'UZB',
  44786. 'properties': { 'name': 'Uzbekistan' },
  44787. 'geometry': {
  44788. 'type': 'Polygon',
  44789. 'coordinates': ['@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN'],
  44790. 'encodeOffsets': [[
  44791. 68116,
  44792. 38260
  44793. ]]
  44794. }
  44795. },
  44796. {
  44797. 'type': 'Feature',
  44798. 'id': 'VEN',
  44799. 'properties': { 'name': 'Venezuela' },
  44800. 'geometry': {
  44801. 'type': 'Polygon',
  44802. 'coordinates': ['@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ‘֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝNjʱٷÅҧѼʯ࠺ɟ̧̌Ȅюм…ȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷê‡ǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ'],
  44803. 'encodeOffsets': [[
  44804. -73043,
  44805. 12059
  44806. ]]
  44807. }
  44808. },
  44809. {
  44810. 'type': 'Feature',
  44811. 'id': 'VNM',
  44812. 'properties': { 'name': 'Vietnam' },
  44813. 'geometry': {
  44814. 'type': 'Polygon',
  44815. 'coordinates': ['@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ'],
  44816. 'encodeOffsets': [[
  44817. 110644,
  44818. 22070
  44819. ]]
  44820. }
  44821. },
  44822. {
  44823. 'type': 'Feature',
  44824. 'id': 'VUT',
  44825. 'properties': { 'name': 'Vanuatu' },
  44826. 'geometry': {
  44827. 'type': 'MultiPolygon',
  44828. 'coordinates': [
  44829. ['@@ˣō˭ςŒɤՆӗ'],
  44830. ['@@ƌڱɥŀǩ­ťɴi٢Дʵ']
  44831. ],
  44832. 'encodeOffsets': [
  44833. [[
  44834. 171874,
  44835. -16861
  44836. ]],
  44837. [[
  44838. 171119,
  44839. -15292
  44840. ]]
  44841. ]
  44842. }
  44843. },
  44844. {
  44845. 'type': 'Feature',
  44846. 'id': 'PSE',
  44847. 'properties': { 'name': 'West Bank' },
  44848. 'geometry': {
  44849. 'type': 'Polygon',
  44850. 'coordinates': ['@@@ԣŭʙЃŕ˜ɜɌŚɁĦǬ̤֔ś'],
  44851. 'encodeOffsets': [[
  44852. 36399,
  44853. 33172
  44854. ]]
  44855. }
  44856. },
  44857. {
  44858. 'type': 'Feature',
  44859. 'id': 'YEM',
  44860. 'properties': { 'name': 'Yemen' },
  44861. 'geometry': {
  44862. 'type': 'Polygon',
  44863. 'coordinates': ['@@؉ɥNjύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗lj۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸNJ™ξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח'],
  44864. 'encodeOffsets': [[
  44865. 54384,
  44866. 17051
  44867. ]]
  44868. }
  44869. },
  44870. {
  44871. 'type': 'Feature',
  44872. 'id': 'ZAF',
  44873. 'properties': { 'name': 'South Africa' },
  44874. 'geometry': {
  44875. 'type': 'Polygon',
  44876. 'coordinates': [
  44877. '@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеDž࣫NJԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒŸśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ',
  44878. '@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ'
  44879. ],
  44880. 'encodeOffsets': [
  44881. [
  44882. 32278,
  44883. -29959
  44884. ],
  44885. [
  44886. 29674,
  44887. -29650
  44888. ]
  44889. ]
  44890. }
  44891. },
  44892. {
  44893. 'type': 'Feature',
  44894. 'id': 'ZMB',
  44895. 'properties': { 'name': 'Zambia' },
  44896. 'geometry': {
  44897. 'type': 'Polygon',
  44898. 'coordinates': ['@@ІϏɊ܋ƝɩǙڻLjۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یžᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ'],
  44899. 'encodeOffsets': [[
  44900. 33546,
  44901. -9452
  44902. ]]
  44903. }
  44904. },
  44905. {
  44906. 'type': 'Feature',
  44907. 'id': 'ZWE',
  44908. 'properties': { 'name': 'Zimbabwe' },
  44909. 'geometry': {
  44910. 'type': 'Polygon',
  44911. 'coordinates': ['@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋—عƊʝħӵŵùɛ؅ࢫ॓'],
  44912. 'encodeOffsets': [[
  44913. 31941,
  44914. -22785
  44915. ]]
  44916. }
  44917. }
  44918. ],
  44919. 'UTF8Encoding': true
  44920. };
  44921. });define('echarts/util/mapData/geoJson/xiang_gang_geo', [], function () {
  44922. return {
  44923. 'type': 'FeatureCollection',
  44924. 'features': [{
  44925. 'type': 'Feature',
  44926. 'id': '8100',
  44927. 'properties': {
  44928. 'name': '香港',
  44929. 'cp': [
  44930. 114.2784,
  44931. 22.3057
  44932. ],
  44933. 'childNum': 1
  44934. },
  44935. 'geometry': {
  44936. 'type': 'Polygon',
  44937. 'coordinates': ['@@™@}ScTʟ@cWuJÁ–]„l¦RLj¼BĄà˜ ŽH@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJ‚X´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\Y}­ƒ§™Mën'],
  44938. 'encodeOffsets': [[
  44939. 117078,
  44940. 22678
  44941. ]]
  44942. }
  44943. }],
  44944. 'UTF8Encoding': true
  44945. };
  44946. });define('echarts/util/mapData/geoJson/xin_jiang_geo', [], function () {
  44947. return {
  44948. 'type': 'FeatureCollection',
  44949. 'features': [
  44950. {
  44951. 'type': 'Feature',
  44952. 'id': '6528',
  44953. 'properties': {
  44954. 'name': '巴音郭楞蒙古自治州',
  44955. 'cp': [
  44956. 88.1653,
  44957. 39.6002
  44958. ],
  44959. 'childNum': 9
  44960. },
  44961. 'geometry': {
  44962. 'type': 'Polygon',
  44963. 'coordinates': ['@@˜@ÈÒĊanwŎV„™Ȯ¦ͪŃĢ„ÜōȂçČéƐżLɆóĊ‚Ċaʊٱ¯²Um»ˌmÈ»V™ʠţWÑůǓ郙ôƑƒğÆīŎī@Ƿ™wô™˺LÞ¯ƨVǪуšĢ™ȘV°wĢŽôk°¯ƒ»΀@Ȃ»ĸŽǔ@΀ƒ͔ôôLɆó̐ÝɜLɲōͪƒƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛljťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽ™ɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLšÞŎJ±̃XȣˌōlƒUÈ¯ŎKÆƅ°™XÑܱnŗġV¯™óaUƒƧUōŁ„Ñ™±„çɲ¥lĉkğ°ƒk¥˜ƒnğţL¯ÝÝUƽĬ΁lķ°@„ō„XÿݯV»ŹLʉÞɱŤĉó°ÝJ™¦ÝKÝ£ţܙÈĉ@ƒxǩUċƑ@ky͓¹™`U²ĉVġ»ğa¯¥ť@ĉ™‚ó@ŻÛÛJƒw¯nó¯ġWƽʩķÝɛwĉĕݼȭÞķō@ó£Å΀ƑޝôȯÞ¯Ȱ™ÆōèĉXǼó@ݚnºƒĸ„ÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌ™ÈmɼĵŦW¤öʊõʔ@°ÈXVŽ™ènŎȁb¯ǫĉ„±Èğ`ġwōÔğ»mVVށ„Ý¥ó@™ĸķô@ššbX„ĶmV²²`Þ_˜˜ɴbͪȰ„ÞWĸÈŌmބškɲŽÈUÆ»n¼ǬVķĸźô¯°n¦ɄǜÈ'],
  44964. 'encodeOffsets': [[
  44965. 86986,
  44966. 44534
  44967. ]]
  44968. }
  44969. },
  44970. {
  44971. 'type': 'Feature',
  44972. 'id': '6532',
  44973. 'properties': {
  44974. 'name': '和田地区',
  44975. 'cp': [
  44976. 81.167,
  44977. 36.9855
  44978. ],
  44979. 'childNum': 8
  44980. },
  44981. 'geometry': {
  44982. 'type': 'Polygon',
  44983. 'coordinates': ['@@ƨ¥šèź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛƒÝ„ķm¹Þ™ô@È»ĊWŎçšÅ°ȯȰÝ°óƒÆͿĉ»̽çnƒmɱĵƧºóU™™ƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@у™óK@™ÇaÝXğţxĉČǫķê¯K@уaŹ„ƑKƒ¼¯Vóaónġw™óÞéU™ġbóĉğÇl¹™aUóğKW„Vůn›ÇŋƑ›ķnʇ»óxĉw™çǰÅw™°ċ„XŽ™„ób±ƒkÈÇJ—ƒm²ţx@ÒݎšŦǺn„ó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºƒzÈÜmnxmx²ĖmҚbnŽƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞLš¼nĠƒ¼@ޙšÞź@ŎÞ°VšɄɴжϼِ͈Ŏ„'],
  44984. 'encodeOffsets': [[
  44985. 81293,
  44986. 39764
  44987. ]]
  44988. }
  44989. },
  44990. {
  44991. 'type': 'Feature',
  44992. 'id': '6522',
  44993. 'properties': {
  44994. 'name': '哈密地区',
  44995. 'cp': [
  44996. 93.7793,
  44997. 42.9236
  44998. ],
  44999. 'childNum': 3
  45000. },
  45001. 'geometry': {
  45002. 'type': 'Polygon',
  45003. 'coordinates': ['@@WnŐÆĶL̦ţºź„lxÅĸƽŚ‚Ʉ—Į˜è@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀šĢ™ƐLˤ™ȘÑnƒІljĸÿn¯ĶaŎ¯ĢĕȘ¯°΂œla¯¥™ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽكéōǖȁÝƏůǕw˹ǫȗǓƧǕVý™é@ĬţLƧôͩ„ɱŎɛK̏ÞɅôóK@²@°ōؚ¼lŦ¯ŰóƜÛlV¼ķ¼ƒ°kȰ™Ű„ĠƒǬ™ŚÝŎmˁ`@ÇÜn„'],
  45004. 'encodeOffsets': [[
  45005. 93387,
  45006. 44539
  45007. ]]
  45008. }
  45009. },
  45010. {
  45011. 'type': 'Feature',
  45012. 'id': '6529',
  45013. 'properties': {
  45014. 'name': '阿克苏地区',
  45015. 'cp': [
  45016. 82.9797,
  45017. 41.0229
  45018. ],
  45019. 'childNum': 10
  45020. },
  45021. 'geometry': {
  45022. 'type': 'Polygon',
  45023. 'coordinates': [
  45024. '@@VƚxˌŎÞŎƒ°n„ȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèԐôWȲŤVÞĸʶbl‚¯ôn_VÆĸlmÞnVź_ĸ¼Ȯmǖ„šéĸW°°„ĸJ„kʠ¼Æw°¤ÈƒlxɆzČºĶI²ÆǔUš°ô@Þ¦‚ƒUnUĠ¼ŎÓĢxĠ_²ÇĊƒǬ°ŽȂamōšçUÇW@¯öʓõʉX£ĶťnɻšÇUˋmϙ¯˗ӑѡᩃaΗƒœɜ°xWƴUxɃÒˣ¤Ʌwğ„ʉōóÝŹ±°ȗ@¯„ƃ²¼',
  45025. '@@ō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ'
  45026. ],
  45027. 'encodeOffsets': [
  45028. [
  45029. 80022,
  45030. 41294
  45031. ],
  45032. [
  45033. 83914,
  45034. 41474
  45035. ]
  45036. ]
  45037. }
  45038. },
  45039. {
  45040. 'type': 'Feature',
  45041. 'id': '6543',
  45042. 'properties': {
  45043. 'name': '阿勒泰地区',
  45044. 'cp': [
  45045. 88.2971,
  45046. 47.0929
  45047. ],
  45048. 'childNum': 7
  45049. },
  45050. 'geometry': {
  45051. 'type': 'Polygon',
  45052. 'coordinates': ['@@ɲˣĊIÈ¥‚ÅU±Ċýkō°ƒĉƽó»ĶƽXóʵʵ™ȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóŽķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸ‚ĢČþ„ĀĊôάVö¼ĊUƨ°°èŎČUÜÆóôVôô޲êȘlˌç°`n²ǬŽĊaš™ƒÛ°±kğmm»š@°ÝɆÛÅÇVaݍVm͔ğôÝÈb‚„@„ƒ™n¯š™ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ŽĊX„mmÑÆ»ȰÑkƒĶō@ý°m—¯'],
  45053. 'encodeOffsets': [[
  45054. 92656,
  45055. 48460
  45056. ]]
  45057. }
  45058. },
  45059. {
  45060. 'type': 'Feature',
  45061. 'id': '6531',
  45062. 'properties': {
  45063. 'name': '喀什地区',
  45064. 'cp': [
  45065. 77.168,
  45066. 37.8534
  45067. ],
  45068. 'childNum': 13
  45069. },
  45070. 'geometry': {
  45071. 'type': 'Polygon',
  45072. 'coordinates': [
  45073. '@@Č@°ƒĠ„ôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@šĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@š„@ÒĉlŻ_@šƧĖÅĬōÆ@bźÞnƒƒlVœÝĬšWƼʇ„ƒÝÅ@ÇÅÈwWóĉ±ğz‚ĬČƨƂÝIĉݯbÇÑĉƒ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮ™ŎlɴȘ՘š„¦ɲÆʈ_ɴŽźŽôÞʊŎĠƒɆxˤ£ɄÑVwXƳ¯w›ɛŹ٧™çƧ¦ōƒُ͇еϻɃɳU™Ý¯@ōÝŹš™@݄»mğ™»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨém™anѱĕnwmwnÇۄyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzƒŽ„ômxȗÿƿI@þÅČÝKݰ@¼ÈVºš@Å̚ÆUċłn„ÝÆǕČĵJm£ÝJ¦@ĊƒxV°ƏLċ¼ǩ™@™m@ÅĢómÇÆğ¹Çš™ÆšĖÞKšx„wô¦ÆÑÆL²ÆƾŽU„ޱŚÅŻĖ@ĬŤÈñ„@ǔÇx„Èǃ',
  45074. '@@VÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé'
  45075. ],
  45076. 'encodeOffsets': [
  45077. [
  45078. 76624,
  45079. 39196
  45080. ],
  45081. [
  45082. 81507,
  45083. 40877
  45084. ]
  45085. ]
  45086. }
  45087. },
  45088. {
  45089. 'type': 'Feature',
  45090. 'id': '6542',
  45091. 'properties': {
  45092. 'name': '塔城地区',
  45093. 'cp': [
  45094. 86.6272,
  45095. 45.8514
  45096. ],
  45097. 'childNum': 7
  45098. },
  45099. 'geometry': {
  45100. 'type': 'Polygon',
  45101. 'coordinates': [
  45102. '@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċšLV݄»™@Å»Ýnm¯š»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ƒšōUmxĉbÇї@›bUº¯X¯ÆƧbVÒĉnǕw¯°ƑŽV„—ŽÇ@kx±Uƒšɱn™ŽÅKƒ„¯ƒĠǠU°ɜL@°ƒxnĬ‚ĀŋŎÇLƒŽğšϱÞέƜkôÅĀǕłƒĸĊŤUṴ̋„¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇšbĊÑ̐óÞlĶwބɆVÞwǬxǪţȼÜLŐĶˢ@',
  45103. '@@óKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°ɜÞʊĠğŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒašƒċƨbš™Vğ—w›ġ¯@Uōa™ĉÝJğÑÆŎkŎÞĀlꃦ'
  45104. ],
  45105. 'encodeOffsets': [
  45106. [
  45107. 87593,
  45108. 48184
  45109. ],
  45110. [
  45111. 86884,
  45112. 45760
  45113. ]
  45114. ]
  45115. }
  45116. },
  45117. {
  45118. 'type': 'Feature',
  45119. 'id': '6523',
  45120. 'properties': {
  45121. 'name': '昌吉回族自治州',
  45122. 'cp': [
  45123. 89.6814,
  45124. 44.4507
  45125. ],
  45126. 'childNum': 7
  45127. },
  45128. 'geometry': {
  45129. 'type': 'MultiPolygon',
  45130. 'coordinates': [
  45131. ['@@መL@ȰĊȂɆƒÆĊ£„ťôWÓɆbĢÅŎƒÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@ó—ç˜ĭɃƾřÆķkwʃŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱšġôÛa±Òȁ„óèţIVŽƽ¼k¤ó¹ġJmx—»ÝUƒ²™@ÅÆƒĸǫŎ„ĊmŎǬ՘'],
  45132. ['@@Þô°bÞǠôÜôn@°ĸń˜Ƕkłƒ¼UޙKğȂÆÝĢŤķ@@ΌڬL܄K@ˣȂ˭lĉńW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»Ç™VğóřX™ŻKƏŽċêȁèÛŎġƒͩń']
  45133. ],
  45134. 'encodeOffsets': [
  45135. [[
  45136. 90113,
  45137. 46080
  45138. ]],
  45139. [[
  45140. 87638,
  45141. 44579
  45142. ]]
  45143. ]
  45144. }
  45145. },
  45146. {
  45147. 'type': 'Feature',
  45148. 'id': '6530',
  45149. 'properties': {
  45150. 'name': '克孜勒苏柯尔克孜自治州',
  45151. 'cp': [
  45152. 74.6301,
  45153. 39.5233
  45154. ],
  45155. 'childNum': 4
  45156. },
  45157. 'geometry': {
  45158. 'type': 'Polygon',
  45159. 'coordinates': ['@@ˎǫĠƽ°UUĉ¯±ȁÑmƒ„¯Ýōˋō™wUű»ÅƑ°ƒȘ@²¯ɳʇ`ɱŃ¥՗™ɳȗōkȭšșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊ„ÈÒ°aĊÞÞJŁċƧīĠyĊ²XôÇxÈÆÆ@„ÞʈƒÅ»™XÞīU›Ƒkm„ŹÝ@aŎÅÆīƨĕ@™ż`Ċk@љƒĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@™ÇUkçġÒƏÑÝ@ţéWĊôŚUŽóXUġkţ¤ķ@@ƴōĊó@óÔğƒ¯„ċ@@Қ¤kôˣŰ͓„k»ƒKX¯ċwƧôğɐšÒôIVƙš¯UķǬķšnŽ™¼ôb°ÒȰVVÈÞ°ƒĸó¤V¼°„V°²êƒlĢ҂Uƨ¦ôȰƴĊVV¼ǖIċĊ„ÞɜéšnČW˸Ǹša„řÈw±īšçĸ¤ĊšôšwšŽĸU̦˜éǖĬ„Āô¼lÞkÒ°x°ƆÞx„šÆV²ǔ»„b°wގȘ¥°n„šŎV@°„„ʠè‚ŰȂb'],
  45160. 'encodeOffsets': [[
  45161. 80269,
  45162. 42396
  45163. ]]
  45164. }
  45165. },
  45166. {
  45167. 'type': 'Feature',
  45168. 'id': '6521',
  45169. 'properties': {
  45170. 'name': '吐鲁番地区',
  45171. 'cp': [
  45172. 89.6375,
  45173. 42.4127
  45174. ],
  45175. 'childNum': 3
  45176. },
  45177. 'geometry': {
  45178. 'type': 'Polygon',
  45179. 'coordinates': ['@@ôK„ĉǪa²¼lÜô@ʠê°Ĭ™ôȂƒ²ÑÜbĢóɲ™ĸ¤ŎUô@xƒŽǔ£ъxˎmƒÈÛ@‚_nĕÞōšř„ǫƒğšůlȯ„¯ĸ»U»Ükôƛ°ůkť™»Ŏŗ@¯@±͓óͿ„Ǔ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġšƑ™ǩÒƧUݰ˹Kóššx@ǸōĬÅĬƑĠ󃄚ǔêÆ°XÒʟŤUšÇ¼ˋnn¼±V²°ȂUŌݜbʟǔɅô@żǬaҎÈ'],
  45180. 'encodeOffsets': [[
  45181. 90248,
  45182. 44371
  45183. ]]
  45184. }
  45185. },
  45186. {
  45187. 'type': 'Feature',
  45188. 'id': '6540',
  45189. 'properties': {
  45190. 'name': '伊犁哈萨克自治州',
  45191. 'cp': [
  45192. 82.5513,
  45193. 43.5498
  45194. ],
  45195. 'childNum': 10
  45196. },
  45197. 'geometry': {
  45198. 'type': 'MultiPolygon',
  45199. 'coordinates': [
  45200. ['@@ĉ„ÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUœÇmwVUȂóô@ȰÝ΀nÆJn™ƾ™ʠ™ŌLČóǪ¯œ¥ǔaǖšŌaôÝĢLšx„ƒÆLšɲm„™²VlwÈ@˜Uƒƒ°¯ǖxĊmUÑƨa°Å°WV¹œa›ÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱ™l݃ŋnķÇÝX¯ƒͩÇɳa——Ý`±_U±ĵnWƒ™a@™ĸóšķ™¯ǓV±ÅĵJċ¹ɅykwDޝ£Åxʟ»ƒlķI¯ƒX¯ķ‚™êǕƒȭnķ»Ź`±„kÞ@Žš„Ýô@Þ°xšŤŎIƨÆUxōš¯²ǔĬǬlUŚ'],
  45201. ['@@ÞĀlꃦ¯ĸŤKޙšƒċƨbš™Vğ—w›ġ¯@ţƽJ']
  45202. ],
  45203. 'encodeOffsets': [
  45204. [[
  45205. 82722,
  45206. 44337
  45207. ]],
  45208. [[
  45209. 86817,
  45210. 45456
  45211. ]]
  45212. ]
  45213. }
  45214. },
  45215. {
  45216. 'type': 'Feature',
  45217. 'id': '6527',
  45218. 'properties': {
  45219. 'name': '博尔塔拉蒙古自治州',
  45220. 'cp': [
  45221. 81.8481,
  45222. 44.6979
  45223. ],
  45224. 'childNum': 3
  45225. },
  45226. 'geometry': {
  45227. 'type': 'Polygon',
  45228. 'coordinates': ['@@ήƛϲÝĠ™„ÈKŌōÿmī„w@¯ɛKV¯ğǟ°Ƒ™wġKóÞŋbǕ™Ǔb›¦ǩ°ċôŋKʟšƽšmšÅImŽͿŽȯÞó@ȁôUVnx›ÈŹVȁĊÝabŻ£¯°l„óxȂŤĸkĊšÞyĊêĊmĢxV„ƨÈŽĠX„ŽΘÆĠÔź‚Ɇţ°LXƾŤŤb'],
  45229. 'encodeOffsets': [[
  45230. 84555,
  45231. 46311
  45232. ]]
  45233. }
  45234. },
  45235. {
  45236. 'type': 'Feature',
  45237. 'id': '6501',
  45238. 'properties': {
  45239. 'name': '乌鲁木齐市',
  45240. 'cp': [
  45241. 87.9236,
  45242. 43.5883
  45243. ],
  45244. 'childNum': 4
  45245. },
  45246. 'geometry': {
  45247. 'type': 'Polygon',
  45248. 'coordinates': ['@@šŽWŽôŚUĠȚl¼Ċ¼ƪǖ@źȘƆ@ýlܚXVŘޙš¦V¼kĖó҃èkĊȁˮ֜@ǫ՗nōƒĉǬō„ķÆÅš@„±ÞV˜¼nwĢIôºl£ƾ»UŤJôçšó¯īʟéó@kÛ±»ǩbƒĊóLҍÇǫb@ŻɆóʠǓ›aŋÞȁVʉłĉbĉɅô'],
  45249. 'encodeOffsets': [[
  45250. 88887,
  45251. 44146
  45252. ]]
  45253. }
  45254. },
  45255. {
  45256. 'type': 'Feature',
  45257. 'id': '6502',
  45258. 'properties': {
  45259. 'name': '克拉玛依市',
  45260. 'cp': [
  45261. 85.2869,
  45262. 45.5054
  45263. ],
  45264. 'childNum': 2
  45265. },
  45266. 'geometry': {
  45267. 'type': 'MultiPolygon',
  45268. 'coordinates': [
  45269. ['@@ɜÞʊĊýVaŃm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI™»ĉmğn™ƒaݚţL°ķóKĵĀV͈ĉłƾNJÆŤƒzXl°ƒÆL²¼źŽôÈĢǔ™¦l„ô°'],
  45270. ['@@ƾIŤ@UUwōa™ĉÝJğÑÆŎkŎ']
  45271. ],
  45272. 'encodeOffsets': [
  45273. [[
  45274. 87424,
  45275. 47245
  45276. ]],
  45277. [[
  45278. 86817,
  45279. 45456
  45280. ]]
  45281. ]
  45282. }
  45283. },
  45284. {
  45285. 'type': 'Feature',
  45286. 'id': '659002',
  45287. 'properties': {
  45288. 'name': '阿拉尔市',
  45289. 'cp': [
  45290. 81.2769,
  45291. 40.6549
  45292. ],
  45293. 'childNum': 1
  45294. },
  45295. 'geometry': {
  45296. 'type': 'Polygon',
  45297. 'coordinates': ['@@nIÇŃÛÝĊÑĠƏō™гwȁ¥Ƨ°ŹÑķV™¼ÞêĊ»‚lĵšm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ'],
  45298. 'encodeOffsets': [[
  45299. 83824,
  45300. 41929
  45301. ]]
  45302. }
  45303. },
  45304. {
  45305. 'type': 'Feature',
  45306. 'id': '659003',
  45307. 'properties': {
  45308. 'name': '图木舒克市',
  45309. 'cp': [
  45310. 79.1345,
  45311. 39.8749
  45312. ],
  45313. 'childNum': 1
  45314. },
  45315. 'geometry': {
  45316. 'type': 'Polygon',
  45317. 'coordinates': ['@@VéVÇ™ţ°ğUĠ¯mk¯ó¥ķIġÿƏbƒ„ĉa±ÒĸĀlKU„_m»nwšŽ„m@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ'],
  45318. 'encodeOffsets': [[
  45319. 81496,
  45320. 40962
  45321. ]]
  45322. }
  45323. },
  45324. {
  45325. 'type': 'Feature',
  45326. 'id': '659004',
  45327. 'properties': {
  45328. 'name': '五家渠市',
  45329. 'cp': [
  45330. 87.5391,
  45331. 44.3024
  45332. ],
  45333. 'childNum': 1
  45334. },
  45335. 'geometry': {
  45336. 'type': 'Polygon',
  45337. 'coordinates': ['@@„çôÑlĕU»™¥ÝšUŗ™WkÛ@þVńÝĔ@ńÅþĶUX¦Æƒ'],
  45338. 'encodeOffsets': [[
  45339. 89674,
  45340. 45636
  45341. ]]
  45342. }
  45343. },
  45344. {
  45345. 'type': 'Feature',
  45346. 'id': '659001',
  45347. 'properties': {
  45348. 'name': '石河子市',
  45349. 'cp': [
  45350. 86.0229,
  45351. 44.2914
  45352. ],
  45353. 'childNum': 1
  45354. },
  45355. 'geometry': {
  45356. 'type': 'Polygon',
  45357. 'coordinates': ['@@lŁ—ǵm‚ĉ@mż™¼n°ÞmƼš@'],
  45358. 'encodeOffsets': [[
  45359. 88178,
  45360. 45529
  45361. ]]
  45362. }
  45363. }
  45364. ],
  45365. 'UTF8Encoding': true
  45366. };
  45367. });define('echarts/util/mapData/geoJson/xi_zang_geo', [], function () {
  45368. return {
  45369. 'type': 'FeatureCollection',
  45370. 'features': [
  45371. {
  45372. 'type': 'Feature',
  45373. 'id': '5424',
  45374. 'properties': {
  45375. 'name': '那曲地区',
  45376. 'cp': [
  45377. 88.1982,
  45378. 33.3215
  45379. ],
  45380. 'childNum': 10
  45381. },
  45382. 'geometry': {
  45383. 'type': 'Polygon',
  45384. 'coordinates': ['@@ƨʔĸbܺÞwnxźbÞ°ô@„ĶŽĸIȼĊJŎÈôUšÝƒ¤ǔLސŎ@ĢŽȘblƒôL„ÇźçȤôLš¥ÞIÞ¯Ķxʊťƨ™ƿÑĉXVķŦ¯ȂKÇǕšÑ¯IUš£¯Óƿ£VĕōÞÿÆwƒƑ„£ǖxÞĕ±ÇÝaUÑȃU¯‚UōÈ݃wWŁĵ™±Ý„óĢÿ°IÞ±mÅ̝mÿ„¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢ„Ġĕˎٰóƨ¼Èa‚m@¥°wǔ„ǖ°ŽƨÇŤœšġƨ„ŎŃôbÈÛŎĊ°@Ġw²ÑÞJƃÆb²ƒ°êĊUނlȲƒV„ÈKĊÒĸĉ›»ÅôťUÅǃk¯@ǂÑklǁÅl™Ģ™VÑóƒ@°@„ÛĸƒV¯ƒÇĊ™n¯Uĕšƽ¯m›¯b™È@Ò°Ĭƒbĵ›¼„‚kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉƒÝ¼Ƒ„ó»Þmn£m™Č¯@ƒȮÿV¯ĸƒ™k@Ýówƒ»ğ„ġ±ǓLō„ƒšV¼Əèķĉ™è±b@Òţ„UÑóakƒl£™Ó@¯L@™ÇlUóȁš¯aġÈÅĕÝLķ¯Ė¯@WĬ—x‚ÒÈnW°ţôU²ǓÓġ²V°¯ôƒǔÝL—ċšk™š»Ý»Ýš¯ÞƒVƒwۄÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōŽÈ›b@җšÇaƒÆ¯a™„ƒkóŽÛƒÇ¦Ýa¯šÝ™ĉ@ǻۄmƒǓxķƛ¯lVĀÅÞġb™™ÇJUÅV™ĖƑW™zō»ōšƒW™n@è¯ÞóVkwƩnkźÇބҙޯƒƒýğÇUxÆÈnè±bĉÝ»ÈуwšwÞ@m»ÈV@ýÇ°ķ™xƒa„ݯXċ¥ƒÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻۱ŎÝV—Þ›VƒÇÞŎÇakƞ‚š@èğŎĸżšƾ°ÒšLÞôĠKȰĖźVÈÒĠ„¤™VôšŽU„ÈþťL@ôǬÞlÜÈnÇÒUŚ™@šĊƨW°™°Xƒ‚@ČÇþ„ƴĉÒķ¦@ŽĢôWĀôłUÞĢǬ™ź°¼š@ƒôV°„bUÆnzm¤ƽĸƒÈ'],
  45385. 'encodeOffsets': [[
  45386. 88133,
  45387. 36721
  45388. ]]
  45389. }
  45390. },
  45391. {
  45392. 'type': 'Feature',
  45393. 'id': '5425',
  45394. 'properties': {
  45395. 'name': '阿里地区',
  45396. 'cp': [
  45397. 82.3645,
  45398. 32.7667
  45399. ],
  45400. 'childNum': 7
  45401. },
  45402. 'geometry': {
  45403. 'type': 'Polygon',
  45404. 'coordinates': ['@@„Çƾķn£myVŃaU¯„ó™@¯»šŹġǫVÝóŁXÿġó@ĸ¥ĊуƳÈý@ċ„Wš¯X¯ĉƧ‚™š@VřÈÑÇmkÛǫÝ@óŦKÇýVƒ™U󚏃£ğÇÑŹUȯĕğLÝó™K¯Ñ™ƽķŻĠō@灙lƝÈbƍÈ݂„œU˜ÝÞU²ō̼ůƒK°ů@¯UK±—ĊƧbōÇmçÈġƒóšÅób™™źóš¥kól™ç™KôĵUƒÅ„VŃķ¥nÅŏm¯¹Å‚™»@ÑǍóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°šĀk¦l„„KnĬȀƾÛ¦WÆÅmNJĉ°ōUţ¤UšŎ°šŎKÞłÆ„Ǔ¦ƒÞ™‚™„ř¯bmUÝl¯Um™ğl¯£șwŎǫaÝnĉ̓k@¯™K™šō»ĉn™aÞ»ťnkml™ĸ¥UŚŻkÑťƒĉV™ôó°LôīĠU„ÿĉǕÅz±Kƒ¤„²ō¤¯Ė¯UÝ¥Vĵ™óÈťÝwķșÑk¤ó„™ƒWýĵĕ™„VĠƒV󍃎Ǔ„ķ°k±VU±ţ¦UǟÝřJVљ¥XUċUŎlÛƆǕÆȗƆ¯wŏÞÅ@™šĉl݁óŽƒÒ™nUôńlxólÝôێ±™™LÛôÝL@‚ġ¯X¯ÇUżóa󤛼XÒġŎóLk¦‚ôżĸĠ™¼™KġƆô¦„ÆƑÔĉ͝ImÒ°¦n°¯Þl˜ÝČn„ƒÒšKĠޚĕkƒlýƾťœšôI‚ĖŤÒnƜm¼¯lnżóÞ@Ůó¦™ôƽĖċŚn°Ý°ôÈUƜƒblÞóŽ@Žǖô°UÈƆ°X„þôŽô‚lѢšŽ²Ėm¦°š@¤™XŽĊblܚzkºƒĖmX„šŎWVšóÞn°lĠxȚa°»żLźƒ„b@ưXĠÝȚxĊĕŤaȚ‚°È@„„@èŤ¦Ü¼œW˜ÞkŽÈ@V°lŤkŎ±²¦ƐUšlj°aÈÑŎb̃ŎbÆ¥ÞIȘlššôVÈU‚™šb„kɲĶn„mnXb̼òƾĖŎ@̐ȂÑôÓĠĖʊšĊÔ'],
  45405. 'encodeOffsets': [[
  45406. 88133,
  45407. 36721
  45408. ]]
  45409. }
  45410. },
  45411. {
  45412. 'type': 'Feature',
  45413. 'id': '5423',
  45414. 'properties': {
  45415. 'name': '日喀则地区',
  45416. 'cp': [
  45417. 86.2427,
  45418. 29.5093
  45419. ],
  45420. 'childNum': 18
  45421. },
  45422. 'geometry': {
  45423. 'type': 'Polygon',
  45424. 'coordinates': ['@@ĶĖXþš„ôƒl£šÒĸÇÞxÇŦšôUĶÞ¦°V°ĕŎ£ƒ±„£²LÆyĊǖƒĀğVóĬ¯KóôUš‚ĊŦ„lҙżVÆķ¦kšlnŦmݼšbĊmŎ¼š™šL@°„lĊĵÞmǬbƍȚx°¤Ġknš°VÞkVn°aƒŚš‚š„Ýǔ¥ÅƒÝŁōL¯™ōV™Ť£ŎVĊ¯nljƏXÅÜ¥ǿƽmīƒLkƒl¥™ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwȎ@Қ¼Æ°ºŐnmÆĸ¦UńƃV„ó͚LšèôkŰlĬ™¦Źôššôa™Æ„ôÇĢnèŎÈƨa˜ĉ²‚VLĢ»lţôĉUǂwkmlw@óôX„ÇȦ°WƒÞ„b‚wĸšÈ¯@þÇUn¼Ý@™x„xÇńÞ¼Ċ޲amçÅÇVwĠȄþ°„šÝƒÑÈÝlŹƪmlxôU°Ý@çšm„XŎ™Ŏ¼šyƒXšĕÆUVÈIššĢaÆÝUÿ°kĸƜǔwn„܃ȼĊ@ޚ°™Þbȥ܄ô„lšƒ°b„ÅÈb˜™@ќa‚ǯUU¯Vġš»ƒ™¯aV¯Ç°Å™mnÑŤçǬVǬ™±ĉ¯¥Vĕ¯Ýk£˜ō—w@±ġÛ°ÇVїƒ@ۘa@ČL™Ƴ™„ƒÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ‚¥¯™U»Æ£X¯ġŃÛkݰV°ó¼¯èWôÞĖ„ȎƒŽkĀƧĀówm¥¯JŹÝJݙōVVŁaݐƑ@ƒ˜ğŭǂ¯_ƒ˜ĵ—›VnxŃón›ƒĵxÇĖĉVÝÈğV™Ò󃯐±Żĉ£ķÆÅL™Ljĉý˜ţۃ¯VƒnV¤ÝÈ@°ÅÞݤ™ŰğŁm¦ÝxóKƒ¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑŽnŎDŽV¼¼‚ºÛ@m¦ƽ„ĉmm¯ÝKÛç¯bŏłĬ™bƒ¼ÅLmŽ„xť°ÅU™šÝXkŽÝmĉ¦W„¯K„ÒknÝaV„Ýè¯KɅńÝKnÞ¯¼'],
  45425. 'encodeOffsets': [[
  45426. 84117,
  45427. 30927
  45428. ]]
  45429. }
  45430. },
  45431. {
  45432. 'type': 'Feature',
  45433. 'id': '5426',
  45434. 'properties': {
  45435. 'name': '林芝地区',
  45436. 'cp': [
  45437. 95.4602,
  45438. 29.1138
  45439. ],
  45440. 'childNum': 7
  45441. },
  45442. 'geometry': {
  45443. 'type': 'Polygon',
  45444. 'coordinates': ['@@‚VÈłVôÈk@š°K@ŽšÔk¤l„ôbVÒŤƒ@ѲašçĸĊƐçU»„™ŎƒǔK̲Ġƒ„¼ôx@ޚlƨĬ„Ul¯ÈLV‚šÞJ„°Ünʊ„wÜbXê‚VÞ¯°ššanaU°wƼɴÑWѰmÈýÈam¥Þ£Ť@„¥ôblÞĢ„ź¥ôxÈÅmݚ™ƒĕŃV»ĉōŤōnóƒ»ÈīķIUƒĠѰġĸLÞ¯VÒÆ‚@bš¼WôÈ@V¼ôóŤKÈÑU»šwVǫżnWÒÈx™¼‚lŦ£ĊōŤx²¯@ƒÆƒU¯šçÆ@„¤°£„é°k°lšůÈó@¯ŤÇÈĉƒkkÿó¥ÝXķљÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°m˝„±akxÝÅnƒ™»lуK@¯lU™¯UVѯóĊ¯mōğVǓƅƒÞƒWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧƒÇb™w°Ķôk¦šÒƒnUþġҙÔkǔķèó@ƒ²@ŘōńĵyƒzġaݤÅIƒ¤Ƀť¦ğѯ¤ķbóš¯ó±ŽU²°¤ČÜVnÈÆ‚„ŚŎ°ôĢ„þÆzèVĀǎĀǘƒXŹÑ¯¤ówċķk¦šłUÒġzÇ@ƒ™ÆÝx@²Þ@Ƥ„Uô¦Uš°x„U'],
  45445. 'encodeOffsets': [[
  45446. 94737,
  45447. 30809
  45448. ]]
  45449. }
  45450. },
  45451. {
  45452. 'type': 'Feature',
  45453. 'id': '5421',
  45454. 'properties': {
  45455. 'name': '昌都地区',
  45456. 'cp': [
  45457. 97.0203,
  45458. 30.7068
  45459. ],
  45460. 'childNum': 11
  45461. },
  45462. 'geometry': {
  45463. 'type': 'Polygon',
  45464. 'coordinates': ['@@™ŽVĖm°ĉš„ÈU°ķ„ƒÜ¯@@ô„UÒġškš‚ÆkÈlށÒ@Èl°È„VÆóŦƂœ¼‚a„ÅĢ™Ʉwnōw@¥Ŏ¦°ŹÞmVš°wnÿƒw„wÝw@¯šmÞŗ°wĠ˜ĸkÞğlĔ²¦°@„ĕĸwVóšal@nĢÇĊn°@¦šŽźUXçǔůĸVš™ÆK„ÈÝĠš²ÅĔô@lšŽÈ_m˜„zǖl„šaU¼ôwV°¯¦‚ĬÈa„l@Čǎ„¼™„nŽ˜I„xô»ɜ@ƨ¥ɆŁ„ŃǪȁkƛƨȍʊȡóĭ›@—ÈÇVƒůރĸƅmēƨť™ÅÈʉVǵ°ġVŭÅɧ°ÿnɛš£mƒķ²ŃóÑUĉ°mÇ»¯@mxUèţ°ȁÝç„ġU¯ÆÇţÈ@°Çô™Ű¯k¯lƒê¯¤ƒ£Å@™èV°Å„@„±°ţwĉŎť¤kš»ÇwXÑŻmUǬ™xV¼ÇÒţLóôU»Ç@X󙻂a@ÿŁUÑݰķK¯ĢğÒV„ĸJÇĬ„¼môţŎĊŎU¼Æ„„Ė™šnÞÇÆówʦġƒkÝóaƒ¦ţ@ݤn¦ÇbÇþ¯nXÒɳÒÅ»¯xVmb™b¯™Ý°UWéÛaƒxʉÛmƒ¯ÝI™‚UÇKk°ƒVƧīķ„U°ȭĀ@„ċ°nšm¤Ýnô¼ƒƒÞ»Ċ„ʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlwƒœ»ĶŽ„a¯ī@њǰanœƾ°'],
  45465. 'encodeOffsets': [[
  45466. 97302,
  45467. 31917
  45468. ]]
  45469. }
  45470. },
  45471. {
  45472. 'type': 'Feature',
  45473. 'id': '5422',
  45474. 'properties': {
  45475. 'name': '山南地区',
  45476. 'cp': [
  45477. 92.2083,
  45478. 28.3392
  45479. ],
  45480. 'childNum': 12
  45481. },
  45482. 'geometry': {
  45483. 'type': 'Polygon',
  45484. 'coordinates': ['@@°ÞU˰¦²ĊôÇÜLǖĀɜŽȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü„°WŦĀmŎ„¦ĢyVљŁl¥Čĸôx°£źÒ„Wȗ‚ÿȍUÿ‚çÅyƒýóġō¯ƒřŁmÇÛUċޝ£V±²°ôô™ĸa°£ĠÒŦ¥ɄŽ„£ÆJÞ£Ģb„yĶzŎŃ@ŗ„±ô@ĸçlǓšÓĢÑVý„m™Ñl¥ĵó‚¯̻̥™ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmšÞVÝĸ™ÒÛaċ„ó™ŹĖƒèÈÈl¼k¤ÝX@`ސŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯óš™móxÝÞğVšƴċK@—b@ܘ„UÒ¯ÈĢÜ@²˜x—Ŏl¤'],
  45485. 'encodeOffsets': [[
  45486. 92363,
  45487. 29672
  45488. ]]
  45489. }
  45490. },
  45491. {
  45492. 'type': 'Feature',
  45493. 'id': '5401',
  45494. 'properties': {
  45495. 'name': '拉萨市',
  45496. 'cp': [
  45497. 91.1865,
  45498. 30.1465
  45499. ],
  45500. 'childNum': 8
  45501. },
  45502. 'geometry': {
  45503. 'type': 'Polygon',
  45504. 'coordinates': ['@@Ŏ²l@°‚XĢƐlôŤLX¦°¤ĊnȼÇĊŎͪÞÈ܃„x„U°Ýޙ޼™¼lšČ™˜ŽÞK„Ǔ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑ˜wXī°@°ĕĸÞKÆĖĢǰbȂ™ÇفUƒV¯wV™ó¥ƒVÅ£Ý@@±ÞwšÅ‚„È@ƒ¥nōťÿ¯Xۃɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫšǫUţèmҚn¯Æ°ÈU‚°b„š™¼UĢV°°V'],
  45505. 'encodeOffsets': [[
  45506. 92059,
  45507. 30696
  45508. ]]
  45509. }
  45510. }
  45511. ],
  45512. 'UTF8Encoding': true
  45513. };
  45514. });define('echarts/util/mapData/geoJson/yun_nan_geo', [], function () {
  45515. return {
  45516. 'type': 'FeatureCollection',
  45517. 'features': [
  45518. {
  45519. 'type': 'Feature',
  45520. 'id': '5308',
  45521. 'properties': {
  45522. 'name': '普洱市',
  45523. 'cp': [
  45524. 100.7446,
  45525. 23.4229
  45526. ],
  45527. 'childNum': 10
  45528. },
  45529. 'geometry': {
  45530. 'type': 'Polygon',
  45531. 'coordinates': ['@@U‚ô²‚a@޲²Ķ¥œV°šĶ²bl¤kVxl‚@œ°‚ڲ@˜„„y„@ô¦¯„@xƒxVxU„VššbVšÜm¼Ŏ„„ĢmºXXWÆ@œšmŽmXU°ÅÒm¼Þx°w„@°‚XêĠ°»nV°U„l@k„@V±ôī@£‚ƒČŃÆ£„KÞý@¥‚k@y„a@—nWV„UVƒšwƒmƒ£Jƒknm@wmkn‚X„˜šX„¥mUUlUnbš¯°ŽnkƒVInlIUw°n™mk@@mlanXlanmšk@wVWUw™_@éĠašnmUaÜ£ƒmXƒ¥¯@@„óUmݯ¯ÞÝlKnxô£š»„»Ġ„J°aV„UÝÿV¥ÛbƒI@wmŽón¯yÛL@ƒWkŎmș`IWa¯K@¯mUnmaXm™bmak„¯ŽƒĢ™ÒÝm¯mV¯KÇb¯KۜWW™X@a™V™knċLUWV™kXóW@k™a@ƒób¯Uƒwmb¥UUlaU¥U£ma횃KXkƒmÝ@kwmѯk±ċbUUVakaġ¦ƒƒkL@`ƒœ™a¯xƒm™Åƒ™LUWƒ@ċnŎUV°LkL@b°°@¤š²ƒ‚šnôôk„l°kè›ÒÈzV¤È„WôôƒnV@„ƒ¦@¼Ux'],
  45532. 'encodeOffsets': [[
  45533. 101903,
  45534. 23637
  45535. ]]
  45536. }
  45537. },
  45538. {
  45539. 'type': 'Feature',
  45540. 'id': '5325',
  45541. 'properties': {
  45542. 'name': '红河哈尼族彝族自治州',
  45543. 'cp': [
  45544. 103.0408,
  45545. 23.6041
  45546. ],
  45547. 'childNum': 13
  45548. },
  45549. 'geometry': {
  45550. 'type': 'Polygon',
  45551. 'coordinates': ['@@°°nÞôV@ƒ°@„¦WŽ„nÛ¤Vbmn™ğb@êš`VxUX@xš„ÆÞUnn˜WÞĸ̃šÈ@ŽÇè@zÛÜWšÅêlš²„˜KnV¯ĖĊx@bk@@„°JÆ£Èbl„nnm°nlUkVUUwVm„Kn„‚nVŽÞxVLX¥laX@@xl@VzȎVmšk@b°šÈĸmŽV¦`W„XšƒbUb‚bX¼°x@ašVVkn@lþnXUlVxŤÅ„y‚IUƒka‚IŎĊ@lXx@b„z@‚ô„ƒ¥„_V@l‚n@„ôy@al_l`nmƒÈ»@kƒmXwWK™U¯»™a™Å@wƒmUÝKUa™UUƒ™wWƒ@w²»@kƃV£—mm£VKkÑV@@»nwƒ¥™ƒ@kƙnllIVlnLVakalknJšWmnaUaVÑVVލn¥m@ƒ„¯Uÿl™@™™™VçƒaXaV¯UyVLVkš@nJlšXLlŽkxlbla²Òl@nVJVkšx„KlkUaVķÝÑU@Åm¯@±™Uó°ğńķĠmU™Ñ@ǯ¯Å¼@nml@°¯¯`@w™£@¯Çƒk@ƒ»nmċ¯U»™I™Ž¯LÇĶÛn@bó°™U›šwmޝ„™Umǯa„™ƒ™ƒI@ykIƒVUޝbƒIğŽƒ¼™¼ó¤mwkLÝÞ'],
  45552. 'encodeOffsets': [[
  45553. 104243,
  45554. 23429
  45555. ]]
  45556. }
  45557. },
  45558. {
  45559. 'type': 'Feature',
  45560. 'id': '5326',
  45561. 'properties': {
  45562. 'name': '文山壮族苗族自治州',
  45563. 'cp': [
  45564. 104.8865,
  45565. 23.5712
  45566. ],
  45567. 'childNum': 8
  45568. },
  45569. 'geometry': {
  45570. 'type': 'Polygon',
  45571. 'coordinates': ['@@šwô„š@²¯maUmôUÆxš@Xš˜bÞInlVUVw„JVaU„K°¥„xmÞXnlKlnna°@ĊČ„ÆwUmnkl@°ƒƒ£nyn@VV@Vak™ƒ@@kÞ݄bmx°Vnw°klÞInĖÞVlKl™@Xa°„„KlV„U@šJnx‚U@ÈĢbUKlm@ak_‚wšanWUk°ƒl»„k@Wk@lwU_ƒ@UalóU¥ƒÇnƒ™kJWƒ@mVXx±bƒK@nV±a@™Åa™£ÝK²ƒWknamKknǏk¯ƒaV™™V¯ĀƒU™„™Ò¥ƒI@mm¯¯xōW@@`k@ó»ƒUU¯lm£ÅWlĵ„w@mmwÅmWU@y±U—xmwU„¯Uƒ¥Ý¥¯£m@kŽÇVUV°VbklƒL™wUlUIm‚k@±ÑkbkalwkWKk™mI™@UlUKVzU°Wb„bU蚚@škšVƒ°@„n‚m¦ÝŽUUUÒVbmbXn™‚mIkllbUbmKUkkJmkŚ@lš„„¦mx@¼U@lÒULn¤˜nU¤Å„@l±¼@xX„šxV„šVVbÞLVŽ„n@xšÆšb°¼šV'],
  45572. 'encodeOffsets': [[
  45573. 106504,
  45574. 25037
  45575. ]]
  45576. }
  45577. },
  45578. {
  45579. 'type': 'Feature',
  45580. 'id': '5303',
  45581. 'properties': {
  45582. 'name': '曲靖市',
  45583. 'cp': [
  45584. 103.9417,
  45585. 25.7025
  45586. ],
  45587. 'childNum': 9
  45588. },
  45589. 'geometry': {
  45590. 'type': 'Polygon',
  45591. 'coordinates': ['@@ȦlKÞĕUV¯Um¯„ÇVUnVVUƒĉn™ĊÇƾLn°°È„JÆw„@lbÞa„¦V„XJ°¯W¯„aÞJVkUša„ƒ@lKnÅmWUk¯a¯»@m±@уkkbWWX_WÓU»_l™kÑm@U»m@l@IWċn¯l@VanV„UV™UVwVx„KȄVmUē‚@„ƒn@VÝÆL„w„VVwnVlmkUVÑǰka@k™ÿÝaÞUl£™›—ċĕX±±ĉƒa@UnVnalónk@wl™UVmkÝJ—aW™™@ÅwóVVnnb±°™@óƒ™xXLWx„n@lǼn„m‚k_k`@bózƒ‚m@kU@ƒ`„¦óƒ@nWš@ÜÅXWw@ƒyƒb¦@ÒlnUb@x™lܐk‚@²Ç@Uƒ¯bmy@kV@bƒb„¦U`lLVx@b—Ll¼Þ¤@„°VVބU@WސUb›J@nnš@lnnm„šxUŽƒUUbƒK@šÇwklkUƒVWakn@ŽlbU@@„ULVxkKUn‚°¯Ò@¼™„kmƒ¦m@kl™Ȱ@lU„l¦„@Vl°wšnnþĊUÆbUx™b„ŽV„šĖU°„a‚nnašV„al@@b'],
  45592. 'encodeOffsets': [[
  45593. 106099,
  45594. 27653
  45595. ]]
  45596. }
  45597. },
  45598. {
  45599. 'type': 'Feature',
  45600. 'id': '5323',
  45601. 'properties': {
  45602. 'name': '楚雄彝族自治州',
  45603. 'cp': [
  45604. 101.6016,
  45605. 25.3619
  45606. ],
  45607. 'childNum': 10
  45608. },
  45609. 'geometry': {
  45610. 'type': 'Polygon',
  45611. 'coordinates': ['@@mҁXU`Wnšš™@Xl±¦š„Uxnbl°knmKUx„„ƒxVôUx°¼ôÒȄ°JlnÞKĠœW°¦ƒ„Vx²JVwš_°¥@UV@@wnymknK¯I@‚™²b°ƒš£V¥šwU‚V„¤nLškÆJÈwôô°„l»Č¯ƒġVƒUU@@ƒ°ƒƒÝXl@U»°Å„@U„¯@w±¯VmUUlm@m™„ÑnIVyUwmak£Vwm±—@Çw@nƒ@UxkwlÇnL‚mkř@±Žk™ka@kóJV¯Ç»U£lw¯™Xalbl¥¯UXƒ@a˜™UaÈL@ÇVIVƒkaU¯mm™akLWkUJ¯Umxnšƒ@ƒkUx¯xƒ„mWÅīÝkkbƒŤƒbkxWmXwWk¯wƒKkƒƒLŤċń„@¤óĬU²ƒ@@lƒk¯VmU¯¼@xV@k°l°kbUš°nm‚VnUš@°„š„UVèރÆbUÒÞnU¦›V—¼lô„@Vl'],
  45612. 'encodeOffsets': [[
  45613. 103433,
  45614. 26196
  45615. ]]
  45616. }
  45617. },
  45618. {
  45619. 'type': 'Feature',
  45620. 'id': '5329',
  45621. 'properties': {
  45622. 'name': '大理白族自治州',
  45623. 'cp': [
  45624. 99.9536,
  45625. 25.6805
  45626. ],
  45627. 'childNum': 12
  45628. },
  45629. 'geometry': {
  45630. 'type': 'Polygon',
  45631. 'coordinates': ['@@lbœKVIUa˜@²m@b™xôÒÜxXLmbnšl@š„„K°šš¼k„Uô‚xôlV¦nJ„Uš™Ænšm„@šx„ÆwšbXšÆôô„LUVwôK@wlmšaVwœ@WknmƒIUmlnJla@_™@kÝmKUašÑm¯Xw°aUaVl»²JV„bÆJkôͲVVk„mšbVwUó„wƒƒVwnLlmk¯maVw™ƒ²¥Wkš@™™XmV_‚WnÑUkƒ@k󘻜UV¥ÝmVÑÅa݄UçƒVƒ™@¯V™Umn¯mV™lak¯l¯U@@wğŽW鯁ƒ@¯xÝw¯š¯Jċa¯U¥mLU¤„bÞȤƒbÇLWUwmIUVW¼kbš`U„Vb¯L±ĊÛkƒÿÝKkwƒKţê™UĉþƒÈƒV¯ÞVbUްKVšk²Ý‚mI—ƒmV@kƒm™UkšVxm„¯KXÈķJU¦V°ULWxšL@môƒšb@bkx±LnVUŽVLnkÜWnwlLŃmW@kkJU_ƒV„šWĊ„Þ'],
  45632. 'encodeOffsets': [[
  45633. 101408,
  45634. 26770
  45635. ]]
  45636. }
  45637. },
  45638. {
  45639. 'type': 'Feature',
  45640. 'id': '5309',
  45641. 'properties': {
  45642. 'name': '临沧市',
  45643. 'cp': [
  45644. 99.613,
  45645. 24.0546
  45646. ],
  45647. 'childNum': 8
  45648. },
  45649. 'geometry': {
  45650. 'type': 'Polygon',
  45651. 'coordinates': ['@@‚xĢ„l`²X°ŽV„šx@x°Þ°KXašğUњW‚bnIl`X²°b„xl°„„šV@xVxk¦mb„l@xšXV‚ÆzX¤™Æ˜k°„kx@lźêlaX»VUnJVx‚XÈK„aÝȣƒaV£nKV¦°‚Čb°I°™n»ÆÑV¯nWn›™@ÿXÅWWn¹ƒġōƒn»‚ÛU™™aU™VƒUw„w@w°ƒó¥ƒ@ƒz—ƒ±@ř›¯@kUwlk£±aĵޝ™›Uĵ¦±±@bó±VÝ@ó¤ƒw¯I@mńóm±XޝIólƒK@š°Ullb™zkKlln@@ԙºƒUmVk²ôҙx™ŎUVóLƒb„ŽmÈnŽmbnl‚a„x@z„@Ǝ„¦kš'],
  45652. 'encodeOffsets': [[
  45653. 101251,
  45654. 24734
  45655. ]]
  45656. }
  45657. },
  45658. {
  45659. 'type': 'Feature',
  45660. 'id': '5334',
  45661. 'properties': {
  45662. 'name': '迪庆藏族自治州',
  45663. 'cp': [
  45664. 99.4592,
  45665. 27.9327
  45666. ],
  45667. 'childNum': 3
  45668. },
  45669. 'geometry': {
  45670. 'type': 'Polygon',
  45671. 'coordinates': ['@@W™Xwƒ™@akk@y›—k°īX¥›Uóķ¯w@n»UaVaUۃ¯ƒmV¼k‚™Þċô@n¯xÛÒm„V‚¯Ô@xƒ‚@šk™wm™Åa@ƒUa‚݁¯VŃyV„a@ÿšn»ÝVmank™mmÞÅôƒ@n£±›ğzÇmU¦™Vm„nÜmbn@°nV@xmzÅ@mºV¦k°ln¤š¼õô„n@xkƃIUxUš@Ťƒ¦VšmVkmkXW¤XzVx@ƚx™¼ƒÞ¯b@lVš™ĸގV„m¼XŽm¦V„ŽÞ@Ǝš¹Vón¥ÆKn„‚KX¯x@èĊȱłXšaÆxnlV@UÛlȻkğV¥„m²ljmÅÞĕƒƛm°„ÆmX¤mznƃŽV¦ÞVVb°bnÞWbnްl@V„È@„‚VĵĊ±@ó„InxÆw„¥@£Þ›W¯ĸ£UƒUK‚ƒk±akkkbmWmÈķ„aÆÇU—ȃÆW@wmknmU¯'],
  45672. 'encodeOffsets': [[
  45673. 102702,
  45674. 28401
  45675. ]]
  45676. }
  45677. },
  45678. {
  45679. 'type': 'Feature',
  45680. 'id': '5306',
  45681. 'properties': {
  45682. 'name': '昭通市',
  45683. 'cp': [
  45684. 104.0955,
  45685. 27.6031
  45686. ],
  45687. 'childNum': 11
  45688. },
  45689. 'geometry': {
  45690. 'type': 'Polygon',
  45691. 'coordinates': ['@@mƒnK@wmƒUř¥mšóXǓŏmX@Ž—VƒmL@xţ™nk@mlUšŻÒğŋ@ƒL@mmLkm™š@b™XŎW¼ka¯lÇŹ¯aÇ»™ÝÝ_@m„@@a™@UklwUm@ak@ƒb™UmbmƒbV¯™ĕUƒƒšaVwÅaĉVmý™m¯xUkƒ@k¥VƒUXƒ¤VÈm`@„—ńÇÜ@Ākn‚ĔkƞÆĠ„™Þš‚U„VôƆÞI@ŽUxƦn„l@ĊĊnxUÒ°¦Vb¯WUnWށIml@xn„Ubô¤‚¼ÈxlI„»šKVš„@ÈԂJkšU˱ÆVb@nœ„VÜVUVƒšL„wĠl„kn„Ġ@nx°¥Æ„²mUwƒ@m™mÅUl¯UњÑUm„Lll„Il±š@VkwƒW@w°@U»™kUóI°ƒ„»ĢтL„™š`nUĠ²lm„bôV@n„JUxƦX¦l@š‚ŎUƒV„@lV„KVřV£UaÞU™ƒnW@¯VU@ó™'],
  45692. 'encodeOffsets': [[
  45693. 107787,
  45694. 28244
  45695. ]]
  45696. }
  45697. },
  45698. {
  45699. 'type': 'Feature',
  45700. 'id': '5301',
  45701. 'properties': {
  45702. 'name': '昆明市',
  45703. 'cp': [
  45704. 102.9199,
  45705. 25.4663
  45706. ],
  45707. 'childNum': 11
  45708. },
  45709. 'geometry': {
  45710. 'type': 'Polygon',
  45711. 'coordinates': ['@@n@Vk‚VUn²°@xƒ°Vƒ@¯ÆV¼k@WŽ„Þ¯„@„@‚VVU„„Ģċ°k¼V„Ċxœ¤Ōœx°mVkƒÑȏšL‚°„x°Xœ°VmĊLVxU˰bX¦VW@kšȯlkn@„¥lnšƒ@»°Ñ¯VmlLUwVK@ƒV@ka@lmXb„UlVlkÈx@™„LVa„VV™wnƒmm@km™@mœIVaݏ@XƒVUݯU@ƒÝ£k»˜K@aUwkKV_ƒ¥„a@alU@nz°aV„È@@±lÛšk@wVakm@т¥„a„z‚@XxÆW@ÛX™@m@ƒy@aWw@kōĉJlbV„JƒzţÆUwVkmWkým@Ul™U@b¯wVºƒU™VUêšĠƒXUaUbVĊUŽWXUmkK™™WnUUU™V™ƒƒVV™Ý@kk±‚™¯ƒƒLkƒš±WkXlVklƒ@ƒwXbmLƒ›VUIVmk@Ubma@kkaVKUƒ™kmlXLWn™J¯ÒĊ°@zkºlLUŤn@@n›ô@lƁnmKkÈlxVw„@@mÈx˜@n²Uxl¤nbVxUzmJƒÒnš'],
  45712. 'encodeOffsets': [[
  45713. 104828,
  45714. 25999
  45715. ]]
  45716. }
  45717. },
  45718. {
  45719. 'type': 'Feature',
  45720. 'id': '5307',
  45721. 'properties': {
  45722. 'name': '丽江市',
  45723. 'cp': [
  45724. 100.448,
  45725. 26.955
  45726. ],
  45727. 'childNum': 5
  45728. },
  45729. 'geometry': {
  45730. 'type': 'Polygon',
  45731. 'coordinates': ['@@l@™„@w°ÓUnƒÜѰw@mČóšÝlU»n°„„VÜUbVbm¼@ްxôĸœVW¦¯Ĭlœ˜@zll@b„šWxXš‚a„X@ÆĠÆaXwl@XaƦn¼˜Jn@mnKW¯È»V¯°ak™VanXVwl@VyUĕVU„bÈīlaUk°ƒk¯lƒ²V˜Ukƛô@ƒ„I@mVwĊa„™ƒVaka„™ÆbUŽVLšaXIWKUw™ƒ„aWÑÅKUaVk°ƒ@Uw„ƒ¯¥›XğÝLkm¯Iǃóѯ»™aƒnUl±UĵÿlóÅIƒaU‚±Ik¼UŽVb¯bWxn°™ÒVbnLlޚ@@`kbmIkŽVn„JmnXl›@Ux™bkn@xóLUxVŽƒKóóŐW™™aÅxƒŽ™wƒ@™nÅm™šƒV™„ƒôX„ƒLlVU¤ƒb¦m¼™Ž@ƒbU‚„zUƂ°ÞVb@„Æbnššx'],
  45732. 'encodeOffsets': [[
  45733. 101937,
  45734. 28227
  45735. ]]
  45736. }
  45737. },
  45738. {
  45739. 'type': 'Feature',
  45740. 'id': '5328',
  45741. 'properties': {
  45742. 'name': '西双版纳傣族自治州',
  45743. 'cp': [
  45744. 100.8984,
  45745. 21.8628
  45746. ],
  45747. 'childNum': 3
  45748. },
  45749. 'geometry': {
  45750. 'type': 'Polygon',
  45751. 'coordinates': ['@@l²°ŽnÒlxÞ@„nWl„Lĸ™nbV¤V¦kbVV‚¦na„x°Vôa@„šb@lôXlWUšVXČKlmššU@bšWXXܛ°LÈa°LnU°‚ÞnšÑ„ġ°lƒnbšaƒ¯¯KWƒœó@kmK@UšĉV@k°„VV¹„a@y‚_ċl_nÓlL@anI@ƒóWl£VU—ƒl™kĕl™šKVw„U@™kVƒam¯ÅL@bƒ‚Ýk@Vn„UbÇbÝwÅ@ċ¥¯lk‚¼ÅŽ™Ò°b@¦nlUn@ŽÇV„mƁbWôU@ÝÅōm™¯ƒaU™™mk™WWw—@±ƒ™n¯U™è™a™Lƒ¯mƒL™škwƒl@°mnÈÒ¯šów@V™xƒĀU¤°Įƒ°Xl'],
  45752. 'encodeOffsets': [[
  45753. 102376,
  45754. 22579
  45755. ]]
  45756. }
  45757. },
  45758. {
  45759. 'type': 'Feature',
  45760. 'id': '5305',
  45761. 'properties': {
  45762. 'name': '保山市',
  45763. 'cp': [
  45764. 99.0637,
  45765. 24.9884
  45766. ],
  45767. 'childNum': 5
  45768. },
  45769. 'geometry': {
  45770. 'type': 'Polygon',
  45771. 'coordinates': ['@@X°„Il‚@¦ƒŽÈ¼m¼ÞaÞÅl„ÈxV¼šlVôÈÆlLޣȺlkUƒ‚ƒUw„¯UĕVwĊ@n¦mlnVĸIWǰLnƒUwl™šV„n@lnU˜„nJށl±U™¯LVUa°Ý„U„ÇĊýšVŤé„LlxÞL„ĀÜl²ĉ°KUaVƒ™_Źé@klw¯ƒlÅ—šW£ÅyU™W@wƒknal¥Uw@w™Uƒƒk¯ƒw¯aW±k_mJa™XVҙĠWb¯L¯Ý@w™wUƒ¯±Wk_ġƒwƒwōKmb@¤„bk°l˃ô„UJƒšVnÅlťUš¯°VbnbWxX„m„ÞššWUĀ™L™yWzÛKmbUxVKkn݃kŽVšĀċ¤Ux„@ޝŽm@ƒ¦'],
  45772. 'encodeOffsets': [[
  45773. 100440,
  45774. 25943
  45775. ]]
  45776. }
  45777. },
  45778. {
  45779. 'type': 'Feature',
  45780. 'id': '5304',
  45781. 'properties': {
  45782. 'name': '玉溪市',
  45783. 'cp': [
  45784. 101.9312,
  45785. 23.8898
  45786. ],
  45787. 'childNum': 9
  45788. },
  45789. 'geometry': {
  45790. 'type': 'Polygon',
  45791. 'coordinates': ['@@l„„L°xXlWxXnlw„a„ţlaÞlÆĬnX„ƒ°wVw„l„@m™nw°VVIXllKšbnnV°lbU„UJ@ÈÇKVb—š@bW„°Vk¦kaWb°škxV¤È¼U°ôI@llblš²š@‚@œó@mm@VţkKl¹@yĉ¯°ÑšIXmWKnkšlV„ULlb@lnbVal@UnVJœU‚„nKWa„x„@lkkUlW²X„™‚l„K°„šl²@lšÞUŽ„U‚„UšVšVVXmššlLVnXWVUĉVaVb„W™ğVéšU„VU¹W»aVa„aW™Xƒ‚_U¥nÇ흙@a™lUnǍUyk@@wW@kbW¦UKÝwUmmƒƒLUnVxUVVlk¯mmnƒmkÇaŤ¯I@ƒl@@aĉw°ĕmU—L±ƒk™ÆéX™ÜÛ@yÈç@™Çġ„Ýķ—XmmÝVՙƒ™lmnkbmWkb@nl@nŽmš¯VxkJmUJ„ml¯™°makVVnVƒ¦™Wƒ—Wmnl@xmn„l‚I„¤„n™xU„ƒVUŽmX@˜ƒb@zl@¦Ýþ'],
  45792. 'encodeOffsets': [[
  45793. 103703,
  45794. 24874
  45795. ]]
  45796. }
  45797. },
  45798. {
  45799. 'type': 'Feature',
  45800. 'id': '5333',
  45801. 'properties': {
  45802. 'name': '怒江傈僳族自治州',
  45803. 'cp': [
  45804. 99.1516,
  45805. 26.5594
  45806. ],
  45807. 'childNum': 4
  45808. },
  45809. 'geometry': {
  45810. 'type': 'Polygon',
  45811. 'coordinates': ['@@WyX£lWlnnUU™„¥@ţV™Vw„JlÅ@wƒmö󙻂£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnƒšUV¥ÈnĠy²œm¤„@ÆónݚnmlnbÞU‚¥„aV£kU„KWƒ„óšƒmIU¥ókwVólƒ™»¯™ƒL™ƒk@m™naWKÛwóњw@a±n—@VbUJ›LkaƒÝXĉƒ™„UV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@a™aó„@n™KXwVKU¯V¥mUnkm¥ĉ@UxV˃°Vx„V„klmޙkKWĀkVWšnl°Lnm@°ŽUxlV@nk¦™JVȰŽVÒ@nX°@ÆlUômlnôƒ²nxmłnVV„¯x@Èm°XblVUšl°@xkXU¤WXX‚W„Xƃ„mkÅJmށw±bƒxUīkKmÅVUĖÝèV„kx@š›lX„lnk¤ƒLkŽ‚Ėk¦‚xUššL°‚¯Ė@LnK@b°xVI„¥Ua°Ñ@»nm@¹‚KŎÞÈWln²n'],
  45812. 'encodeOffsets': [[
  45813. 101071,
  45814. 28891
  45815. ]]
  45816. }
  45817. },
  45818. {
  45819. 'type': 'Feature',
  45820. 'id': '5331',
  45821. 'properties': {
  45822. 'name': '德宏傣族景颇族自治州',
  45823. 'cp': [
  45824. 98.1299,
  45825. 24.5874
  45826. ],
  45827. 'childNum': 5
  45828. },
  45829. 'geometry': {
  45830. 'type': 'Polygon',
  45831. 'coordinates': ['@@„¥n@°@ƒVwČ£™ÿUlÞ„lmULVwnaÜLXyšzšKVÿ™XݙnƒWƒXwmaUa°¯V™ŦŽÆkUm„™VIƒ„ókĕl¯ƒa@£nama™@¯m¯œó@óyţbġkÅm±ÛammVkƒLwU`Wk@VƒkUmŃlUUKmbkkUVUwƒ¦óް¼šbn°ô¦lºƒz@xšŽ¯„™@UްnƒšU¤ţU„°VƆ@ÈmlnzÞl°¦Æa„xUxƒLkxWƒn@‚š²ŰšW„™‚@°ÈXl°Llx'],
  45832. 'encodeOffsets': [[
  45833. 100440,
  45834. 25943
  45835. ]]
  45836. }
  45837. }
  45838. ],
  45839. 'UTF8Encoding': true
  45840. };
  45841. });define('echarts/util/mapData/geoJson/zhe_jiang_geo', [], function () {
  45842. return {
  45843. 'type': 'FeatureCollection',
  45844. 'features': [
  45845. {
  45846. 'type': 'Feature',
  45847. 'id': '3311',
  45848. 'properties': {
  45849. 'name': '丽水市',
  45850. 'cp': [
  45851. 119.5642,
  45852. 28.1854
  45853. ],
  45854. 'childNum': 9
  45855. },
  45856. 'geometry': {
  45857. 'type': 'Polygon',
  45858. 'coordinates': ['@@@V‚bVl@Xn‚UXƒKVŽ@¦nxlUXV‚n„KVmnL‚UV@bn¤lLXK˜²„`nnlJXIVJ‚I„Vnn°KnnVll@VLXWV@UkVaVK„zV@„ƒšVVaUK@U»VUl@@WnUUƒ@wVLn@Vwl@XW°LVbn@VU‚@X„l`@XnKVbkl@XVJlUnlV„„xlL@lnXl„@VšUnV°°„@a„UVLXblWVXn@VVUV@Lš¤VLV„U‚VbnalLUUVX_laVa„WVzXKV@@a@KUmImmXama@kU@yVIUK‚aVa@kXK@aWU@VIUmW@kkVm„Uš@VwUa@K@k@Uƒ`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_ƒKVaXa›XmƒU@mUlWkaUXƒ@mmkL@w™JƒnVVÅbWKXa™@@I@aƒJUUÇ@V„UL™W@akLmb@K@a™XXw@mƒVmUVkUy@£@aU@@VkUWm@kUKƒXUWU_mW@wkkmJUUkLWWUXƒW@IkJ@k@mW_kӃ_Ul™Lƒm@I@aUa¯m@kƒa¯LUJƒ@mVVxUb™a@LUKkXƒbm@Uak@@a@Um`ƒIUbUJ@nUVW@@LnVV@lšUbVlUX@`š@blXklW„Ušm„Xlm¦U@@V¯bml@š@nUb@llnn@VbX@lV@ŽUVULmU@JVn„bVbkb™VWxU@@nUVk@'],
  45859. 'encodeOffsets': [[
  45860. 121546,
  45861. 28992
  45862. ]]
  45863. }
  45864. },
  45865. {
  45866. 'type': 'Feature',
  45867. 'id': '3301',
  45868. 'properties': {
  45869. 'name': '杭州市',
  45870. 'cp': [
  45871. 119.5313,
  45872. 29.8773
  45873. ],
  45874. 'childNum': 6
  45875. },
  45876. 'geometry': {
  45877. 'type': 'Polygon',
  45878. 'coordinates': ['@@X@l„°KXXlW„b@²„`šššb‚I„šX`l@„@bWl@n@VnLUV@V„@°¦@šl@XVlU@š@xVbUb@Vkb@‚@XVJVz™J@Lޚ@VmLUxUJ@LU„Vx‚b„xXUl@VaÈw„b‚aÞa@Vl@XUVx@V@V„LlbnV„al@lb„Vnn‚LnKnL@VlbVJXalIšb@KUU@mVInJ˜„U„Vl@xUšVLnUš@UÞaV@lkV@UanK„L@UlKVUnbÆmn@@nUlVnVJl@@UXU„L@WVIVJVxVLXV@IÜKnbn@V¥V@@I@ƒƒ„y°b@UUwnk°ÆƨVlUšçXm›£aƒÇ™IkVƒ@WV@@aWIUWUIkb@WW@UnƒK@UU@kaWVkƒVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImm—U@ƒƒwmwUV™IUWVkUamaU@mV—kƒb@KVU@aVU@anKULVJ‚U@kÛU™JUV›kkƒVakU@ƒaVwkW@UWkXmWaULUaUK@XƒJUUmƒVU@UVƒUkJ@ImwmKU@k„@lU„W@@akKm„kamIkWl_UwVm@UkaVUUaƒ@UamakbWlkL@aUalU@mkL@U@U™lmK@XkKm@Ýakb@xƒnXbƒ`ƒnUUU@›™U@™wU@@ƒmKkkƒV¯U@lULUbVbUb@V‚a@L™ºÝb@bLmK™x@VUL@bk@mxULWl'],
  45879. 'encodeOffsets': [[
  45880. 121185,
  45881. 30184
  45882. ]]
  45883. }
  45884. },
  45885. {
  45886. 'type': 'Feature',
  45887. 'id': '3303',
  45888. 'properties': {
  45889. 'name': '温州市',
  45890. 'cp': [
  45891. 120.498,
  45892. 27.8119
  45893. ],
  45894. 'childNum': 9
  45895. },
  45896. 'geometry': {
  45897. 'type': 'Polygon',
  45898. 'coordinates': ['@@ll@xnXV`VX„WVL@lXnlV@UV@@b@¤VzUlnV„U@nWxšW@b@LnalK@bšXVKUƒÈ@VV„I@b@Jš@WbXLÆaUU„mšI@xlKnn„@VWlbkXV‚@n„VWnœ‚WbUb„L@`VbUnVlVXkV@lUz±‚VnUbU@@VUlVL@l„_@V@l@LVbV@XLV`VÈlxn@lU@aœaVV‚k„@XJ@nl@@LU`°LVb„L°a@a„UVy@anI@a„a‚nV@²wÜJX@VšVV°k„na@WVk„aWwU@m@™ƒkƒaUĕ™ÝšÝŤnÈa„aóI›»@±X™WkUķ@kV±kw™ƒUkWw„™UƒÝ»ÛkɳlImaUaWóXÿǬk‚UnWVmmk™KţnŏÞğl™„UlUx@XWb„V@JkXƒ°mb@VULVxUVk@@LWWk@WIkšƒUkJmUkVmI@yƒ@Ua™kLm‚U@mUUUkaVk™@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVŽ™V@„VLV`UL@VUX'],
  45899. 'encodeOffsets': [[
  45900. 122502,
  45901. 28334
  45902. ]]
  45903. }
  45904. },
  45905. {
  45906. 'type': 'Feature',
  45907. 'id': '3302',
  45908. 'properties': {
  45909. 'name': '宁波市',
  45910. 'cp': [
  45911. 121.5967,
  45912. 29.6466
  45913. ],
  45914. 'childNum': 6
  45915. },
  45916. 'geometry': {
  45917. 'type': 'Polygon',
  45918. 'coordinates': ['@@Ċ¦ĸ°‚nXÞVšKškƨƑźÿ°»n„@wô¥ÜbœU°ÆXÞWóçĉݱIUƒÈ¥@U°wÆ»²mm_@aXƒVKÞVlk@akk›̅@£X»VwƏXWa¯aȗb™KƽۃĊ™xƒLóŽk@ƒƒƒ@¯nƒKUL@xkL›ÑkWULUUmJUXVŽU@mŽUX¯@V`mbXbV@@nn¤WXšx@škJ@nVVUVl²UbÝVUVk@Wx@V@„ƒVXzmlaƒL@VlLU`„XUVVVUnl@VbnJlnUVVnƒlUKkbmnn„VxlJnxmbU@UL@KUV™X@xmb@lk@mnVVUš™è'],
  45919. 'encodeOffsets': [[
  45920. 123784,
  45921. 30977
  45922. ]]
  45923. }
  45924. },
  45925. {
  45926. 'type': 'Feature',
  45927. 'id': '3309',
  45928. 'properties': {
  45929. 'name': '舟山市',
  45930. 'cp': [
  45931. 122.2559,
  45932. 30.2234
  45933. ],
  45934. 'childNum': 3
  45935. },
  45936. 'geometry': {
  45937. 'type': 'Polygon',
  45938. 'coordinates': ['@@l΢ƒʠþÆVĢLĊƒǬXĊ܄XôV„ÑÆw„ƒlšƏÈóVĭVǓ@ƒĉwɛkmK@ĉXīWaĉUĵÝmƒ¯ĉƒwĉ±±nż¯x@VǦV„²JĊÞôèÝXÅW¯›VÛaó¦@xƒŽmޝ¼ŹĀ'],
  45939. 'encodeOffsets': [[
  45940. 124437,
  45941. 30983
  45942. ]]
  45943. }
  45944. },
  45945. {
  45946. 'type': 'Feature',
  45947. 'id': '3310',
  45948. 'properties': {
  45949. 'name': '台州市',
  45950. 'cp': [
  45951. 121.1353,
  45952. 28.6688
  45953. ],
  45954. 'childNum': 7
  45955. },
  45956. 'geometry': {
  45957. 'type': 'Polygon',
  45958. 'coordinates': ['@@lV„IVWVz@bXJl@Xal@°„nLll@nVxnV„K@UJVbƒ¦°„k`UIWJXnƚ@bUJ„Xl@lb„Wn@UzVV@bVVšmVnnJVXna‚bšKUKnUVVUnVLlKVLXa„Jm£@mU@WanaU_°@VWnV@UVWnIVVVKlXœÒlK@wVK„L°m„@„„l@ô„Kšw„ĉƾůUƒl£@»UƒVk„m@ƅUƒƒaÛIŏmUk@m„w@a™£ƒWk@ţšƒIm±@ankôUlaU™Uw¯ƒōaƒbÇbţm™ÞšÞVĖ„b„l@š@n‚VXxƒbUl@XmbƒŽ¯lUUU™W@ÛI±xU@mƒb@bmJ@bUzƒV@b¯bƒKUa¯KV_@Kk@@mWIƒ@lUU›b@bkVm@kwUÇU_WKU@Ux™@ƒVUnllX@Vn‚J@UXV@bWL@lUbbVLUJ@z‚V@lnbWbnnnJVŽ@L'],
  45959. 'encodeOffsets': [[
  45960. 123312,
  45961. 29526
  45962. ]]
  45963. }
  45964. },
  45965. {
  45966. 'type': 'Feature',
  45967. 'id': '3307',
  45968. 'properties': {
  45969. 'name': '金华市',
  45970. 'cp': [
  45971. 120.0037,
  45972. 29.1028
  45973. ],
  45974. 'childNum': 8
  45975. },
  45976. 'geometry': {
  45977. 'type': 'Polygon',
  45978. 'coordinates': ['@@nbVb„@VbUVlb@VUnVxk`lXnJlbnƒlL@bX@Vƒ@klƒV@nLnx@JlI„V‚U@VUVn„VV„I@WVLVbVKXbWnXl@VlXUx„b@ŽlVUbl„œlVUšIÜVnalKX@@bV@@aUUlUƒwUw„@naWW„UVaUUšaVb„LlxXJVk°ƒUƒlkU¥@k„a@LVlXLVlšVWznVn@lxšJl_@WX_@mVa„a@alU@kVVna„KVLlK„b@UUaVašbnUWmXU@k@yVI@ařWmXIVJl_¯ƒ„¥UaVI@ƒLmUUw@mkkmK¯ƒk@Wbk@WI@aUyUXƒJkU@bU@WLUyƒXUbkbW`UVVkKmbUaVUƒUK™£@KVUUUm@UWkXWaUKƒV@b¯ƒ¯mU™V@UkƒmW@kkKƒwUƒmkkVUI@WlkUamL@Wk_Wƒ@UVm@Ua¯KWXk@Uxm@UK@xV„mV@Xk@UVV¼@‚VLUb™Uƒ„U@ƒyULUbVlU@@XlVUVVbƒU@lXXVW@XUVl@@VUVƒÈn@VVU„@lVa@„U„mL@`X@`WL@VUX@lUL@xlx'],
  45979. 'encodeOffsets': [[
  45980. 122119,
  45981. 29948
  45982. ]]
  45983. }
  45984. },
  45985. {
  45986. 'type': 'Feature',
  45987. 'id': '3308',
  45988. 'properties': {
  45989. 'name': '衢州市',
  45990. 'cp': [
  45991. 118.6853,
  45992. 28.8666
  45993. ],
  45994. 'childNum': 5
  45995. },
  45996. 'geometry': {
  45997. 'type': 'Polygon',
  45998. 'coordinates': ['@@XkVKnwl@@aVK@UšwnL‚K@aÞaš¹@Kb@UVaUaVaVK@k°V„UllnL@„V@šxV@œšV@VV„m„_Wa„m@wlaÞbn@lL@WnLšk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_‚W@_nKVƒ@ƒUb@kVƒUUm@„ÇVU@Uk@VU@WUXWW@k„VUaVUkU@WWXUKk@Ukmm¯LmmƒUJUIWJkImmƒ_—±WLkKm£@aVUmKUnƒLmWUkVmw@¥U„LVWm@WUka@UmmLmm@@bUX™@@WUIm@UVUK@UVUUU™VVJmb@b„Xn‚mVƒ¼nnn¦mJUVƒL„V@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUx™Vk@@J@„ƒ¼W@ÅaVVnzmVƒ„@WJk@kWJ@ƒlXbWbXxmVnšlLXb@°lKVXnWšbWV„„X„mbV@Xl‚bšI@Kn@@x@šVLlm'],
  45999. 'encodeOffsets': [[
  46000. 121185,
  46001. 30184
  46002. ]]
  46003. }
  46004. },
  46005. {
  46006. 'type': 'Feature',
  46007. 'id': '3306',
  46008. 'properties': {
  46009. 'name': '绍兴市',
  46010. 'cp': [
  46011. 120.564,
  46012. 29.7565
  46013. ],
  46014. 'childNum': 6
  46015. },
  46016. 'geometry': {
  46017. 'type': 'Polygon',
  46018. 'coordinates': ['@@„x@„˜VnnVJnIVJV_VKXblUXJlŽlLUŽUnU@UVVX@ŽmVUUUJl„XUlbV@@V„LVmX@@XlaVJVXXJ@b‚@XU„@lUšJ„È‚bœ¤Ō„JšçV™UUnml@@kna@wšWVU@LVKV@namwkIUwmƒnmlaVL„kUmVUkmmIUak@VmUUVUƒWV_kK@U„K‚bnkWy„U@ƒ@UXwl@VUÞUVak±VUUU@mlI@™™wXWƒIWbUKkLUKVmUUmVVL™LambUWmIUm™nUU@aUUVym@ƒXkak@ƒW@z@lWVXnmV™aUbVb@VƒakLUKƒLmbUU@lkV@bƒbUb@nW`@Xk`™Ikwm@mUXy™UUkWKUk@Kƒb@lV¦klV„¯„UlWIkwƒKUa™bVVUbƒVXXmbƒ@Vx„xkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@L„a˜lnUV@nbVbUlVXšJVUnx'],
  46019. 'encodeOffsets': [[
  46020. 122997,
  46021. 30561
  46022. ]]
  46023. }
  46024. },
  46025. {
  46026. 'type': 'Feature',
  46027. 'id': '3304',
  46028. 'properties': {
  46029. 'name': '嘉兴市',
  46030. 'cp': [
  46031. 120.9155,
  46032. 30.6354
  46033. ],
  46034. 'childNum': 6
  46035. },
  46036. 'geometry': {
  46037. 'type': 'Polygon',
  46038. 'coordinates': ['@@@blIX@@VÜVUnn@l‚k„lKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb„@VI„`@blLnL‚aX@„VVb@U‚@XlVa„@@kVaUKV»U_lWXUƒƒ@alb„k@VllnLVKn@@UVIUw@y°IVVXU@VV@lw„m@wVkƾaœJ‚LkΡƧƒ™l™LÝUmW¯ķÿĉ¥ƒIŋŽWn™èkVƧU¯ÅmlVx@V¯aƒz„Ž@„@JU@U¦m@@šnVmn@V„LV‚'],
  46039. 'encodeOffsets': [[
  46040. 123233,
  46041. 31382
  46042. ]]
  46043. }
  46044. },
  46045. {
  46046. 'type': 'Feature',
  46047. 'id': '3305',
  46048. 'properties': {
  46049. 'name': '湖州市',
  46050. 'cp': [
  46051. 119.8608,
  46052. 30.7782
  46053. ],
  46054. 'childNum': 4
  46055. },
  46056. 'geometry': {
  46057. 'type': 'Polygon',
  46058. 'coordinates': ['@@kLlƒkm@VmÛU@UW@kJ@aUƒK@UnmmU@™maÛL@JWUUKUwUIUJ@XƒKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VƒKmLVbU@klU@ÝbV™@mVUKV™@wUkVƒ—ƒmIUJ@nVV@L™akJWbUIka@UmKmLKmmƒUUVk@@nmLX`WXUV@Ž@nUl™kmlU@Ub„„ƒxVVšIlV„Žšnn„@@n˜„UҚ@„°n@@xmb@„VbnV@šš„@b@`@L@L@x@blVklVbnnV@‚aXb°VlU@W„b°U„LXWVUV™„™VwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV›'],
  46059. 'encodeOffsets': [[
  46060. 123379,
  46061. 31500
  46062. ]]
  46063. }
  46064. }
  46065. ],
  46066. 'UTF8Encoding': true
  46067. };
  46068. });define('echarts/chart/gauge', [
  46069. 'require',
  46070. './base',
  46071. '../util/shape/GaugePointer',
  46072. 'zrender/shape/Text',
  46073. 'zrender/shape/Line',
  46074. 'zrender/shape/Rectangle',
  46075. 'zrender/shape/Circle',
  46076. 'zrender/shape/Sector',
  46077. '../config',
  46078. '../util/ecData',
  46079. '../util/accMath',
  46080. 'zrender/tool/util',
  46081. '../chart'
  46082. ], function (require) {
  46083. var ChartBase = require('./base');
  46084. var GaugePointerShape = require('../util/shape/GaugePointer');
  46085. var TextShape = require('zrender/shape/Text');
  46086. var LineShape = require('zrender/shape/Line');
  46087. var RectangleShape = require('zrender/shape/Rectangle');
  46088. var CircleShape = require('zrender/shape/Circle');
  46089. var SectorShape = require('zrender/shape/Sector');
  46090. var ecConfig = require('../config');
  46091. ecConfig.gauge = {
  46092. zlevel: 0,
  46093. z: 2,
  46094. center: [
  46095. '50%',
  46096. '50%'
  46097. ],
  46098. clickable: true,
  46099. legendHoverLink: true,
  46100. radius: '75%',
  46101. startAngle: 225,
  46102. endAngle: -45,
  46103. min: 0,
  46104. max: 100,
  46105. splitNumber: 10,
  46106. axisLine: {
  46107. show: true,
  46108. lineStyle: {
  46109. color: [
  46110. [
  46111. 0.2,
  46112. '#228b22'
  46113. ],
  46114. [
  46115. 0.8,
  46116. '#48b'
  46117. ],
  46118. [
  46119. 1,
  46120. '#ff4500'
  46121. ]
  46122. ],
  46123. width: 30
  46124. }
  46125. },
  46126. axisTick: {
  46127. show: true,
  46128. splitNumber: 5,
  46129. length: 8,
  46130. lineStyle: {
  46131. color: '#eee',
  46132. width: 1,
  46133. type: 'solid'
  46134. }
  46135. },
  46136. axisLabel: {
  46137. show: true,
  46138. textStyle: { color: 'auto' }
  46139. },
  46140. splitLine: {
  46141. show: true,
  46142. length: 30,
  46143. lineStyle: {
  46144. color: '#eee',
  46145. width: 2,
  46146. type: 'solid'
  46147. }
  46148. },
  46149. pointer: {
  46150. show: true,
  46151. length: '80%',
  46152. width: 8,
  46153. color: 'auto'
  46154. },
  46155. title: {
  46156. show: true,
  46157. offsetCenter: [
  46158. 0,
  46159. '-40%'
  46160. ],
  46161. textStyle: {
  46162. color: '#333',
  46163. fontSize: 15
  46164. }
  46165. },
  46166. detail: {
  46167. show: true,
  46168. backgroundColor: 'rgba(0,0,0,0)',
  46169. borderWidth: 0,
  46170. borderColor: '#ccc',
  46171. width: 100,
  46172. height: 40,
  46173. offsetCenter: [
  46174. 0,
  46175. '40%'
  46176. ],
  46177. textStyle: {
  46178. color: 'auto',
  46179. fontSize: 30
  46180. }
  46181. }
  46182. };
  46183. var ecData = require('../util/ecData');
  46184. var accMath = require('../util/accMath');
  46185. var zrUtil = require('zrender/tool/util');
  46186. function Gauge(ecTheme, messageCenter, zr, option, myChart) {
  46187. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  46188. this.refresh(option);
  46189. }
  46190. Gauge.prototype = {
  46191. type: ecConfig.CHART_TYPE_GAUGE,
  46192. _buildShape: function () {
  46193. var series = this.series;
  46194. this._paramsMap = {};
  46195. this.selectedMap = {};
  46196. for (var i = 0, l = series.length; i < l; i++) {
  46197. if (series[i].type === ecConfig.CHART_TYPE_GAUGE) {
  46198. this.selectedMap[series[i].name] = true;
  46199. series[i] = this.reformOption(series[i]);
  46200. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  46201. this._buildSingleGauge(i);
  46202. this.buildMark(i);
  46203. }
  46204. }
  46205. this.addShapeList();
  46206. },
  46207. _buildSingleGauge: function (seriesIndex) {
  46208. var serie = this.series[seriesIndex];
  46209. this._paramsMap[seriesIndex] = {
  46210. center: this.parseCenter(this.zr, serie.center),
  46211. radius: this.parseRadius(this.zr, serie.radius),
  46212. startAngle: serie.startAngle.toFixed(2) - 0,
  46213. endAngle: serie.endAngle.toFixed(2) - 0
  46214. };
  46215. this._paramsMap[seriesIndex].totalAngle = this._paramsMap[seriesIndex].startAngle - this._paramsMap[seriesIndex].endAngle;
  46216. this._colorMap(seriesIndex);
  46217. this._buildAxisLine(seriesIndex);
  46218. this._buildSplitLine(seriesIndex);
  46219. this._buildAxisTick(seriesIndex);
  46220. this._buildAxisLabel(seriesIndex);
  46221. this._buildPointer(seriesIndex);
  46222. this._buildTitle(seriesIndex);
  46223. this._buildDetail(seriesIndex);
  46224. },
  46225. _buildAxisLine: function (seriesIndex) {
  46226. var serie = this.series[seriesIndex];
  46227. if (!serie.axisLine.show) {
  46228. return;
  46229. }
  46230. var min = serie.min;
  46231. var total = serie.max - min;
  46232. var params = this._paramsMap[seriesIndex];
  46233. var center = params.center;
  46234. var startAngle = params.startAngle;
  46235. var totalAngle = params.totalAngle;
  46236. var colorArray = params.colorArray;
  46237. var lineStyle = serie.axisLine.lineStyle;
  46238. var lineWidth = this.parsePercent(lineStyle.width, params.radius[1]);
  46239. var r = params.radius[1];
  46240. var r0 = r - lineWidth;
  46241. var sectorShape;
  46242. var lastAngle = startAngle;
  46243. var newAngle;
  46244. for (var i = 0, l = colorArray.length; i < l; i++) {
  46245. newAngle = startAngle - totalAngle * (colorArray[i][0] - min) / total;
  46246. sectorShape = this._getSector(center, r0, r, newAngle, lastAngle, colorArray[i][1], lineStyle, serie.zlevel, serie.z);
  46247. lastAngle = newAngle;
  46248. sectorShape._animationAdd = 'r';
  46249. ecData.set(sectorShape, 'seriesIndex', seriesIndex);
  46250. ecData.set(sectorShape, 'dataIndex', i);
  46251. this.shapeList.push(sectorShape);
  46252. }
  46253. },
  46254. _buildSplitLine: function (seriesIndex) {
  46255. var serie = this.series[seriesIndex];
  46256. if (!serie.splitLine.show) {
  46257. return;
  46258. }
  46259. var params = this._paramsMap[seriesIndex];
  46260. var splitNumber = serie.splitNumber;
  46261. var min = serie.min;
  46262. var total = serie.max - min;
  46263. var splitLine = serie.splitLine;
  46264. var length = this.parsePercent(splitLine.length, params.radius[1]);
  46265. var lineStyle = splitLine.lineStyle;
  46266. var color = lineStyle.color;
  46267. var center = params.center;
  46268. var startAngle = params.startAngle * Math.PI / 180;
  46269. var totalAngle = params.totalAngle * Math.PI / 180;
  46270. var r = params.radius[1];
  46271. var r0 = r - length;
  46272. var angle;
  46273. var sinAngle;
  46274. var cosAngle;
  46275. for (var i = 0; i <= splitNumber; i++) {
  46276. angle = startAngle - totalAngle / splitNumber * i;
  46277. sinAngle = Math.sin(angle);
  46278. cosAngle = Math.cos(angle);
  46279. this.shapeList.push(new LineShape({
  46280. zlevel: serie.zlevel,
  46281. z: serie.z + 1,
  46282. hoverable: false,
  46283. style: {
  46284. xStart: center[0] + cosAngle * r,
  46285. yStart: center[1] - sinAngle * r,
  46286. xEnd: center[0] + cosAngle * r0,
  46287. yEnd: center[1] - sinAngle * r0,
  46288. strokeColor: color === 'auto' ? this._getColor(seriesIndex, min + total / splitNumber * i) : color,
  46289. lineType: lineStyle.type,
  46290. lineWidth: lineStyle.width,
  46291. shadowColor: lineStyle.shadowColor,
  46292. shadowBlur: lineStyle.shadowBlur,
  46293. shadowOffsetX: lineStyle.shadowOffsetX,
  46294. shadowOffsetY: lineStyle.shadowOffsetY
  46295. }
  46296. }));
  46297. }
  46298. },
  46299. _buildAxisTick: function (seriesIndex) {
  46300. var serie = this.series[seriesIndex];
  46301. if (!serie.axisTick.show) {
  46302. return;
  46303. }
  46304. var params = this._paramsMap[seriesIndex];
  46305. var splitNumber = serie.splitNumber;
  46306. var min = serie.min;
  46307. var total = serie.max - min;
  46308. var axisTick = serie.axisTick;
  46309. var tickSplit = axisTick.splitNumber;
  46310. var length = this.parsePercent(axisTick.length, params.radius[1]);
  46311. var lineStyle = axisTick.lineStyle;
  46312. var color = lineStyle.color;
  46313. var center = params.center;
  46314. var startAngle = params.startAngle * Math.PI / 180;
  46315. var totalAngle = params.totalAngle * Math.PI / 180;
  46316. var r = params.radius[1];
  46317. var r0 = r - length;
  46318. var angle;
  46319. var sinAngle;
  46320. var cosAngle;
  46321. for (var i = 0, l = splitNumber * tickSplit; i <= l; i++) {
  46322. if (i % tickSplit === 0) {
  46323. continue;
  46324. }
  46325. angle = startAngle - totalAngle / l * i;
  46326. sinAngle = Math.sin(angle);
  46327. cosAngle = Math.cos(angle);
  46328. this.shapeList.push(new LineShape({
  46329. zlevel: serie.zlevel,
  46330. z: serie.z + 1,
  46331. hoverable: false,
  46332. style: {
  46333. xStart: center[0] + cosAngle * r,
  46334. yStart: center[1] - sinAngle * r,
  46335. xEnd: center[0] + cosAngle * r0,
  46336. yEnd: center[1] - sinAngle * r0,
  46337. strokeColor: color === 'auto' ? this._getColor(seriesIndex, min + total / l * i) : color,
  46338. lineType: lineStyle.type,
  46339. lineWidth: lineStyle.width,
  46340. shadowColor: lineStyle.shadowColor,
  46341. shadowBlur: lineStyle.shadowBlur,
  46342. shadowOffsetX: lineStyle.shadowOffsetX,
  46343. shadowOffsetY: lineStyle.shadowOffsetY
  46344. }
  46345. }));
  46346. }
  46347. },
  46348. _buildAxisLabel: function (seriesIndex) {
  46349. var serie = this.series[seriesIndex];
  46350. if (!serie.axisLabel.show) {
  46351. return;
  46352. }
  46353. var splitNumber = serie.splitNumber;
  46354. var min = serie.min;
  46355. var total = serie.max - min;
  46356. var textStyle = serie.axisLabel.textStyle;
  46357. var textFont = this.getFont(textStyle);
  46358. var color = textStyle.color;
  46359. var params = this._paramsMap[seriesIndex];
  46360. var center = params.center;
  46361. var startAngle = params.startAngle;
  46362. var totalAngle = params.totalAngle;
  46363. var r0 = params.radius[1] - this.parsePercent(serie.splitLine.length, params.radius[1]) - 5;
  46364. var angle;
  46365. var sinAngle;
  46366. var cosAngle;
  46367. var value;
  46368. for (var i = 0; i <= splitNumber; i++) {
  46369. value = accMath.accAdd(min, accMath.accMul(accMath.accDiv(total, splitNumber), i));
  46370. angle = startAngle - totalAngle / splitNumber * i;
  46371. sinAngle = Math.sin(angle * Math.PI / 180);
  46372. cosAngle = Math.cos(angle * Math.PI / 180);
  46373. angle = (angle + 360) % 360;
  46374. this.shapeList.push(new TextShape({
  46375. zlevel: serie.zlevel,
  46376. z: serie.z + 1,
  46377. hoverable: false,
  46378. style: {
  46379. x: center[0] + cosAngle * r0,
  46380. y: center[1] - sinAngle * r0,
  46381. color: color === 'auto' ? this._getColor(seriesIndex, value) : color,
  46382. text: this._getLabelText(serie.axisLabel.formatter, value),
  46383. textAlign: angle >= 110 && angle <= 250 ? 'left' : angle <= 70 || angle >= 290 ? 'right' : 'center',
  46384. textBaseline: angle >= 10 && angle <= 170 ? 'top' : angle >= 190 && angle <= 350 ? 'bottom' : 'middle',
  46385. textFont: textFont,
  46386. shadowColor: textStyle.shadowColor,
  46387. shadowBlur: textStyle.shadowBlur,
  46388. shadowOffsetX: textStyle.shadowOffsetX,
  46389. shadowOffsetY: textStyle.shadowOffsetY
  46390. }
  46391. }));
  46392. }
  46393. },
  46394. _buildPointer: function (seriesIndex) {
  46395. var serie = this.series[seriesIndex];
  46396. if (!serie.pointer.show) {
  46397. return;
  46398. }
  46399. var total = serie.max - serie.min;
  46400. var pointer = serie.pointer;
  46401. var params = this._paramsMap[seriesIndex];
  46402. var length = this.parsePercent(pointer.length, params.radius[1]);
  46403. var width = this.parsePercent(pointer.width, params.radius[1]);
  46404. var center = params.center;
  46405. var value = this._getValue(seriesIndex);
  46406. value = value < serie.max ? value : serie.max;
  46407. var angle = (params.startAngle - params.totalAngle / total * (value - serie.min)) * Math.PI / 180;
  46408. var color = pointer.color === 'auto' ? this._getColor(seriesIndex, value) : pointer.color;
  46409. var pointShape = new GaugePointerShape({
  46410. zlevel: serie.zlevel,
  46411. z: serie.z + 1,
  46412. clickable: this.query(serie, 'clickable'),
  46413. style: {
  46414. x: center[0],
  46415. y: center[1],
  46416. r: length,
  46417. startAngle: params.startAngle * Math.PI / 180,
  46418. angle: angle,
  46419. color: color,
  46420. width: width,
  46421. shadowColor: pointer.shadowColor,
  46422. shadowBlur: pointer.shadowBlur,
  46423. shadowOffsetX: pointer.shadowOffsetX,
  46424. shadowOffsetY: pointer.shadowOffsetY
  46425. },
  46426. highlightStyle: {
  46427. brushType: 'fill',
  46428. width: width > 2 ? 2 : width / 2,
  46429. color: '#fff'
  46430. }
  46431. });
  46432. ecData.pack(pointShape, this.series[seriesIndex], seriesIndex, this.series[seriesIndex].data[0], 0, this.series[seriesIndex].data[0].name, value);
  46433. this.shapeList.push(pointShape);
  46434. this.shapeList.push(new CircleShape({
  46435. zlevel: serie.zlevel,
  46436. z: serie.z + 2,
  46437. hoverable: false,
  46438. style: {
  46439. x: center[0],
  46440. y: center[1],
  46441. r: pointer.width / 2.5,
  46442. color: '#fff'
  46443. }
  46444. }));
  46445. },
  46446. _buildTitle: function (seriesIndex) {
  46447. var serie = this.series[seriesIndex];
  46448. if (!serie.title.show) {
  46449. return;
  46450. }
  46451. var data = serie.data[0];
  46452. var name = data.name != null ? data.name : '';
  46453. if (name !== '') {
  46454. var title = serie.title;
  46455. var offsetCenter = title.offsetCenter;
  46456. var textStyle = title.textStyle;
  46457. var textColor = textStyle.color;
  46458. var params = this._paramsMap[seriesIndex];
  46459. var x = params.center[0] + this.parsePercent(offsetCenter[0], params.radius[1]);
  46460. var y = params.center[1] + this.parsePercent(offsetCenter[1], params.radius[1]);
  46461. this.shapeList.push(new TextShape({
  46462. zlevel: serie.zlevel,
  46463. z: serie.z + (Math.abs(x - params.center[0]) + Math.abs(y - params.center[1]) < textStyle.fontSize * 2 ? 2 : 1),
  46464. hoverable: false,
  46465. style: {
  46466. x: x,
  46467. y: y,
  46468. color: textColor === 'auto' ? this._getColor(seriesIndex) : textColor,
  46469. text: name,
  46470. textAlign: 'center',
  46471. textFont: this.getFont(textStyle),
  46472. shadowColor: textStyle.shadowColor,
  46473. shadowBlur: textStyle.shadowBlur,
  46474. shadowOffsetX: textStyle.shadowOffsetX,
  46475. shadowOffsetY: textStyle.shadowOffsetY
  46476. }
  46477. }));
  46478. }
  46479. },
  46480. _buildDetail: function (seriesIndex) {
  46481. var serie = this.series[seriesIndex];
  46482. if (!serie.detail.show) {
  46483. return;
  46484. }
  46485. var detail = serie.detail;
  46486. var offsetCenter = detail.offsetCenter;
  46487. var color = detail.backgroundColor;
  46488. var textStyle = detail.textStyle;
  46489. var textColor = textStyle.color;
  46490. var params = this._paramsMap[seriesIndex];
  46491. var value = this._getValue(seriesIndex);
  46492. var x = params.center[0] - detail.width / 2 + this.parsePercent(offsetCenter[0], params.radius[1]);
  46493. var y = params.center[1] + this.parsePercent(offsetCenter[1], params.radius[1]);
  46494. this.shapeList.push(new RectangleShape({
  46495. zlevel: serie.zlevel,
  46496. z: serie.z + (Math.abs(x + detail.width / 2 - params.center[0]) + Math.abs(y + detail.height / 2 - params.center[1]) < textStyle.fontSize ? 2 : 1),
  46497. hoverable: false,
  46498. style: {
  46499. x: x,
  46500. y: y,
  46501. width: detail.width,
  46502. height: detail.height,
  46503. brushType: 'both',
  46504. color: color === 'auto' ? this._getColor(seriesIndex, value) : color,
  46505. lineWidth: detail.borderWidth,
  46506. strokeColor: detail.borderColor,
  46507. shadowColor: detail.shadowColor,
  46508. shadowBlur: detail.shadowBlur,
  46509. shadowOffsetX: detail.shadowOffsetX,
  46510. shadowOffsetY: detail.shadowOffsetY,
  46511. text: this._getLabelText(detail.formatter, value),
  46512. textFont: this.getFont(textStyle),
  46513. textPosition: 'inside',
  46514. textColor: textColor === 'auto' ? this._getColor(seriesIndex, value) : textColor
  46515. }
  46516. }));
  46517. },
  46518. _getValue: function (seriesIndex) {
  46519. return this.getDataFromOption(this.series[seriesIndex].data[0]);
  46520. },
  46521. _colorMap: function (seriesIndex) {
  46522. var serie = this.series[seriesIndex];
  46523. var min = serie.min;
  46524. var total = serie.max - min;
  46525. var color = serie.axisLine.lineStyle.color;
  46526. if (!(color instanceof Array)) {
  46527. color = [[
  46528. 1,
  46529. color
  46530. ]];
  46531. }
  46532. var colorArray = [];
  46533. for (var i = 0, l = color.length; i < l; i++) {
  46534. colorArray.push([
  46535. color[i][0] * total + min,
  46536. color[i][1]
  46537. ]);
  46538. }
  46539. this._paramsMap[seriesIndex].colorArray = colorArray;
  46540. },
  46541. _getColor: function (seriesIndex, value) {
  46542. if (value == null) {
  46543. value = this._getValue(seriesIndex);
  46544. }
  46545. var colorArray = this._paramsMap[seriesIndex].colorArray;
  46546. for (var i = 0, l = colorArray.length; i < l; i++) {
  46547. if (colorArray[i][0] >= value) {
  46548. return colorArray[i][1];
  46549. }
  46550. }
  46551. return colorArray[colorArray.length - 1][1];
  46552. },
  46553. _getSector: function (center, r0, r, startAngle, endAngle, color, lineStyle, zlevel, z) {
  46554. return new SectorShape({
  46555. zlevel: zlevel,
  46556. z: z,
  46557. hoverable: false,
  46558. style: {
  46559. x: center[0],
  46560. y: center[1],
  46561. r0: r0,
  46562. r: r,
  46563. startAngle: startAngle,
  46564. endAngle: endAngle,
  46565. brushType: 'fill',
  46566. color: color,
  46567. shadowColor: lineStyle.shadowColor,
  46568. shadowBlur: lineStyle.shadowBlur,
  46569. shadowOffsetX: lineStyle.shadowOffsetX,
  46570. shadowOffsetY: lineStyle.shadowOffsetY
  46571. }
  46572. });
  46573. },
  46574. _getLabelText: function (formatter, value) {
  46575. if (formatter) {
  46576. if (typeof formatter === 'function') {
  46577. return formatter.call(this.myChart, value);
  46578. } else if (typeof formatter === 'string') {
  46579. return formatter.replace('{value}', value);
  46580. }
  46581. }
  46582. return value;
  46583. },
  46584. refresh: function (newOption) {
  46585. if (newOption) {
  46586. this.option = newOption;
  46587. this.series = newOption.series;
  46588. }
  46589. this.backupShapeList();
  46590. this._buildShape();
  46591. }
  46592. };
  46593. zrUtil.inherits(Gauge, ChartBase);
  46594. require('../chart').define('gauge', Gauge);
  46595. return Gauge;
  46596. });define('echarts/util/shape/GaugePointer', [
  46597. 'require',
  46598. 'zrender/shape/Base',
  46599. 'zrender/tool/util',
  46600. './normalIsCover'
  46601. ], function (require) {
  46602. var Base = require('zrender/shape/Base');
  46603. var zrUtil = require('zrender/tool/util');
  46604. function GaugePointer(options) {
  46605. Base.call(this, options);
  46606. }
  46607. GaugePointer.prototype = {
  46608. type: 'gauge-pointer',
  46609. buildPath: function (ctx, style) {
  46610. var r = style.r;
  46611. var width = style.width;
  46612. var angle = style.angle;
  46613. var x = style.x - Math.cos(angle) * width * (width >= r / 3 ? 1 : 2);
  46614. var y = style.y + Math.sin(angle) * width * (width >= r / 3 ? 1 : 2);
  46615. angle = style.angle - Math.PI / 2;
  46616. ctx.moveTo(x, y);
  46617. ctx.lineTo(style.x + Math.cos(angle) * width, style.y - Math.sin(angle) * width);
  46618. ctx.lineTo(style.x + Math.cos(style.angle) * r, style.y - Math.sin(style.angle) * r);
  46619. ctx.lineTo(style.x - Math.cos(angle) * width, style.y + Math.sin(angle) * width);
  46620. ctx.lineTo(x, y);
  46621. return;
  46622. },
  46623. getRect: function (style) {
  46624. if (style.__rect) {
  46625. return style.__rect;
  46626. }
  46627. var width = style.width * 2;
  46628. var xStart = style.x;
  46629. var yStart = style.y;
  46630. var xEnd = xStart + Math.cos(style.angle) * style.r;
  46631. var yEnd = yStart - Math.sin(style.angle) * style.r;
  46632. style.__rect = {
  46633. x: Math.min(xStart, xEnd) - width,
  46634. y: Math.min(yStart, yEnd) - width,
  46635. width: Math.abs(xStart - xEnd) + width,
  46636. height: Math.abs(yStart - yEnd) + width
  46637. };
  46638. return style.__rect;
  46639. },
  46640. isCover: require('./normalIsCover')
  46641. };
  46642. zrUtil.inherits(GaugePointer, Base);
  46643. return GaugePointer;
  46644. });define('echarts/chart/funnel', [
  46645. 'require',
  46646. './base',
  46647. 'zrender/shape/Text',
  46648. 'zrender/shape/Line',
  46649. 'zrender/shape/Polygon',
  46650. '../config',
  46651. '../util/ecData',
  46652. '../util/number',
  46653. 'zrender/tool/util',
  46654. 'zrender/tool/color',
  46655. 'zrender/tool/area',
  46656. '../chart'
  46657. ], function (require) {
  46658. var ChartBase = require('./base');
  46659. var TextShape = require('zrender/shape/Text');
  46660. var LineShape = require('zrender/shape/Line');
  46661. var PolygonShape = require('zrender/shape/Polygon');
  46662. var ecConfig = require('../config');
  46663. ecConfig.funnel = {
  46664. zlevel: 0,
  46665. z: 2,
  46666. clickable: true,
  46667. legendHoverLink: true,
  46668. x: 80,
  46669. y: 60,
  46670. x2: 80,
  46671. y2: 60,
  46672. min: 0,
  46673. max: 100,
  46674. minSize: '0%',
  46675. maxSize: '100%',
  46676. sort: 'descending',
  46677. gap: 0,
  46678. funnelAlign: 'center',
  46679. itemStyle: {
  46680. normal: {
  46681. borderColor: '#fff',
  46682. borderWidth: 1,
  46683. label: {
  46684. show: true,
  46685. position: 'outer'
  46686. },
  46687. labelLine: {
  46688. show: true,
  46689. length: 10,
  46690. lineStyle: {
  46691. width: 1,
  46692. type: 'solid'
  46693. }
  46694. }
  46695. },
  46696. emphasis: {
  46697. borderColor: 'rgba(0,0,0,0)',
  46698. borderWidth: 1,
  46699. label: { show: true },
  46700. labelLine: { show: true }
  46701. }
  46702. }
  46703. };
  46704. var ecData = require('../util/ecData');
  46705. var number = require('../util/number');
  46706. var zrUtil = require('zrender/tool/util');
  46707. var zrColor = require('zrender/tool/color');
  46708. var zrArea = require('zrender/tool/area');
  46709. function Funnel(ecTheme, messageCenter, zr, option, myChart) {
  46710. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  46711. this.refresh(option);
  46712. }
  46713. Funnel.prototype = {
  46714. type: ecConfig.CHART_TYPE_FUNNEL,
  46715. _buildShape: function () {
  46716. var series = this.series;
  46717. var legend = this.component.legend;
  46718. this._paramsMap = {};
  46719. this._selected = {};
  46720. this.selectedMap = {};
  46721. var serieName;
  46722. for (var i = 0, l = series.length; i < l; i++) {
  46723. if (series[i].type === ecConfig.CHART_TYPE_FUNNEL) {
  46724. series[i] = this.reformOption(series[i]);
  46725. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  46726. serieName = series[i].name || '';
  46727. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  46728. if (!this.selectedMap[serieName]) {
  46729. continue;
  46730. }
  46731. this._buildSingleFunnel(i);
  46732. this.buildMark(i);
  46733. }
  46734. }
  46735. this.addShapeList();
  46736. },
  46737. _buildSingleFunnel: function (seriesIndex) {
  46738. var legend = this.component.legend;
  46739. var serie = this.series[seriesIndex];
  46740. var data = this._mapData(seriesIndex);
  46741. var location = this._getLocation(seriesIndex);
  46742. this._paramsMap[seriesIndex] = {
  46743. location: location,
  46744. data: data
  46745. };
  46746. var itemName;
  46747. var total = 0;
  46748. var selectedData = [];
  46749. for (var i = 0, l = data.length; i < l; i++) {
  46750. itemName = data[i].name;
  46751. this.selectedMap[itemName] = legend ? legend.isSelected(itemName) : true;
  46752. if (this.selectedMap[itemName] && !isNaN(data[i].value)) {
  46753. selectedData.push(data[i]);
  46754. total++;
  46755. }
  46756. }
  46757. if (total === 0) {
  46758. return;
  46759. }
  46760. var funnelCase = this._buildFunnelCase(seriesIndex);
  46761. var align = serie.funnelAlign;
  46762. var gap = serie.gap;
  46763. var height = total > 1 ? (location.height - (total - 1) * gap) / total : location.height;
  46764. var width;
  46765. var lastY = location.y;
  46766. var lastWidth = serie.sort === 'descending' ? this._getItemWidth(seriesIndex, selectedData[0].value) : number.parsePercent(serie.minSize, location.width);
  46767. var next = serie.sort === 'descending' ? 1 : 0;
  46768. var centerX = location.centerX;
  46769. var pointList = [];
  46770. var x;
  46771. var polygon;
  46772. var lastPolygon;
  46773. for (var i = 0, l = selectedData.length; i < l; i++) {
  46774. itemName = selectedData[i].name;
  46775. if (this.selectedMap[itemName] && !isNaN(selectedData[i].value)) {
  46776. width = i <= l - 2 ? this._getItemWidth(seriesIndex, selectedData[i + next].value) : serie.sort === 'descending' ? number.parsePercent(serie.minSize, location.width) : number.parsePercent(serie.maxSize, location.width);
  46777. switch (align) {
  46778. case 'left':
  46779. x = location.x;
  46780. break;
  46781. case 'right':
  46782. x = location.x + location.width - lastWidth;
  46783. break;
  46784. default:
  46785. x = centerX - lastWidth / 2;
  46786. }
  46787. polygon = this._buildItem(seriesIndex, selectedData[i]._index, legend ? legend.getColor(itemName) : this.zr.getColor(selectedData[i]._index), x, lastY, lastWidth, width, height, align);
  46788. lastY += height + gap;
  46789. lastPolygon = polygon.style.pointList;
  46790. pointList.unshift([
  46791. lastPolygon[0][0] - 10,
  46792. lastPolygon[0][1]
  46793. ]);
  46794. pointList.push([
  46795. lastPolygon[1][0] + 10,
  46796. lastPolygon[1][1]
  46797. ]);
  46798. if (i === 0) {
  46799. if (lastWidth === 0) {
  46800. lastPolygon = pointList.pop();
  46801. align == 'center' && (pointList[0][0] += 10);
  46802. align == 'right' && (pointList[0][0] = lastPolygon[0]);
  46803. pointList[0][1] -= align == 'center' ? 10 : 15;
  46804. if (l == 1) {
  46805. lastPolygon = polygon.style.pointList;
  46806. }
  46807. } else {
  46808. pointList[pointList.length - 1][1] -= 5;
  46809. pointList[0][1] -= 5;
  46810. }
  46811. }
  46812. lastWidth = width;
  46813. }
  46814. }
  46815. if (funnelCase) {
  46816. pointList.unshift([
  46817. lastPolygon[3][0] - 10,
  46818. lastPolygon[3][1]
  46819. ]);
  46820. pointList.push([
  46821. lastPolygon[2][0] + 10,
  46822. lastPolygon[2][1]
  46823. ]);
  46824. if (lastWidth === 0) {
  46825. lastPolygon = pointList.pop();
  46826. align == 'center' && (pointList[0][0] += 10);
  46827. align == 'right' && (pointList[0][0] = lastPolygon[0]);
  46828. pointList[0][1] += align == 'center' ? 10 : 15;
  46829. } else {
  46830. pointList[pointList.length - 1][1] += 5;
  46831. pointList[0][1] += 5;
  46832. }
  46833. funnelCase.style.pointList = pointList;
  46834. }
  46835. },
  46836. _buildFunnelCase: function (seriesIndex) {
  46837. var serie = this.series[seriesIndex];
  46838. if (this.deepQuery([
  46839. serie,
  46840. this.option
  46841. ], 'calculable')) {
  46842. var location = this._paramsMap[seriesIndex].location;
  46843. var gap = 10;
  46844. var funnelCase = {
  46845. hoverable: false,
  46846. style: {
  46847. pointListd: [
  46848. [
  46849. location.x - gap,
  46850. location.y - gap
  46851. ],
  46852. [
  46853. location.x + location.width + gap,
  46854. location.y - gap
  46855. ],
  46856. [
  46857. location.x + location.width + gap,
  46858. location.y + location.height + gap
  46859. ],
  46860. [
  46861. location.x - gap,
  46862. location.y + location.height + gap
  46863. ]
  46864. ],
  46865. brushType: 'stroke',
  46866. lineWidth: 1,
  46867. strokeColor: serie.calculableHolderColor || this.ecTheme.calculableHolderColor || ecConfig.calculableHolderColor
  46868. }
  46869. };
  46870. ecData.pack(funnelCase, serie, seriesIndex, undefined, -1);
  46871. this.setCalculable(funnelCase);
  46872. funnelCase = new PolygonShape(funnelCase);
  46873. this.shapeList.push(funnelCase);
  46874. return funnelCase;
  46875. }
  46876. },
  46877. _getLocation: function (seriesIndex) {
  46878. var gridOption = this.series[seriesIndex];
  46879. var zrWidth = this.zr.getWidth();
  46880. var zrHeight = this.zr.getHeight();
  46881. var x = this.parsePercent(gridOption.x, zrWidth);
  46882. var y = this.parsePercent(gridOption.y, zrHeight);
  46883. var width = gridOption.width == null ? zrWidth - x - this.parsePercent(gridOption.x2, zrWidth) : this.parsePercent(gridOption.width, zrWidth);
  46884. return {
  46885. x: x,
  46886. y: y,
  46887. width: width,
  46888. height: gridOption.height == null ? zrHeight - y - this.parsePercent(gridOption.y2, zrHeight) : this.parsePercent(gridOption.height, zrHeight),
  46889. centerX: x + width / 2
  46890. };
  46891. },
  46892. _mapData: function (seriesIndex) {
  46893. var serie = this.series[seriesIndex];
  46894. var funnelData = zrUtil.clone(serie.data);
  46895. for (var i = 0, l = funnelData.length; i < l; i++) {
  46896. funnelData[i]._index = i;
  46897. }
  46898. function numDescending(a, b) {
  46899. if (a.value === '-') {
  46900. return 1;
  46901. } else if (b.value === '-') {
  46902. return -1;
  46903. }
  46904. return b.value - a.value;
  46905. }
  46906. function numAscending(a, b) {
  46907. return -numDescending(a, b);
  46908. }
  46909. if (serie.sort != 'none') {
  46910. funnelData.sort(serie.sort === 'descending' ? numDescending : numAscending);
  46911. }
  46912. return funnelData;
  46913. },
  46914. _buildItem: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
  46915. var series = this.series;
  46916. var serie = series[seriesIndex];
  46917. var data = serie.data[dataIndex];
  46918. var polygon = this.getPolygon(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
  46919. ecData.pack(polygon, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
  46920. this.shapeList.push(polygon);
  46921. var label = this.getLabel(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
  46922. ecData.pack(label, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
  46923. this.shapeList.push(label);
  46924. if (!this._needLabel(serie, data, false)) {
  46925. label.invisible = true;
  46926. }
  46927. var labelLine = this.getLabelLine(seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align);
  46928. this.shapeList.push(labelLine);
  46929. if (!this._needLabelLine(serie, data, false)) {
  46930. labelLine.invisible = true;
  46931. }
  46932. var polygonHoverConnect = [];
  46933. var labelHoverConnect = [];
  46934. if (this._needLabelLine(serie, data, true)) {
  46935. polygonHoverConnect.push(labelLine.id);
  46936. labelHoverConnect.push(labelLine.id);
  46937. }
  46938. if (this._needLabel(serie, data, true)) {
  46939. polygonHoverConnect.push(label.id);
  46940. labelHoverConnect.push(polygon.id);
  46941. }
  46942. polygon.hoverConnect = polygonHoverConnect;
  46943. label.hoverConnect = labelHoverConnect;
  46944. return polygon;
  46945. },
  46946. _getItemWidth: function (seriesIndex, value) {
  46947. var serie = this.series[seriesIndex];
  46948. var location = this._paramsMap[seriesIndex].location;
  46949. var min = serie.min;
  46950. var max = serie.max;
  46951. var minSize = number.parsePercent(serie.minSize, location.width);
  46952. var maxSize = number.parsePercent(serie.maxSize, location.width);
  46953. return (value - min) * (maxSize - minSize) / (max - min) + minSize;
  46954. },
  46955. getPolygon: function (seriesIndex, dataIndex, defaultColor, xLT, y, topWidth, bottomWidth, height, align) {
  46956. var serie = this.series[seriesIndex];
  46957. var data = serie.data[dataIndex];
  46958. var queryTarget = [
  46959. data,
  46960. serie
  46961. ];
  46962. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  46963. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  46964. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  46965. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  46966. var xLB;
  46967. switch (align) {
  46968. case 'left':
  46969. xLB = xLT;
  46970. break;
  46971. case 'right':
  46972. xLB = xLT + (topWidth - bottomWidth);
  46973. break;
  46974. default:
  46975. xLB = xLT + (topWidth - bottomWidth) / 2;
  46976. break;
  46977. }
  46978. var polygon = {
  46979. zlevel: serie.zlevel,
  46980. z: serie.z,
  46981. clickable: this.deepQuery(queryTarget, 'clickable'),
  46982. style: {
  46983. pointList: [
  46984. [
  46985. xLT,
  46986. y
  46987. ],
  46988. [
  46989. xLT + topWidth,
  46990. y
  46991. ],
  46992. [
  46993. xLB + bottomWidth,
  46994. y + height
  46995. ],
  46996. [
  46997. xLB,
  46998. y + height
  46999. ]
  47000. ],
  47001. brushType: 'both',
  47002. color: normalColor,
  47003. lineWidth: normal.borderWidth,
  47004. strokeColor: normal.borderColor
  47005. },
  47006. highlightStyle: {
  47007. color: emphasisColor,
  47008. lineWidth: emphasis.borderWidth,
  47009. strokeColor: emphasis.borderColor
  47010. }
  47011. };
  47012. if (this.deepQuery([
  47013. data,
  47014. serie,
  47015. this.option
  47016. ], 'calculable')) {
  47017. this.setCalculable(polygon);
  47018. polygon.draggable = true;
  47019. }
  47020. return new PolygonShape(polygon);
  47021. },
  47022. getLabel: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
  47023. var serie = this.series[seriesIndex];
  47024. var data = serie.data[dataIndex];
  47025. var location = this._paramsMap[seriesIndex].location;
  47026. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  47027. var status = 'normal';
  47028. var labelControl = itemStyle[status].label;
  47029. var textStyle = labelControl.textStyle || {};
  47030. var lineLength = itemStyle[status].labelLine.length;
  47031. var text = this.getLabelText(seriesIndex, dataIndex, status);
  47032. var textFont = this.getFont(textStyle);
  47033. var textAlign;
  47034. var textColor = defaultColor;
  47035. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  47036. if (labelControl.position === 'inner' || labelControl.position === 'inside' || labelControl.position === 'center') {
  47037. textAlign = align;
  47038. textColor = Math.max(topWidth, bottomWidth) / 2 > zrArea.getTextWidth(text, textFont) ? '#fff' : zrColor.reverse(defaultColor);
  47039. } else if (labelControl.position === 'left') {
  47040. textAlign = 'right';
  47041. } else {
  47042. textAlign = 'left';
  47043. }
  47044. var textShape = {
  47045. zlevel: serie.zlevel,
  47046. z: serie.z + 1,
  47047. style: {
  47048. x: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  47049. y: y + height / 2,
  47050. color: textStyle.color || textColor,
  47051. text: text,
  47052. textAlign: textStyle.align || textAlign,
  47053. textBaseline: textStyle.baseline || 'middle',
  47054. textFont: textFont
  47055. }
  47056. };
  47057. status = 'emphasis';
  47058. labelControl = itemStyle[status].label || labelControl;
  47059. textStyle = labelControl.textStyle || textStyle;
  47060. lineLength = itemStyle[status].labelLine.length || lineLength;
  47061. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  47062. text = this.getLabelText(seriesIndex, dataIndex, status);
  47063. textFont = this.getFont(textStyle);
  47064. textColor = defaultColor;
  47065. if (labelControl.position === 'inner' || labelControl.position === 'inside' || labelControl.position === 'center') {
  47066. textAlign = align;
  47067. textColor = Math.max(topWidth, bottomWidth) / 2 > zrArea.getTextWidth(text, textFont) ? '#fff' : zrColor.reverse(defaultColor);
  47068. } else if (labelControl.position === 'left') {
  47069. textAlign = 'right';
  47070. } else {
  47071. textAlign = 'left';
  47072. }
  47073. textShape.highlightStyle = {
  47074. x: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  47075. color: textStyle.color || textColor,
  47076. text: text,
  47077. textAlign: textStyle.align || textAlign,
  47078. textFont: textFont,
  47079. brushType: 'fill'
  47080. };
  47081. return new TextShape(textShape);
  47082. },
  47083. getLabelText: function (seriesIndex, dataIndex, status) {
  47084. var series = this.series;
  47085. var serie = series[seriesIndex];
  47086. var data = serie.data[dataIndex];
  47087. var formatter = this.deepQuery([
  47088. data,
  47089. serie
  47090. ], 'itemStyle.' + status + '.label.formatter');
  47091. if (formatter) {
  47092. if (typeof formatter === 'function') {
  47093. return formatter.call(this.myChart, {
  47094. seriesIndex: seriesIndex,
  47095. seriesName: serie.name || '',
  47096. series: serie,
  47097. dataIndex: dataIndex,
  47098. data: data,
  47099. name: data.name,
  47100. value: data.value
  47101. });
  47102. } else if (typeof formatter === 'string') {
  47103. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}').replace('{a0}', serie.name).replace('{b0}', data.name).replace('{c0}', data.value);
  47104. return formatter;
  47105. }
  47106. } else {
  47107. return data.name;
  47108. }
  47109. },
  47110. getLabelLine: function (seriesIndex, dataIndex, defaultColor, x, y, topWidth, bottomWidth, height, align) {
  47111. var serie = this.series[seriesIndex];
  47112. var data = serie.data[dataIndex];
  47113. var location = this._paramsMap[seriesIndex].location;
  47114. var itemStyle = zrUtil.merge(zrUtil.clone(data.itemStyle) || {}, serie.itemStyle);
  47115. var status = 'normal';
  47116. var labelLineControl = itemStyle[status].labelLine;
  47117. var lineLength = itemStyle[status].labelLine.length;
  47118. var lineStyle = labelLineControl.lineStyle || {};
  47119. var labelControl = itemStyle[status].label;
  47120. labelControl.position = labelControl.position || itemStyle.normal.label.position;
  47121. var lineShape = {
  47122. zlevel: serie.zlevel,
  47123. z: serie.z + 1,
  47124. hoverable: false,
  47125. style: {
  47126. xStart: this._getLabelLineStartPoint(x, location, topWidth, bottomWidth, align),
  47127. yStart: y + height / 2,
  47128. xEnd: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  47129. yEnd: y + height / 2,
  47130. strokeColor: lineStyle.color || defaultColor,
  47131. lineType: lineStyle.type,
  47132. lineWidth: lineStyle.width
  47133. }
  47134. };
  47135. status = 'emphasis';
  47136. labelLineControl = itemStyle[status].labelLine || labelLineControl;
  47137. lineLength = itemStyle[status].labelLine.length || lineLength;
  47138. lineStyle = labelLineControl.lineStyle || lineStyle;
  47139. labelControl = itemStyle[status].label || labelControl;
  47140. labelControl.position = labelControl.position;
  47141. lineShape.highlightStyle = {
  47142. xEnd: this._getLabelPoint(labelControl.position, x, location, topWidth, bottomWidth, lineLength, align),
  47143. strokeColor: lineStyle.color || defaultColor,
  47144. lineType: lineStyle.type,
  47145. lineWidth: lineStyle.width
  47146. };
  47147. return new LineShape(lineShape);
  47148. },
  47149. _getLabelPoint: function (position, x, location, topWidth, bottomWidth, lineLength, align) {
  47150. position = position === 'inner' || position === 'inside' ? 'center' : position;
  47151. switch (position) {
  47152. case 'center':
  47153. return align == 'center' ? x + topWidth / 2 : align == 'left' ? x + 10 : x + topWidth - 10;
  47154. case 'left':
  47155. if (lineLength === 'auto') {
  47156. return location.x - 10;
  47157. } else {
  47158. return align == 'center' ? location.centerX - Math.max(topWidth, bottomWidth) / 2 - lineLength : align == 'right' ? x - (topWidth < bottomWidth ? bottomWidth - topWidth : 0) - lineLength : location.x - lineLength;
  47159. }
  47160. break;
  47161. default:
  47162. if (lineLength === 'auto') {
  47163. return location.x + location.width + 10;
  47164. } else {
  47165. return align == 'center' ? location.centerX + Math.max(topWidth, bottomWidth) / 2 + lineLength : align == 'right' ? location.x + location.width + lineLength : x + Math.max(topWidth, bottomWidth) + lineLength;
  47166. }
  47167. }
  47168. },
  47169. _getLabelLineStartPoint: function (x, location, topWidth, bottomWidth, align) {
  47170. return align == 'center' ? location.centerX : topWidth < bottomWidth ? x + Math.min(topWidth, bottomWidth) / 2 : x + Math.max(topWidth, bottomWidth) / 2;
  47171. },
  47172. _needLabel: function (serie, data, isEmphasis) {
  47173. return this.deepQuery([
  47174. data,
  47175. serie
  47176. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.label.show');
  47177. },
  47178. _needLabelLine: function (serie, data, isEmphasis) {
  47179. return this.deepQuery([
  47180. data,
  47181. serie
  47182. ], 'itemStyle.' + (isEmphasis ? 'emphasis' : 'normal') + '.labelLine.show');
  47183. },
  47184. refresh: function (newOption) {
  47185. if (newOption) {
  47186. this.option = newOption;
  47187. this.series = newOption.series;
  47188. }
  47189. this.backupShapeList();
  47190. this._buildShape();
  47191. }
  47192. };
  47193. zrUtil.inherits(Funnel, ChartBase);
  47194. require('../chart').define('funnel', Funnel);
  47195. return Funnel;
  47196. });define('echarts/chart/eventRiver', [
  47197. 'require',
  47198. './base',
  47199. '../layout/eventRiver',
  47200. 'zrender/shape/Polygon',
  47201. '../component/axis',
  47202. '../component/grid',
  47203. '../component/dataZoom',
  47204. '../config',
  47205. '../util/ecData',
  47206. '../util/date',
  47207. 'zrender/tool/util',
  47208. 'zrender/tool/color',
  47209. '../chart'
  47210. ], function (require) {
  47211. var ChartBase = require('./base');
  47212. var eventRiverLayout = require('../layout/eventRiver');
  47213. var PolygonShape = require('zrender/shape/Polygon');
  47214. require('../component/axis');
  47215. require('../component/grid');
  47216. require('../component/dataZoom');
  47217. var ecConfig = require('../config');
  47218. ecConfig.eventRiver = {
  47219. zlevel: 0,
  47220. z: 2,
  47221. clickable: true,
  47222. legendHoverLink: true,
  47223. itemStyle: {
  47224. normal: {
  47225. borderColor: 'rgba(0,0,0,0)',
  47226. borderWidth: 1,
  47227. label: {
  47228. show: true,
  47229. position: 'inside',
  47230. formatter: '{b}'
  47231. }
  47232. },
  47233. emphasis: {
  47234. borderColor: 'rgba(0,0,0,0)',
  47235. borderWidth: 1,
  47236. label: { show: true }
  47237. }
  47238. }
  47239. };
  47240. var ecData = require('../util/ecData');
  47241. var ecDate = require('../util/date');
  47242. var zrUtil = require('zrender/tool/util');
  47243. var zrColor = require('zrender/tool/color');
  47244. function EventRiver(ecTheme, messageCenter, zr, option, myChart) {
  47245. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  47246. var self = this;
  47247. self._ondragend = function () {
  47248. self.isDragend = true;
  47249. };
  47250. this.refresh(option);
  47251. }
  47252. EventRiver.prototype = {
  47253. type: ecConfig.CHART_TYPE_EVENTRIVER,
  47254. _buildShape: function () {
  47255. var series = this.series;
  47256. this.selectedMap = {};
  47257. this._dataPreprocessing();
  47258. var legend = this.component.legend;
  47259. var eventRiverSeries = [];
  47260. for (var i = 0; i < series.length; i++) {
  47261. if (series[i].type === this.type) {
  47262. series[i] = this.reformOption(series[i]);
  47263. this.legendHoverLink = series[i].legendHoverLink || this.legendHoverLink;
  47264. var serieName = series[i].name || '';
  47265. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  47266. if (!this.selectedMap[serieName]) {
  47267. continue;
  47268. }
  47269. this.buildMark(i);
  47270. eventRiverSeries.push(this.series[i]);
  47271. }
  47272. }
  47273. eventRiverLayout(eventRiverSeries, this._intervalX, this.component.grid.getArea());
  47274. this._drawEventRiver();
  47275. this.addShapeList();
  47276. },
  47277. _dataPreprocessing: function () {
  47278. var series = this.series;
  47279. var xAxis;
  47280. var evolutionList;
  47281. for (var i = 0, iLen = series.length; i < iLen; i++) {
  47282. if (series[i].type === this.type) {
  47283. xAxis = this.component.xAxis.getAxis(series[i].xAxisIndex || 0);
  47284. for (var j = 0, jLen = series[i].data.length; j < jLen; j++) {
  47285. evolutionList = series[i].data[j].evolution;
  47286. for (var k = 0, kLen = evolutionList.length; k < kLen; k++) {
  47287. evolutionList[k].timeScale = xAxis.getCoord(ecDate.getNewDate(evolutionList[k].time) - 0);
  47288. evolutionList[k].valueScale = Math.pow(evolutionList[k].value, 0.8);
  47289. }
  47290. }
  47291. }
  47292. }
  47293. this._intervalX = Math.round(this.component.grid.getWidth() / 40);
  47294. },
  47295. _drawEventRiver: function () {
  47296. var series = this.series;
  47297. for (var i = 0; i < series.length; i++) {
  47298. var serieName = series[i].name || '';
  47299. if (series[i].type === this.type && this.selectedMap[serieName]) {
  47300. for (var j = 0; j < series[i].data.length; j++) {
  47301. this._drawEventBubble(series[i].data[j], i, j);
  47302. }
  47303. }
  47304. }
  47305. },
  47306. _drawEventBubble: function (oneEvent, seriesIndex, dataIndex) {
  47307. var series = this.series;
  47308. var serie = series[seriesIndex];
  47309. var serieName = serie.name || '';
  47310. var data = serie.data[dataIndex];
  47311. var queryTarget = [
  47312. data,
  47313. serie
  47314. ];
  47315. var legend = this.component.legend;
  47316. var defaultColor = legend ? legend.getColor(serieName) : this.zr.getColor(seriesIndex);
  47317. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  47318. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  47319. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  47320. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  47321. var pts = this._calculateControlPoints(oneEvent);
  47322. var eventBubbleShape = {
  47323. zlevel: serie.zlevel,
  47324. z: serie.z,
  47325. clickable: this.deepQuery(queryTarget, 'clickable'),
  47326. style: {
  47327. pointList: pts,
  47328. smooth: 'spline',
  47329. brushType: 'both',
  47330. lineJoin: 'round',
  47331. color: normalColor,
  47332. lineWidth: normal.borderWidth,
  47333. strokeColor: normal.borderColor
  47334. },
  47335. highlightStyle: {
  47336. color: emphasisColor,
  47337. lineWidth: emphasis.borderWidth,
  47338. strokeColor: emphasis.borderColor
  47339. },
  47340. draggable: 'vertical',
  47341. ondragend: this._ondragend
  47342. };
  47343. eventBubbleShape = new PolygonShape(eventBubbleShape);
  47344. this.addLabel(eventBubbleShape, serie, data, oneEvent.name);
  47345. ecData.pack(eventBubbleShape, series[seriesIndex], seriesIndex, series[seriesIndex].data[dataIndex], dataIndex, series[seriesIndex].data[dataIndex].name);
  47346. this.shapeList.push(eventBubbleShape);
  47347. },
  47348. _calculateControlPoints: function (oneEvent) {
  47349. var intervalX = this._intervalX;
  47350. var posY = oneEvent.y;
  47351. var evolution = oneEvent.evolution;
  47352. var n = evolution.length;
  47353. if (n < 1) {
  47354. return;
  47355. }
  47356. var time = [];
  47357. var value = [];
  47358. for (var i = 0; i < n; i++) {
  47359. time.push(evolution[i].timeScale);
  47360. value.push(evolution[i].valueScale);
  47361. }
  47362. var pts = [];
  47363. pts.push([
  47364. time[0],
  47365. posY
  47366. ]);
  47367. var i = 0;
  47368. for (i = 0; i < n - 1; i++) {
  47369. pts.push([
  47370. (time[i] + time[i + 1]) / 2,
  47371. value[i] / -2 + posY
  47372. ]);
  47373. }
  47374. pts.push([
  47375. (time[i] + (time[i] + intervalX)) / 2,
  47376. value[i] / -2 + posY
  47377. ]);
  47378. pts.push([
  47379. time[i] + intervalX,
  47380. posY
  47381. ]);
  47382. pts.push([
  47383. (time[i] + (time[i] + intervalX)) / 2,
  47384. value[i] / 2 + posY
  47385. ]);
  47386. for (i = n - 1; i > 0; i--) {
  47387. pts.push([
  47388. (time[i] + time[i - 1]) / 2,
  47389. value[i - 1] / 2 + posY
  47390. ]);
  47391. }
  47392. return pts;
  47393. },
  47394. ondragend: function (param, status) {
  47395. if (!this.isDragend || !param.target) {
  47396. return;
  47397. }
  47398. status.dragOut = true;
  47399. status.dragIn = true;
  47400. status.needRefresh = false;
  47401. this.isDragend = false;
  47402. },
  47403. refresh: function (newOption) {
  47404. if (newOption) {
  47405. this.option = newOption;
  47406. this.series = newOption.series;
  47407. }
  47408. this.backupShapeList();
  47409. this._buildShape();
  47410. }
  47411. };
  47412. zrUtil.inherits(EventRiver, ChartBase);
  47413. require('../chart').define('eventRiver', EventRiver);
  47414. return EventRiver;
  47415. });define('echarts/layout/eventRiver', ['require'], function (require) {
  47416. function eventRiverLayout(series, intervalX, area) {
  47417. var space = 4;
  47418. var scale = intervalX;
  47419. function importanceSort(a, b) {
  47420. var x = a.importance;
  47421. var y = b.importance;
  47422. return x > y ? -1 : x < y ? 1 : 0;
  47423. }
  47424. function indexOf(array, value) {
  47425. if (array.indexOf) {
  47426. return array.indexOf(value);
  47427. }
  47428. for (var i = 0, len = array.length; i < len; i++) {
  47429. if (array[i] === value) {
  47430. return i;
  47431. }
  47432. }
  47433. return -1;
  47434. }
  47435. for (var i = 0; i < series.length; i++) {
  47436. for (var j = 0; j < series[i].data.length; j++) {
  47437. if (series[i].data[j].weight == null) {
  47438. series[i].data[j].weight = 1;
  47439. }
  47440. var importance = 0;
  47441. for (var k = 0; k < series[i].data[j].evolution.length; k++) {
  47442. importance += series[i].data[j].evolution[k].valueScale;
  47443. }
  47444. series[i].data[j].importance = importance * series[i].data[j].weight;
  47445. }
  47446. series[i].data.sort(importanceSort);
  47447. }
  47448. for (var i = 0; i < series.length; i++) {
  47449. if (series[i].weight == null) {
  47450. series[i].weight = 1;
  47451. }
  47452. var importance = 0;
  47453. for (var j = 0; j < series[i].data.length; j++) {
  47454. importance += series[i].data[j].weight;
  47455. }
  47456. series[i].importance = importance * series[i].weight;
  47457. }
  47458. series.sort(importanceSort);
  47459. var minTime = Number.MAX_VALUE;
  47460. var maxTime = 0;
  47461. for (var i = 0; i < series.length; i++) {
  47462. for (var j = 0; j < series[i].data.length; j++) {
  47463. for (var k = 0; k < series[i].data[j].evolution.length; k++) {
  47464. var time = series[i].data[j].evolution[k].timeScale;
  47465. minTime = Math.min(minTime, time);
  47466. maxTime = Math.max(maxTime, time);
  47467. }
  47468. }
  47469. }
  47470. minTime = ~~minTime;
  47471. maxTime = ~~maxTime;
  47472. var flagForOffset = function () {
  47473. var length = maxTime - minTime + 1 + ~~intervalX;
  47474. if (length <= 0) {
  47475. return [0];
  47476. }
  47477. var result = [];
  47478. while (length--) {
  47479. result.push(0);
  47480. }
  47481. return result;
  47482. }();
  47483. var flagForPos = flagForOffset.slice(0);
  47484. var bubbleData = [];
  47485. var totalMaxy = 0;
  47486. var totalOffset = 0;
  47487. for (var i = 0; i < series.length; i++) {
  47488. for (var j = 0; j < series[i].data.length; j++) {
  47489. var e = series[i].data[j];
  47490. e.time = [];
  47491. e.value = [];
  47492. var tmp;
  47493. var maxy = 0;
  47494. for (var k = 0; k < series[i].data[j].evolution.length; k++) {
  47495. tmp = series[i].data[j].evolution[k];
  47496. e.time.push(tmp.timeScale);
  47497. e.value.push(tmp.valueScale);
  47498. maxy = Math.max(maxy, tmp.valueScale);
  47499. }
  47500. bubbleBound(e, intervalX, minTime);
  47501. e.y = findLocation(flagForPos, e, function (e, index) {
  47502. return e.ypx[index];
  47503. });
  47504. e._offset = findLocation(flagForOffset, e, function () {
  47505. return space;
  47506. });
  47507. totalMaxy = Math.max(totalMaxy, e.y + maxy);
  47508. totalOffset = Math.max(totalOffset, e._offset);
  47509. bubbleData.push(e);
  47510. }
  47511. }
  47512. scaleY(bubbleData, area, totalMaxy, totalOffset);
  47513. }
  47514. function scaleY(bubbleData, area, maxY, offset) {
  47515. var height = area.height;
  47516. var offsetScale = offset / height > 0.5 ? 0.5 : 1;
  47517. var yBase = area.y;
  47518. var yScale = (area.height - offset) / maxY;
  47519. for (var i = 0, length = bubbleData.length; i < length; i++) {
  47520. var e = bubbleData[i];
  47521. e.y = yBase + yScale * e.y + e._offset * offsetScale;
  47522. delete e.time;
  47523. delete e.value;
  47524. delete e.xpx;
  47525. delete e.ypx;
  47526. delete e._offset;
  47527. var evolutionList = e.evolution;
  47528. for (var k = 0, klen = evolutionList.length; k < klen; k++) {
  47529. evolutionList[k].valueScale *= yScale;
  47530. }
  47531. }
  47532. }
  47533. function line(x0, y0, x1, y1) {
  47534. if (x0 === x1) {
  47535. throw new Error('x0 is equal with x1!!!');
  47536. }
  47537. if (y0 === y1) {
  47538. return function () {
  47539. return y0;
  47540. };
  47541. }
  47542. var k = (y0 - y1) / (x0 - x1);
  47543. var b = (y1 * x0 - y0 * x1) / (x0 - x1);
  47544. return function (x) {
  47545. return k * x + b;
  47546. };
  47547. }
  47548. function bubbleBound(e, intervalX, minX) {
  47549. var space = ~~intervalX;
  47550. var length = e.time.length;
  47551. e.xpx = [];
  47552. e.ypx = [];
  47553. var i = 0;
  47554. var x0 = 0;
  47555. var x1 = 0;
  47556. var y0 = 0;
  47557. var y1 = 0;
  47558. var newline;
  47559. for (; i < length; i++) {
  47560. x0 = ~~e.time[i];
  47561. y0 = e.value[i] / 2;
  47562. if (i === length - 1) {
  47563. x1 = x0 + space;
  47564. y1 = 0;
  47565. } else {
  47566. x1 = ~~e.time[i + 1];
  47567. y1 = e.value[i + 1] / 2;
  47568. }
  47569. newline = line(x0, y0, x1, y1);
  47570. for (var x = x0; x < x1; x++) {
  47571. e.xpx.push(x - minX);
  47572. e.ypx.push(newline(x));
  47573. }
  47574. }
  47575. e.xpx.push(x1 - minX);
  47576. e.ypx.push(y1);
  47577. }
  47578. function findLocation(flags, e, yvalue) {
  47579. var pos = 0;
  47580. var length = e.xpx.length;
  47581. var i = 0;
  47582. var y;
  47583. for (; i < length; i++) {
  47584. y = yvalue(e, i);
  47585. pos = Math.max(pos, y + flags[e.xpx[i]]);
  47586. }
  47587. for (i = 0; i < length; i++) {
  47588. y = yvalue(e, i);
  47589. flags[e.xpx[i]] = pos + y;
  47590. }
  47591. return pos;
  47592. }
  47593. return eventRiverLayout;
  47594. });define('echarts/chart/venn', [
  47595. 'require',
  47596. './base',
  47597. 'zrender/shape/Text',
  47598. 'zrender/shape/Circle',
  47599. 'zrender/shape/Path',
  47600. '../config',
  47601. '../util/ecData',
  47602. 'zrender/tool/util',
  47603. '../chart'
  47604. ], function (require) {
  47605. var ChartBase = require('./base');
  47606. var TextShape = require('zrender/shape/Text');
  47607. var CircleShape = require('zrender/shape/Circle');
  47608. var PathShape = require('zrender/shape/Path');
  47609. var ecConfig = require('../config');
  47610. ecConfig.venn = {
  47611. zlevel: 0,
  47612. z: 1,
  47613. calculable: false
  47614. };
  47615. var ecData = require('../util/ecData');
  47616. var zrUtil = require('zrender/tool/util');
  47617. function Venn(ecTheme, messageCenter, zr, option, myChart) {
  47618. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  47619. this.refresh(option);
  47620. }
  47621. Venn.prototype = {
  47622. type: ecConfig.CHART_TYPE_VENN,
  47623. _buildShape: function () {
  47624. this.selectedMap = {};
  47625. this._symbol = this.option.symbolList;
  47626. this._queryTarget;
  47627. this._dropBoxList = [];
  47628. this._vennDataCounter = 0;
  47629. var series = this.series;
  47630. var legend = this.component.legend;
  47631. for (var i = 0; i < series.length; i++) {
  47632. if (series[i].type === ecConfig.CHART_TYPE_VENN) {
  47633. series[i] = this.reformOption(series[i]);
  47634. var serieName = series[i].name || '';
  47635. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  47636. if (!this.selectedMap[serieName]) {
  47637. continue;
  47638. }
  47639. this._buildVenn(i);
  47640. }
  47641. }
  47642. this.addShapeList();
  47643. },
  47644. _buildVenn: function (seriesIndex) {
  47645. var r0;
  47646. var r1;
  47647. var serie = this.series[seriesIndex];
  47648. var data = serie.data;
  47649. if (data[0].value > data[1].value) {
  47650. r0 = this.zr.getHeight() / 3;
  47651. r1 = r0 * Math.sqrt(data[1].value) / Math.sqrt(data[0].value);
  47652. } else {
  47653. r1 = this.zr.getHeight() / 3;
  47654. r0 = r1 * Math.sqrt(data[0].value) / Math.sqrt(data[1].value);
  47655. }
  47656. var x0 = this.zr.getWidth() / 2 - r0;
  47657. var coincideLengthAnchor = (r0 + r1) / 2 * Math.sqrt(data[2].value) / Math.sqrt((data[0].value + data[1].value) / 2);
  47658. var coincideLength = r0 + r1;
  47659. if (data[2].value !== 0) {
  47660. coincideLength = this._getCoincideLength(data[0].value, data[1].value, data[2].value, r0, r1, coincideLengthAnchor, Math.abs(r0 - r1), r0 + r1);
  47661. }
  47662. var x1 = x0 + coincideLength;
  47663. var y = this.zr.getHeight() / 2;
  47664. this._buildItem(seriesIndex, 0, data[0], x0, y, r0);
  47665. this._buildItem(seriesIndex, 1, data[1], x1, y, r1);
  47666. if (data[2].value !== 0 && data[2].value !== data[0].value && data[2].value !== data[1].value) {
  47667. var xLeft = (r0 * r0 - r1 * r1) / (2 * coincideLength) + coincideLength / 2;
  47668. var xRight = coincideLength / 2 - (r0 * r0 - r1 * r1) / (2 * coincideLength);
  47669. var h = Math.sqrt(r0 * r0 - xLeft * xLeft);
  47670. var rightLargeArcFlag = 0;
  47671. var leftLargeArcFlag = 0;
  47672. if (data[0].value > data[1].value && x1 < x0 + xLeft) {
  47673. leftLargeArcFlag = 1;
  47674. }
  47675. if (data[0].value < data[1].value && x1 < x0 + xRight) {
  47676. rightLargeArcFlag = 1;
  47677. }
  47678. this._buildCoincideItem(seriesIndex, 2, data[2], x0 + xLeft, y - h, y + h, r0, r1, rightLargeArcFlag, leftLargeArcFlag);
  47679. }
  47680. },
  47681. _getCoincideLength: function (value0, value1, value2, r0, r1, coincideLengthAnchor, coincideLengthAnchorMin, coincideLengthAnchorMax) {
  47682. var x = (r0 * r0 - r1 * r1) / (2 * coincideLengthAnchor) + coincideLengthAnchor / 2;
  47683. var y = coincideLengthAnchor / 2 - (r0 * r0 - r1 * r1) / (2 * coincideLengthAnchor);
  47684. var alfa = Math.acos(x / r0);
  47685. var beta = Math.acos(y / r1);
  47686. var area0 = r0 * r0 * Math.PI;
  47687. var area2 = alfa * r0 * r0 - x * r0 * Math.sin(alfa) + beta * r1 * r1 - y * r1 * Math.sin(beta);
  47688. var scaleAnchor = area2 / area0;
  47689. var scale = value2 / value0;
  47690. var approximateValue = Math.abs(scaleAnchor / scale);
  47691. if (approximateValue > 0.999 && approximateValue < 1.001) {
  47692. return coincideLengthAnchor;
  47693. } else if (approximateValue <= 0.999) {
  47694. coincideLengthAnchorMax = coincideLengthAnchor;
  47695. coincideLengthAnchor = (coincideLengthAnchor + coincideLengthAnchorMin) / 2;
  47696. return this._getCoincideLength(value0, value1, value2, r0, r1, coincideLengthAnchor, coincideLengthAnchorMin, coincideLengthAnchorMax);
  47697. } else {
  47698. coincideLengthAnchorMin = coincideLengthAnchor;
  47699. coincideLengthAnchor = (coincideLengthAnchor + coincideLengthAnchorMax) / 2;
  47700. return this._getCoincideLength(value0, value1, value2, r0, r1, coincideLengthAnchor, coincideLengthAnchorMin, coincideLengthAnchorMax);
  47701. }
  47702. },
  47703. _buildItem: function (seriesIndex, dataIndex, dataItem, x, y, r) {
  47704. var series = this.series;
  47705. var serie = series[seriesIndex];
  47706. var circle = this.getCircle(seriesIndex, dataIndex, dataItem, x, y, r);
  47707. ecData.pack(circle, serie, seriesIndex, dataItem, dataIndex, dataItem.name);
  47708. this.shapeList.push(circle);
  47709. if (serie.itemStyle.normal.label.show) {
  47710. var label = this.getLabel(seriesIndex, dataIndex, dataItem, x, y, r);
  47711. ecData.pack(label, serie, seriesIndex, serie.data[dataIndex], dataIndex, serie.data[dataIndex].name);
  47712. this.shapeList.push(label);
  47713. }
  47714. },
  47715. _buildCoincideItem: function (seriesIndex, dataIndex, dataItem, x, y0, y1, r0, r1, rightLargeArcFlag, leftLargeArcFlag) {
  47716. var series = this.series;
  47717. var serie = series[seriesIndex];
  47718. var queryTarget = [
  47719. dataItem,
  47720. serie
  47721. ];
  47722. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  47723. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  47724. var normalColor = normal.color || this.zr.getColor(dataIndex);
  47725. var emphasisColor = emphasis.color || this.zr.getColor(dataIndex);
  47726. var path = 'M' + x + ',' + y0 + 'A' + r0 + ',' + r0 + ',0,' + rightLargeArcFlag + ',1,' + x + ',' + y1 + 'A' + r1 + ',' + r1 + ',0,' + leftLargeArcFlag + ',1,' + x + ',' + y0;
  47727. var style = {
  47728. color: normalColor,
  47729. path: path
  47730. };
  47731. var shape = {
  47732. zlevel: serie.zlevel,
  47733. z: serie.z,
  47734. style: style,
  47735. highlightStyle: {
  47736. color: emphasisColor,
  47737. lineWidth: emphasis.borderWidth,
  47738. strokeColor: emphasis.borderColor
  47739. }
  47740. };
  47741. shape = new PathShape(shape);
  47742. if (shape.buildPathArray) {
  47743. shape.style.pathArray = shape.buildPathArray(style.path);
  47744. }
  47745. ecData.pack(shape, series[seriesIndex], 0, dataItem, dataIndex, dataItem.name);
  47746. this.shapeList.push(shape);
  47747. },
  47748. getCircle: function (seriesIndex, dataIndex, dataItem, x, y, r) {
  47749. var serie = this.series[seriesIndex];
  47750. var queryTarget = [
  47751. dataItem,
  47752. serie
  47753. ];
  47754. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  47755. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  47756. var normalColor = normal.color || this.zr.getColor(dataIndex);
  47757. var emphasisColor = emphasis.color || this.zr.getColor(dataIndex);
  47758. var circle = {
  47759. zlevel: serie.zlevel,
  47760. z: serie.z,
  47761. clickable: true,
  47762. style: {
  47763. x: x,
  47764. y: y,
  47765. r: r,
  47766. brushType: 'fill',
  47767. opacity: 1,
  47768. color: normalColor
  47769. },
  47770. highlightStyle: {
  47771. color: emphasisColor,
  47772. lineWidth: emphasis.borderWidth,
  47773. strokeColor: emphasis.borderColor
  47774. }
  47775. };
  47776. if (this.deepQuery([
  47777. dataItem,
  47778. serie,
  47779. this.option
  47780. ], 'calculable')) {
  47781. this.setCalculable(circle);
  47782. circle.draggable = true;
  47783. }
  47784. return new CircleShape(circle);
  47785. },
  47786. getLabel: function (seriesIndex, dataIndex, dataItem, x, y, r) {
  47787. var serie = this.series[seriesIndex];
  47788. var itemStyle = serie.itemStyle;
  47789. var queryTarget = [
  47790. dataItem,
  47791. serie
  47792. ];
  47793. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  47794. var status = 'normal';
  47795. var labelControl = itemStyle[status].label;
  47796. var textStyle = labelControl.textStyle || {};
  47797. var text = this.getLabelText(dataIndex, dataItem, status);
  47798. var textFont = this.getFont(textStyle);
  47799. var textColor = normal.color || this.zr.getColor(dataIndex);
  47800. var textSize = textStyle.fontSize || 12;
  47801. var textShape = {
  47802. zlevel: serie.zlevel,
  47803. z: serie.z,
  47804. style: {
  47805. x: x,
  47806. y: y - r - textSize,
  47807. color: textStyle.color || textColor,
  47808. text: text,
  47809. textFont: textFont,
  47810. textAlign: 'center'
  47811. }
  47812. };
  47813. return new TextShape(textShape);
  47814. },
  47815. getLabelText: function (dataIndex, dataItem, status) {
  47816. var series = this.series;
  47817. var serie = series[0];
  47818. var formatter = this.deepQuery([
  47819. dataItem,
  47820. serie
  47821. ], 'itemStyle.' + status + '.label.formatter');
  47822. if (formatter) {
  47823. if (typeof formatter == 'function') {
  47824. return formatter(serie.name, dataItem.name, dataItem.value);
  47825. } else if (typeof formatter == 'string') {
  47826. formatter = formatter.replace('{a}', '{a0}').replace('{b}', '{b0}').replace('{c}', '{c0}');
  47827. formatter = formatter.replace('{a0}', serie.name).replace('{b0}', dataItem.name).replace('{c0}', dataItem.value);
  47828. return formatter;
  47829. }
  47830. } else {
  47831. return dataItem.name;
  47832. }
  47833. },
  47834. refresh: function (newOption) {
  47835. if (newOption) {
  47836. this.option = newOption;
  47837. this.series = newOption.series;
  47838. }
  47839. this._buildShape();
  47840. }
  47841. };
  47842. zrUtil.inherits(Venn, ChartBase);
  47843. require('../chart').define('venn', Venn);
  47844. return Venn;
  47845. });define('echarts/chart/treemap', [
  47846. 'require',
  47847. './base',
  47848. 'zrender/tool/area',
  47849. 'zrender/shape/Rectangle',
  47850. 'zrender/shape/Text',
  47851. 'zrender/shape/Line',
  47852. '../layout/TreeMap',
  47853. '../data/Tree',
  47854. '../config',
  47855. '../util/ecData',
  47856. 'zrender/config',
  47857. 'zrender/tool/event',
  47858. 'zrender/tool/util',
  47859. 'zrender/tool/color',
  47860. '../chart'
  47861. ], function (require) {
  47862. var ChartBase = require('./base');
  47863. var toolArea = require('zrender/tool/area');
  47864. var RectangleShape = require('zrender/shape/Rectangle');
  47865. var TextShape = require('zrender/shape/Text');
  47866. var LineShape = require('zrender/shape/Line');
  47867. var TreeMapLayout = require('../layout/TreeMap');
  47868. var Tree = require('../data/Tree');
  47869. var ecConfig = require('../config');
  47870. ecConfig.treemap = {
  47871. zlevel: 0,
  47872. z: 1,
  47873. calculable: false,
  47874. clickable: true,
  47875. center: [
  47876. '50%',
  47877. '50%'
  47878. ],
  47879. size: [
  47880. '80%',
  47881. '80%'
  47882. ],
  47883. root: '',
  47884. itemStyle: {
  47885. normal: {
  47886. label: {
  47887. show: true,
  47888. x: 5,
  47889. y: 12,
  47890. textStyle: {
  47891. align: 'left',
  47892. color: '#000',
  47893. fontFamily: 'Arial',
  47894. fontSize: 13,
  47895. fontStyle: 'normal',
  47896. fontWeight: 'normal'
  47897. }
  47898. },
  47899. breadcrumb: {
  47900. show: true,
  47901. textStyle: {}
  47902. },
  47903. borderWidth: 1,
  47904. borderColor: '#ccc',
  47905. childBorderWidth: 1,
  47906. childBorderColor: '#ccc'
  47907. },
  47908. emphasis: {}
  47909. }
  47910. };
  47911. var ecData = require('../util/ecData');
  47912. var zrConfig = require('zrender/config');
  47913. var zrEvent = require('zrender/tool/event');
  47914. var zrUtil = require('zrender/tool/util');
  47915. var zrColor = require('zrender/tool/color');
  47916. function Treemap(ecTheme, messageCenter, zr, option, myChart) {
  47917. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  47918. this.refresh(option);
  47919. var self = this;
  47920. self._onclick = function (params) {
  47921. return self.__onclick(params);
  47922. };
  47923. self.zr.on(zrConfig.EVENT.CLICK, self._onclick);
  47924. }
  47925. Treemap.prototype = {
  47926. type: ecConfig.CHART_TYPE_TREEMAP,
  47927. refresh: function (newOption) {
  47928. this.clear();
  47929. if (newOption) {
  47930. this.option = newOption;
  47931. this.series = this.option.series;
  47932. }
  47933. this._treesMap = {};
  47934. var series = this.series;
  47935. var legend = this.component.legend;
  47936. for (var i = 0; i < series.length; i++) {
  47937. if (series[i].type === ecConfig.CHART_TYPE_TREEMAP) {
  47938. series[i] = this.reformOption(series[i]);
  47939. var seriesName = series[i].name || '';
  47940. this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
  47941. if (!this.selectedMap[seriesName]) {
  47942. continue;
  47943. }
  47944. this._buildSeries(series[i], i);
  47945. }
  47946. }
  47947. },
  47948. _buildSeries: function (series, seriesIndex) {
  47949. var tree = Tree.fromOptionData(series.name, series.data);
  47950. this._treesMap[seriesIndex] = tree;
  47951. var treeRoot = series.root && tree.getNodeById(series.root) || tree.root;
  47952. this._buildTreemap(treeRoot, seriesIndex);
  47953. },
  47954. _buildTreemap: function (treeRoot, seriesIndex) {
  47955. var shapeList = this.shapeList;
  47956. for (var i = 0; i < shapeList.length;) {
  47957. var shape = shapeList[i];
  47958. if (ecData.get(shape, 'seriesIndex') === seriesIndex) {
  47959. this.zr.delShape(shapeList[i]);
  47960. shapeList.splice(i, 1);
  47961. } else {
  47962. i++;
  47963. }
  47964. }
  47965. var currentShapeLen = shapeList.length;
  47966. var series = this.series[seriesIndex];
  47967. var itemStyle = series.itemStyle;
  47968. var treemapWidth = this.parsePercent(series.size[0], this.zr.getWidth()) || 400;
  47969. var treemapHeight = this.parsePercent(series.size[1], this.zr.getHeight()) || 500;
  47970. var center = this.parseCenter(this.zr, series.center);
  47971. var treemapX = center[0] - treemapWidth * 0.5;
  47972. var treemapY = center[1] - treemapHeight * 0.5;
  47973. var treemapArea = treemapWidth * treemapHeight;
  47974. var sum = 0;
  47975. var areaArr = [];
  47976. var children = treeRoot.children;
  47977. for (var i = 0; i < children.length; i++) {
  47978. sum += children[i].data.value;
  47979. }
  47980. for (var j = 0; j < children.length; j++) {
  47981. areaArr.push(children[j].data.value * treemapArea / sum);
  47982. }
  47983. var treeMapLayout = new TreeMapLayout({
  47984. x: treemapX,
  47985. y: treemapY,
  47986. width: treemapWidth,
  47987. height: treemapHeight
  47988. });
  47989. var locationArr = treeMapLayout.run(areaArr);
  47990. for (var k = 0; k < locationArr.length; k++) {
  47991. var dataItem = children[k].data;
  47992. var rect = locationArr[k];
  47993. var queryTarget = [
  47994. dataItem.itemStyle,
  47995. itemStyle
  47996. ];
  47997. var itemStyleMerged = this.deepMerge(queryTarget);
  47998. if (!itemStyleMerged.normal.color) {
  47999. itemStyleMerged.normal.color = this.zr.getColor(k);
  48000. }
  48001. if (!itemStyleMerged.emphasis.color) {
  48002. itemStyleMerged.emphasis.color = itemStyleMerged.normal.color;
  48003. }
  48004. this._buildItem(dataItem, itemStyleMerged, rect, seriesIndex, k);
  48005. if (dataItem.children) {
  48006. this._buildChildrenTreemap(dataItem.children, itemStyleMerged, rect, seriesIndex);
  48007. }
  48008. }
  48009. if (this.query(series, 'itemStyle.normal.breadcrumb.show')) {
  48010. this._buildBreadcrumb(treeRoot, seriesIndex, treemapX, treemapY + treemapHeight);
  48011. }
  48012. for (var i = currentShapeLen; i < shapeList.length; i++) {
  48013. this.zr.addShape(shapeList[i]);
  48014. }
  48015. },
  48016. _buildItem: function (dataItem, itemStyle, rect, seriesIndex, dataIndex) {
  48017. var series = this.series;
  48018. var rectangle = this.getRectangle(dataItem, itemStyle, rect);
  48019. ecData.pack(rectangle, series[seriesIndex], seriesIndex, dataItem, dataIndex, dataItem.name);
  48020. this.shapeList.push(rectangle);
  48021. },
  48022. getRectangle: function (dataItem, itemStyle, rect) {
  48023. var emphasis = itemStyle.emphasis;
  48024. var normal = itemStyle.normal;
  48025. var textShape = this.getLabel(itemStyle, rect, dataItem.name, dataItem.value);
  48026. var hoverable = this.option.hoverable;
  48027. var rectangleShape = {
  48028. zlevel: this.getZlevelBase(),
  48029. z: this.getZBase(),
  48030. hoverable: hoverable,
  48031. clickable: true,
  48032. style: zrUtil.merge({
  48033. x: rect.x,
  48034. y: rect.y,
  48035. width: rect.width,
  48036. height: rect.height,
  48037. brushType: 'both',
  48038. color: normal.color,
  48039. lineWidth: normal.borderWidth,
  48040. strokeColor: normal.borderColor
  48041. }, textShape.style, true),
  48042. highlightStyle: zrUtil.merge({
  48043. color: emphasis.color,
  48044. lineWidth: emphasis.borderWidth,
  48045. strokeColor: emphasis.borderColor
  48046. }, textShape.highlightStyle, true)
  48047. };
  48048. return new RectangleShape(rectangleShape);
  48049. },
  48050. getLabel: function (itemStyle, rect, name, value) {
  48051. var normalTextStyle = itemStyle.normal.label.textStyle;
  48052. var queryTarget = [
  48053. itemStyle.emphasis.label.textStyle,
  48054. normalTextStyle
  48055. ];
  48056. var emphasisTextStyle = this.deepMerge(queryTarget);
  48057. var formatter = itemStyle.normal.label.formatter;
  48058. var text = this.getLabelText(name, value, formatter);
  48059. var textFont = this.getFont(normalTextStyle);
  48060. var textWidth = toolArea.getTextWidth(text, textFont);
  48061. var textHeight = toolArea.getTextHeight(text, textFont);
  48062. var emphasisFormatter = this.deepQuery([
  48063. itemStyle.emphasis,
  48064. itemStyle.normal
  48065. ], 'label.formatter');
  48066. var emphasisText = this.getLabelText(name, value, emphasisFormatter);
  48067. var emphasisTextFont = this.getFont(emphasisTextStyle);
  48068. var emphasisTextWidth = toolArea.getTextWidth(text, emphasisTextFont);
  48069. var emphasisTextHeight = toolArea.getTextHeight(text, emphasisTextFont);
  48070. if (!itemStyle.normal.label.show) {
  48071. text = '';
  48072. } else if (itemStyle.normal.label.x + textWidth > rect.width || itemStyle.normal.label.y + textHeight > rect.height) {
  48073. text = '';
  48074. }
  48075. if (!itemStyle.emphasis.label.show) {
  48076. emphasisText = '';
  48077. } else if (emphasisTextStyle.x + emphasisTextWidth > rect.width || emphasisTextStyle.y + emphasisTextHeight > rect.height) {
  48078. emphasisText = '';
  48079. }
  48080. var textShape = {
  48081. style: {
  48082. textX: rect.x + itemStyle.normal.label.x,
  48083. textY: rect.y + itemStyle.normal.label.y,
  48084. text: text,
  48085. textPosition: 'specific',
  48086. textColor: normalTextStyle.color,
  48087. textFont: textFont
  48088. },
  48089. highlightStyle: {
  48090. textX: rect.x + itemStyle.emphasis.label.x,
  48091. textY: rect.y + itemStyle.emphasis.label.y,
  48092. text: emphasisText,
  48093. textColor: emphasisTextStyle.color,
  48094. textPosition: 'specific'
  48095. }
  48096. };
  48097. return textShape;
  48098. },
  48099. getLabelText: function (name, value, formatter) {
  48100. if (formatter) {
  48101. if (typeof formatter === 'function') {
  48102. return formatter.call(this.myChart, name, value);
  48103. } else if (typeof formatter === 'string') {
  48104. formatter = formatter.replace('{b}', '{b0}').replace('{c}', '{c0}');
  48105. formatter = formatter.replace('{b0}', name).replace('{c0}', value);
  48106. return formatter;
  48107. }
  48108. } else {
  48109. return name;
  48110. }
  48111. },
  48112. _buildChildrenTreemap: function (data, itemStyle, rect, seriesIndex) {
  48113. var treemapArea = rect.width * rect.height;
  48114. var sum = 0;
  48115. var areaArr = [];
  48116. for (var i = 0; i < data.length; i++) {
  48117. sum += data[i].value;
  48118. }
  48119. for (var j = 0; j < data.length; j++) {
  48120. areaArr.push(data[j].value * treemapArea / sum);
  48121. }
  48122. var treeMapLayout = new TreeMapLayout({
  48123. x: rect.x,
  48124. y: rect.y,
  48125. width: rect.width,
  48126. height: rect.height
  48127. });
  48128. var locationArr = treeMapLayout.run(areaArr);
  48129. var lineWidth = itemStyle.normal.childBorderWidth;
  48130. var lineColor = itemStyle.normal.childBorderColor;
  48131. for (var k = 0; k < locationArr.length; k++) {
  48132. var item = locationArr[k];
  48133. var lines = [];
  48134. if (rect.y.toFixed(2) !== item.y.toFixed(2)) {
  48135. lines.push(this._getLine(item.x, item.y, item.x + item.width, item.y, lineWidth, lineColor));
  48136. }
  48137. if (rect.x.toFixed(2) !== item.x.toFixed(2)) {
  48138. lines.push(this._getLine(item.x, item.y, item.x, item.y + item.height, lineWidth, lineColor));
  48139. }
  48140. if ((rect.y + rect.height).toFixed(2) !== (item.y + item.height).toFixed(2)) {
  48141. lines.push(this._getLine(item.x, item.y + item.height, item.x + item.width, item.y + item.height, lineWidth, lineColor));
  48142. }
  48143. if ((rect.x + rect.width).toFixed(2) !== (item.x + item.width).toFixed(2)) {
  48144. lines.push(this._getLine(item.x + item.width, item.y, item.x + item.width, item.y + item.height, lineWidth, lineColor));
  48145. }
  48146. for (var l = 0; l < lines.length; l++) {
  48147. ecData.set(lines[l], 'seriesIndex', seriesIndex);
  48148. this.shapeList.push(lines[l]);
  48149. }
  48150. }
  48151. },
  48152. _getLine: function (xStart, yStart, xEnd, yEnd, lineWidth, lineColor) {
  48153. var lineShape = {
  48154. zlevel: this.getZlevelBase(),
  48155. z: this.getZBase(),
  48156. hoverable: false,
  48157. style: {
  48158. xStart: xStart,
  48159. yStart: yStart,
  48160. xEnd: xEnd,
  48161. yEnd: yEnd,
  48162. lineWidth: lineWidth,
  48163. strokeColor: lineColor
  48164. }
  48165. };
  48166. return new LineShape(lineShape);
  48167. },
  48168. _buildBreadcrumb: function (treeRoot, seriesIndex, x, y) {
  48169. var stack = [];
  48170. var current = treeRoot;
  48171. while (current) {
  48172. stack.unshift(current.data.name);
  48173. current = current.parent;
  48174. }
  48175. var series = this.series[seriesIndex];
  48176. var textStyle = this.query(series, 'itemStyle.normal.breadcrumb.textStyle') || {};
  48177. var textEmphasisStyle = this.query(series, 'itemStyle.emphasis.breadcrumb.textStyle') || {};
  48178. var commonStyle = {
  48179. y: y + 10,
  48180. textBaseline: 'top',
  48181. textAlign: 'left',
  48182. color: textStyle.color,
  48183. textFont: this.getFont(textStyle)
  48184. };
  48185. var commonHighlightStyle = {
  48186. brushType: 'fill',
  48187. color: textEmphasisStyle.color || zrColor.lift(textStyle.color, -0.3),
  48188. textFont: this.getFont(textEmphasisStyle)
  48189. };
  48190. for (var i = 0; i < stack.length; i++) {
  48191. var textShape = new TextShape({
  48192. zlevel: this.getZlevelBase(),
  48193. z: this.getZBase(),
  48194. style: zrUtil.merge({
  48195. x: x,
  48196. text: stack[i] + (stack.length - 1 - i ? ' > ' : '')
  48197. }, commonStyle),
  48198. clickable: true,
  48199. highlightStyle: commonHighlightStyle
  48200. });
  48201. ecData.set(textShape, 'seriesIndex', seriesIndex);
  48202. ecData.set(textShape, 'name', stack[i]);
  48203. x += textShape.getRect(textShape.style).width;
  48204. this.shapeList.push(textShape);
  48205. }
  48206. },
  48207. __onclick: function (params) {
  48208. var target = params.target;
  48209. if (target) {
  48210. var seriesIndex = ecData.get(target, 'seriesIndex');
  48211. var name = ecData.get(target, 'name');
  48212. var tree = this._treesMap[seriesIndex];
  48213. var root = tree.getNodeById(name);
  48214. if (root && root.children.length) {
  48215. this._buildTreemap(root, seriesIndex);
  48216. }
  48217. }
  48218. }
  48219. };
  48220. zrUtil.inherits(Treemap, ChartBase);
  48221. require('../chart').define('treemap', Treemap);
  48222. return Treemap;
  48223. });define('echarts/layout/TreeMap', ['require'], function (require) {
  48224. function TreeMapLayout(opts) {
  48225. var row = {
  48226. x: opts.x,
  48227. y: opts.y,
  48228. width: opts.width,
  48229. height: opts.height
  48230. };
  48231. this.x = opts.x;
  48232. this.y = opts.y;
  48233. this.width = opts.width;
  48234. this.height = opts.height;
  48235. }
  48236. TreeMapLayout.prototype.run = function (areas) {
  48237. var out = [];
  48238. this._squarify(areas, {
  48239. x: this.x,
  48240. y: this.y,
  48241. width: this.width,
  48242. height: this.height
  48243. }, out);
  48244. return out;
  48245. };
  48246. TreeMapLayout.prototype._squarify = function (areas, row, out) {
  48247. var layoutDirection = 'VERTICAL';
  48248. var width = row.width;
  48249. var height = row.height;
  48250. if (row.width < row.height) {
  48251. layoutDirection = 'HORIZONTAL';
  48252. width = row.height;
  48253. height = row.width;
  48254. }
  48255. var shapeArr = this._getShapeListInAbstractRow(areas, width, height);
  48256. for (var i = 0; i < shapeArr.length; i++) {
  48257. shapeArr[i].x = 0;
  48258. shapeArr[i].y = 0;
  48259. for (var j = 0; j < i; j++) {
  48260. shapeArr[i].y += shapeArr[j].height;
  48261. }
  48262. }
  48263. var nextRow = {};
  48264. if (layoutDirection == 'VERTICAL') {
  48265. for (var k = 0; k < shapeArr.length; k++) {
  48266. out.push({
  48267. x: shapeArr[k].x + row.x,
  48268. y: shapeArr[k].y + row.y,
  48269. width: shapeArr[k].width,
  48270. height: shapeArr[k].height
  48271. });
  48272. }
  48273. nextRow = {
  48274. x: shapeArr[0].width + row.x,
  48275. y: row.y,
  48276. width: row.width - shapeArr[0].width,
  48277. height: row.height
  48278. };
  48279. } else {
  48280. for (var l = 0; l < shapeArr.length; l++) {
  48281. out.push({
  48282. x: shapeArr[l].y + row.x,
  48283. y: shapeArr[l].x + row.y,
  48284. width: shapeArr[l].height,
  48285. height: shapeArr[l].width
  48286. });
  48287. }
  48288. nextRow = {
  48289. x: row.x,
  48290. y: row.y + shapeArr[0].width,
  48291. width: row.width,
  48292. height: row.height - shapeArr[0].width
  48293. };
  48294. }
  48295. var nextAreaArr = areas.slice(shapeArr.length);
  48296. if (nextAreaArr.length === 0) {
  48297. return;
  48298. } else {
  48299. this._squarify(nextAreaArr, nextRow, out);
  48300. }
  48301. };
  48302. TreeMapLayout.prototype._getShapeListInAbstractRow = function (areas, width, height) {
  48303. if (areas.length === 1) {
  48304. return [{
  48305. width: width,
  48306. height: height
  48307. }];
  48308. }
  48309. for (var count = 1; count < areas.length; count++) {
  48310. var shapeArr0 = this._placeFixedNumberRectangles(areas.slice(0, count), width, height);
  48311. var shapeArr1 = this._placeFixedNumberRectangles(areas.slice(0, count + 1), width, height);
  48312. if (this._isFirstBetter(shapeArr0, shapeArr1)) {
  48313. return shapeArr0;
  48314. }
  48315. }
  48316. };
  48317. TreeMapLayout.prototype._placeFixedNumberRectangles = function (areaSubArr, width, height) {
  48318. var count = areaSubArr.length;
  48319. var shapeArr = [];
  48320. var sum = 0;
  48321. for (var i = 0; i < areaSubArr.length; i++) {
  48322. sum += areaSubArr[i];
  48323. }
  48324. var cellWidth = sum / height;
  48325. for (var j = 0; j < count; j++) {
  48326. var cellHeight = height * areaSubArr[j] / sum;
  48327. shapeArr.push({
  48328. width: cellWidth,
  48329. height: cellHeight
  48330. });
  48331. }
  48332. return shapeArr;
  48333. };
  48334. TreeMapLayout.prototype._isFirstBetter = function (shapeArr0, shapeArr1) {
  48335. var ratio0 = shapeArr0[0].height / shapeArr0[0].width;
  48336. ratio0 = ratio0 > 1 ? 1 / ratio0 : ratio0;
  48337. var ratio1 = shapeArr1[0].height / shapeArr1[0].width;
  48338. ratio1 = ratio1 > 1 ? 1 / ratio1 : ratio1;
  48339. if (Math.abs(ratio0 - 1) <= Math.abs(ratio1 - 1)) {
  48340. return true;
  48341. }
  48342. return false;
  48343. };
  48344. return TreeMapLayout;
  48345. });define('echarts/data/Tree', [
  48346. 'require',
  48347. 'zrender/tool/util'
  48348. ], function (require) {
  48349. var zrUtil = require('zrender/tool/util');
  48350. function TreeNode(id, data) {
  48351. this.id = id;
  48352. this.depth = 0;
  48353. this.height = 0;
  48354. this.children = [];
  48355. this.parent = null;
  48356. this.data = data || null;
  48357. }
  48358. TreeNode.prototype.add = function (child) {
  48359. var children = this.children;
  48360. if (child.parent === this) {
  48361. return;
  48362. }
  48363. children.push(child);
  48364. child.parent = this;
  48365. };
  48366. TreeNode.prototype.remove = function (child) {
  48367. var children = this.children;
  48368. var idx = zrUtil.indexOf(children, child);
  48369. if (idx >= 0) {
  48370. children.splice(idx, 1);
  48371. child.parent = null;
  48372. }
  48373. };
  48374. TreeNode.prototype.traverse = function (cb, context) {
  48375. cb.call(context, this);
  48376. for (var i = 0; i < this.children.length; i++) {
  48377. this.children[i].traverse(cb, context);
  48378. }
  48379. };
  48380. TreeNode.prototype.updateDepthAndHeight = function (depth) {
  48381. var height = 0;
  48382. this.depth = depth;
  48383. for (var i = 0; i < this.children.length; i++) {
  48384. var child = this.children[i];
  48385. child.updateDepthAndHeight(depth + 1);
  48386. if (child.height > height) {
  48387. height = child.height;
  48388. }
  48389. }
  48390. this.height = height + 1;
  48391. };
  48392. TreeNode.prototype.getNodeById = function (id) {
  48393. if (this.id === id) {
  48394. return this;
  48395. }
  48396. for (var i = 0; i < this.children.length; i++) {
  48397. var res = this.children[i].getNodeById(id);
  48398. if (res) {
  48399. return res;
  48400. }
  48401. }
  48402. };
  48403. function Tree(id) {
  48404. this.root = new TreeNode(id);
  48405. }
  48406. Tree.prototype.traverse = function (cb, context) {
  48407. this.root.traverse(cb, context);
  48408. };
  48409. Tree.prototype.getSubTree = function (id) {
  48410. var root = this.getNodeById(id);
  48411. if (root) {
  48412. var tree = new Tree(root.id);
  48413. tree.root = root;
  48414. return tree;
  48415. }
  48416. };
  48417. Tree.prototype.getNodeById = function (id) {
  48418. return this.root.getNodeById(id);
  48419. };
  48420. Tree.fromOptionData = function (id, data) {
  48421. var tree = new Tree(id);
  48422. var rootNode = tree.root;
  48423. rootNode.data = {
  48424. name: id,
  48425. children: data
  48426. };
  48427. function buildHierarchy(dataNode, parentNode) {
  48428. var node = new TreeNode(dataNode.name, dataNode);
  48429. parentNode.add(node);
  48430. var children = dataNode.children;
  48431. if (children) {
  48432. for (var i = 0; i < children.length; i++) {
  48433. buildHierarchy(children[i], node);
  48434. }
  48435. }
  48436. }
  48437. for (var i = 0; i < data.length; i++) {
  48438. buildHierarchy(data[i], rootNode);
  48439. }
  48440. tree.root.updateDepthAndHeight(0);
  48441. return tree;
  48442. };
  48443. Tree.fromGraph = function (graph) {
  48444. function buildHierarchy(root) {
  48445. var graphNode = graph.getNodeById(root.id);
  48446. for (var i = 0; i < graphNode.outEdges.length; i++) {
  48447. var edge = graphNode.outEdges[i];
  48448. var childTreeNode = treeNodesMap[edge.node2.id];
  48449. root.children.push(childTreeNode);
  48450. buildHierarchy(childTreeNode);
  48451. }
  48452. }
  48453. var treeMap = {};
  48454. var treeNodesMap = {};
  48455. for (var i = 0; i < graph.nodes.length; i++) {
  48456. var node = graph.nodes[i];
  48457. var treeNode;
  48458. if (node.inDegree() === 0) {
  48459. treeMap[node.id] = new Tree(node.id);
  48460. treeNode = treeMap[node.id].root;
  48461. } else {
  48462. treeNode = new TreeNode(node.id);
  48463. }
  48464. treeNode.data = node.data;
  48465. treeNodesMap[node.id] = treeNode;
  48466. }
  48467. var treeList = [];
  48468. for (var id in treeMap) {
  48469. buildHierarchy(treeMap[id].root);
  48470. treeMap[id].root.updateDepthAndHeight(0);
  48471. treeList.push(treeMap[id]);
  48472. }
  48473. return treeList;
  48474. };
  48475. return Tree;
  48476. });define('echarts/chart/tree', [
  48477. 'require',
  48478. './base',
  48479. '../util/shape/Icon',
  48480. 'zrender/shape/Image',
  48481. 'zrender/shape/Line',
  48482. 'zrender/shape/BezierCurve',
  48483. '../layout/Tree',
  48484. '../data/Tree',
  48485. '../config',
  48486. '../util/ecData',
  48487. 'zrender/config',
  48488. 'zrender/tool/event',
  48489. 'zrender/tool/util',
  48490. '../chart'
  48491. ], function (require) {
  48492. var ChartBase = require('./base');
  48493. var GOLDEN_SECTION = 0.618;
  48494. var IconShape = require('../util/shape/Icon');
  48495. var ImageShape = require('zrender/shape/Image');
  48496. var LineShape = require('zrender/shape/Line');
  48497. var BezierCurveShape = require('zrender/shape/BezierCurve');
  48498. var TreeLayout = require('../layout/Tree');
  48499. var TreeData = require('../data/Tree');
  48500. var ecConfig = require('../config');
  48501. ecConfig.tree = {
  48502. zlevel: 1,
  48503. z: 2,
  48504. calculable: false,
  48505. clickable: true,
  48506. rootLocation: {},
  48507. orient: 'vertical',
  48508. symbol: 'circle',
  48509. symbolSize: 20,
  48510. nodePadding: 30,
  48511. layerPadding: 100,
  48512. itemStyle: {
  48513. normal: {
  48514. label: { show: true },
  48515. lineStyle: {
  48516. width: 1,
  48517. color: '#777',
  48518. type: 'curve'
  48519. }
  48520. },
  48521. emphasis: {}
  48522. }
  48523. };
  48524. var ecData = require('../util/ecData');
  48525. var zrConfig = require('zrender/config');
  48526. var zrEvent = require('zrender/tool/event');
  48527. var zrUtil = require('zrender/tool/util');
  48528. function Tree(ecTheme, messageCenter, zr, option, myChart) {
  48529. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  48530. this.refresh(option);
  48531. }
  48532. Tree.prototype = {
  48533. type: ecConfig.CHART_TYPE_TREE,
  48534. _buildShape: function (series, seriesIndex) {
  48535. var data = series.data[0];
  48536. this.tree = TreeData.fromOptionData(data.name, data.children);
  48537. this.tree.root.data = data;
  48538. this._setTreeShape(series);
  48539. this.tree.traverse(function (treeNode) {
  48540. this._buildItem(treeNode, series, seriesIndex);
  48541. if (treeNode.children.length > 0) {
  48542. this._buildLink(treeNode, series);
  48543. }
  48544. }, this);
  48545. var panable = series.roam === true || series.roam === 'move';
  48546. var zoomable = series.roam === true || series.roam === 'scale';
  48547. this.zr.modLayer(this.getZlevelBase(), {
  48548. panable: panable,
  48549. zoomable: zoomable
  48550. });
  48551. if (this.query('markPoint.effect.show') || this.query('markLine.effect.show')) {
  48552. this.zr.modLayer(ecConfig.EFFECT_ZLEVEL, {
  48553. panable: panable,
  48554. zoomable: zoomable
  48555. });
  48556. }
  48557. this.addShapeList();
  48558. },
  48559. _buildItem: function (treeNode, serie, seriesIndex) {
  48560. var queryTarget = [
  48561. treeNode.data,
  48562. serie
  48563. ];
  48564. var symbol = this.deepQuery(queryTarget, 'symbol');
  48565. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  48566. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  48567. var normalColor = normal.color || this.zr.getColor();
  48568. var emphasisColor = emphasis.color || this.zr.getColor();
  48569. var angle = -treeNode.layout.angle || 0;
  48570. if (treeNode.id === this.tree.root.id) {
  48571. angle = 0;
  48572. }
  48573. var textPosition = 'right';
  48574. if (Math.abs(angle) >= Math.PI / 2 && Math.abs(angle) < Math.PI * 3 / 2) {
  48575. angle += Math.PI;
  48576. textPosition = 'left';
  48577. }
  48578. var rotation = [
  48579. angle,
  48580. treeNode.layout.position[0],
  48581. treeNode.layout.position[1]
  48582. ];
  48583. var shape = new IconShape({
  48584. zlevel: this.getZlevelBase(),
  48585. z: this.getZBase() + 1,
  48586. rotation: rotation,
  48587. clickable: this.deepQuery(queryTarget, 'clickable'),
  48588. style: {
  48589. x: treeNode.layout.position[0] - treeNode.layout.width * 0.5,
  48590. y: treeNode.layout.position[1] - treeNode.layout.height * 0.5,
  48591. width: treeNode.layout.width,
  48592. height: treeNode.layout.height,
  48593. iconType: symbol,
  48594. color: normalColor,
  48595. brushType: 'both',
  48596. lineWidth: normal.borderWidth,
  48597. strokeColor: normal.borderColor
  48598. },
  48599. highlightStyle: {
  48600. color: emphasisColor,
  48601. lineWidth: emphasis.borderWidth,
  48602. strokeColor: emphasis.borderColor
  48603. }
  48604. });
  48605. if (shape.style.iconType.match('image')) {
  48606. shape.style.image = shape.style.iconType.replace(new RegExp('^image:\\/\\/'), '');
  48607. shape = new ImageShape({
  48608. rotation: rotation,
  48609. style: shape.style,
  48610. highlightStyle: shape.highlightStyle,
  48611. clickable: shape.clickable,
  48612. zlevel: this.getZlevelBase(),
  48613. z: this.getZBase()
  48614. });
  48615. }
  48616. if (this.deepQuery(queryTarget, 'itemStyle.normal.label.show')) {
  48617. shape.style.text = treeNode.data.label == null ? treeNode.id : treeNode.data.label;
  48618. shape.style.textPosition = this.deepQuery(queryTarget, 'itemStyle.normal.label.position');
  48619. if (serie.orient === 'radial' && shape.style.textPosition !== 'inside') {
  48620. shape.style.textPosition = textPosition;
  48621. }
  48622. shape.style.textColor = this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle.color');
  48623. shape.style.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.normal.label.textStyle') || {});
  48624. }
  48625. if (this.deepQuery(queryTarget, 'itemStyle.emphasis.label.show')) {
  48626. shape.highlightStyle.textPosition = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.position');
  48627. shape.highlightStyle.textColor = this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle.color');
  48628. shape.highlightStyle.textFont = this.getFont(this.deepQuery(queryTarget, 'itemStyle.emphasis.label.textStyle') || {});
  48629. }
  48630. ecData.pack(shape, serie, seriesIndex, treeNode.data, 0, treeNode.id);
  48631. this.shapeList.push(shape);
  48632. },
  48633. _buildLink: function (parentNode, serie) {
  48634. var lineStyle = serie.itemStyle.normal.lineStyle;
  48635. if (lineStyle.type === 'broken') {
  48636. this._buildBrokenLine(parentNode, lineStyle, serie);
  48637. return;
  48638. }
  48639. for (var i = 0; i < parentNode.children.length; i++) {
  48640. var xStart = parentNode.layout.position[0];
  48641. var yStart = parentNode.layout.position[1];
  48642. var xEnd = parentNode.children[i].layout.position[0];
  48643. var yEnd = parentNode.children[i].layout.position[1];
  48644. switch (lineStyle.type) {
  48645. case 'curve':
  48646. this._buildBezierCurve(parentNode, parentNode.children[i], lineStyle, serie);
  48647. break;
  48648. case 'broken':
  48649. break;
  48650. default:
  48651. var shape = this._getLine(xStart, yStart, xEnd, yEnd, lineStyle);
  48652. this.shapeList.push(shape);
  48653. }
  48654. }
  48655. },
  48656. _buildBrokenLine: function (parentNode, lineStyle, serie) {
  48657. var solidLineStyle = zrUtil.clone(lineStyle);
  48658. solidLineStyle.type = 'solid';
  48659. var shapes = [];
  48660. var xStart = parentNode.layout.position[0];
  48661. var yStart = parentNode.layout.position[1];
  48662. var orient = serie.orient;
  48663. var yEnd = parentNode.children[0].layout.position[1];
  48664. var xMiddle = xStart;
  48665. var yMiddle = yStart + (yEnd - yStart) * (1 - GOLDEN_SECTION);
  48666. var xMiddleStart = parentNode.children[0].layout.position[0];
  48667. var yMiddleStart = yMiddle;
  48668. var xMiddleEnd = parentNode.children[parentNode.children.length - 1].layout.position[0];
  48669. var yMiddleEnd = yMiddle;
  48670. if (orient === 'horizontal') {
  48671. var xEnd = parentNode.children[0].layout.position[0];
  48672. xMiddle = xStart + (xEnd - xStart) * (1 - GOLDEN_SECTION);
  48673. yMiddle = yStart;
  48674. xMiddleStart = xMiddle;
  48675. yMiddleStart = parentNode.children[0].layout.position[1];
  48676. xMiddleEnd = xMiddle;
  48677. yMiddleEnd = parentNode.children[parentNode.children.length - 1].layout.position[1];
  48678. }
  48679. shapes.push(this._getLine(xStart, yStart, xMiddle, yMiddle, solidLineStyle));
  48680. shapes.push(this._getLine(xMiddleStart, yMiddleStart, xMiddleEnd, yMiddleEnd, solidLineStyle));
  48681. for (var i = 0; i < parentNode.children.length; i++) {
  48682. xEnd = parentNode.children[i].layout.position[0];
  48683. yEnd = parentNode.children[i].layout.position[1];
  48684. if (orient === 'horizontal') {
  48685. yMiddleStart = yEnd;
  48686. } else {
  48687. xMiddleStart = xEnd;
  48688. }
  48689. shapes.push(this._getLine(xMiddleStart, yMiddleStart, xEnd, yEnd, solidLineStyle));
  48690. }
  48691. this.shapeList = this.shapeList.concat(shapes);
  48692. },
  48693. _getLine: function (xStart, yStart, xEnd, yEnd, lineStyle) {
  48694. if (xStart === xEnd) {
  48695. xStart = xEnd = this.subPixelOptimize(xStart, lineStyle.width);
  48696. }
  48697. if (yStart === yEnd) {
  48698. yStart = yEnd = this.subPixelOptimize(yStart, lineStyle.width);
  48699. }
  48700. return new LineShape({
  48701. zlevel: this.getZlevelBase(),
  48702. hoverable: false,
  48703. style: zrUtil.merge({
  48704. xStart: xStart,
  48705. yStart: yStart,
  48706. xEnd: xEnd,
  48707. yEnd: yEnd,
  48708. lineType: lineStyle.type,
  48709. strokeColor: lineStyle.color,
  48710. lineWidth: lineStyle.width
  48711. }, lineStyle, true)
  48712. });
  48713. },
  48714. _buildBezierCurve: function (parentNode, treeNode, lineStyle, serie) {
  48715. var offsetRatio = GOLDEN_SECTION;
  48716. var orient = serie.orient;
  48717. var xStart = parentNode.layout.position[0];
  48718. var yStart = parentNode.layout.position[1];
  48719. var xEnd = treeNode.layout.position[0];
  48720. var yEnd = treeNode.layout.position[1];
  48721. var cpX1 = xStart;
  48722. var cpY1 = (yEnd - yStart) * offsetRatio + yStart;
  48723. var cpX2 = xEnd;
  48724. var cpY2 = (yEnd - yStart) * (1 - offsetRatio) + yStart;
  48725. if (orient === 'horizontal') {
  48726. cpX1 = (xEnd - xStart) * offsetRatio + xStart;
  48727. cpY1 = yStart;
  48728. cpX2 = (xEnd - xStart) * (1 - offsetRatio) + xStart;
  48729. cpY2 = yEnd;
  48730. } else if (orient === 'radial') {
  48731. if (parentNode.id === this.tree.root.id) {
  48732. cpX1 = (xEnd - xStart) * offsetRatio + xStart;
  48733. cpY1 = (yEnd - yStart) * offsetRatio + yStart;
  48734. cpX2 = (xEnd - xStart) * (1 - offsetRatio) + xStart;
  48735. cpY2 = (yEnd - yStart) * (1 - offsetRatio) + yStart;
  48736. } else {
  48737. var xStartOrigin = parentNode.layout.originPosition[0];
  48738. var yStartOrigin = parentNode.layout.originPosition[1];
  48739. var xEndOrigin = treeNode.layout.originPosition[0];
  48740. var yEndOrigin = treeNode.layout.originPosition[1];
  48741. var rootX = this.tree.root.layout.position[0];
  48742. var rootY = this.tree.root.layout.position[1];
  48743. cpX1 = xStartOrigin;
  48744. cpY1 = (yEndOrigin - yStartOrigin) * offsetRatio + yStartOrigin;
  48745. cpX2 = xEndOrigin;
  48746. cpY2 = (yEndOrigin - yStartOrigin) * (1 - offsetRatio) + yStartOrigin;
  48747. var rad = (cpX1 - this.minX) / this.width * Math.PI * 2;
  48748. cpX1 = cpY1 * Math.cos(rad) + rootX;
  48749. cpY1 = cpY1 * Math.sin(rad) + rootY;
  48750. rad = (cpX2 - this.minX) / this.width * Math.PI * 2;
  48751. cpX2 = cpY2 * Math.cos(rad) + rootX;
  48752. cpY2 = cpY2 * Math.sin(rad) + rootY;
  48753. }
  48754. }
  48755. var shape = new BezierCurveShape({
  48756. zlevel: this.getZlevelBase(),
  48757. hoverable: false,
  48758. style: zrUtil.merge({
  48759. xStart: xStart,
  48760. yStart: yStart,
  48761. cpX1: cpX1,
  48762. cpY1: cpY1,
  48763. cpX2: cpX2,
  48764. cpY2: cpY2,
  48765. xEnd: xEnd,
  48766. yEnd: yEnd,
  48767. strokeColor: lineStyle.color,
  48768. lineWidth: lineStyle.width
  48769. }, lineStyle, true)
  48770. });
  48771. this.shapeList.push(shape);
  48772. },
  48773. _setTreeShape: function (serie) {
  48774. var treeLayout = new TreeLayout({
  48775. nodePadding: serie.nodePadding,
  48776. layerPadding: serie.layerPadding
  48777. });
  48778. this.tree.traverse(function (treeNode) {
  48779. var queryTarget = [
  48780. treeNode.data,
  48781. serie
  48782. ];
  48783. var symbolSize = this.deepQuery(queryTarget, 'symbolSize');
  48784. if (typeof symbolSize === 'number') {
  48785. symbolSize = [
  48786. symbolSize,
  48787. symbolSize
  48788. ];
  48789. }
  48790. treeNode.layout = {
  48791. width: symbolSize[0],
  48792. height: symbolSize[1]
  48793. };
  48794. }, this);
  48795. treeLayout.run(this.tree);
  48796. var orient = serie.orient;
  48797. var rootX = serie.rootLocation.x;
  48798. var rootY = serie.rootLocation.y;
  48799. var zrWidth = this.zr.getWidth();
  48800. var zrHeight = this.zr.getHeight();
  48801. if (rootX === 'center') {
  48802. rootX = zrWidth * 0.5;
  48803. } else {
  48804. rootX = this.parsePercent(rootX, zrWidth);
  48805. }
  48806. if (rootY === 'center') {
  48807. rootY = zrHeight * 0.5;
  48808. } else {
  48809. rootY = this.parsePercent(rootY, zrHeight);
  48810. }
  48811. rootY = this.parsePercent(rootY, zrHeight);
  48812. if (orient === 'horizontal') {
  48813. rootX = isNaN(rootX) ? 10 : rootX;
  48814. rootY = isNaN(rootY) ? zrHeight * 0.5 : rootY;
  48815. }
  48816. if (orient === 'radial') {
  48817. rootX = isNaN(rootX) ? zrWidth * 0.5 : rootX;
  48818. rootY = isNaN(rootY) ? zrHeight * 0.5 : rootY;
  48819. } else {
  48820. rootX = isNaN(rootX) ? zrWidth * 0.5 : rootX;
  48821. rootY = isNaN(rootY) ? 10 : rootY;
  48822. }
  48823. var originRootX = this.tree.root.layout.position[0];
  48824. if (orient === 'radial') {
  48825. var minX = Infinity;
  48826. var maxX = 0;
  48827. var maxWidth = 0;
  48828. this.tree.traverse(function (treeNode) {
  48829. maxX = Math.max(maxX, treeNode.layout.position[0]);
  48830. minX = Math.min(minX, treeNode.layout.position[0]);
  48831. maxWidth = Math.max(maxWidth, treeNode.layout.width);
  48832. });
  48833. this.width = maxX - minX + 2 * maxWidth;
  48834. this.minX = minX;
  48835. }
  48836. this.tree.traverse(function (treeNode) {
  48837. var x;
  48838. var y;
  48839. if (orient === 'vertical' && serie.direction === 'inverse') {
  48840. x = treeNode.layout.position[0] - originRootX + rootX;
  48841. y = rootY - treeNode.layout.position[1];
  48842. } else if (orient === 'vertical') {
  48843. x = treeNode.layout.position[0] - originRootX + rootX;
  48844. y = treeNode.layout.position[1] + rootY;
  48845. } else if (orient === 'horizontal' && serie.direction === 'inverse') {
  48846. y = treeNode.layout.position[0] - originRootX + rootY;
  48847. x = rootX - treeNode.layout.position[1];
  48848. } else if (orient === 'horizontal') {
  48849. y = treeNode.layout.position[0] - originRootX + rootY;
  48850. x = treeNode.layout.position[1] + rootX;
  48851. } else {
  48852. x = treeNode.layout.position[0];
  48853. y = treeNode.layout.position[1];
  48854. treeNode.layout.originPosition = [
  48855. x,
  48856. y
  48857. ];
  48858. var r = y;
  48859. var angle = (x - minX) / this.width * Math.PI * 2;
  48860. x = r * Math.cos(angle) + rootX;
  48861. y = r * Math.sin(angle) + rootY;
  48862. treeNode.layout.angle = angle;
  48863. }
  48864. treeNode.layout.position[0] = x;
  48865. treeNode.layout.position[1] = y;
  48866. }, this);
  48867. },
  48868. refresh: function (newOption) {
  48869. this.clear();
  48870. if (newOption) {
  48871. this.option = newOption;
  48872. this.series = this.option.series;
  48873. }
  48874. var series = this.series;
  48875. var legend = this.component.legend;
  48876. for (var i = 0; i < series.length; i++) {
  48877. if (series[i].type === ecConfig.CHART_TYPE_TREE) {
  48878. series[i] = this.reformOption(series[i]);
  48879. var seriesName = series[i].name || '';
  48880. this.selectedMap[seriesName] = legend ? legend.isSelected(seriesName) : true;
  48881. if (!this.selectedMap[seriesName]) {
  48882. continue;
  48883. }
  48884. this._buildSeries(series[i], i);
  48885. }
  48886. }
  48887. },
  48888. _buildSeries: function (series, seriesIndex) {
  48889. this._buildShape(series, seriesIndex);
  48890. }
  48891. };
  48892. zrUtil.inherits(Tree, ChartBase);
  48893. require('../chart').define('tree', Tree);
  48894. return Tree;
  48895. });define('echarts/layout/Tree', [
  48896. 'require',
  48897. 'zrender/tool/vector'
  48898. ], function (require) {
  48899. var vec2 = require('zrender/tool/vector');
  48900. function TreeLayout(opts) {
  48901. opts = opts || {};
  48902. this.nodePadding = opts.nodePadding || 30;
  48903. this.layerPadding = opts.layerPadding || 100;
  48904. this._layerOffsets = [];
  48905. this._layers = [];
  48906. }
  48907. TreeLayout.prototype.run = function (tree) {
  48908. this._layerOffsets.length = 0;
  48909. for (var i = 0; i < tree.root.height + 1; i++) {
  48910. this._layerOffsets[i] = 0;
  48911. this._layers[i] = [];
  48912. }
  48913. this._updateNodeXPosition(tree.root);
  48914. var root = tree.root;
  48915. this._updateNodeYPosition(root, 0, root.layout.height);
  48916. };
  48917. TreeLayout.prototype._updateNodeXPosition = function (node) {
  48918. var minX = Infinity;
  48919. var maxX = -Infinity;
  48920. node.layout.position = node.layout.position || vec2.create();
  48921. for (var i = 0; i < node.children.length; i++) {
  48922. var child = node.children[i];
  48923. this._updateNodeXPosition(child);
  48924. var x = child.layout.position[0];
  48925. if (x < minX) {
  48926. minX = x;
  48927. }
  48928. if (x > maxX) {
  48929. maxX = x;
  48930. }
  48931. }
  48932. if (node.children.length > 0) {
  48933. node.layout.position[0] = (minX + maxX) / 2;
  48934. } else {
  48935. node.layout.position[0] = 0;
  48936. }
  48937. var off = this._layerOffsets[node.depth] || 0;
  48938. if (off > node.layout.position[0]) {
  48939. var shift = off - node.layout.position[0];
  48940. this._shiftSubtree(node, shift);
  48941. for (var i = node.depth + 1; i < node.height + node.depth; i++) {
  48942. this._layerOffsets[i] += shift;
  48943. }
  48944. }
  48945. this._layerOffsets[node.depth] = node.layout.position[0] + node.layout.width + this.nodePadding;
  48946. this._layers[node.depth].push(node);
  48947. };
  48948. TreeLayout.prototype._shiftSubtree = function (root, offset) {
  48949. root.layout.position[0] += offset;
  48950. for (var i = 0; i < root.children.length; i++) {
  48951. this._shiftSubtree(root.children[i], offset);
  48952. }
  48953. };
  48954. TreeLayout.prototype._updateNodeYPosition = function (node, y, prevLayerHeight) {
  48955. node.layout.position[1] = y;
  48956. var layerHeight = 0;
  48957. for (var i = 0; i < node.children.length; i++) {
  48958. layerHeight = Math.max(node.children[i].layout.height, layerHeight);
  48959. }
  48960. var layerPadding = this.layerPadding;
  48961. if (typeof layerPadding === 'function') {
  48962. layerPadding = layerPadding(node.depth);
  48963. }
  48964. for (var i = 0; i < node.children.length; i++) {
  48965. this._updateNodeYPosition(node.children[i], y + layerPadding + prevLayerHeight, layerHeight);
  48966. }
  48967. };
  48968. return TreeLayout;
  48969. });define('echarts/chart/wordCloud', [
  48970. 'require',
  48971. './base',
  48972. 'zrender/shape/Text',
  48973. '../layout/WordCloud',
  48974. '../component/grid',
  48975. '../component/dataRange',
  48976. '../config',
  48977. '../util/ecData',
  48978. 'zrender/tool/util',
  48979. 'zrender/tool/color',
  48980. '../chart'
  48981. ], function (require) {
  48982. var ChartBase = require('./base');
  48983. var TextShape = require('zrender/shape/Text');
  48984. var CloudLayout = require('../layout/WordCloud');
  48985. require('../component/grid');
  48986. require('../component/dataRange');
  48987. var ecConfig = require('../config');
  48988. var ecData = require('../util/ecData');
  48989. var zrUtil = require('zrender/tool/util');
  48990. var zrColor = require('zrender/tool/color');
  48991. ecConfig.wordCloud = {
  48992. zlevel: 0,
  48993. z: 2,
  48994. clickable: true,
  48995. center: [
  48996. '50%',
  48997. '50%'
  48998. ],
  48999. size: [
  49000. '40%',
  49001. '40%'
  49002. ],
  49003. textRotation: [
  49004. 0,
  49005. 90
  49006. ],
  49007. textPadding: 0,
  49008. autoSize: {
  49009. enable: true,
  49010. minSize: 12
  49011. },
  49012. itemStyle: {
  49013. normal: {
  49014. textStyle: {
  49015. fontSize: function (data) {
  49016. return data.value;
  49017. }
  49018. }
  49019. }
  49020. }
  49021. };
  49022. function Cloud(ecTheme, messageCenter, zr, option, myChart) {
  49023. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  49024. this.refresh(option);
  49025. }
  49026. Cloud.prototype = {
  49027. type: ecConfig.CHART_TYPE_WORDCLOUD,
  49028. refresh: function (newOption) {
  49029. if (newOption) {
  49030. this.option = newOption;
  49031. this.series = newOption.series;
  49032. }
  49033. this._init();
  49034. },
  49035. _init: function () {
  49036. var series = this.series;
  49037. this.backupShapeList();
  49038. var legend = this.component.legend;
  49039. for (var i = 0; i < series.length; i++) {
  49040. if (series[i].type === ecConfig.CHART_TYPE_WORDCLOUD) {
  49041. series[i] = this.reformOption(series[i]);
  49042. var serieName = series[i].name || '';
  49043. this.selectedMap[serieName] = legend ? legend.isSelected(serieName) : true;
  49044. if (!this.selectedMap[serieName]) {
  49045. continue;
  49046. }
  49047. this.buildMark(i);
  49048. this._initSerie(series[i]);
  49049. }
  49050. }
  49051. },
  49052. _initSerie: function (serie) {
  49053. var textStyle = serie.itemStyle.normal.textStyle;
  49054. var size = [
  49055. this.parsePercent(serie.size[0], this.zr.getWidth()) || 200,
  49056. this.parsePercent(serie.size[1], this.zr.getHeight()) || 200
  49057. ];
  49058. var center = this.parseCenter(this.zr, serie.center);
  49059. var layoutConfig = {
  49060. size: size,
  49061. wordletype: { autoSizeCal: serie.autoSize },
  49062. center: center,
  49063. rotate: serie.textRotation,
  49064. padding: serie.textPadding,
  49065. font: textStyle.fontFamily,
  49066. fontSize: textStyle.fontSize,
  49067. fontWeight: textStyle.fontWeight,
  49068. fontStyle: textStyle.fontStyle,
  49069. text: function (d) {
  49070. return d.name;
  49071. },
  49072. data: serie.data
  49073. };
  49074. var clouds = new CloudLayout(layoutConfig);
  49075. var self = this;
  49076. clouds.end(function (d) {
  49077. self._buildShapes(d);
  49078. });
  49079. clouds.start();
  49080. },
  49081. _buildShapes: function (data) {
  49082. var len = data.length;
  49083. for (var i = 0; i < len; i++) {
  49084. this._buildTextShape(data[i], 0, i);
  49085. }
  49086. this.addShapeList();
  49087. },
  49088. _buildTextShape: function (oneText, seriesIndex, dataIndex) {
  49089. var series = this.series;
  49090. var serie = series[seriesIndex];
  49091. var serieName = serie.name || '';
  49092. var data = serie.data[dataIndex];
  49093. var queryTarget = [
  49094. data,
  49095. serie
  49096. ];
  49097. var legend = this.component.legend;
  49098. var defaultColor = legend ? legend.getColor(serieName) : this.zr.getColor(seriesIndex);
  49099. var normal = this.deepMerge(queryTarget, 'itemStyle.normal') || {};
  49100. var emphasis = this.deepMerge(queryTarget, 'itemStyle.emphasis') || {};
  49101. var normalColor = this.getItemStyleColor(normal.color, seriesIndex, dataIndex, data) || defaultColor;
  49102. var emphasisColor = this.getItemStyleColor(emphasis.color, seriesIndex, dataIndex, data) || (typeof normalColor === 'string' ? zrColor.lift(normalColor, -0.2) : normalColor);
  49103. var textShape = new TextShape({
  49104. zlevel: serie.zlevel,
  49105. z: serie.z,
  49106. hoverable: true,
  49107. clickable: this.deepQuery(queryTarget, 'clickable'),
  49108. style: {
  49109. x: 0,
  49110. y: 0,
  49111. text: oneText.text,
  49112. color: normalColor,
  49113. textFont: [
  49114. oneText.style,
  49115. oneText.weight,
  49116. oneText.size + 'px',
  49117. oneText.font
  49118. ].join(' '),
  49119. textBaseline: 'alphabetic',
  49120. textAlign: 'center'
  49121. },
  49122. highlightStyle: {
  49123. brushType: emphasis.borderWidth ? 'both' : 'fill',
  49124. color: emphasisColor,
  49125. lineWidth: emphasis.borderWidth || 0,
  49126. strokeColor: emphasis.borderColor
  49127. },
  49128. position: [
  49129. oneText.x,
  49130. oneText.y
  49131. ],
  49132. rotation: [
  49133. -oneText.rotate / 180 * Math.PI,
  49134. 0,
  49135. 0
  49136. ]
  49137. });
  49138. ecData.pack(textShape, serie, seriesIndex, data, dataIndex, data.name);
  49139. this.shapeList.push(textShape);
  49140. }
  49141. };
  49142. zrUtil.inherits(Cloud, ChartBase);
  49143. require('../chart').define('wordCloud', Cloud);
  49144. return Cloud;
  49145. });define('echarts/layout/WordCloud', [
  49146. 'require',
  49147. '../layout/WordCloudRectZero',
  49148. 'zrender/tool/util'
  49149. ], function (require) {
  49150. var ZeroArray = require('../layout/WordCloudRectZero');
  49151. var zrUtil = require('zrender/tool/util');
  49152. function CloudLayout(option) {
  49153. this._init(option);
  49154. }
  49155. CloudLayout.prototype = {
  49156. start: function () {
  49157. var board = null;
  49158. var maxWit = 0;
  49159. var maxHit = 0;
  49160. var maxArea = 0;
  49161. var i = -1;
  49162. var tags = [];
  49163. var maxBounds = null;
  49164. var data = this.wordsdata;
  49165. var dfop = this.defaultOption;
  49166. var wordletype = dfop.wordletype;
  49167. var size = dfop.size;
  49168. var that = this;
  49169. var zeroArrayObj = new ZeroArray({
  49170. type: wordletype.type,
  49171. width: size[0],
  49172. height: size[1]
  49173. });
  49174. zeroArrayObj.calculate(function (options) {
  49175. board = options.initarr;
  49176. maxWit = options.maxWit;
  49177. maxHit = options.maxHit;
  49178. maxArea = options.area;
  49179. maxBounds = options.imgboard;
  49180. startStep();
  49181. }, this);
  49182. return this;
  49183. function startStep() {
  49184. that.totalArea = maxArea;
  49185. if (wordletype.autoSizeCal.enable) {
  49186. that._autoCalTextSize(data, maxArea, maxWit, maxHit, wordletype.autoSizeCal.minSize);
  49187. }
  49188. if (dfop.timer) {
  49189. clearInterval(dfop.timer);
  49190. }
  49191. dfop.timer = setInterval(step, 0);
  49192. step();
  49193. }
  49194. function step() {
  49195. var start = +new Date();
  49196. var n = data.length;
  49197. var d;
  49198. while (+new Date() - start < dfop.timeInterval && ++i < n && dfop.timer) {
  49199. d = data[i];
  49200. d.x = size[0] >> 1;
  49201. d.y = size[1] >> 1;
  49202. that._cloudSprite(d, data, i);
  49203. if (d.hasText && that._place(board, d, maxBounds)) {
  49204. tags.push(d);
  49205. d.x -= size[0] >> 1;
  49206. d.y -= size[1] >> 1;
  49207. }
  49208. }
  49209. if (i >= n) {
  49210. that.stop();
  49211. that._fixTagPosition(tags);
  49212. dfop.endcallback(tags);
  49213. }
  49214. }
  49215. },
  49216. _fixTagPosition: function (tags) {
  49217. var center = this.defaultOption.center;
  49218. for (var i = 0, len = tags.length; i < len; i++) {
  49219. tags[i].x += center[0];
  49220. tags[i].y += center[1];
  49221. }
  49222. },
  49223. stop: function () {
  49224. if (this.defaultOption.timer) {
  49225. clearInterval(this.defaultOption.timer);
  49226. this.defaultOption.timer = null;
  49227. }
  49228. return this;
  49229. },
  49230. end: function (v) {
  49231. if (v) {
  49232. this.defaultOption.endcallback = v;
  49233. }
  49234. return this;
  49235. },
  49236. _init: function (option) {
  49237. this.defaultOption = {};
  49238. this._initProperty(option);
  49239. this._initMethod(option);
  49240. this._initCanvas();
  49241. this._initData(option.data);
  49242. },
  49243. _initData: function (datas) {
  49244. var that = this;
  49245. var thatop = that.defaultOption;
  49246. this.wordsdata = datas.map(function (d, i) {
  49247. d.text = thatop.text.call(that, d, i);
  49248. d.font = thatop.font.call(that, d, i);
  49249. d.style = thatop.fontStyle.call(that, d, i);
  49250. d.weight = thatop.fontWeight.call(that, d, i);
  49251. d.rotate = thatop.rotate.call(that, d, i);
  49252. d.size = ~~thatop.fontSize.call(that, d, i);
  49253. d.padding = thatop.padding.call(that, d, i);
  49254. return d;
  49255. }).sort(function (a, b) {
  49256. return b.value - a.value;
  49257. });
  49258. },
  49259. _initMethod: function (option) {
  49260. var dfop = this.defaultOption;
  49261. dfop.text = option.text ? functor(option.text) : cloudText;
  49262. dfop.font = option.font ? functor(option.font) : cloudFont;
  49263. dfop.fontSize = option.fontSize ? functor(option.fontSize) : cloudFontSize;
  49264. dfop.fontStyle = option.fontStyle ? functor(option.fontStyle) : cloudFontNormal;
  49265. dfop.fontWeight = option.fontWeight ? functor(option.fontWeight) : cloudFontNormal;
  49266. dfop.rotate = option.rotate ? newCloudRotate(option.rotate) : cloudRotate;
  49267. dfop.padding = option.padding ? functor(option.padding) : cloudPadding;
  49268. dfop.center = option.center;
  49269. dfop.spiral = archimedeanSpiral;
  49270. dfop.endcallback = function () {
  49271. };
  49272. dfop.rectangularSpiral = rectangularSpiral;
  49273. dfop.archimedeanSpiral = archimedeanSpiral;
  49274. function cloudText(d) {
  49275. return d.name;
  49276. }
  49277. function cloudFont() {
  49278. return 'sans-serif';
  49279. }
  49280. function cloudFontNormal() {
  49281. return 'normal';
  49282. }
  49283. function cloudFontSize(d) {
  49284. return d.value;
  49285. }
  49286. function cloudRotate() {
  49287. return 0;
  49288. }
  49289. function newCloudRotate(rotate) {
  49290. return function () {
  49291. return rotate[Math.round(Math.random() * (rotate.length - 1))];
  49292. };
  49293. }
  49294. function cloudPadding() {
  49295. return 0;
  49296. }
  49297. function archimedeanSpiral(size) {
  49298. var e = size[0] / size[1];
  49299. return function (t) {
  49300. return [
  49301. e * (t *= 0.1) * Math.cos(t),
  49302. t * Math.sin(t)
  49303. ];
  49304. };
  49305. }
  49306. function rectangularSpiral(size) {
  49307. var dy = 4;
  49308. var dx = dy * size[0] / size[1];
  49309. var x = 0;
  49310. var y = 0;
  49311. return function (t) {
  49312. var sign = t < 0 ? -1 : 1;
  49313. switch (Math.sqrt(1 + 4 * sign * t) - sign & 3) {
  49314. case 0:
  49315. x += dx;
  49316. break;
  49317. case 1:
  49318. y += dy;
  49319. break;
  49320. case 2:
  49321. x -= dx;
  49322. break;
  49323. default:
  49324. y -= dy;
  49325. break;
  49326. }
  49327. return [
  49328. x,
  49329. y
  49330. ];
  49331. };
  49332. }
  49333. function functor(v) {
  49334. return typeof v === 'function' ? v : function () {
  49335. return v;
  49336. };
  49337. }
  49338. },
  49339. _initProperty: function (option) {
  49340. var dfop = this.defaultOption;
  49341. dfop.size = option.size || [
  49342. 256,
  49343. 256
  49344. ];
  49345. dfop.wordletype = option.wordletype;
  49346. dfop.words = option.words || [];
  49347. dfop.timeInterval = Infinity;
  49348. dfop.timer = null;
  49349. dfop.spirals = {
  49350. archimedean: dfop.archimedeanSpiral,
  49351. rectangular: dfop.rectangularSpiral
  49352. };
  49353. zrUtil.merge(dfop, {
  49354. size: [
  49355. 256,
  49356. 256
  49357. ],
  49358. wordletype: {
  49359. type: 'RECT',
  49360. areaPresent: 0.058,
  49361. autoSizeCal: {
  49362. enable: true,
  49363. minSize: 12
  49364. }
  49365. }
  49366. });
  49367. },
  49368. _initCanvas: function () {
  49369. var cloudRadians = Math.PI / 180;
  49370. var cw = 1 << 11 >> 5;
  49371. var ch = 1 << 11;
  49372. var canvas;
  49373. var ratio = 1;
  49374. if (typeof document !== 'undefined') {
  49375. canvas = document.createElement('canvas');
  49376. canvas.width = 1;
  49377. canvas.height = 1;
  49378. ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);
  49379. canvas.width = (cw << 5) / ratio;
  49380. canvas.height = ch / ratio;
  49381. } else {
  49382. canvas = new Canvas(cw << 5, ch);
  49383. }
  49384. var c = canvas.getContext('2d');
  49385. c.fillStyle = c.strokeStyle = 'red';
  49386. c.textAlign = 'center';
  49387. this.defaultOption.c = c;
  49388. this.defaultOption.cw = cw;
  49389. this.defaultOption.ch = ch;
  49390. this.defaultOption.ratio = ratio;
  49391. this.defaultOption.cloudRadians = cloudRadians;
  49392. },
  49393. _cloudSprite: function (d, data, di) {
  49394. if (d.sprite) {
  49395. return;
  49396. }
  49397. var cw = this.defaultOption.cw;
  49398. var ch = this.defaultOption.ch;
  49399. var c = this.defaultOption.c;
  49400. var ratio = this.defaultOption.ratio;
  49401. var cloudRadians = this.defaultOption.cloudRadians;
  49402. c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
  49403. var x = 0;
  49404. var y = 0;
  49405. var maxh = 0;
  49406. var n = data.length;
  49407. --di;
  49408. while (++di < n) {
  49409. d = data[di];
  49410. c.save();
  49411. c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;
  49412. var w = c.measureText(d.text + 'm').width * ratio;
  49413. var h = d.size << 1;
  49414. if (d.rotate) {
  49415. var sr = Math.sin(d.rotate * cloudRadians);
  49416. var cr = Math.cos(d.rotate * cloudRadians);
  49417. var wcr = w * cr;
  49418. var wsr = w * sr;
  49419. var hcr = h * cr;
  49420. var hsr = h * sr;
  49421. w = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31 >> 5 << 5;
  49422. h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
  49423. } else {
  49424. w = w + 31 >> 5 << 5;
  49425. }
  49426. if (h > maxh) {
  49427. maxh = h;
  49428. }
  49429. if (x + w >= cw << 5) {
  49430. x = 0;
  49431. y += maxh;
  49432. maxh = 0;
  49433. }
  49434. if (y + h >= ch) {
  49435. break;
  49436. }
  49437. c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);
  49438. if (d.rotate) {
  49439. c.rotate(d.rotate * cloudRadians);
  49440. }
  49441. c.fillText(d.text, 0, 0);
  49442. if (d.padding) {
  49443. c.lineWidth = 2 * d.padding;
  49444. c.strokeText(d.text, 0, 0);
  49445. }
  49446. c.restore();
  49447. d.width = w;
  49448. d.height = h;
  49449. d.xoff = x;
  49450. d.yoff = y;
  49451. d.x1 = w >> 1;
  49452. d.y1 = h >> 1;
  49453. d.x0 = -d.x1;
  49454. d.y0 = -d.y1;
  49455. d.hasText = true;
  49456. x += w;
  49457. }
  49458. var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data;
  49459. var sprite = [];
  49460. while (--di >= 0) {
  49461. d = data[di];
  49462. if (!d.hasText) {
  49463. continue;
  49464. }
  49465. var w = d.width;
  49466. var w32 = w >> 5;
  49467. var h = d.y1 - d.y0;
  49468. for (var i = 0; i < h * w32; i++) {
  49469. sprite[i] = 0;
  49470. }
  49471. x = d.xoff;
  49472. if (x == null) {
  49473. return;
  49474. }
  49475. y = d.yoff;
  49476. var seen = 0;
  49477. var seenRow = -1;
  49478. for (var j = 0; j < h; j++) {
  49479. for (var i = 0; i < w; i++) {
  49480. var k = w32 * j + (i >> 5);
  49481. var m = pixels[(y + j) * (cw << 5) + (x + i) << 2] ? 1 << 31 - i % 32 : 0;
  49482. sprite[k] |= m;
  49483. seen |= m;
  49484. }
  49485. if (seen) {
  49486. seenRow = j;
  49487. } else {
  49488. d.y0++;
  49489. h--;
  49490. j--;
  49491. y++;
  49492. }
  49493. }
  49494. d.y1 = d.y0 + seenRow;
  49495. d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);
  49496. }
  49497. },
  49498. _place: function (board, tag, maxBounds) {
  49499. var size = this.defaultOption.size;
  49500. var perimeter = [
  49501. {
  49502. x: 0,
  49503. y: 0
  49504. },
  49505. {
  49506. x: size[0],
  49507. y: size[1]
  49508. }
  49509. ];
  49510. var startX = tag.x;
  49511. var startY = tag.y;
  49512. var maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]);
  49513. var s = this.defaultOption.spiral(size);
  49514. var dt = Math.random() < 0.5 ? 1 : -1;
  49515. var t = -dt;
  49516. var dxdy;
  49517. var dx;
  49518. var dy;
  49519. while (dxdy = s(t += dt)) {
  49520. dx = ~~dxdy[0];
  49521. dy = ~~dxdy[1];
  49522. if (Math.min(dx, dy) > maxDelta) {
  49523. break;
  49524. }
  49525. tag.x = startX + dx;
  49526. tag.y = startY + dy;
  49527. if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) {
  49528. continue;
  49529. }
  49530. if (!cloudCollide(tag, board, size[0])) {
  49531. if (collideRects(tag, maxBounds)) {
  49532. var sprite = tag.sprite;
  49533. var w = tag.width >> 5;
  49534. var sw = size[0] >> 5;
  49535. var lx = tag.x - (w << 4);
  49536. var sx = lx & 127;
  49537. var msx = 32 - sx;
  49538. var h = tag.y1 - tag.y0;
  49539. var x = (tag.y + tag.y0) * sw + (lx >> 5);
  49540. var last;
  49541. for (var j = 0; j < h; j++) {
  49542. last = 0;
  49543. for (var i = 0; i <= w; i++) {
  49544. board[x + i] |= last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);
  49545. }
  49546. x += sw;
  49547. }
  49548. delete tag.sprite;
  49549. return true;
  49550. }
  49551. }
  49552. }
  49553. return false;
  49554. function cloudCollide(tag, board, sw) {
  49555. sw >>= 5;
  49556. var sprite = tag.sprite;
  49557. var w = tag.width >> 5;
  49558. var lx = tag.x - (w << 4);
  49559. var sx = lx & 127;
  49560. var msx = 32 - sx;
  49561. var h = tag.y1 - tag.y0;
  49562. var x = (tag.y + tag.y0) * sw + (lx >> 5);
  49563. var last;
  49564. for (var j = 0; j < h; j++) {
  49565. last = 0;
  49566. for (var i = 0; i <= w; i++) {
  49567. if ((last << msx | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) & board[x + i]) {
  49568. return true;
  49569. }
  49570. }
  49571. x += sw;
  49572. }
  49573. return false;
  49574. }
  49575. function collideRects(a, maxBounds) {
  49576. return maxBounds.row[a.y] && maxBounds.cloumn[a.x] && a.x >= maxBounds.row[a.y].start && a.x <= maxBounds.row[a.y].end && a.y >= maxBounds.cloumn[a.x].start && a.y <= maxBounds.cloumn[a.x].end;
  49577. }
  49578. },
  49579. _autoCalTextSize: function (data, shapeArea, maxwidth, maxheight, minSize) {
  49580. var sizesum = sum(data, function (k) {
  49581. return k.size;
  49582. });
  49583. var i = data.length;
  49584. var maxareapre = 0.25;
  49585. var minTextSize = minSize;
  49586. var cw = this.defaultOption.cw;
  49587. var ch = this.defaultOption.ch;
  49588. var c = this.defaultOption.c;
  49589. var ratio = this.defaultOption.ratio;
  49590. var cloudRadians = this.defaultOption.cloudRadians;
  49591. var d;
  49592. var dpre;
  49593. while (i--) {
  49594. d = data[i];
  49595. dpre = d.size / sizesum;
  49596. if (maxareapre) {
  49597. d.areapre = dpre < maxareapre ? dpre : maxareapre;
  49598. } else {
  49599. d.areapre = dpre;
  49600. }
  49601. d.area = shapeArea * d.areapre;
  49602. d.totalarea = shapeArea;
  49603. measureTextWitHitByarea(d);
  49604. }
  49605. function measureTextWitHitByarea(d) {
  49606. c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);
  49607. c.save();
  49608. c.font = d.style + ' ' + d.weight + ' ' + ~~((d.size + 1) / ratio) + 'px ' + d.font;
  49609. var w = c.measureText(d.text + 'm').width * ratio, h = d.size << 1;
  49610. w = w + 31 >> 5 << 5;
  49611. c.restore();
  49612. d.aw = w;
  49613. d.ah = h;
  49614. var k, rw, rh;
  49615. if (d.rotate) {
  49616. var sr = Math.sin(d.rotate * cloudRadians);
  49617. var cr = Math.cos(d.rotate * cloudRadians);
  49618. var wcr = w * cr;
  49619. var wsr = w * sr;
  49620. var hcr = h * cr;
  49621. var hsr = h * sr;
  49622. rw = Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 31 >> 5 << 5;
  49623. rh = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));
  49624. }
  49625. if (d.size <= minTextSize || d.rotate && w * h <= d.area && rw <= maxwidth && rh <= maxheight || w * h <= d.area && w <= maxwidth && h <= maxheight) {
  49626. d.area = w * h;
  49627. return;
  49628. }
  49629. if (d.rotate && rw > maxwidth && rh > maxheight) {
  49630. k = Math.min(maxwidth / rw, maxheight / rh);
  49631. } else if (w > maxwidth || h > maxheight) {
  49632. k = Math.min(maxwidth / w, maxheight / h);
  49633. } else {
  49634. k = Math.sqrt(d.area / (d.aw * d.ah));
  49635. }
  49636. d.size = ~~(k * d.size);
  49637. if (d.size < minSize) {
  49638. d.size = minSize;
  49639. return;
  49640. }
  49641. return measureTextWitHitByarea(d);
  49642. }
  49643. function sum(dts, callback) {
  49644. var j = dts.length;
  49645. var ressum = 0;
  49646. while (j--) {
  49647. ressum += callback(dts[j]);
  49648. }
  49649. return ressum;
  49650. }
  49651. }
  49652. };
  49653. return CloudLayout;
  49654. });define('echarts/layout/WordCloudRectZero', ['require'], function (require) {
  49655. function ZeroArray(option) {
  49656. this.defaultOption = { type: 'RECT' };
  49657. this._init(option);
  49658. }
  49659. ZeroArray.prototype = {
  49660. RECT: '_calculateRect',
  49661. _init: function (option) {
  49662. this._initOption(option);
  49663. this._initCanvas();
  49664. },
  49665. _initOption: function (option) {
  49666. for (k in option) {
  49667. this.defaultOption[k] = option[k];
  49668. }
  49669. },
  49670. _initCanvas: function () {
  49671. var canvas = document.createElement('canvas');
  49672. canvas.width = 1;
  49673. canvas.height = 1;
  49674. var ratio = Math.sqrt(canvas.getContext('2d').getImageData(0, 0, 1, 1).data.length >> 2);
  49675. canvas.width = this.defaultOption.width;
  49676. canvas.height = this.defaultOption.height;
  49677. if (canvas.getContext) {
  49678. var ctx = canvas.getContext('2d');
  49679. }
  49680. this.canvas = canvas;
  49681. this.ctx = ctx;
  49682. this.ratio = ratio;
  49683. },
  49684. calculate: function (callback, callbackObj) {
  49685. var calType = this.defaultOption.type, calmethod = this[calType];
  49686. this[calmethod].call(this, callback, callbackObj);
  49687. },
  49688. _calculateReturn: function (result, callback, callbackObj) {
  49689. callback.call(callbackObj, result);
  49690. },
  49691. _calculateRect: function (callback, callbackObj) {
  49692. var result = {}, width = this.defaultOption.width >> 5 << 5, height = this.defaultOption.height;
  49693. result.initarr = this._rectZeroArray(width * height);
  49694. result.area = width * height;
  49695. result.maxHit = height;
  49696. result.maxWit = width;
  49697. result.imgboard = this._rectBoard(width, height);
  49698. this._calculateReturn(result, callback, callbackObj);
  49699. },
  49700. _rectBoard: function (width, height) {
  49701. var row = [];
  49702. for (var i = 0; i < height; i++) {
  49703. row.push({
  49704. y: i,
  49705. start: 0,
  49706. end: width
  49707. });
  49708. }
  49709. var cloumn = [];
  49710. for (var i = 0; i < width; i++) {
  49711. cloumn.push({
  49712. x: i,
  49713. start: 0,
  49714. end: height
  49715. });
  49716. }
  49717. return {
  49718. row: row,
  49719. cloumn: cloumn
  49720. };
  49721. },
  49722. _rectZeroArray: function (num) {
  49723. var a = [], n = num, i = -1;
  49724. while (++i < n)
  49725. a[i] = 0;
  49726. return a;
  49727. }
  49728. };
  49729. return ZeroArray;
  49730. });define('echarts/chart/heatmap', [
  49731. 'require',
  49732. './base',
  49733. '../layer/heatmap',
  49734. '../config',
  49735. '../util/ecData',
  49736. 'zrender/tool/util',
  49737. 'zrender/tool/color',
  49738. 'zrender/shape/Image',
  49739. '../chart'
  49740. ], function (require) {
  49741. var ChartBase = require('./base');
  49742. var HeatmapLayer = require('../layer/heatmap');
  49743. var ecConfig = require('../config');
  49744. var ecData = require('../util/ecData');
  49745. var zrUtil = require('zrender/tool/util');
  49746. var zrColor = require('zrender/tool/color');
  49747. var zrImage = require('zrender/shape/Image');
  49748. ecConfig.heatmap = {
  49749. zlevel: 0,
  49750. z: 2,
  49751. clickable: true
  49752. };
  49753. function Heatmap(ecTheme, messageCenter, zr, option, myChart) {
  49754. ChartBase.call(this, ecTheme, messageCenter, zr, option, myChart);
  49755. this.refresh(option);
  49756. }
  49757. Heatmap.prototype = {
  49758. type: ecConfig.CHART_TYPE_HEATMAP,
  49759. refresh: function (newOption) {
  49760. this.clear();
  49761. if (newOption) {
  49762. this.option = newOption;
  49763. this.series = newOption.series;
  49764. }
  49765. this._init();
  49766. },
  49767. _init: function () {
  49768. var series = this.series;
  49769. this.backupShapeList();
  49770. var len = series.length;
  49771. for (var i = 0; i < len; ++i) {
  49772. if (series[i].type === ecConfig.CHART_TYPE_HEATMAP) {
  49773. series[i] = this.reformOption(series[i]);
  49774. var layer = new HeatmapLayer(series[i]);
  49775. var canvas = layer.getCanvas(series[i].data, this.zr.getWidth(), this.zr.getHeight());
  49776. var image = new zrImage({
  49777. position: [
  49778. 0,
  49779. 0
  49780. ],
  49781. scale: [
  49782. 1,
  49783. 1
  49784. ],
  49785. hoverable: this.option.hoverable,
  49786. style: {
  49787. x: 0,
  49788. y: 0,
  49789. image: canvas,
  49790. width: canvas.width,
  49791. height: canvas.height
  49792. }
  49793. });
  49794. this.shapeList.push(image);
  49795. }
  49796. }
  49797. this.addShapeList();
  49798. }
  49799. };
  49800. zrUtil.inherits(Heatmap, ChartBase);
  49801. require('../chart').define('heatmap', Heatmap);
  49802. return Heatmap;
  49803. });
  49804. var zrender = require('zrender');
  49805. zrender.tool = {
  49806. color : require('zrender/tool/color'),
  49807. math : require('zrender/tool/math'),
  49808. util : require('zrender/tool/util'),
  49809. vector : require('zrender/tool/vector'),
  49810. area : require('zrender/tool/area'),
  49811. event : require('zrender/tool/event')
  49812. }
  49813. zrender.animation = {
  49814. Animation : require('zrender/animation/Animation'),
  49815. Cip : require('zrender/animation/Clip'),
  49816. easing : require('zrender/animation/easing')
  49817. }
  49818. var echarts = require('echarts');
  49819. echarts.config = require('echarts/config');
  49820. echarts.util = {
  49821. mapData : {
  49822. params : require('echarts/util/mapData/params')
  49823. }
  49824. }
  49825. require("echarts/chart/line");
  49826. require("echarts/chart/bar");
  49827. require("echarts/chart/scatter");
  49828. require("echarts/chart/k");
  49829. require("echarts/chart/pie");
  49830. require("echarts/chart/radar");
  49831. require("echarts/chart/chord");
  49832. require("echarts/chart/force");
  49833. require("echarts/chart/map");
  49834. require("echarts/chart/gauge");
  49835. require("echarts/chart/funnel");
  49836. require("echarts/chart/eventRiver");
  49837. require("echarts/chart/venn");
  49838. require("echarts/chart/treemap");
  49839. require("echarts/chart/tree");
  49840. require("echarts/chart/wordCloud");
  49841. require("echarts/chart/heatmap");
  49842. _global['echarts'] = echarts;
  49843. _global['zrender'] = zrender;
  49844. })(window);